为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Modbus vb源程序(可以读写寄存器)

2019-08-24 10页 doc 25KB 45阅读

用户头像

is_037433

暂无简介

举报
Modbus vb源程序(可以读写寄存器)modbus vb源程序 可以读写寄存器 自己的项目做完了,最近比较闲,就帮别人用VB写了一个很简单的modbus程序,可以实现实时数据采集显示,以及能对寄存器进行设置。程序很简单,想用的可以完善,现在只能实时采集显示一个地址的数据,只要修改一下,就可以实时采集多个地址的数据。现在也只能一次对一个寄存器进行设置,也可以更加完善。想用的朋友就自己改改吧。 下面是运行界面,采集的模块的地址为75,是一个温湿度采集模块。有3个寄存器,显示的数据上是温度,湿度,露点温度。 modbus Private Sub Command1_...
Modbus vb源程序(可以读写寄存器)
modbus vb源程序 可以读写寄存器 自己的项目做完了,最近比较闲,就帮别人用VB写了一个很简单的modbus程序,可以实现实时数据采集显示,以及能对寄存器进行设置。程序很简单,想用的可以完善,现在只能实时采集显示一个地址的数据,只要修改一下,就可以实时采集多个地址的数据。现在也只能一次对一个寄存器进行设置,也可以更加完善。想用的朋友就自己改改吧。 下面是运行界面,采集的模块的地址为75,是一个温湿度采集模块。有3个寄存器,显示的数据上是温度,湿度,露点温度。 modbus Private Sub Command1_Click() '设置按钮 Dim bisend() As Byte Dim crc 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" + Hex(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(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(bisend, 9, btLoCRC, btHiCRC) bisend(9) = "&h" + Hex(btLoCRC) 'CRC高位 bisend(10) = "&h" + Hex(btHiCRC) 'CRC低位 MSComm1.Output = bisend End If Else MsgBox "串口没有打开" End If End Sub Private Sub Command2_Click() '实时采集按钮 Timer1.Enabled = Not Timer1.Enabled  '进行状态切换 End Sub Private Sub Command3_Click() '初始化,并打开串口 With MSComm1 If .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 .InBufferSize = 1024 .OutBufferSize = 1024 .PortOpen = True Else MsgBox "串口已经打开" End If End With End Sub Private Sub Command4_Click() '关闭串口按钮 If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End If End Sub Private Sub Form_Load() Dim i As Integer '波特率设置 Combo1.AddItem "4800", 0 Combo1.AddItem "9600", 1 Combo1.AddItem "115200", 2 '校验位设置 Combo2.AddItem "N", 0 Combo2.AddItem "E", 1 Combo2.AddItem "O", 2 '数据位设置 Combo3.AddItem "7", 0 Combo3.AddItem "8", 1 '停止位设置 Combo4.AddItem "1", 0 Combo4.AddItem "2", 1 '功能码选择 Combo5.AddItem "读寄存器03", 0 Combo5.AddItem "写寄存器16", 1 '寄存器个数设置 Combo6.AddItem "1", 0 Combo6.AddItem "2", 1 Combo6.AddItem "3", 2 Combo6.AddItem "4", 3 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 Combo6.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 = 1 Combo2.ListIndex = 1 Combo3.ListIndex = 1 Combo4.ListIndex = 0 Combo5.ListIndex = 0 Combo6.ListIndex = 2 Combo7.ListIndex = 0 '初始化串口 End Sub Private Sub Form_Unload(Cancel As Integer) If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End If End Sub Private Sub MSComm1_OnComm() Dim INByte() As Byte Dim Buf As String Dim btLoCRC As Byte, btHiCRC As Byte Dim Data As Integer If MSComm1.CommEvent = comEvReceive 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
/
本文档为【Modbus vb源程序(可以读写寄存器)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索