请教串口发送数据的问题

badmonkey1 2008-03-08 02:31:59
我在学习vb的串口时,得到了如下源码。但是怎么也看不懂。请问清空模块中的s_data转换成字符串应该是多少?第九路模块中的s_data又是多少?请各位老大赐教!先谢了!


清空
Public Sub ClearS_data()
Dim s_data(15) As Byte
s_data(0) = &H41
s_data(1) = &H54
s_data(2) = &H43
s_data(3) = &H0
s_data(4) = &H0
s_data(5) = &H0
s_data(6) = &H0
s_data(7) = &H0
s_data(8) = &H0
s_data(9) = &H0
s_data(10) = &H0
s_data(11) = &H0
s_data(12) = &H0
s_data(13) = &H0
s_data(14) = &H0
s_data(15) = &H0
MSComm1.Output = s_data
End Sub

第九路
Call ClearS_data
Dim s_data(15) As Byte
s_data(0) = &H41
s_data(1) = &H54
s_data(2) = &H43

s_data(11) = &H0
s_data(12) = &H0
s_data(13) = &H1
s_data(14) = &H0
s_data(15) = (CDbl(s_data(3)) + CDbl(s_data(4)) + CDbl(s_data(5)) + CDbl(s_data(6)) + CDbl(s_data(7)) + CDbl(s_data(8)) + CDbl(s_data(9)) + CDbl(s_data(10)) + CDbl(s_data(11)) + CDbl(s_data(12)) + CDbl(s_data(13)) + CDbl(s_data(14))) Mod (256)

MSComm1.Output = s_data
End Sub
...全文
92 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdingyun 2008-03-10
  • 打赏
  • 举报
回复
从你给出的数据看:
s_data(15)=1
或者说:

s_data(15)=&H1
badmonkey1 2008-03-09
  • 打赏
  • 举报
回复
第16字节是校验字节,是s_data(3)+....+s_data(14)的累加和的低字节,那么对于第九路信号s_data(15)应该是多少?发送的应该是ATC000000000100?
CommandButton 2008-03-08
  • 打赏
  • 举报
回复
晕,竟然比1楼晚了10分钟,看来我已经老了
CommandButton 2008-03-08
  • 打赏
  • 举报
回复
1:ATC0000000000000
2:ATC????????0010
2中的16位=吧其他几个位做了一通加法后,除以256,要余数。
可能是救奇偶校验码吧,鬼知道
zdingyun 2008-03-08
  • 打赏
  • 举报
回复
从你提供的代码看:
执行发送第9路数据前执行ClearS_data过程,发送清空的数据,是一组BYTE数据类型的命令,前3字节可转为ASCII字符为"ATC",后11字节全为Chr(0)即&H0。
接下来执行发送第9路数据,也是一组BYTE数据类型的命令,前3字节仍可转为ASCII字符为"ATC",第14字节为Chr(1)即&H0。第16字节也为Chr(1)即&H0,它为第4字节到第15字节的校验和。

Option Explicit
'清空数据
Public Sub ClearS_data()
Dim s_data(15) As Byte
s_data(0) = &H41
s_data(1) = &H54
s_data(2) = &H43
s_data(3) = &H0
s_data(4) = &H0
s_data(5) = &H0
s_data(6) = &H0
s_data(7) = &H0
s_data(8) = &H0
s_data(9) = &H0
s_data(10) = &H0
s_data(11) = &H0
s_data(12) = &H0
s_data(13) = &H0
s_data(14) = &H0
s_data(15) = &H0
MSComm1.Output = s_data '发送清空的数据
End Sub


Private Sub Command1_Click()
'第九路
Call ClearS_data '执行ClearS_data过程
Dim s_data(15) As Byte
s_data(0) = &H41
s_data(1) = &H54
s_data(2) = &H43
s_data(11) = &H0
s_data(12) = &H0
s_data(13) = &H1
s_data(14) = &H0
s_data(15) = (CDbl(s_data(3)) + CDbl(s_data(4)) + CDbl(s_data(5)) + CDbl(s_data(6)) + CDbl(s_data(7)) + CDbl(s_data(8)) + CDbl(s_data(9)) + CDbl(s_data(10)) + CDbl(s_data(11)) + CDbl(s_data(12)) + CDbl(s_data(13)) + CDbl(s_data(14))) Mod (256)
MSComm1.Output = s_data '执行发送第九路数据
End Sub

Private Sub Form_Load()
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
End Sub

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