请教一个功能的实现方法!事件结构相关的。。。
各位好,我要用LabVIEW实现和DSP的串口通信,我这边发送召唤报文,DSP收到后给我响应,具体的功能如下:1、正常状态下,有两条状态的召唤报文循环发送,即报文A、报文B、报文A、报文B……这样循环发送,大概每隔1s一条报文吧,DSP收到报文A\B后,会马上响应,给我传回数据报文
2、前面板上有“参数设置”这样的“点击”才会发生的事件,如果点击这样的命令,就会打断原来报文A\B的发送,而发送一条“参数设置”的召唤报文,即为报文C
问题是,点击按钮发送报文C的时刻是任意的,有可能打断了报文A\B的响应报文,即可能串口正在接收报文A/B的反馈报文,这个时候点击了“参数设置”,就会导致报文接收不全或者命令发送不出去!!
请问我该如何调整我的程序结构呢,请大家帮忙,谢谢!!
目前我用的是while+event structure的结构实现的,在事件结构的timeout事件中实现循环发送报文A/B的功能,报文C在另外一个点击事件中实现 你确定你这样的架构存在问题?点击发送报文C不会中断A/B的发送吧? 可是因为报文A\B的返回报文数据量都很大,点击发送报文C时,会造成接收报文不全的情况 还有DSP的响应也会有延时的,另外LabVIEW做串口通信程序时,不是还要在串口写和串口读之间加个几百毫秒的延时吗? 先回答最后一个问题,不用延迟的,因为这两个vi自己会等待的,等写完或者读完设定的字符数才会继续往下执行 飞雨天版主,我用的是Byte at port这个属性节点来接收串口收到的报文的,不是设定报文的字符数呢,因为每条报文的长度是不一样的,没有办法设定长度啊?
难道要设定一个最大长度的报文字数?
谢谢版主的指导!! 报文长度固定的不? 每条报文的长度是固定的,但是一共有5条不同的报文呢 那么一个简单的方法就是在你A/B报文的那个事件中,串口发送的后面,加个延迟,保证报文能完整接收;
一个复杂的方法就是在报文中加如校验,比如最后一个字节就是校验码,然后在上位机对每个接收的报文的数据进行校验运算,看和发送上来的校验码是否相等,如果出错,就把报文抛弃 呵呵,我是按照版主说的复杂方法做的,就是加了校验,但是就会发生丢失报文的情况,可是和我通讯的写DSP程序的同事特别较真。。。所以我才要继续完善我的程序
多谢版主呢!!
附件是我的程序大概结构,请版主再看一下
[ 本帖最后由 seahllgirl 于 2008-4-14 13:22 编辑 ]
页:
[1]