串口读写问题

gavin04_1 2009-12-24 12:36:00
通信参数:38400,N,8,1 。

在双向传输命令过程中,上位机向下位机发送命令全部采用帧格式,格式如下:
顺序 类别 表示字符 说明 备注
1 首标识位 HEAD 数据帧的起始位 0XAA
2 控制位 COMMAND 控制命令
3 数据位 DATA 地址和数据等信息
4 校验位 CHKSUM 校验位,前面数据累加和的低字节
5 末标识位 END 结束标志 0xed

每发送一帧数据,在发送前至少保留4个停止位。

首标识位H’AA’和末标识位H’59’为数据采集系统在双向通信时专用。

通信等待:上位机和下位机通信过程中,如果需要下位机回应而下位机超过15S没有回应,显示通信错误。

在通信时,若某参数大于等于2字节,则应先发送低位字节,再发送高位字节。其在存储器中的存储方式也遵循此规定,低位字节存在低地址中,高位字节存在高地址中。例如数据0x12345678,发送顺序是0x78, 0x56, 0x34, 0x12。

如果是字符串则先发送起始字节,然后发送后续字节。例:SERIES参数(产品系列,2byte压缩BCD格式)为“3211”,则应先发送0x32,再发送0x11。再如LF_DATE参数(出厂日期,YYMMDD,3byte,压缩BCD格式)为“060825”,则应先发送0x06,再发送0x08,最后发送0x25。


问题1,如果说我的数据真是0X12345678,年月日是090909,这两个数据要同时发送,这两个数据我得发送几次?是一次就能发送完的吗?还有我如何控制这个数据,能让我知道什么时候是真的发完了。

问题2,首标识位H’AA’和末标识位H’59’为数据采集系统在双向通信时专用。这句话是什么意思,只有在一条数据是0xAA,……0x59下才是双向通信吗?这个双向通信指的是全双工吗?

谢谢!
...全文
246 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
GoldWood 2010-05-14
  • 打赏
  • 举报
回复
http://download.csdn.net/source/2352400
可能有帮助
wangli820 2010-03-13
  • 打赏
  • 举报
回复
建议你用MODBUS协议,不要自己搞协议,麻烦,而且容易出错
blom001 2010-03-12
  • 打赏
  • 举报
回复
最近一直想做个串口的东西,挺麻烦的
回头 2010-03-04
  • 打赏
  • 举报
回复
最近我也在搞这个 有点麻烦
lh1611 2010-03-02
  • 打赏
  • 举报
回复
顶!!!!!!!!!!!!!!!!
feixuedu1106 2010-02-25
  • 打赏
  • 举报
回复
顶!!!!!!!!!!!!!!!!
admirxue 2010-02-22
  • 打赏
  • 举报
回复
问题1,如果说我的数据真是0X12345678,年月日是090909,这两个数据要同时发送,这两个数据我得发送几次?是一次就能发送完的吗?还有我如何控制这个数据,能让我知道什么时候是真的发完了。

需要发送几次是要看数据位的倍数的;什么时候发送完要看是异步通信还是同步通信.

问题2,首标识位H’AA’和末标识位H’59’为数据采集系统在双向通信时专用。这句话是什么意思,只有在一条数据是0xAA,……0x59下才是双向通信吗?这个双向通信指的是全双工吗?

半双工也是双向通信;首末标识是放在帧里的,只是一个标志.
schlafenhamster 2009-12-26
  • 打赏
  • 举报
回复
“首标识位H’AA’和末标识位H’59’为数据采集系统在双向通信时专用”指的是应答,即有的不需要接受方应答就不必用这个格式,用了这个格式就必须处理“应答”。
  • 打赏
  • 举报
回复
友情UP
CBEMA 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 gavin04_1 的回复:]
通信参数:38400,N,8,1 。

在双向传输命令过程中,上位机向下位机发送命令全部采用帧格式,格式如下:
顺序 类别 表示字符 说明 备注
1 首标识位 HEAD 数据帧的起始位 0XAA
2 控制位 COMMAND 控制命令
3 数据位 DATA 地址和数据等信息
4 校验位 CHKSUM 校验位,前面数据累加和的低字节
5 末标识位 END 结束标志 0xed

每发送一帧数据,在发送前至少保留4个停止位。

首标识位H’AA’和末标识位H’59’为数据采集系统在双向通信时专用。

通信等待:上位机和下位机通信过程中,如果需要下位机回应而下位机超过15S没有回应,显示通信错误。

在通信时,若某参数大于等于2字节,则应先发送低位字节,再发送高位字节。其在存储器中的存储方式也遵循此规定,低位字节存在低地址中,高位字节存在高地址中。例如数据0x12345678,发送顺序是0x78, 0x56, 0x34, 0x12。

如果是字符串则先发送起始字节,然后发送后续字节。例:SERIES参数(产品系列,2byte压缩BCD格式)为“3211”,则应先发送0x32,再发送0x11。再如LF_DATE参数(出厂日期,YYMMDD,3byte,压缩BCD格式)为“060825”,则应先发送0x06,再发送0x08,最后发送0x25。


问题1,如果说我的数据真是0X12345678,年月日是090909,这两个数据要同时发送,这两个数据我得发送几次?是一次就能发送完的吗?
一次还是两次,用什么样的格式,这是你们的协议自己定的。


还有我如何控制这个数据,能让我知道什么时候是真的发完了。
通过串口发送函数的返回值判断就可以了。

3 数据位 DATA 地址和数据等信息这肯定依据2有个协议跟着。
这个和3有关,首先要看你是上位还是下位,是主动还是被动,具体怎么发,你们可订有协议规定好了吧,不可能这么简单的。。



问题2,首标识位H’AA’和末标识位H’59’为数据采集系统在双向通信时专用。这句话是什么意思,只有在一条数据是0xAA,……0x59下才是双向通信吗?这个双向通信指的是全双工吗?
专用就是其他地方不容许出现,否则很可能会认为是数据已经开始或是结束。这是协议的事,你只要不在数据中用这两个字符就好。双向这里应该是上下位机都用这套规定。[/Quote]
一条晚起的虫 2009-12-24
  • 打赏
  • 举报
回复
//首标识位H’AA’和末标识位H’59’为数据采集系统在双向通信时专用
//如果需要下位机应答的话,请采用此起始表示和结束标识。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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