云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 用VB编写的Modbus通讯CRC16校验程序

用VB编写的Modbus通讯CRC16校验程序

  • 62 次阅读
  • 3 次下载
  • 2026/4/24 11:42:15

用VB编写的Modbus通讯CRC16校验程序

(2007-09-27 21:48:19) 转载IT/科技

标签:

Rem 声明CRC16冗余校验函数ACS510_CRC

Private Declare Function ACS510_CRC Lib \a As Long) As Long

Public Function ACS510_Cmd(ByVal StationID As Long, ByVal WRcmd As Long, ByVal WRAddress As Long, ByVal Data As Long) As String

Dim StatID As String '定义从机地址缓存区

Dim Cmd As String '定义功能命令缓存区

Dim Address As String '定义读写地址缓存区

Dim WRAddressHi As String '定义读写地址的高半字节缓存区

Dim WRAddressLo As String '定义读写地址的低半字节缓存区

Dim hData As String '定义读写数据缓存区

Dim DataHi As String '定义读写数据高半字节缓存区

Dim DataLo As String '定义读写数据低半字节缓存区

Dim CRCBuffer1 As String '定义从机地址校验缓存区

Dim CRCBuffer2 As String '定义命令校验缓存区

Dim CRCBuffer3 As String '定义读写地址高字节校验缓存区

Dim CRCBuffer4 As String '定义读写地址低字节校验缓存区

Dim CRCBuffer5 As String '定义读写数据高半字节校验缓存区

Dim CRC As String '定义读写数据低半字节校验缓存区(也即是CRC计算的最后结果)

Dim CRCHi As String '定义校验高半字节缓存区

Dim CRCLo As String '定义校验低半字节缓存区

Dim CRC_Even As String '定义校验

结果取反缓存区

Rem 取从机的地址

StatID = Trim(Hex(StationID)) If StatID = \

MsgBox \目的地地址不能为空!\vbInformation + vbOKOnly, \系统提示!\

Exit Function Else

If Len(StatID) = 1 Then StatID = \ End If

If Len(StatID) >= 2 Then

StatID = Trim(Right(StatID, 2)) End If End If

Rem 取读写命令

Cmd = Trim(Hex(WRcmd)) If Cmd = \

MsgBox \读写命令不能为空!\系统提示!\

Exit Function Else

If Len(Cmd) = 1 Then Cmd = \ End If

If Len(Cmd) >= 2 Then

Cmd = Trim(Right(Cmd, 2)) End If End If

Rem 取读写数据的地址

Address = Trim(Tran_Format(Trim(Hex(WRAddress)))) WRAddressHi = Trim(Mid$(Address, 1, 2)) WRAddressLo = Trim(Mid$(Address, 3, 2))

Rem 取读写的数据(读时为字节数,写时为要写的数据) hData = Trim(Tran_Format(Trim(Hex(Data)))) DataHi = Trim(Mid$(hData, 1, 2)) DataLo = Trim(Mid$(hData, 3, 2)) Rem 计算从机地址的校验

CRCBuffer1 = ACS510_CRC(65535, StationID) Rem 计算读写命令的校验

CRCBuffer2 = ACS510_CRC(CRCBuffer1, WRcmd) Rem 计算读写地址高半字节的校验 If ReadAddressHi = \ ReadAddressHi = \

CRCBuffer3 = CRCBuffer2 Else

CRCBuffer3 = ACS510_CRC(CRCBuffer2, Tran_HD(WRAddressHi)) End If

Rem 计算读写地址低半字节的校验

CRCBuffer4 = ACS510_CRC(CRCBuffer3, Tran_HD(WRAddressLo)) Rem 计算读写数据高半字节的校验 If DataHi = \

CRCBuffer5 = CRCBuffer4 DataHi = \ Else

CRCBuffer5 = ACS510_CRC(CRCBuffer4, Tran_HD(DataHi)) End If

Rem 计算读写数据低半字节的校验,既最终的校验

CRC = Trim(Tran_Format(Hex(ACS510_CRC(CRCBuffer5, Tran_HD(DataLo))))) Rem 取校验的高半字节

CRCHi = Trim(Mid$(CRC, 1, 2)) Rem 取校验的低半字节

CRCLo = Trim(Mid$(CRC, 3, 2)) Rem 重新组合校验的结果 CRC_Even = CRCLo + CRCHi Rem 返回发送字符串

ACS510_Cmd = StatID + Cmd + WRAddressHi + WRAddressLo + DataHi + DataLo + CRC_Even End Function

搜索更多关于: 用VB编写的Modbus通讯CRC16校验程序 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

用VB编写的Modbus通讯CRC16校验程序 (2007-09-27 21:48:19) 转载IT/科技 ▼ 标签: Rem 声明CRC16冗余校验函数ACS510_CRC Private Declare Function ACS510_CRC Lib \a As Long) As Long Public Function ACS510_Cmd(ByVal StationID As Long, ByVal WRcmd As Long, ByVal WRAddress As Long, ByVal Data As Long) As String Dim StatID As String

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com