社区
硬件/系统
帖子详情
用MSCOMM控件如何判断接收的是地址还是数据?
fyz2841585
2012-07-20 09:53:45
用MSCOMM控件如何判断接收的是地址还是数据;硬件的波特率为19200,上位机在接收到单片机命令时能否这么快的做出回应?听说windows的精度只有50毫秒,该如何解决,分不够,可以加分
...全文
157
24
打赏
收藏
用MSCOMM控件如何判断接收的是地址还是数据?
用MSCOMM控件如何判断接收的是地址还是数据;硬件的波特率为19200,上位机在接收到单片机命令时能否这么快的做出回应?听说windows的精度只有50毫秒,该如何解决,分不够,可以加分
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
贪玩的老鼠
2012-07-21
打赏
举报
回复
串口通信是接收和发送数据,
不管是消息、命令,数据你都得打包成数据包发送!
上位机与下位机必须遵循数据包协议
fyz2841585
2012-07-20
打赏
举报
回复
肯请lfchen帮我们想个办法,硬件部门之间的通信,用这个协议通信正常,但是与上位机通信,就老是出错
fyz2841585
2012-07-20
打赏
举报
回复
回复lfchen:莫非是我们硬件部门协议定义的有问题?如果不改协议,只能通过帧长度来判断是否是数据还是地址?
一条晚起的虫
2012-07-20
打赏
举报
回复
// 你这个协议以地址码开始(0x03),那么数值中就应该尽量的避免地址这样的数值出现。
fyz2841585
2012-07-20
打赏
举报
回复
我windows上位机收到的一帧大小只有6个字节,因为数据内容比较小,一帧的时间大概是3-5毫秒。
如果不改协议的话,应该如何处理?
一条晚起的虫
2012-07-20
打赏
举报
回复
// 一般来说,一个良好的协议,起始码和结束码都是数值信息(除校验码)中不会出现的值。
schlafenhamster
2012-07-20
打赏
举报
回复
19200 约0.5ms一个字符。
1字节 1字节 1字节
0-252字节
2字节 1字节 。
你计算一下一帧要多少时间?
你的协议本身不好处理:
目的地址 帧长度 功能码 数据内容 CRC校验
结束码
应该:
开始码 目的地址 帧长度 功能码 数据内容 CRC校验 【结束码】
否则处理时麻烦。
你必须先找到开始码【结束码】,不是的全不要。
找到后记录,直到帧结束。
分析CRC校验
。。。
一条晚起的虫
2012-07-20
打赏
举报
回复
// 下位机要求10ms有一个应答?这个windows支持不了
// 解析协议的时候,收到0x03,然后按照协议再收取帧长度,根据帧长度可以算出本帧数据余下的长度,收完
// 算出CRC,如果CRC正确,则本帧正确。
fyz2841585
2012-07-20
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
地址还是数据
要协议规定,
如
地址前加‘ADR’
数据前加 'DATA'
[/Quote]
协议是这样规定的:基本信息帧格式:
目的地址 帧长度 功能码 数据内容 CRC校验 结束码
1字节 1字节 1字节 0-252字节 2字节 1字节
到目前为止,我的上位机的目的地址为0x03,硬件给我发消息帧的时候,我的上位机分不清楚0x03究竟是地址还是数据。硬件规定波特率为19200,周期大概是10毫秒,我的上位机能否及时给与回应?会不会耽误硬件的工作?
一条晚起的虫
2012-07-20
打赏
举报
回复
// 串口通讯中只有数据
// 至于数据表示的是地址还是数值,要根据通讯协议确定。
// 19200的波特率,PC表示完全没有压力
schlafenhamster
2012-07-20
打赏
举报
回复
地址还是数据
要协议规定,
如
地址前加‘ADR’
数据前加 'DATA'
fronz
2012-07-20
打赏
举报
回复
补充,处理程序中一定要简化,首先要发送响应下位机的握手信号。然后在处理帧长度,功能吗、等
Jarrylogin
2012-07-20
打赏
举报
回复
把地址打包成数据内容一起传上来,再根据格式解析出地址内容
fronz
2012-07-20
打赏
举报
回复
[Quote=引用 21 楼 的回复:]
回复fronz:
硬件设计本来没想跟pc机通信,跟上位机通信是后来加上去的想法,但是协议已经不能改 。
下位机对外通讯的链接是总线型的。
下位机所有链接的主机都是通过地址来区分,而且这种询问方式,硬件也想跟windows上位机通信。
不能这样能否做到,如不能,该如何改进?
[/Quote]
可以,
但不安全。
而且编写通讯时代码可能比较笨拙。
可以这么做:
每次取一帧6个字节,判断第一个是否0x03,是转入处理程序,清空接收缓冲区。
不是,直接清空接收缓冲区。
其实就是完全模拟原有硬件的工作方式。调试程序时,一定确保能完整地接收一帧。
----------------
你添加的上位机通讯在整个网络中实际是有风险的。一定不能同时有多个机子在总线上发送数据。
我不知道你这个通讯协议的方式是否已经安全地投入使用了(未加上位机的情况下)
很容易出现地址数据与其他数据混淆的现象。应该加编码的,唉,不过既然不能改。我也不说了。
fyz2841585
2012-07-20
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
1 MSCOMM控件只能接收数据不能接收地址。
2 不必担心,上位机能做出反应。
[/Quote]
请问,那我该如何判断是否是地址呢,如果不用mscomm控件,要用什么呢?
observer001
2012-07-20
打赏
举报
回复
1 MSCOMM控件只能接收数据不能接收地址。
2 不必担心,上位机能做出反应。
fyz2841585
2012-07-20
打赏
举报
回复
回复fronz:
硬件设计本来没想跟pc机通信,跟上位机通信是后来加上去的想法,但是协议已经不能改 。
下位机对外通讯的链接是总线型的。
下位机所有链接的主机都是通过地址来区分,而且这种询问方式,硬件也想跟windows上位机通信。
不能这样能否做到,如不能,该如何改进?
fronz
2012-07-20
打赏
举报
回复
从协议看来,你下位机设计的初衷其通讯对象并不像是pc机。你下位机对外通讯的链接是星形?
如果确定,每帧数据量(固定6字节),波特率19200,看传输速率对PC机来说没问题
(传输过程6个字节也只是3毫秒多一点)。
pc机如果需要对收到后的数据处理后回应,那么所耗时间主要就在这些处理过程上了。
如不需要复杂的处理,直接返回下位机信号,应该没问题。
你下位机所有链接的主机都是通过地址来区分?通讯协议似乎不是很恰当,没法直接区分数据中的信息。
fyz2841585
2012-07-20
打赏
举报
回复
回复schlafenhamster:
主控板的实时性要求非常高,这个就关系到我们的硬件反应是否灵敏了。
我先按照您说的先做一遍,再用多线程,看能否加快windows的分析数据的时间。
schlafenhamster
2012-07-20
打赏
举报
回复
主控板发送给windows上位机的帧确实比较小,即6个字节。
这就是使用‘结束码’的坏处。
可不可以发“等待码”。主控板等回答可以等多久?
加载更多回复(4)
VFP利用Ms
Com
m32
控件
接收
串口(
COM
)
数据
示列
VFP利用Ms
Com
m32
控件
接收
串口(
COM
)
数据
示列
利用MS
Com
m
控件
进行串口
数据
传输vc++mfc编程案例
利用MS
Com
m
控件
进行串口
数据
传输 C++课程设计案例精编 vc++mfc编程案例
利用MFC技术结合MS
Com
m
控件
,使用C++语言编写。程序功能包括手动设置串口参数,串行
接收
和发送
数据
,可以显示
接收
数据
和保存
接收
数据
等功能。
利用MFC技术结合MS
Com
m
控件
,使用C++语言编写。程序功能包括手动设置串口参数,串行
接收
和发送
数据
,可以显示
接收
数据
和保存
接收
数据
等功能。此程序可以作为单片机与微机串口通信时的调试工具
MS
Com
m
控件
使用详解
MS
Com
m
控件
在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。 Microsoft
Com
munications Control(以下简称MS
Com
m)是Microsoft公司提供的简化Windows下...
解决使用MS
Com
m
控件
进行串口
数据
的
接收
数据
不完整.txt
串口通信、MFC入门
硬件/系统
2,640
社区成员
17,239
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章