下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VB编写的Modbus RTU协议通讯源程序 sunwu 建议删除该贴! | 收藏 | 回复 | 修改 | 2005-12-09 12:37:09 楼主 modbus rtu协议可以算是一种事实上的工业标准协议,为许多仪表、PLC等所支持。以前有几个用户问如何使用VB编程来与我们的KND-K3系列PLC通讯,于是整了一个demo程序。这次把这个demo共享,希望能给大家一点帮助。 1) 模块文件:modCRC,其中包含了CRC校验的函数。 'data 待校验的数组名称 'no 数组中元素个数 'btLoCRC 算出的CRC高字节 'btHiCRC 算出的CRC低
2、字节 Public Function CalCRC16Fast(data() As Byte, no As Integer, btLoCRC As Byte, btHiCRC As Byte) As String Dim CL As Byte, CH As Byte '多项式码&HA001 Dim SaveHi As Byte, SaveLo As Byte Dim i As Integer Dim Flag As Integer btHiCRC = &HFF btLoCRC = &HFF CL = &H1 CH = &HA0 For i = 0
3、 To (no - 1) btHiCRC = btHiCRC Xor data(i) '每一个数据与CRC寄存器进行异或 For Flag = 0 To 7 SaveHi = btLoCRC SaveLo = btHiCRC btLoCRC = btLoCRC 2 '高位右移一位 btHiCRC = btHiCRC 2 '低位右移一位 If (SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1 btHiCRC = btHiCRC Or &H80 '则低位字节右移后前面补1 End If '否
4、则自动补0 If (SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或 btLoCRC = btLoCRC Xor CH btHiCRC = btHiCRC Xor CL End If Next Flag Next i Dim ReturnData(1) As Byte ReturnData(0) = btHiCRC 'CRC高位 ReturnData(1) = btLoCRC 'CRC低位 CalCRC16Fast = ReturnData End Function Public Function CalCR
5、C16Tbl(data() As Byte, no As Integer, btLoCRC As Byte, btHiCRC As Byte) As String Dim btLoCRC As Byte Dim btHiCRC As Byte btLoCRC = &HFF btHiCRC = &HFF Dim i As Integer Dim iIndex As Long For i = 0 To (no - 1) iIndex = btHiCRC Xor data(i) btHiCRC = btLoCRC Xor GetCRCLo(iIndex) '低位处理 btLo
6、CRC = GetCRCHi(iIndex) '高位处理 Next i Dim ReturnData(1) As Byte ReturnData(0) = btHiCRC 'CRC高位 ReturnData(1) = btLoCRC 'CRC低位 CalCRC16Tbl = ReturnData End Function 'CRC低位字节值表 Function GetCRCLo(Ind As Long) As Byte GetCRCLo = Choose(Ind + 1, _ &H0, &HC1, &H81, &H40, &
7、;H1, &HC0, &H80, &H41, &H1, &HC0, _ &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, _ &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, _ &H80, &H41, &H1, &HC0, &H
8、80, &H41, &H0, &HC1, &H81, &H40, _ &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, _ &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, _ &H0, &HC1, &H81, &H40, &H1
9、, &HC0, &H80, &H41, &H0, &HC1, _ &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, _ &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, _ &H80, &H41, &H0, &HC1, &H81,
10、 &H40, &H0, &HC1, &H81, &H40, _ &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, _ &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, _ &H0, &HC1, &H81, &H40, &H1, &
11、amp;HC0, &H80, &H41, &H1, &HC0, _ &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, _ &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, _ &H80, &H41, &H1, &HC0, &H80, &a
12、mp;H41, &H0, &HC1, &H81, &H40, _ &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, _ &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, _ &H0, &HC1, &H81, &H40, &H0, &
13、;HC1, &H81, &H40, &H1, &HC0, _ &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, _ &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, _ &H80, &H41, &H0, &HC1, &H81, &
14、H40, &H0, &HC1, &H81, &H40, _ &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, _ &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0,
15、 &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40) End Function 'CRC高位字节值表 Function GetCRCHi(Ind As Long) As Byte GetCRCHi = Choose(Ind + 1, _ &H0, &HC0, &HC1, &H1, &HC3, &H3, &H2, &HC2, &HC6, &H6, &H7, &
16、amp;HC7, &H5, &HC5, &HC4, &H4, &HCC, &HC, &HD, &HCD, &HF, &HCF, &HCE, &HE, &HA, &HCA, &HCB, &HB, &HC9, &H9, &H8, &HC8, &HD8, &H18, &H19, &HD9, &H1B, &HDB, &HDA, &H1A, &H1E, &HDE, &
17、amp;HDF, &H1F, &HDD, &H1D, &H1C, &HDC, &H14, &HD4, &HD5, &H15, &HD7, &H17, &H16, &HD6, &HD2, &H12, &H13, &HD3, &H11, &HD1, &HD0, &H10, &HF0, &H30, &H31, &HF1, &H33, &HF3, &HF2, &H32, &
18、amp;H36, &HF6, &HF7, &H37, &HF5, &H35, &H34, &HF4, &H3C, &HFC, &HFD, &H3D, &HFF, &H3F, &H3E, &HFE, &HFA, &H3A, &H3B, &HFB, &H39, &HF9, &HF8, &H38, &H28, &HE8, &HE9, &H29, &HEB, &H2B, &
19、amp;H2A, &HEA, &HEE, &H2E, &H2F, &HEF, &H2D, &HED, &HEC, &H2C, &HE4, &H24, &H25, &HE5, &H27, &HE7, &HE6, &H26, &H22, &HE2, &HE3, &H23, &HE1, &H21, &H20, &HE0, &HA0, &H60, _ &H61, &HA1,
20、 &H63, &HA3, &HA2, &H62, &H66, &HA6, &HA7, &H67, &HA5, &H65, &H64, &HA4, &H6C, &HAC, &HAD, &H6D, &HAF, &H6F, &H6E, &HAE, &HAA, &H6A, &H6B, &HAB, &H69, &HA9, &HA8, &H68, &H78, &HB8,
21、 &HB9, &H79, &HBB, &H7B, &H7A, &HBA, &HBE, &H7E, &H7F, &HBF, &H7D, &HBD, &HBC, &H7 C, &HB4, &H74, &H75, &HB5, &H77, &HB7, &HB6, &H76, &H72, &HB2, &HB3, &H73, &HB1, &H71, &H70, &HB0
22、, &H50, &H90, &H91, &H51, &H93, &H53, &H52, &H92, &H96, &H56, &H57, &H97, &H55, &H95, &H94, &H54, &H9C, &H5C, &H5D, &H9D, &H5F, &H9F, &H9E, &H5E, &H5A, &H9A, &H9B, &H5B, &H99, &H59
23、, &H58, &H98, &H88, &H48, &H49, &H89, &H4B, &H8B, &H8A, &H4A, &H4E, &H8E, &H8F, &H4F, &H8D, &H4D, &H4C, &H8C, &H44, &H84, &H85, &H45, &H87, &H47, &H46, &H86, &H82, &H42, &H43, &H83
24、, &H41, &H81, &H80, &H40) End Function 2)窗体:FORM1,上面放置的控件如下: Begin VB.Form frmCom Caption = "Form1" ClientHeight = 8235 ClientLeft = 3885 ClientTop = 2250 ClientWidth = 6810 LinkTopic = "Form1" ScaleHeight = 8235 ScaleWidth = 6810 Begin VB.TextBox txtReceive 注:放置接
25、收上来的IB0数据 Height = 495 Left = 1200 TabIndex = 2 Top = 2280 Width = 1335 End Begin VB.CommandButton Command1 Caption = "读取IB0" Height = 495 Left = 2760 TabIndex = 1 Top = 2280 Width = 1695 End Begin VB.CommandButton cmdSDO Caption = "置位Q1.1" Height = 495 Left = 2160 TabIndex = 0 T
26、op = 3720 Width = 1575 End Begin MSCommLib.MSComm ComK3 Left = 480 Top = 1080 _ExtentX = 1005 _ExtentY = 1005 _Version = 393216 DTREnable = -1 'True End End Form_Load事件,在此主要是实现了打开并初始化串口 Private Sub Form_Load() With ComK3 .CommPort = 1 .Settings = "19200,N,8,1" .InputMode = comInputMode
27、Binary '二进制收发 .InBufferSize = 512 .OutBufferSize = 512 If (Not .PortOpen) Then .PortOpen = True End With End Sub Form_UnLoad事件,在此主要是关闭串口 Private Sub Form_Unload(Cancel As Integer) If (ComK3.PortOpen) Then ComK3.PortOpen = False End If End Sub “置位Q1.1”按钮单击事件 '设置Q1.1为1 Private Sub cmdSDO_Click() Dim btSend(8) As Byte btSend(0) = &H1 '目标站号 btSend(1) = &H5 '功能码 btSend(2) = &H0 'Q1.1地址(0009)高字节 btSend(3) = &H9 'Q1.1地址(0009)低字节 btSend(4) = &HFF '强制值高字节 btSend(5) = &H0 '强制值低字节 Dim crc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《老年特发性震颤专科护理|药物管理 + 全套护理措施》
- 《乙型脑炎专科护理|意识管理 + 全套护理措施》
- 步态分析操作标准流程|分步拆解 + 易错点规避
- 普通货运公司商业计划书
- IT系统故障排除与修复手册
- 游戏美术设计与制作操作指导书
- Unit 3 Places we live in PartA (Period 2)同步练-2026-2027学年人教PEP版四年级上册英语
- 设计经理绩效评估考核表
- 电商平台客服售后处理高效标准作业指导
- 项目进度加快审批催办函(6篇)
- 2026年人教鄂教版(新教材)小学科学三年级下册期末学情测试卷及答案(2套)
- 黑龙江省龙东地区2025年初中学业水平考试地理真题(含答案)
- 2026人教版小学四年级下册语文全单元课文易错考点梳理讲义
- 2026年人教版(新教材)初中信息科技七年级全一册第二学期期末综合测试卷及答案
- 新教材人教版七年级数学下学期期末模拟卷
- 管理经济学第8版
- 2026内蒙古医药行业市场现状供需分析及投资评估规划分析研究报告
- 中投顾问:2026年中国未来产业深度分析报告
- 《煤矿重大事故隐患判定标准》(2026版)解读
- 2026人教版三年级下册道德与法治期末复习知识点总结梳理+教材问答解答
- XX旅游发展公司管理制度汇编范本
评论
0/150
提交评论