seahllgirl 发表于 2008-4-14 10:49:13

请教一个功能的实现方法!事件结构相关的。。。

各位好,我要用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在另外一个点击事件中实现

飞雨天 发表于 2008-4-14 10:52:18

你确定你这样的架构存在问题?点击发送报文C不会中断A/B的发送吧?

seahllgirl 发表于 2008-4-14 10:59:45

可是因为报文A\B的返回报文数据量都很大,点击发送报文C时,会造成接收报文不全的情况

seahllgirl 发表于 2008-4-14 11:01:08

还有DSP的响应也会有延时的,另外LabVIEW做串口通信程序时,不是还要在串口写和串口读之间加个几百毫秒的延时吗?

飞雨天 发表于 2008-4-14 11:19:04

先回答最后一个问题,不用延迟的,因为这两个vi自己会等待的,等写完或者读完设定的字符数才会继续往下执行

seahllgirl 发表于 2008-4-14 11:23:49

飞雨天版主,我用的是Byte at port这个属性节点来接收串口收到的报文的,不是设定报文的字符数呢,因为每条报文的长度是不一样的,没有办法设定长度啊?
难道要设定一个最大长度的报文字数?

谢谢版主的指导!!

飞雨天 发表于 2008-4-14 11:32:32

报文长度固定的不?

seahllgirl 发表于 2008-4-14 11:45:24

每条报文的长度是固定的,但是一共有5条不同的报文呢

飞雨天 发表于 2008-4-14 12:37:04

那么一个简单的方法就是在你A/B报文的那个事件中,串口发送的后面,加个延迟,保证报文能完整接收;
一个复杂的方法就是在报文中加如校验,比如最后一个字节就是校验码,然后在上位机对每个接收的报文的数据进行校验运算,看和发送上来的校验码是否相等,如果出错,就把报文抛弃

seahllgirl 发表于 2008-4-14 12:52:53

呵呵,我是按照版主说的复杂方法做的,就是加了校验,但是就会发生丢失报文的情况,可是和我通讯的写DSP程序的同事特别较真。。。所以我才要继续完善我的程序

多谢版主呢!!

附件是我的程序大概结构,请版主再看一下

[ 本帖最后由 seahllgirl 于 2008-4-14 13:22 编辑 ]
页: [1]
查看完整版本: 请教一个功能的实现方法!事件结构相关的。。。