java 串口通信系统

power_mk 2010-07-30 09:13:28
问题:我要做一个系统,所有设备通过一个串口和PC进行通信,固定格式的命令,PC可被动接收或主动发起一个命令,命令都要进行反馈。为保证命令的准确性,在规定时间内没有收到反馈时需要进行重发,最多发送三次,则表示失败。对于PC端可能会同时处理多条由系统中其他设备发来的命令。
对于这个系统希望能有一个好的思路来编写,哪位大大有经验,希望能够赐教
...全文
214 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
power_mk 2010-08-05
  • 打赏
  • 举报
回复
我大概说一下我现在的做法把,我用一个线程来read串口中的数据,在接收到数据之后,将做一些简单的协议判断,把一帧正确的数据放入我的接收队列中,并在此时反馈一个简单的链路应答。
启用另一个线程来分发队列中的正确数据,对每一条正确的数据我是采用线程池来分别处理。因此在接收线程中基本只有read,没有操作。
我现在遇到的问题是,我read到的时间比设备发送的时间要晚,也就是说,当硬件串口已经接收到数据后,并没立即产生中断,或者说我的线程没有获得cpu的时间片,导致我接收到数据时别实际要晚了一些,无法达到我所要求。
这也只是我的初步分析,希望各位能给我一个好的解决方法
ronniegxq 2010-08-03
  • 打赏
  • 举报
回复
用sun 的串口通讯包,或者专门有串口的框架 ,很简单
oscar2006 2010-08-03
  • 打赏
  • 举报
回复
额。。。
我做过一点这个方面的编写,我说一下我的想法吧
不对勿怪

可不可以用runnable线程呢
监听端口数据,有数据就启动一个runnable线程,这样就不会一直等待线程结束才去读下一个数据
每个线程再处理完数据后直接发送回复并结束线程

这个我觉得缺点在于如果数据较多时启动线程比较多
也可以让线程先不结束
等待端口发送来的带有结束数据传输的命令(如果有的话)再结束该线程

这样程序应该可以较快的完成读取功能

如果单纯的读取20ms的反应时间足够了
要是还需要处理的话20ms应该不够用吧

以上为我的个人意见
呵呵 希望对你有所帮助
dracularking 2010-08-03
  • 打赏
  • 举报
回复
去掉ide
dracularking 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 power_mk 的回复:]

引用 7 楼 dracularking 的回复:
引用 3 楼 power_mk 的回复:

我还有个问题,就是我用串口进行通信时,发现串口在接收到数据时,也就是read到数据时,总比实际接收到的晚,由于我在接收到数据后,需要在20ms内回复一条的响应,那位大大能帮我分析下

这个接收的晚的问题能通过架构设计解决吗,你是说因为回复了才晚的?

我的接收是一个单独的线程,在程序启动后……
[/Quote]
那你说的实际是指 发送设备发出数据的那一刻了? 发出后要一段时间后才能read到数据,超过20ms,而你ide要求是在接收到消息之后的20ms,不是发送之后的20ms嘛
power_mk 2010-07-30
  • 打赏
  • 举报
回复
难道没人知道吗?
power_mk 2010-07-30
  • 打赏
  • 举报
回复
我还有个问题,就是我用串口进行通信时,发现串口在接收到数据时,也就是read到数据时,总比实际接收到的晚,由于我在接收到数据后,需要在20ms内回复一条的响应,那位大大能帮我分析下
power_mk 2010-07-30
  • 打赏
  • 举报
回复
PC和其他设备都有主动发起命令动作的可能,也就是说设备也有GUI界面,我主要问题是在通信时命令处理的架构上希望有个好的思路
Jlins 2010-07-30
  • 打赏
  • 举报
回复
应该是pc给设备发信号 等待设备回复吗?说清楚点才好设计呀?设备发的命名也是程序控制的吗?
power_mk 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yepeng821 的回复:]
最近在看smslib包,它封装的固定格式的at指令,可以主动发指令,也可以监听指令,你可以按照它的思想来写
[/Quote]估计没时间去看,时间比较紧
power_mk 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 allskylove 的回复:]
用sun 的串口通讯包,或者专门有串口的框架 ,很简单, 就设置 几个位,按照 你的硬件 设置 值,
[/Quote]
主要是我的上下位机,交互可能不是单个命令的处理,有可能在PC与其中一个下位机交互的同时,触发与其他下位机的一些交互。
power_mk 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dracularking 的回复:]
引用 3 楼 power_mk 的回复:

我还有个问题,就是我用串口进行通信时,发现串口在接收到数据时,也就是read到数据时,总比实际接收到的晚,由于我在接收到数据后,需要在20ms内回复一条的响应,那位大大能帮我分析下

这个接收的晚的问题能通过架构设计解决吗,你是说因为回复了才晚的?
[/Quote]
我的接收是一个单独的线程,在程序启动后就一直阻塞在read那,但是当下面设备发送数据时,总感觉,read触发的时间要比实际下面设备发送的要晚。不能满足我在20ms内回复的要求
dracularking 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 power_mk 的回复:]

我还有个问题,就是我用串口进行通信时,发现串口在接收到数据时,也就是read到数据时,总比实际接收到的晚,由于我在接收到数据后,需要在20ms内回复一条的响应,那位大大能帮我分析下
[/Quote]
这个接收的晚的问题能通过架构设计解决吗,你是说因为回复了才晚的?
yepeng821 2010-07-30
  • 打赏
  • 举报
回复
最近在看smslib包,它封装的固定格式的at指令,可以主动发指令,也可以监听指令,你可以按照它的思想来写
ALLSKYLOVE 2010-07-30
  • 打赏
  • 举报
回复
用sun 的串口通讯包,或者专门有串口的框架 ,很简单, 就设置 几个位,按照 你的硬件 设置 值,

58,446

社区成员

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

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