From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

串口通讯超时与程序逻辑结构问题 急求

三个问题,急求大神解答!!

1.串口超时:现做一运动控制系统上位机,两计算机间通过串口通讯,一台计算机(接收端)接收另一台计算机(发送端)命令,无返回,接收端通过串口接收到“start”命令后开始执行运动控制程序,问题是执行运动控制程序过程中发送端可以随时发送stop命令停止运动控制,这样串口接收会一直保持接收状态,会出现超时出错,我现在解决方法是将超时参数改大,如8小时,即工作一天都不超时,但这样是不是一直占用资源,请问有没有好的解决方法??

 

2.运动控制程序中用到udp通讯,下位机的通讯方式是发送一个命令返回一个命令,但我有9个下位机,所以发送到下位机用的是广播方式,但此时上位机同一时刻接收的只是其中一个下位机返回的数据,请问如何才能接收到所有下位机的数据??

 

3.针对问题2,我不用广播,换成顺序结构做轮询,让下位机顺序返回数据拿来处理,但新问题出现,第一次上位机发送命令后,下位机轮询返回数据正常,但第二次发送命令后立马出错,请问如何解决??

 

问题1与问题3程序如图

图1图2

0 项奖励
1 条消息(共 5 条)
3,793 次查看

问题1,超时时间设置太长还是不合适的,可以不处理超时错误。

但是你的系统运行过程中长时间不和上位机通信也是不合适的,最好做一个定时的通信检查,系统运行的状态也应该及时的上传给上位机,进行适当的保存。

0 项奖励
2 条消息(共 5 条)
3,665 次查看

232串行口一般用于一对一通讯。且距离不能太长,不能靠近电源线,干扰会很大。

汽车上是用CAN总线来进行通讯。

你用问答式通讯可以解决竞争问题,这是对的。程序设计中 要防止下位机等待丢失数据的问题。

0 项奖励
3 条消息(共 5 条)
3,524 次查看

第一个问题,你的状态是两个状态,一个是发stop的停机状态,另一个是初始无开机的状态。增加一个状态的指示即可。

 

另外建议多用基于状态机的编程模式,你这个程序,看起来很费劲。过一段时间再看,你自己都可能看不懂。

0 项奖励
4 条消息(共 5 条)
3,522 次查看

1,一台上位机与九台下位机通讯,采用中断处理方式比较节约CPUde时间。

2,各个下位机应该有自己的地址。如果是九个RS-232也可以。如用CAN总线,可以抗干扰。

3,巡回查询,第一遍通过,第二遍出错,说明有状态改变了,检查一下是可以发现问题所在。

简单的方法,把巡回查询作成一个大循环,每次进入进行初始化,这样保证每次进入的状态是一样的。

0 项奖励
5 条消息(共 5 条)
3,297 次查看