串口和设备通讯,实时获取和设置设备状态,有什么好的思路?

kingeboy 2008-10-11 06:23:35
以前设计都是取得串口数据后统一在一个线程函数里面处理缓冲中的数据,分离出正确的数据,然后判断是什么类型的命令或数据,再分别改变界面上对应控件的状态,总感觉这样做处理起来会很慢(可能是自己在处理的时候不够有效吧),有没有好的设计思路,可以很方便的分离出命令并响应,能贡献一下处理线程中的命令处理思路就好了.
还有就是串口通讯大家发命令的时候要不要回复验证消息的,比如下位机发了一条命令过来,上位机接到后验证效验和后,要不要再回复一条数据验证正确与否的消息给下位机,如果接收不正确,对方要重发上条指令数据,上位机发送数据给下位机时同样这样操作,我是这样处理的,但是这样会占用很多通信资源,不知道有没有必要.
...全文
195 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingeboy 2008-10-14
  • 打赏
  • 举报
回复
謝謝這么多熱心的朋友幫忙
yumikoo 2008-10-13
  • 打赏
  • 举报
回复
其实你可以尝试用一些免费的DLL来帮你进行串口通信,比如常用的有PCOMM,MSCOMM等等
另外,你可以定义一个回调函数,回调函数的用法你可以通过帮助F1来学习
这里给出一段我捕捉串口数据的回调函数的例子

void CALLBACK CntIrq(int iPort)
{
long iDataLen;
unsigned char cData;
iDataLen=sio_iqueue(iPort); //某串口接受到的数据长度,PCOMM里函数
while(iDataLen)
{
cData=sio_getch(iPort); //某串口接受到的每一个字符,PCOMM里函数
frm_Main->strReceived_Text+=(char)cData;
iDataLen--;
}
}

另外,至于你说的需要不需要验证消息,其实数据的正确性首先是要通过CRC校验的,其次再进行握手通信。也就是你说的,上位机发送一个:你好吗,下位机回复,我很好。这样的握手来确定这一帧数据正常到位。
在实际操作中,很多项目采用上位机不进行CRC校验,而下位机进行CRC校验,另外,握手验证也不是必要的。有些通信,比如,打开一个电磁阀,这样的通信很简单,如果出错,用户很直观的就能看出,所以这个情况下,CRC和握手验证成为可选,为了某种程度的效率,往往不进行。
dirdirdir3 2008-10-13
  • 打赏
  • 举报
回复
自己设计一个包,有头尾,当前的号码,长度crc等..........不需要确认,只要你的两个包的序号能够接的上就说明没有错误........否则发送命令重传
hefeng1000 2008-10-11
  • 打赏
  • 举报
回复
没有必要每次都验证,
TripH0101 2008-10-11
  • 打赏
  • 举报
回复
用两个线程,一个用于发送,一个用于接收 ,上位机先与下位机建立通信,通信成功后,以后通信就不能反复验证。
hnzlk 2008-10-11
  • 打赏
  • 举报
回复
用消息,一个发送类,一个接收类,接收类负责接收并校验数据,校验完后再发消息,在发送类做一个标识,然后再作比较,比较完后再删除。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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