我想讀取XMT808-S儀表的資料,通訊協議RS485串口,資料發送采用ASCI碼,資料幀格式: A/地址/符號/顯示資料;發送的資料菜蔬資料幀方式一次性向外發送,資料頭為:"A",其后為儀表地址,資料符號及實時顯示值,如儀表顯示2.000,儀表地址設為1,則儀表發送的資料幀為“A1+2.000".設定地址應答發送模式,上位機給儀表發送地址1,必須以自然碼1來發送,不能以1的ASCI碼發送給。
我已經連接好硬體,COM3,波特率4800,地址1。
在串口除錯串口里,要發送什么資料,儀表才能應答呢?
uj5u.com熱心網友回復:
無可用的例子代碼,不除錯。uj5u.com熱心網友回復:
Private Sub Command1_Click()
MSComm1.Output = Chr(&H1)
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 3
MSComm1.Settings = "4800,n,8,1"
MSComm1.PortOpen = True
End Sub
Private Sub Text1_Change()
'如何在文本框里得到儀表發送的值呢?
End Sub
uj5u.com熱心網友回復:
我建立一個按鈕,按一下發送一個1,儀表發送數值怎么得到呢?Private Sub Command1_Click()
MSComm1.Output = Chr(&H1) '發送一個自然碼1,這樣發對嗎?
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 3
MSComm1.Settings = "4800,n,8,1"
MSComm1.PortOpen = True
End Sub
Private Sub Text1_Change()
'如何在文本框里得到儀表發送的值呢?
End Sub
uj5u.com熱心網友回復:
啥叫“自然碼”?OnComm 事件示例
下例說明如何處理通訊錯誤和事件。可以在相關的 Case 陳述句之后插入代碼來處理特定的錯誤或事件。
Private Sub MSComm_OnComm ()
Select Case MSComm1.CommEvent
' Handle each event or error by placing
' code below each case statement
' 錯誤
Case comEventBreak ' 收到 Break。
Case comEventCDTO ' CD (RLSD) 超時。
Case comEventCTSTO ' CTS Timeout。
Case comEventDSRTO ' DSR Timeout。
Case comEventFrame ' Framing Error
Case comEventOverrun '資料丟失。
Case comEventRxOver'接識訓沖區溢位。
Case comEventRxParity' Parity 錯誤。
Case comEventTxFull '傳輸緩沖區已滿。
Case comEventDCB '獲取 DCB] 時意外錯誤
' 事件
Case comEvCD ' CD 線狀態變化。
Case comEvCTS ' CTS 線狀態變化。
Case comEvDSR ' DSR 線狀態變化。
Case comEvRing ' Ring Indicator 變化。
Case comEvReceive ' 收到 RThreshold # of
chars.
Case comEvSend ' 傳輸緩沖區有 Sthreshold 個字符 '
'
Case comEvEof ' 輸入資料流中發現 EOF 字符
'
End Select
End Sub
Input 屬性示例
該例子說明如何從接識訓沖區讀取資料。
Private Sub Command1_Click()
Dim InString as String
' 讀取所有可用資料。
MSComm1.InputLen = 0
' 檢查資料。
If MSComm1.InBufferCount Then
' Read data.
InString = MSComm1.Input
End If
End Sub
MSComm 控制元件示例
下面這個簡單的例子演示了用調制解調器進行基本的串行通訊:
Private Sub Form_Load ()
' 保存輸入子串的緩沖區
Dim Instring As String
' 使用 COM1。
MSComm1.CommPort = 1
' 9600 波特,無奇偶校驗,8 位資料,一個停止位。
MSComm1.Settings = "9600,N,8,1"
' 當輸入占用時,
' 告訴控制元件讀入整個緩沖區。
MSComm1.InputLen = 0
' 打開埠。
MSComm1.PortOpen = True
' 將 attention 命令送到調制解調器。
MSComm1.Output = "ATV1Q0" & Chr$(13) ' 確保
' 調制解調器以"OK"回應。
' 等待資料回傳到串行埠。
Do
DoEvents
Buffer$ = Buffer$ & MSComm1.Input
Loop Until InStr(Buffer$, "OK" & vbCRLF)
' 從串行埠讀 "OK" 回應。
' 關閉串行埠。
MSComm1.PortOpen = False
End Sub
注意 MSComm 控制元件可以采用輪詢或事件驅動的方法從埠獲取資料。這個簡單的例子使用了輪詢方法。關于事件驅動方法的例子請參閱 OnComm 事件的幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/65422.html
標籤:VB基礎類
下一篇:combo里怎么放制表符?
