當前位置:首頁 » 操作系統 » vb的modbus源碼

vb的modbus源碼

發布時間: 2022-05-15 17:14:35

1. 如何用VB實現和s7-200的Modbus串列通訊

那麼,在講解通訊之前,大家先了解一個問題!就是PC怎麼樣得到PLC的密碼的,大家看下面的順序:

1.PC設置好與PLC的通訊格式.

2.連接好電纜線(其實我可以不說這步的,呵呵)

3.PC發送一串讀取密碼指令給PLC

4.PLC得到指令後返回一串16進制數據

5.PC通過程序解碼,放PLC返回的16進制數據轉換成字元,也就是密碼

下面大家請看,PC發送到PLC的指令:

「STX0800808ETX6B」
將其分解,就是STX+0+3+….+ETX+6+B

那麼問題就出來了,這個字元呀,PLC不認識的,PC要把這字元轉換成十六進制的PLC才認賬的!好吧,我們來轉換吧,查ASC碼表可得,
十進制----十六 進制----八進制
STX 02 02 自已查表,

那麼,加起來,PC發送給PLC的指令就是
「0230383030383038033642」
由於我程序里用的是八進制,所以我的PC發送指令如下」

MSComm1.Output = Chr(&O2) + Chr(&O60) + Chr(&O70) + Chr(&O60) + Chr(&O60) + Chr(&O70) + Chr(&O60) + Chr(&O70) + Chr(&O3) + Chr(&O66) + Chr(&O102)
Chr(&O2)
Chr:轉換為字元串指令
&02:將八進制的02轉換成十六進制查表就可以明白了好了,這是PC發送給PLC的指令,那PLC得到指令後,會返回什麼呢, STX4236353433323130ETX41---------PLC返回數據
仔細解釋一下,PLC密碼為六位,所以返回數據中,我們只對中間的那數據感興趣就行了,也就是」4236353433323130」

PLC返回的十六進制的數據,所以要將此串數據進行解碼轉換,二位一轉,查下ASC碼表就可以知道了,42是」B」,36是」6」,所以密碼為: B6543210

那麼PC程序里的代碼如下:

a = MSComm1.Input '將接收到的數據存入a中

b = Mid(a, 2, 16) '從第二位開始讀取,因為第一位為PLC發送的數據頭

For i = 1 To 15 Step 2 '將接收到的數據每二位讀取

c = Chr(CLng("&H" & (Mid(b, i, 2)))) '轉換為字元

Text1.Text = Text1.Text + c

Next i

呵呵,程序就是如此啦

2. 如何用VB不經過資料庫獲取Modbus協議輸出值

modbus命令碼03 是讀多個寄存器的值,數據1234567不符合幀格式的要求,因為若1234(前4位)是地址,則數據長度567超出了最大值(125)。
例子:設備地址 01,命令03,讀起始地址為30006的10個寄存器的數值,modbus-rtu幀格式為:
01 03 00 06 00 0A CRC
其中,CRC需要計算,並佔2個位元組。
Visual Basic是一種由微軟公司開發的包含協助開發環境的事件驅動編程語言。從任何標准來說,VB都是世界上使用人數最多的語言——不僅是盛贊VB的開發者還有抱怨VB的開發者。它源自於BASIC編程語言。VB擁有圖形用戶界面(GUI)和快速應用程序開發(RAD)系統,可以輕易的使用DAO、RDO、ADO連接資料庫,或者輕松的創建ActiveX控制項。程序員可以輕松的使用VB提供的組件快速建立一個應用程序。

3. PC 如何跟儀表通訊呢 通過RS485 通訊協議modbus rtu VB6.0原代碼怎麼寫呢

需將485信號轉換為232信號到PC機串口上。(即232介面) 。然後在儀表上設置好相關通訊參數。(如地址,波特率等)在根據modbus協議的內容寫發送命令。標準的modbus 協議有固定格式其具體寄存器內容,需根據該儀表協議來定義。

4. 請問誰有VB編寫modbus的應用例子,要詳細些的,最近在學,很迷惑啊!

其實也很簡單的,搞清楚功能碼的作用,以及指令格式,和CRC校驗就差不多了,如00 06 00 00 01 00 89 8B,00是從機地址,06是功能碼的寫,00 00 01 00是要發送的數據,89 8B是CRC校驗碼

Private Sub Command1_Click()
Dim CRC As String
Dim d() As Byte '待傳輸數據
Dim sendstr As String
Dim str As String
Dim N As Integer
Dim GetStr As String
Dim ErrMsg As String
Dim Status As Integer

'01 06 00 01 10 00
sendstr = Trim(Text1.Text)
strT = Split(sendstr, " ")
N = UBound(strT)
ReDim d(N)
For i = 0 To N
S = "&H" & strT(i)
d(i) = S
Next
' d(0) = &H1
' d(1) = &H6
' d(2) = &H0
' d(3) = &H0
' d(4) = &H10
' d(5) = &H0
CRC = CRC16(d) '調用CRC16計算函數
'CRC(0)為高位
'CRC(1)為低位
str = Text1.Text & " " & CRC
Text1.Text = str
Status = LynxSPcomm(MSComm1, str, True, GetStr, ErrMsg, True, 0)
Text2.Text = GetStr

