modbusvb源程序(可以读写寄存器)剖析

上传人:今*** 文档编号:105854350 上传时间:2019-10-13 格式:DOCX 页数:8 大小:56.87KB
返回 下载 相关 举报
modbusvb源程序(可以读写寄存器)剖析_第1页
第1页 / 共8页
modbusvb源程序(可以读写寄存器)剖析_第2页
第2页 / 共8页
modbusvb源程序(可以读写寄存器)剖析_第3页
第3页 / 共8页
modbusvb源程序(可以读写寄存器)剖析_第4页
第4页 / 共8页
modbusvb源程序(可以读写寄存器)剖析_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《modbusvb源程序(可以读写寄存器)剖析》由会员分享,可在线阅读,更多相关《modbusvb源程序(可以读写寄存器)剖析(8页珍藏版)》请在金锄头文库上搜索。

1、modbus vb源程序 可以读写寄存器自己的项目做完了,最近比较闲,就帮别人用VB写了一个很简单的modbus程序,可以实现实时数据采集显示,以及能对寄存器进行设置。程序很简单,想用的可以完善,现在只能实时采集显示一个地址的数据,只要修改一下,就可以实时采集多个地址的数据。现在也只能一次对一个寄存器进行设置,也可以更加完善。想用的朋友就自己改改吧。 下面是运行界面,采集的模块的地址为75,是一个温湿度采集模块。有3个寄存器,显示的数据上是温度,湿度,露点温度。modbusPrivate Sub Command1_Click() 设置按钮 Dim bisend() As Byte Dim cr

