您现在所在的是:

电脑编程

回帖:0个,阅读:1200 [上一页] [1] [下一页]
850
move1610
文章数:1
年度积分:50
历史总积分:850
注册时间:2009/1/16
发站内信
发表于:2009/1/16 0:30:17
#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的数据怎么载入?

然后在接收端接收到数据后又怎么把数据再计算一次跟校验位比较,如果一致就说明数据未丢失,算是一种软件的加密吧。。。。

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

31.2002