本帖最后由 荣琪 于 2019-8-24 09:23 编辑
1.打开VI引用如何为异步调用建立严格类型VI引用
2.被调用子VI的内部传值和外部传值细节。
3.欢迎在回复中补充。
写在后面叙事:
最近在写仪器仪表程控上位机,说白了就是向下位机写TCP,发送SCPI指令字符串,并可选读取TCP。
最核心的思维是同一时刻只向一台设备发送一条指令。基于此,利用队列状态机,根据设备代号,设备链接端口等将指令发送给对应设备。由于某一时刻的设备代号,设备连接端口,操作指令均属于这一时刻被用户操作的设备。因此关键是保证多个队列的出入队列的同步(3种数据,同时入3个队列,再同时从3个队列出)。否则,可能出现以下情况,设备1的代号出队列,设备2的链接端口出队列,设备3的指令出队列写入TCP,相当于设备3的操作指令发给了设备2,界面上显示操作的设备1,那就尴尬了,这可以通过数据流控制方式实现。 另外,要实现仪器可以被用户操作的同时,用户还可以自主选择操控多台设备长时间自动化运行,如同时操作设备2,3,4,5互相配合运行,同时,操作设备6,7配合运行等等。在目前的架构下,这就涉及到多子VI(while循环)同时运行并入同一队列的问题,关键是如何保证不冲突(同一时刻只有一个子VI入数据进队列)。目前用信号量来协调各个VI实现。
但是,串行发送指令的问题是,控制设备的最快速度,就是一个while循环中指令出队列,之后写TCP的最快速度。而当几百台几千台设备同时***控,不仅操控速度会更慢了,操控的时间精度也会面临极大风险,这样长时间运行会导致意外事故。
因此考虑用写并行TCP,核心是假设一台PC可以同时给多个IP地址写TCP。架构不会变化太多,关键知识点是异步调用,子面板等。思路已经有了,但也不会改目前串行的架构,等写个更完善的demo,总结总结再发。
-
LV异步调用.zip
(2019-8-24 08:36 上传)
20.9 KB, 下载次数: 140