7,789
社区成员
发帖
与我相关
我的任务
分享
Private Sub Form Load()
Data =“WD02001234”
outdata =“@00”+ Data
L =Len(outdata)
fcsl = 0
For i = 1 To L
fcsl =fcs1 Xor Asc(Mid(outdata,i,1))
Next i
FCS = Hex(fcs 1) ’计算校验码 FCS
Dim Instring As String ’保存输入子串的缓冲
MSComm1.Output = outdata + FCS + “*”+ Chr$(13)’将命令送到 PLC
Do
DoEvents
Loop Until MSComm1.InBufferCount > = 10 ’等待数据返回到串行端口
Instring = MSComm1.Input ’ 从串行端口读响应。
MSComm1.PortOpen = False ’关闭串行端口
If Mid (Instring,Len (Instring)- 1,1)<>“*” Then ’检查响应数据“*”
MsgBox“通讯出错”
Else
fcs2 = 0
For i = 1 To Len(Instring)- 4 ’校验响应数据FCS
fcs2 = fcs2 Xor Asc(Mid(Instring,i,1))
Next i
fcs3 = Hex(fcs2)
If fcs3 = Mid(Instring,Len(Instring)- 3,2)Then
MsgBox“通讯有效”
Else
MsgBox“通讯出错”
End If
End If
End Sub

之前看中文手册中提到一句话“传送命令的一帧不能超过131字节”,当时不能理解这个数字怎么来的,不零不整的,也没仔细想。刚才又找了一份英文手册仍然有这么一句“131 characters of data”,但是下边又多了一些描述“A maximum of 30 words of data can be transferred for the first command frame ”。
所以characters不是指数据本身data 的Byte,应给是指131个ASCII 码。ASCII 码本身也是7位,即一字节
我的理解:一个word的十六进制数,比如“1234”H,用ASCII 码表示就是“31H 32H 33H 34H”,所以有1个word data =4个ASCII 码
验证了一下这个理解:
①起始符@,该符号必须置于每个响应的开头;1个 ASCII 码
②节点号表示返回的响应数据PLC的单元号;2个 ASCII 码
③命令符表示本帧返回的是何种命令的响应数据;2个 ASCII 码
④状态符即显示正常或错误的响应结果;2个 ASCII 码
⑤操作内容为根据命令符,返回的响应数据;如果是13个word*4 个 ASCII 码
⑥FCS校验码 2个 ASCII 码
⑦结束符*号+回车键 2 个 ASCII 码 [color=#FF0000]*号和回车各是一个ASCII 码
————————————————————————
正好63个 ASCII 码,感谢大家关注~~~~