我是大四學生,論文題目是《基于vb的上位機智能儀表監控程式設計》,采用vB通信控制元件MSComm及其編程方法進行上位機(PC機)通信軟體的設計,實作了上位機與下位機(單片機系統)之間的資料傳送以及實時資料采集。老師的意思是把電壓、電流、功率通過一個picture界面顯示出來,然后再把值用excel統計出來,我目前只做了個電壓的,運行還有些許問題,我下的是vb6.0企業版,但是控制元件找不到PortOpen,input,inbuffercount,output。 想添加“Microsoft Excel Object Library”工程參考里也找不到,就找到了Kingsoft excel object library,結果顯示”加載DLL錯誤“。現在是運行后沒有坐標,麻煩大家幫我看看如何修改
Dim myexcel As Excel.Application ' 定義 Application 物件變數
Dim mybook As Excel.Workbook ' 定義作業薄物件變數
Dim mysheet As Excel.Worksheet ' 定義作業表物件變數
Dim n As Integer ' 定義電子表格中已有內容的行數變數
'"開始采集"程式代碼:
Private Sub Command1_Click()
Timer1.Enabled = True
Timer2.Enabled = True
Call draw
Set myexcel = Excel.Application ' 啟動 Excel 應用軟體
Set mybook = myexcel.Workbooks.Open(" e:/meter.xls ") ' 打開 E 盤作業薄檔案"
Set mysheet = mybook.Worksheets(1) 'mysheet指向作業薄中的第 1 張作業表
myexcel.Visible = True ' 顯示 Excel 應用環境 (作業表可視)
n = mysheet.UsedRange.Rows.Count ' 獲取電子表格中已有內容的行數
End Sub
'“停止監測”程式代碼
Private Sub Command2_Click()
Timer1.Enabled = False ' 不允許 Timer1 計時
mybook.Save ' 保存作業薄
myexcel.Quit ' 關閉 Excel 應用軟體
End Sub
'注意:在程式開始之前,必須清空發送和接識訓沖區,以免出錯。
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1" ' 設定波特率和發送字符格式
MSComm1.CommPort = 1 ' 設定通訊串口
MSComm1.InputLen = 0 ' 設定或回傳一次從接識訓沖區中讀取位元組數,0表示一次讀取所有資料
MSComm1.InBufferSize = 512 ' 設定接識訓沖區512Byte
MSComm1.InBufferCount = 0
MSComm1.OutBufferSize = 512 ' 設定發送緩沖區512Byte
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 6 ' 每個字符到接識訓沖區都觸發接收事件
MSComm1.SThreshold = 1
End Sub
' 接收單片機發送的資料,并顯示
Private Sub MSComm1_OnComm()
Dim inth() As Byte ' 存放輸入的 Byte 型采樣資料
Dim th(5) As Single ' 存放 Byte 型轉為 Single型資料
Dim vol As Single ' 電壓值
If MSComm1.CommEvent = comEvReceive Then
inth = MSComm1.Input ' 輸入 Byte 型資料存入inth
For i = 0 To 5
th(i) = inth(i) ' 把 Byte 型轉換為 Single 型存入 t h
Next i
If (inth(0) Xor inth(1) Xor inth(2) Xor inth(3) Xor inth(4)) = inth(5) Then
' 異或校驗正確時:
vol = th(2) * 256 + th(1) ' 計算電壓采樣值(二進制變十進制)
vol = 50 * vol / 1024 ' 計算電壓測量值
vol = Format$(vol, "0.0")
Text2.Text = vol & " V" ' 文本框顯示 1 號表測量值
n = n + 1 ' 電子表格中已有內容的行數 +1(即指向首個空行)
mysheet.Cells(n, 1).Value = Time ' 當前時間存入單元格
mysheet.Cells(n, 2).Value = vol '1 號表電壓值存入第 n 行 2 列單元格
End If
End If
mybook.Save ' 保存作業薄(讀 1 次表保存 1 次)
End If
Select Case MSComm1.CommEvent ' 設定oncomm事件,讀取片機記憶體的值
Case comEvReceive
Inputsignal = MSComm1.Input
Text2.Text = Asc(Inputsignal) ' 單片機記憶體的值用Text2顯示出
Case Else
End Select
End Sub
' 繪制坐標系子函式
Private Sub Picture1_draw() '繪制坐標系
Dim X As Integer
Dim Y As Integer
Picture1.Scale (-100, 70)-(1600, -10) '定義坐標系'畫坐標系
Picture1.ForeColor = RGB(200, 5, 200)
Picture1.DrawWidth = 1
Picture1.Line (0, 0)-(0, 65)
Picture1.Line (0, 0)-(1550, 0) '畫電壓坐標點(以10v為1個單位)
Picture1.ForeColor = RGB(0, 0, 255)
Picture1.DrawWidth = 4
For Y = 0 To 60 Step 10
Picture1.PSet (0, Y)
Next Y '畫電壓坐標點(以1v為1個單位)
Picture1.ForeColor = RGB(0, 0, 255)
Picture1.DrawWidth = 2
For Y = 1 To 59
Picture1.PSet (0, Y)
Next X '畫時間坐標點(以1小時為1個單位)
For X = 0 To 1440 Step 60
Picture1.PSet (X, 0)
Next X '畫時間坐標點(以6小時為1個單位)
Picture1.ForeColor = RGB(0, 0, 255)
Picture1.DrawWidth = 4
Picture1.PSet (720, 0)
Picture1.PSet (360, 0)
Picture1.PSet (1080, 0)
Picture1.PSet (1440, 0)
End Sub
' 提取單片機溫度資料,并實作動態繪圖
Private Sub Time2_Timer()
'用來實時提取串口資料并實時繪圖。測電壓可每分鐘提取一次資料
Dim t As Single
t = Val(Text2.Text) '繪制電壓實時變化曲線
'繪制電壓實時變化曲線
Picture1.ForeColor = RGB(0, 0, 255)
Picture1.DrawWidth = 3
X = X + 1
Picture1.PSet (X, t)
If X > 1440 Then
Picture1.Cls
X = 0 '重繪坐標系
Call draw
End Sub
現在運行不出來,也沒有坐標顯示。
uj5u.com熱心網友回復:
Microsoft Excel Object Library 需要安裝office excel沒有設備沒法測驗.....
uj5u.com熱心網友回復:
我安裝了 但就是沒有的 那麻煩你幫我看下代碼有什么問題uj5u.com熱心網友回復:
1、excel工程庫一般是 Microsoft Excel 11.0 Object Library 或 Microsoft Excel 12.0 Object Library 等形式;2、Set myexcel = Excel.Application ' 啟動 Excel 應用軟體
該句應修改為:Set myexcel =new Excel.Application ' 啟動 Excel 應用軟體
3、多用with...end with結構會有很多好處....參考下面代碼(沒除錯過,自己除錯看看哪出錯)
Option Explicit
Dim MyExcel As Excel.Application ' 定義 Application 物件變數
Dim MyBook As Excel.Workbook ' 定義作業薄物件變數
Dim MySheet As Excel.Worksheet ' 定義作業表物件變數
Dim n As Integer ' 定義電子表格中已有內容的行數變數
'"開始采集"程式代碼:
Private Sub Command1_Click()
Timer1.Enabled = True
Timer2.Enabled = True
Call Draw
Set MyExcel = New Excel.Application ' 啟動 Excel 應用軟體
Set MyBook = MyExcel.Workbooks.Open(" e:/meter.xls ") ' 打開 E 盤作業薄檔案"
Set MySheet = MyBook.Worksheets(1) 'mysheet指向作業薄中的第 1 張作業表
MyExcel.Visible = True ' 顯示 Excel 應用環境 (作業表可視)
n = MySheet.UsedRange.Rows.Count ' 獲取電子表格中已有內容的行數
End Sub
'“停止監測”程式代碼
Private Sub Command2_Click()
Timer1.Enabled = False ' 不允許 Timer1 計時
MyBook.Save ' 保存作業薄
MyExcel.Quit ' 關閉 Excel 應用軟體
End Sub
'注意:在程式開始之前,必須清空發送和接識訓沖區,以免出錯。
Private Sub Form_Load()
With MsComm1
.Settings = "9600,n,8,1" ' 設定波特率和發送字符格式
.CommPort = 1 ' 設定通訊串口
.InputLen = 0 ' 設定或回傳一次從接識訓沖區中讀取位元組數,0表示一次讀取所有資料
.InBufferSize = 512 ' 設定接識訓沖區512Byte
.InBufferCount = 0
.OutBufferSize = 512 ' 設定發送緩沖區512Byte
.OutBufferCount = 0
.RThreshold = 6 ' 每個字符到接識訓沖區都觸發接收事件
.SThreshold = 1
End With
End Sub
' 接收單片機發送的資料,并顯示
Private Sub MSComm1_OnComm()
Dim inth() As Byte ' 存放輸入的 Byte 型采樣資料
Dim th(5) As Single ' 存放 Byte 型轉為 Single型資料
Dim vol As Single ' 電壓值
If MsComm1.CommEvent = comEvReceive Then
inth = MsComm1.Input ' 輸入 Byte 型資料存入inth
For i = 0 To 5
th(i) = inth(i) ' 把 Byte 型轉換為 Single 型存入 t h
Next i
If (inth(0) Xor inth(1) Xor inth(2) Xor inth(3) Xor inth(4)) = inth(5) Then
' 異或校驗正確時:
vol = th(2) * 256 + th(1) ' 計算電壓采樣值(二進制變十進制)
vol = 50 * vol / 1024 ' 計算電壓測量值
vol = Format$(vol, "0.0")
Text2.Text = vol & " V" ' 文本框顯示 1 號表測量值
n = n + 1 ' 電子表格中已有內容的行數 +1(即指向首個空行)
MySheet.Cells(n, 1).Value = Time ' 當前時間存入單元格
MySheet.Cells(n, 2).Value = vol '1 號表電壓值存入第 n 行 2 列單元格
End If
End If
MyBook.Save ' 保存作業薄(讀 1 次表保存 1 次)
''End If
Select Case MsComm1.CommEvent ' 設定oncomm事件,讀取片機記憶體的值
Case comEvReceive
Inputsignal = MsComm1.Input
Text2.Text = Asc(Inputsignal) ' 單片機記憶體的值用Text2顯示出
Case Else
End Select
End Sub
' 繪制坐標系子函式
Private Sub Draw() '繪制坐標系
Dim X As Integer
Dim Y As Integer
With Picture1
Picture1.Scale (-100, 70)-(1600, -10) '定義坐標系'畫坐標系
.ForeColor = RGB(200, 5, 200)
.DrawWidth = 1
Picture1.Line (0, 0)-(0, 65)
Picture1.Line (0, 0)-(1550, 0) '畫電壓坐標點(以10v為1個單位)
.ForeColor = RGB(0, 0, 255)
.DrawWidth = 4
For Y = 0 To 60 Step 10
Picture1.PSet (0, Y)
Next Y '畫電壓坐標點(以1v為1個單位)
.ForeColor = RGB(0, 0, 255)
.DrawWidth = 2
For Y = 1 To 59
Picture1.PSet (0, Y)
Next X '畫時間坐標點(以1小時為1個單位)
For X = 0 To 1440 Step 60
Picture1.PSet (X, 0)
Next X '畫時間坐標點(以6小時為1個單位)
.ForeColor = RGB(0, 0, 255)
.DrawWidth = 4
Picture1.PSet (720, 0)
Picture1.PSet (360, 0)
Picture1.PSet (1080, 0)
Picture1.PSet (1440, 0)
End With
End Sub
' 提取單片機溫度資料,并實作動態繪圖
Private Sub Time2_Timer()
'用來實時提取串口資料并實時繪圖。測電壓可每分鐘提取一次資料
Dim t As Single
t = Val(Text2.Text) '繪制電壓實時變化曲線
'繪制電壓實時變化曲線
Picture1.ForeColor = RGB(0, 0, 255)
Picture1.DrawWidth = 3
X = X + 1
Picture1.PSet (X, t)
If X > 1440 Then
Picture1.Cls
X = 0 '重繪坐標系
Call Draw
End Sub
uj5u.com熱心網友回復:
一般安裝的OFFICE都是精簡版的,一些功能都去掉了。最好是上網下載那些完全版的,一般要500多M的樣子,好像是最好是2003版的。祝好運uj5u.com熱心網友回復:
你安裝的 金山office 所以會有這個 “Kingsoft excel object library”而你要參考的是 微軟的office “ Microsoft Excel Object Library”
所以你的程式肯定跑不起來的,你去百度搜索,“office2003最終完美版”,記住不要用迅雷下,要不然又下到金山office 。選擇全部安裝即可,金山的最好還是卸掉安全點
uj5u.com熱心網友回復:
如果裝了還不行,那就要重裝一下作業系統了。或者安裝2003,2007,精簡版等多個OFFICE,有可能有的能參考。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/110914.html
標籤:網絡編程
下一篇:亂數字自由組合排列并且滿足條件
