请问怎么样用串口发送结构体?

wzqx 2015-08-23 12:02:43
Public Type dateconfig
Char1 As Byte
Char2 As Byte
Char3 As Byte
Char4 As Byte
CMDNAME As Byte
CMDNAMEconf As Byte
Check1 As Byte
Check2 As Byte
time1 As Integer
time2 As Integer
time3 As Integer
time4 As Integer
time5 As Integer
time6 As Integer
time7 As Integer
time8 As Integer
config1 As Integer
config2 As Integer
config3 As Integer

End Type
我定义了一个结构体,通过串口发送到另一台PC上,接收这个数据,然后转回结构体,再按结构体来显示.
但是有时会出BUG... 本来是800多的数据,会变成60000多.估计是某几个位出问题了.但绝大多数情况是正常的.
所以想系统地了解一下大家是怎么样处理这种需求的.

结构体转成byte数组用的是.
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

也可能是我串口的设置有点问题.请大家忙 看看怎么解决哈

就是说A点 要传送一个 上面说明的结构体到B点.B点接收好了显示出来.

或者其他的解决方案能实现 就行.
...全文
717 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
vansoft 2015-08-28
  • 打赏
  • 举报
回复
转成二进制,传二进制,收到二进制,转回来。 好象这叫序列化。
lgwhs 2015-08-26
  • 打赏
  • 举报
回复 1
我认为编程思路应是这样:串口传送是一个一个字节数据,或作为二进制传输、或作为字符串发送。串口传输模式并不考虑是否结构体发送,这些是你自己考虑的问题。因此在发送时应当考虑将结构体数据转换为适当的发送数据。接收方按照预先约定再将接收到的数据还原为规定格式。这通常是串口发送和接收应考虑的基本原则。
Tiger_Zhao 2015-08-24
  • 打赏
  • 举报
回复
你这个没字符串、没对象的结构用CopyMemory是没有问题的。
但是串口传输是有缓存的,多个数据包可能会粘连,读取的时机不对可能再只有半个包的时候就读取了、接下来的数据就错位了。
你要严格按照结构的长度来切割数据。
可以把收到的数据复制到自己的缓冲区数组中,数据足够长了复制一段到结构中,再把后面的数据前移。

7,789

社区成员

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

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