当前位置:首页 » 操作系统 » 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下载

热点内容
微信平台无法上传图片 发布:2024-10-11 00:55:59 浏览:139
加密锁折断 发布:2024-10-10 23:57:30 浏览:146
上传活动成果 发布:2024-10-10 23:48:27 浏览:186
2345解压慢 发布:2024-10-10 23:48:26 浏览:199
php中文空格 发布:2024-10-10 23:36:26 浏览:757
cli编译器 发布:2024-10-10 23:31:12 浏览:120
电脑网络配置怎么调最好 发布:2024-10-10 23:31:01 浏览:833
甘肃机架式存储服务器机箱厂 发布:2024-10-10 23:25:26 浏览:347
油泵房配置哪些消防系统 发布:2024-10-10 23:23:59 浏览:953
pcl如何创造有mods服务器 发布:2024-10-10 23:16:18 浏览:855