




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VB控件Mscomm控件与PLC进行RS485(Modbus)通讯源码本人用的是Modbus RTU通讯模式,通过计算机串口转RS485与外围设备通行通讯,读写外围设备指定地址里的数据,从而达到自动化控制远端设备。Dim HiByte As ByteDim LoByte As ByteDim CRC16Lo As ByteDim CRC16Hi As ByteDim ReturnData(1) As ByteDim K As IntegerDim CmdLenth As IntegerPrivate Sub Command1_Click()K = Text9.Text 写6 个字节Text13.Text = = 数组赋值输入代码 =Dim WriteStr() As ByteDim u As IntegerReDim WriteStr(K + 2)For u = 0 To KWriteStr(u) = Val(&H & Text1(u).Text)NextDim CRC_2() As ByteDim v As IntegerReDim CRC_2(K)For v = 0 To KCRC_2(v) = Val(&H & Text1(v).Text)Next=Call CRC161(CRC_2()Call CRC16(WriteStr(), K) MSComm1.InBufferCount = 0= 显示发送代码 =Dim m As IntegerFor m = 0 To 23If m = K ThenText8(m).Text = Hex(WriteStr(m)ElseText8(m).Text = End IfNext=WriteStr(K + 1) = LoByteWriteStr(K + 2) = HiByte 发送代码Text4.Text = Dim g As IntegerFor g = 0 To K + 2Text4.Text = Text4.Text + + Hex(WriteStr(g)Next写命令发送后,当接收到8 个字节时中断CmdLenth = 8MSComm1.RThreshold = CmdLenthMSComm1.Output = WriteStrEnd SubPrivate Sub Command2_Click()EndEnd SubPrivate Sub Command3_Click()Label34.Caption = =Text13.Text = K = Text9.Text 写6 个字节= 数组赋值输入代码 =Dim CRC_2() As ByteDim v As IntegerReDim CRC_2(K)For v = 0 To KCRC_2(v) = Val(&H & Text1(v).Text)Next=Call CRC161(CRC_2()Call CRC16(WriteStr(), K) MSComm1.InBufferCount = 0= 显示发送代码 =Dim m As IntegerFor m = 0 To 23If m = K ThenText8(m).Text = Hex(WriteStr(m)ElseText8(m).Text = End IfNext=WriteStr(K + 1) = LoByteWriteStr(K + 2) = HiByte 发送代码Text4.Text = Dim g As IntegerFor g = 0 To K + 2Text4.Text = Text4.Text + + Hex(WriteStr(g)Next读命令发送后,当接收 5 + SendStr(5) * 2 个字节时产生中断CmdLenth = 5 + WriteStr(5) * 2MSComm1.RThreshold = CmdLenthMSComm1.Output = WriteStr 发送命令* * Dim sAddr As String Dim CheckString As String Dim CheckCode As String Dim CmdCode As String Dim Sum As Integer Dim a As Integer Dim tmp As Stringa = 0tmp = 0 Do While Len(tmp) = 3000 Then MSComm1.PortOpen = False Exit Function Exit Do End If LoopLabel33.Caption = tmpText16.Text = Len(tmp)Dim ns As IntegerFor ns = 1 To Len(tmp)Label34.Caption = Label34.Caption + + + Str(Asc(Mid(tmp, ns, 1)NextLabel35.Caption = Str(Val(Asc(Mid(tmp, 6, 1) / 10) tmp = Mid$(tmp, 6, 4) Dim strHex As String Dim Hex2Dec As Long Dim strTmp As String Dim longTmp As Long Dim longDec As Long Dim intLen As Integer Dim n1 As Integer strHex = Right$(tmp, 2) + Left$(tmp, 2) intLen = Len(strHex) For n1 = 1 To intLen strTmp = Mid(strHex, n1, 1) Select Case Asc(strTmp) Case 48 To 57 longTmp = Val(strTmp) Case 65 To 70 longTmp = Asc(strTmp) - 55 Case Else Hex2Dec = 0 Exit Function End Select Text13.Text = Text13.Text + + + Str(Asc(strTmp) longDec = longDec + longTmp * 16 (intLen - n1) Next n1 Hex2Dec = longDec Text13.Text = Hex2Dec * *End SubPrivate Sub MSComm1_OnComm()Dim Ne As Integer Select Case MSComm1.CommEvent Case comEvReceive Dim Buffer As Variant MSComm1.InputMode = comInputModeBinary MSComm1.InputLen = 0 Buffer = MSComm1.Input For Ne = LBound(Buffer) To UBound(Buffer) Text13.Text = Text13.Text & + & Buffer(Ne) Label34.Caption = Buffer(3) & & Buffer(4) Next Ne Case ElseEnd SelectBeepEnd SubPrivate Sub Command4_Click()End SubPrivate Sub Command5_Click()Label34.Caption = =End SubPrivate Sub Form_Load()MSComm1.Settings = 9600,N,8,1MSComm1.CommPort = 1MSComm1.SThreshold = 0If Not MSComm1.PortOpen Then MSComm1.PortOpen = TrueEnd SubPrivate Sub Timer1_Timer() 显示 结果Text2.Text = Hex(HiByte)Text3.Text = Hex(LoByte) 显示 结果Text6.Text = Hex(CRC16Hi)Text7.Text = Hex(CRC16Lo)If Text5.Text Then 十进制转十六进制Text10.Text = Hex(Text5.Text)End IfIf Text11.Text Then 十六进制转十进制Text12.Text = Val(&H & Text11.Text)End IfText14.Text = MSComm1.OutBufferCountEnd Sub= CRC校验 =Function CRC161(data() As Byte) As String CRC计算函数 Dim CRC16Lo As Byte, CRC16Hi As Byte CRC寄存器 Dim CL As Byte, CH As Byte 多项式码&HA001 Dim SaveHi As Byte, SaveLo As Byte Dim I As Integer Dim Flag As Integer CRC16Lo = &HFF CRC16Hi = &HFF CL = &H1 CH = &HA0 For I = 0 To UBound(data) CRC16Lo = CRC16Lo Xor data(I) 每一个数据与CRC寄存器进行异或 For Flag = 0 To 7 CRC16Hi = CRC16Hi 2 高位右移一位 CRC16Lo = CRC16Lo 2 低位右移一位 If (SaveHi And &H1) = &H1) Then 如果高位字节最后一位为1 CRC16Lo = CRC16Lo Or &H80 则低位字节右移后前面补1 End If 否则自动补0 If (SaveLo And &H1) = &H1) Then 如果LSB为1,则与多项式码进行异或 CRC16Hi = CRC16Hi Xor CH CRC16Lo = CRC16Lo Xor CL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 业务员工资合同协议书
- 快递二级代理合同协议书
- 公益性电视节目合同范本
- 医院美容合伙人合同范本
- 公司合伙人四人合同协议
- 快递与药房合作合同范本
- 政府发布的交房合同范本
- 农村果树经纪人合同协议
- 亚马逊店铺入股合同范本
- 业务承揽协议劳动合同
- 2025上海市食品药品包装材料测试所公开招聘笔试参考题库附答案解析
- Unit 1 What's he like Part B Read and write英语教学课件
- 医务人员职业道德准则(2025年版)全文培训课件
- 2025年职业指导师中级专业能力试卷:就业指导实务操作技能
- 产业园区建设汇报
- 保健公司客户服务流程规定
- 2025 整形外科面部痤疮瘢痕修复外科查房课件
- 肾脏先天畸形超声检查
- 心理健康与寝室生活
- 糖尿病病人饮食健康宣教
- 慢阻肺护理查房
评论
0/150
提交评论