VB控件Mscomm控件与PLC进行RS485Modbus通讯源码_第1页
VB控件Mscomm控件与PLC进行RS485Modbus通讯源码_第2页
VB控件Mscomm控件与PLC进行RS485Modbus通讯源码_第3页
VB控件Mscomm控件与PLC进行RS485Modbus通讯源码_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、V B 控件 Mscomm 控件与 PLC 进行 RS485(Modbus)通讯源码本人用的是 ModbusRTU通讯模式,通过at算机串口转RS485与外围设备通行通讯,读写外围设备指定地址里的数据,从而到达自动化限制远端设备.DimHiByteAsByteDimLoByteAsByteDimCRC16LoAsByteDimCRC16HiAsByteDimReturnData(1)AsByteDimKAsIntegerDimCmdLenthAsIntegerPrivateSubCommand1_Click()K=Text9.Text6 个字节Text13.Text="",

2、=嗷组赋值输入代码'<<算法一 >>DimWriteStr()AsByteDimuAsIntegerReDimWriteStr(K+2)Foru=0ToKWriteStr(u尸Val("&H"&Text1(u).Text)Next'<<算法二>>DimCRC_2()AsByteDimvAsIntegerReDimCRC_2(K)Forv=0ToKCRC_2(v)=Val("&H"&Text1(v).Text)NextCallCRC161(CRC_2()Call

3、CRC16(WriteStr(),K)MSComm1.InBufferCount=0 = 显示发送代码DimmAsIntegerForm=0To23Ifm<=KThenText8(m).Text=Hex(WriteStr(m)ElseText8(m).Text=""EndIfNext ,WriteStr(K+1)=LoByteWriteStr(K+2)=HiByte '发送代码Text4.Text=""DimgAsIntegerForg=0ToK+2Text4.Text=Text4.Text+""+Hex(WriteSt

4、r(g) Next'写命令发送后,当接收到8个字节时中断CmdLenth=8MSComm1.RThreshold=CmdLenthMSComm1.Output=WriteStrEndSubPrivateSubCommand2_Click()EndEndSubPrivateSubCommand3_Click()Label34.Caption="="Text13.Text=""K=Text9.Text6 个字节 ,=嗷组赋值输入代码'<<算法>>DimCRC_2()AsByteDimvAsIntegerReDimCRC

5、_2(K)Forv=0ToKCRC_2(v)=Val("&H"&Text1(v).Text)Next ,CallCRC161(CRC_2()CallCRC16(WriteStr(),K)MSComm1.InBufferCount=0 '= 显示发送代码DimmAsIntegerForm=0To23Ifm<=KThenText8(m).Text=Hex(WriteStr(m)ElseText8(m).Text=""EndIfNext ,WriteStr(K+1)=LoByteWriteStr(K+2)=HiByte '

6、发送代码Text4.Text=""DimgAsIntegerForg=0ToK+2Text4.Text=Text4.Text+""+Hex(WriteStr(g) Next读命令发送后,当接收5+SendStr(5)*2个字节时产生中断CmdLenth=5+WriteStr(5)*2MSComm1.RThreshold=CmdLenthMSComm1.Output=WriteStr'发送命令'*'*'*'DimsAddrAsString ''DimCheckStringAsString'Di

7、mCheckCodeAsString'DimCmdCodeAsString'DimSumAsInteger'DimaAsInteger'DimtmpAsString'a=0'tmp=0'DoWhileLen(tmp)<8 tmp=tmp+MSComm1.Input'testNO.Caption=testNO.Caption+""+Str(Hex(Asc(tmp) 'a=a+1'Ifa>=3000Then'MSComm1.PortOpen=False 'ExitFunc

8、tion 'ExitDo 'EndIf 'Loop'Label33.Caption=tmp 'Text16.Text=Len(tmp) 'DimnsAsInteger 'Forns=1ToLen(tmp) 'Label34.Caption=Label34.Caption+"+"+Str(Asc(Mid(tmp,ns,1) ''Next'Label35.Caption=Str(Val(Asc(Mid(tmp,6,1)/10) '''tmp=Mid$(tmp,6,4)

9、 '''DimstrHexAsString 'DimHex2DecAsLong 'DimstrTmpAsString 'DimlongTmpAsLong 'DimlongDecAsLong 'DimintLenAsInteger 'Dimn1AsInteger ''strHex=Right$(tmp,2)+Left$(tmp,2) ''intLen=Len(strHex) 'Forn1=1TointLen 'strTmp=Mid(strHex,n1,1) 'Selec

10、tCaseAsc(strTmp) 'Case48To57'longTmp=Val(strTmp) 'Case65To70'longTmp=Asc(strTmp)-55 'CaseElse 'Hex2Dec=0 ''ExitFunction 'EndSelect'Text13.Text=Text13.Text+"+"+Str(Asc(strTmp)'longDec=longDec+longTmp*16A(intLen-n1) 'Nextnl ''Hex2Dec=lo

11、ngDec'Text13.Text=Hex2Dec(*(* *(* *EndSubPrivateSubMSComm1_OnComm()DimNeAsIntegerSelectCaseMSComm1.CommEventCasecomEvReceiveDimBufferAsVariantMSComm1.InputMode=comInputModeBinaryMSComm1.InputLen=0Buffer=MSComm1.InputForNe=LBound(Buffer)ToUBound(Buffer)Text13.Text=Text13.Text&"+"&am

12、p;Buffer(Ne)Label34.Caption=Buffer(3)&""&Buffer(4)NextNeCaseElseEndSelectBeepEndSubPrivateSubCommand4_Click()EndSubPrivateSubCommand5_Click()Label34.Caption="="EndSubPrivateSubForm_Load()MSComm1.Settings="9600,N,8,1MSComm1.CommPort=1MSComm1.SThreshold=0IfNotMSComm1.P

13、ortOpenThenMSComm1.PortOpen=True EndSubPrivateSubTimer1_Timer()'显示 崂法一 结果Text2.Text=Hex(HiByte)Text3.Text=Hex(LoByte)'显示 崂法二 结果Text6.Text=Hex(CRC16Hi)Text7.Text=Hex(CRC16Lo)IfText5.Text<>""Then'十进制转十六进制Text10.Text=Hex(Text5.Text)EndIfIfText11.Text<>""Then&

14、#39;十六进制转十进制Text12.Text=Val("&H"&Text11.Text)EndIfText14.Text=MSComm1.OutBufferCountEndSub'=CRO验 <<算法X>>=FunctionCRC161(data()AsByte)AsString'CRCU 算函数'DimCRC16LoAsByte,CRC16HiAsByte'CR存放器DimCLAsByte,CHAsByte多项式码 &HA001DimSaveHiAsByte,SaveLoAsByteDimI

15、AsIntegerDimFlagAsIntegerCRC16Lo=&HFFCRC16Hi=&HFFCL=&H1CH=&HA0ForI=0ToUBound(data)CRC16Lo=CRC16LoXordata(微一个数据与 CRC存放器进行异或ForFlag=0To7CRC16Hi=CRC16Hi淌位右移一位CRC16Lo=CRC16Lo2 氐位右移一位If(SaveHiAnd&H1)=&H1)Then'如果高位字节最后一位为1CRC16Lo=CRC16LoOr&H8那么低位字节右移后前面补1EndIf否那么自动补0If(SaveLoAnd&H1)=&H1)Then'如果LSB为1,那么与多项式码进行异或CRC16Hi=CRC16HiXorCHCRC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论