2、c Dim btLoCRC As Byte, btHiCRC As Byte Dim Data As Integer If MSComm1.PortOpen = True Then If Combo5.ListIndex = 0 Then ReDim bisend(7) 重新定义数组长度 bisend(0) = &h + Hex(Val(Text1.Text) 地址码 bisend(1) = &h + Hex(3) 功能码 读寄存器 bisend(2) = &h + Hex(0) 起始地址高位 bisend(3) = &h + Hex(0) 起始地址低位 bisend(4) = &h + He

3、x(0) 寄存器个数高位 bisend(5) = &h + Hex(Combo6.ListIndex + 1) 寄存器个数低位 crc = CRC16(bisend, 6, btLoCRC, btHiCRC) bisend(6) = &h + Hex(btLoCRC) CRC高位 bisend(7) = &h + Hex(btHiCRC) CRC低位 发送数据 MSComm1.Output = bisend Else ReDim bisend(10) 一次只能写一个寄存器 bisend(0) = &h + Hex(Val(Text1.Text) 地址码 bisend(1) = &h + Hex

4、(16) 功能码 写寄存器 bisend(2) = &h + Hex(0) 起始地址高位 bisend(3) = &h + Hex(0) 起始地址低位 bisend(4) = &h + Hex(0) 寄存器个数高位 bisend(5) = &h + Hex(1) 寄存器个数低位 bisend(6) = &h + Hex(2) 字节数 Data = Val(Trim(Text3.Text) bisend(7) = &h + Hex(Data 256) 要写入寄存器的值的高字节 bisend(8) = &h + Hex(Data Mod 256) 要写入寄存器的值的低字节 crc = CRC16(

5、bisend, 9, btLoCRC, btHiCRC) bisend(9) = &h + Hex(btLoCRC) CRC高位 bisend(10) = &h + Hex(btHiCRC) CRC低位 MSComm1.Output = bisend End If Else MsgBox 串口没有打开 End IfEnd SubPrivate Sub Command2_Click() 实时采集按钮Timer1.Enabled = Not Timer1.Enabled 进行状态切换End SubPrivate Sub Command3_Click()初始化,并打开串口With MSComm1 I

6、f .PortOpen = False Then .CommPort = Combo7.ListIndex + 1 打开串口1 .Settings = Combo1.Text + , + Combo2.Text + , + Combo3.Text + Combo4.Text .InputMode = 1 .InputLen = 50 一次性从接收缓冲区中读取所有数据(8个字节为一组!) .InBufferCount = 0 清空接收缓冲区 .OutBufferCount = 0 清空发送缓冲区 .RThreshold = 5 + (Combo6.ListIndex + 1) * 2 .InBu

7、fferSize = 1024 .OutBufferSize = 1024 .PortOpen = True Else MsgBox 串口已经打开 End IfEnd WithEnd SubPrivate Sub Command4_Click() 关闭串口按钮If MSComm1.PortOpen = True Then MSComm1.PortOpen = FalseEnd IfEnd SubPrivate Sub Form_Load()Dim i As Integer 波特率设置Combo1.AddItem 4800, 0Combo1.AddItem 9600, 1Combo1.AddIt

8、em 115200, 2校验位设置Combo2.AddItem N, 0Combo2.AddItem E, 1Combo2.AddItem O, 2数据位设置Combo3.AddItem 7, 0Combo3.AddItem 8, 1停止位设置Combo4.AddItem 1, 0Combo4.AddItem 2, 1功能码选择Combo5.AddItem 读寄存器03, 0Combo5.AddItem 写寄存器16, 1寄存器个数设置 Combo6.AddItem 1, 0 Combo6.AddItem 2, 1 Combo6.AddItem 3, 2 Combo6.AddItem 4, 3

9、 Combo6.AddItem 5, 4 Combo6.AddItem 6, 5 Combo6.AddItem 7, 6 Combo6.AddItem 8, 7 Combo6.AddItem 9, 8 Combo6.AddItem 10, 9 Combo6.AddItem 11, 10 Combo6.AddItem 12, 11 Combo6.AddItem 13, 12 Combo6.AddItem 14, 13 Combo6.AddItem 15, 14 Combo6.AddItem 16, 15 Combo6.AddItem 17, 16 Combo6.AddItem 18, 17 Co

10、mbo6.AddItem 19, 18 Combo6.AddItem 20, 19 Combo6.AddItem 21, 20 Combo6.AddItem 22, 21 串口选择 Combo7.AddItem 串口1, 0 Combo7.AddItem 串口2, 1 Combo7.AddItem 串口3, 2 Combo7.AddItem 串口4, 3 初始赋值Combo1.ListIndex = 1Combo2.ListIndex = 1Combo3.ListIndex = 1Combo4.ListIndex = 0Combo5.ListIndex = 0Combo6.ListIndex

11、= 2Combo7.ListIndex = 0初始化串口End SubPrivate Sub Form_Unload(Cancel As Integer)If MSComm1.PortOpen = True Then MSComm1.PortOpen = FalseEnd IfEnd SubPrivate Sub MSComm1_OnComm()Dim INByte() As ByteDim Buf As StringDim btLoCRC As Byte, btHiCRC As ByteDim Data As IntegerIf MSComm1.CommEvent = comEvReceiv

12、e Then 接收到数据以后 INByte = MSComm1.Input If INByte(1) = 3 Then 读寄存器 CRC校验 crc = CRC16(INByte, UBound(INByte) - LBound(INByte) - 1, btLoCRC, btHiCRC) If INByte(UBound(INByte) - 1) = btLoCRC And INByte(UBound(INByte) = btHiCRC Then 校验正确 / For i = 3 To UBound(INByte) - 2 Step 2 Data = &h + Hex(INByte(i) + Hex(INByte(i + 1) Buf = Buf + Hex(INByte(i) + Chr(32) Buf = Buf + Str(Data) 转换为十进制显示 Next i List1.AddItem Buf End If End If MSComm1.InBufferCount = 0 请缓存 End IfEnd SubPrivate Sub Timer1_Timer()定时发送命令 Dim tbisend(7) As Byte Dim crc 定时1s Dim btLoCRC As Byte, btHiCRC As Byte Dim Buf

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号