已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用VB实现Modbus RTU串行通讯在一些应用中可能需要使用诸如VB来进行上位机监控程序的开发,而Modbus协议是这类应用中首选的通讯协议;Modbus协议以其简单易用,在工业领域里已广泛的为其他第三方设备所支持。这里对VB和Twido PLC间的通讯进行说明。对于大部分应用,Twido PLC作为从站,它不需要编制通讯程序,只要把通讯口的参数设置好即可,例如下图表示此Twido通过编程口和上位机连接,其站号地址为2;波特率、数据位、校验、停止位和上位机设置保持一致。 VB程序通过利用MSComm控件很容易就能够实现。1 通讯口初始化: MSComm1.Settings = 9600,n,8,1 MSComm1.CommPort = 1 MSComm1.SThreshold = 0 If Not MSComm1.PortOpen Then MSComm1.PortOpen = True2 CRC校验码的计算方法,如以下函数,可以得到字节数组变量cmdstring指向的字符串的CRC校验码。Function crc16_1(ByRef cmdstring() As Byte, ByVal j As Integer) Dim data As Integer Dim i As Integer Addressreg_crc = &HFFFF For i = 0 To j Addressreg_crc = Addressreg_crc Xor cmdstring(i) For j = 0 To 7 data = Addressreg_crc And &H1 If data Then Addressreg_crc = Int(Addressreg_crc / 2) Addressreg_crc = Addressreg_crc And &H7FFF Addressreg_crc = Addressreg_crc Xor &HA001 Else Addressreg_crc = Addressreg_crc / 2 Addressreg_crc = Addressreg_crc And &H7FFF End If Next j Next i If Addressreg_crc 0 Then Addressreg_crc = Addressreg_crc - &HFFFF0000 End If HiByte = Addressreg_crc And &HFF LoByte = (Addressreg_crc And &HFF00) / &H100End Function3 读多个字的命令(本例是从2号站读%MW10起始的4个字): Dim SendStr(7) As Byte Dim RcvStr() As Byte SendStr(0) = 2 ,从站号是2 SendStr(1) = &H3 ,读多个字的命令代码 SendStr(2) = 0 ,起始地址高字节 SendStr(3) = 10,起始地址低字节 SendStr(4) = &H0,数据长度高字节 SendStr(5) = 4 ,数据长度低字节 Call crc16(SendStr(), 5) ,CRC计算 SendStr(6) = HiByte SendStr(7) = LoByte ,读命令发送后,当接收 5 + SendStr(5) * 2 个字节时产生中断 CmdLenth = 5 + SendStr(5) * 2 MSComm1.RThreshold = CmdLenth MSComm1.Output = SendStr ,发送命令 4 写多个字的命令(本例是写2号站%MW20起始的3个字): Dim WriteStr() As Byte k = 6 ,写6个字节 ReDim WriteStr(8 + k) WriteStr(0) = 2 ,从站号是2 WriteStr(1) = &H10 ,写多个字的命令代码 WriteStr(2) = 0 ,起始地址高字节 WriteStr(3) = 20 ,起始地址低字节 WriteStr(4) = &H0 ,数据长度高字节 WriteStr(5) = k / 2 ,数据长度低字节 WriteStr(6) = k ,数据长度 WriteStr(7) = &H12,写的第1个字的高字节 WriteStr(8) = &H34,写的第1个字的低字节 WriteStr(9) = &H56,写的第2个字的高字节 WriteStr(10) = &H78,写的第2个字的低字节 WriteStr(11) = &H9A,写的第3个字的高字节 WriteStr(12) = &HBC,写的第3个字的低字节 Call crc16(WriteStr(), 6 + k) WriteStr(9 + (k / 2 - 1) * 2) = HiByte WriteStr(10 + (k / 2 - 1) * 2) = LoByte MSComm1.InBufferCount = 0 MSComm1.Output = WriteStr ,写命令发送后,当接收到8个字节时中断 CmdLenth = 8 MSComm1.RThreshold = CmdLenth 5 通讯事件中断产生时的数据处理:Private Sub MSComm1_OnComm() Dim inx() As Byte Select Case MSComm1.CommEvent Case comEvReceive ,判断为接收事件 MSComm1.InputLen = CmdLenth ,接收数据的长度 inx = MSComm1.Input ,接收数据 MSComm1.InBufferCount =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学美术教资面试高频题型试卷含答案
- 2026年地铁安全防护模拟试题(含答案)
- 2026年京东配送模拟试卷目带答案
- 2026年中医肺痈模拟试卷带答案
- 2026年文明建设知识题库及答案
- 2026‑2031 年非金属矿开采加工设备报告
- 小学科学教资面试高频题试卷
- 初中物理教资面试易错题试卷带解析
- 6.1认识经济全球化 课件 统编版高中政治选择性必修一 国际政治与经济
- 美容行业销售主管综合考核表
- 第三单元《1-6的表内除法》单元测试卷(含答案)2026-2027学年人教版数学二年级上册
- 电气火灾的安全扑救培训
- 小学教师如何做微型课题研究
- 肘管综合征诊疗指南
- EN IEC 60034-30-1 中文版(EN IEC 60034-30-1-2025)(详细解读)
- 高压氧舱内部环境消毒指南
- 人工智能在监理中的应用
- 2026新教材人教PEP版五年级上册英语Unit 6 Nature and us Part C 教案
- 2026四川产业振兴基金投资集团有限公司招聘12人笔试历年备考题库附带答案详解
- 八年级生物“健康地生活”单元复习教学设计
- 《普通高中地理课程标准(2017年版2025年修订)》-2026年高中地理新课标变化深度解读与教学实践讲义
评论
0/150
提交评论