End Sub
'注意:在數據傳輸時CRC的低位可能在前,而高位在後。

Function CRC16(data() As Byte) As String
Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC寄存器
Dim CL As Byte, CH As Byte '多項式碼&HA001
Dim SaveHi As Byte, SaveLo As Byte
Dim i As Integer
Dim Flag As Integer
CRC16Lo = &HFF
CRC16Hi = &HFF
CL = &H1
CH = &HA0
For i = 0 To UBound(data)
CRC16Lo = CRC16Lo Xor data(i) '每一個數據與CRC寄存器進行異或
For Flag = 0 To 7
SaveHi = CRC16Hi
SaveLo = CRC16Lo
CRC16Hi = CRC16Hi \ 2 '高位右移一位
CRC16Lo = CRC16Lo \ 2 '低位右移一位
If ((SaveHi And &H1) = &H1) Then '如果高位位元組最後一位為1
CRC16Lo = CRC16Lo Or &H80 '則低位位元組右移後前面補1
End If '否則自動補0
If ((SaveLo And &H1) = &H1) Then '如果LSB為1,則與多項式碼進行異或
CRC16Hi = CRC16Hi Xor CH
CRC16Lo = CRC16Lo Xor CL
End If
Next Flag
Next i
Dim ReturnData(1) As Byte
ReturnData(0) = CRC16Hi 'CRC高位
ReturnData(1) = CRC16Lo 'CRC低位

CRC16 = Hex(CRC16Lo) & " " & Hex(CRC16Hi)
End Function

5. VB 與PLC通信

VB有控制項可以實現的,不太清楚你用的是何種PLC,也不知道協議,只能說給你些參考
可參考:
1、基於ModbusRTU協議的溫度採集模塊與西門子PLC
SP7-200的連接
http://www.yotons.com/solution4.html
2、VB
MODBUS實現源碼
http://wenku..com/view/d2c8722acfc789eb172dc8cc.html

6. vb6.0 怎麼編寫modbus tcp 程序

你的意思是不是,讓vb走網路?

tcp是一個協議,根據協議的要求,你自己寫代碼是完全可以的,不過這個你可能寫不了,太龐大了,工作量技術含量都不小。
vb提供了2個控制項訪問網路。WinSock 控制項、INET控制項

具體這2個控制項怎麼用,就需要你自己學習了。根據你的需求,你看看用哪個合適。
如果有詳細的、具體的需要,可以給我網路私信。

7. VB 與PLC 通信

VB有控制項可以實現的,不太清楚你用的是何種PLC,也不知道協議,只能說給你些參考

可參考:
1、基於ModbusRTU協議的溫度採集模塊與西門子PLC SP7-200的連接 http://www.yotons.com/solution4.html
2、ModbusRTU組網輔助控制項ytmc.ocx http://www.yotons.com/service.html
3、VB MODBUS實現源碼 http://wenku..com/view/d2c8722acfc789eb172dc8cc.html

8. VB用Modbus RTU協議和儀表通訊的問題

這兩個問題應該是同一個原因,Integer類型不夠大。
在VB6里,Integer是有符號的,其取值范圍是 -32767 到 32676。
試試看用 Long 取代 Integer 吧,應該能行。

再說說ModBus,讀取指令 02 03 14 50 00 01 指定了讀取一個單位(16位)的數據。
如果數據超過了65536,一個16位就顯示不過來了,試試讀取兩個字的數據吧。
當然,也有部分設備使用某個特定數組來表示溢出,查查說明書應該會有收獲。

發送問題也是類似的,如果該地址數據是有符號的,那麼上限就是32767。
試試寫兩個字(32位)的數據。

9. 如何用VB實現Modbus串列通訊

Modbus只是一種協議,首先實現類似串口助手的功能,再根據Modbus協議構造數據幀進行收發即可,可以使用一些測試軟體輔助設計,例如格西烽火通信軟體等,可以自定義協議,有Modbus的測試。

10. 求vb寫的modbus rtu測試程序源碼

用VB編寫的MODBUS_RTU通訊協議源程序_圖文_網路文庫
VB編寫的Modbus RTU協議通訊源程序-系統集成代碼類資源-CSDN下載

熱點內容
pcl如何創造有mods伺服器 發布:2024-10-10 23:16:18 瀏覽:851
證券中的ftp 發布:2024-10-10 23:16:14 瀏覽:483
風行視頻緩存 發布:2024-10-10 23:02:55 瀏覽:602
武漢學java 發布:2024-10-10 23:00:52 瀏覽:359
php入門到精通 發布:2024-10-10 22:51:27 瀏覽:526
我的世界基岩版的伺服器怎麼進入 發布:2024-10-10 22:45:32 瀏覽:360
什麼是保險櫃主密碼 發布:2024-10-10 22:39:54 瀏覽:660
sql臨時表效率 發布:2024-10-10 22:24:37 瀏覽:503
linux搭建mc伺服器搭建 發布:2024-10-10 21:58:38 瀏覽:984
ubuntu解壓工具 發布:2024-10-10 21:58:27 瀏覽:231