登录
首页 电脑编程
回帖 发帖
正文

主题:请教,如何在通讯编程中加入CRC检验程序

点击:1206 回复:0

这是我从VBGOOD看到的一个帖子 觉得很好  转来请大家分析一下
'*****************************************************************************************
'*功能:      计算modbus校验码,参数为byte类型的数组,此数组包括校验码。                *
'*返回值:    返回一个long型数据,此long数据包括校验码的高位和低位                      *
'*Author:                                                                                *
'*修改日期:  2006-6-22                                                                  *
'*备注:        此函数很容易修改成为封包添加校验码,例如:                              *
'*              dim longCRC as long                                                    *
'*              longCRC = CRC16(frame())        'frame()为封包                        *
'*              frame(UBound(frame) - 1) = longCRC Mod 256                              *
'*              frame(UBound(frame)) = longCRC \ 256                                    *
'*****************************************************************************************
Function CRC16(Coun() As Byte) As Long
Dim intBit, intTemp As Integer
Dim lonCRC As Long
lonCRC = &HFFFF&
   For intCnt = 0 To UBound(Coun) - 2
       lonCRC = lonCRC Xor Coun(intCnt)
       For intBit = 0 To 7
           intTemp = lonCRC Mod 2
           lonCRC = lonCRC \ 2
           If intTemp = 1 Then
               lonCRC = lonCRC Xor &HA001&
           End If
       Next intBit
   Next intCnt
   
   CRC16 = lonCRC
End Function
·······························································
我想问的是我如果做一个两台PC机之间的通信  或者单片机同PC的通信
那这个校验信息怎么加入呢。。。。
我的程序是一个自发自收的类似聊天室的程序,集合了发送和接收:
Private Sub Command1_Click()
 Winsock1.SendData txtSend.Text
End Sub
Private Sub Form_Load()
Dim my As String
Winsock1.Protocol = sckUDPProtocol '设置为UDP协义
Winsock1.LocalPort = 4001    '随便设置,不过两个要一样
Winsock1.RemotePort = 4001
my = Winsock1.LocalIP    '取得自己的IP地址,是不要的
Winsock1.RemoteHost = Text1.Text '这里通过text1填入需要通信的IP地址
End Sub
Private Sub Text1_Change()
Winsock1.RemoteHost = Text1.Text
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '取得数据时发生
 Dim Tmp As String
 Winsock1.GetData Tmp, vbString '取得数据
 Tmp = "对方位址:" + Winsock1.RemoteHostIP + "发言内容为-->" + Tmp
 txtMess.Text = Tmp + Chr$(13) + Chr$(10) + txtMess.Text
End Sub
其中的难点是怎么把CRC校验位加入所发送数据的后面,是应该打包还是怎样还是做成数组的形式? 如果是数组,那整个Text的数据怎么载入?
然后在接收端接收到数据后又怎么把数据再计算一次跟校验位比较,如果一致就说明数据未丢失,算是一种软件的加密吧。。。。
09-01-16 00:30

工控新闻

更多新闻资讯