资源描述:
《如何用vb实现modbus串行通讯》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、在一些应用中可能需要使用诸如VB来进行上位机监控程序的开发,而Modbus协议是这类应用中首选的通讯协议;Modbus协议以其简单易用,在工业领域里已广泛的为其他第三方设备所支持。这里对VB和TwidoPLC间的通讯进行说明。 对于大部分应用,TwidoPLC作为从站,它不需要编制通讯程序,只要把通讯口的参数设置好即可,例如下图表示此Twido通过编程口和上位机连接,其站号地址为2;波特率、数据位、校验、停止位和上位机设置保持一致。 VB程序通过利用MSComm控件很容易就能够实现。
2、1.通讯口初始化: MSComm1.Settings="9600,n,8,1" MSComm1.CommPort=1 MSComm1.SThreshold=0 IfNotMSComm1.PortOpenThenMSComm1.PortOpen=True 2.CRC校验码的计算方法,如以下函数,可以得到字节数组变量cmdstring指向的字符串的CRC校验码。字串9 Functioncrc16_1(ByRefcmdstring()AsByte,ByValjAsInteger) D
3、imdataAsInteger DimiAsInteger Addressreg_crc=&HFFFF Fori=0Toj Addressreg_crc=Addressreg_crcXorcmdstring(i) Forj=0To7 data=Addressreg_crcAnd&H1 IfdataThen Addressreg_crc=Int(Addressreg_crc/2) Addressreg_crc=Addressreg_crcAnd&H7FFF Addres
4、sreg_crc=Addressreg_crcXor&HA001 Else Addressreg_crc=Addressreg_crc/2 Addressreg_crc=Addressreg_crcAnd&H7FFF EndIf Nextj Nexti IfAddressreg_crc<0Then Addressreg_crc=Addressreg_crc-&HFFFF0000 EndIf HiByte=Addressreg_crcAnd&HFF LoByte=(A
5、ddressreg_crcAnd&HFF00)/&H100 EndFunction 3.读多个字的命令(本例是从2号站读%MW10起始的4个字):字串2 DimSendStr(7)AsByte DimRcvStr()AsByte SendStr(0)=2,从站号是2 SendStr(1)=&H3,读多个字的命令代码 SendStr(2)=0,起始地址高字节 SendStr(3)=10,起始地址低字节 SendStr(4)=&H0,数据长度高字节 SendStr(5)=4,
6、数据长度低字节 Callcrc16(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个字): DimWriteStr()AsBy
7、te k=6,写6个字节 ReDimWriteStr(8+k) WriteStr(0)=2,从站号是2 WriteStr(1)=&H10,写多个字的命令代码 WriteStr(2)=0,起始地址高字节 WriteStr(3)=20,起始地址低字节 WriteStr(4)=&H0,数据长度高字节<字的个数>字串9 WriteStr(5)=k/2,数据长度低字节<字的个数> WriteStr(6)=k,数据长度<字节的个数> WriteStr(7)=&H12,写的第1个字
8、的高字节 WriteStr(8)=&H34,写的第1个字的低字节 WriteStr(9)=&H56,写的第2个字的高字节 WriteStr(10)=&H78,写的第2个字的低字节 WriteStr(11)=&H9A,写的第3个字的高字节 WriteStr(12)=&HBC,写的第3个字的低字节 Callcrc16(WriteStr(),6+k) WriteStr(9+(k/2-1)*2)=HiByte WriteStr(10+(k/2-1)*2)=LoByte MSCo