我想实现在labview 发送串口指令时强行停止,剩余命令不在发送,曾经创建了一个停止按钮关联stop函数,但串口发送指令时所有按钮无法点击,输入控件也无法输入数据。求解决方法
将串口发送指令原来发送字符串或者字节数组改为循环逐个发送字符或字节
在循环中添加类似
C WIN32 API的消息循环:
MSG msg;
while( GetMessage( &msg, NULL, 0, 0 ) > 0 ) {
DispatchMessage( &msg );
}
或类似VB6的
DoEvents
至于labview怎么加消息循环,自己百度搜搜看。
引用chatGPT作答,你可以在你的LabVIEW VI中使用一个While循环,在每次循环中检查是否有停止按钮被按下。如果停止按钮被按下,则跳出循环,停止串口发送指令。
下面是一种实现方式:
1.在VI面板上添加一个停止按钮和一个串口发送控件。
2.将停止按钮的Value Change事件和停止函数关联起来。
3.在While循环中添加一个Case结构,将串口发送控件放在Case中。
4.将停止按钮的Value作为Case结构的终止条件。
5.在Case结构中添加串口发送指令的代码。
具体实现方法如下:
1.在VI面板上添加一个停止按钮和一个串口发送控件。
2.在停止按钮的Value Change事件中,添加一个Stop函数。这样,当停止按钮被按下时,Stop函数会被调用。
3.在While循环中添加一个Case结构。将串口发送控件放在Case中。
4.将停止按钮的Value作为Case结构的终止条件。这样,当停止按钮被按下时,While循环会结束,停止串口发送指令。
5.在Case结构中添加串口发送指令的代码。你需要使用一个"not"条件来检查停止按钮是否被按下,如果被按下则退出While循环,停止串口发送指令。
可以使用一个while循环来实现串口指令的发送,在while循环中可以加入一个停止条件,例如点击停止按钮时停止发送指令。具体实现可以参考以下示例代码:
// 初始化串口
serport = Visa Serial Open("COM1", 9600);
// 设置停止条件
stop = false;
// 循环发送指令
while(!stop)
{
// 发送指令
Visa Serial Write(serport, "AT+CMD1");
// 等待一定时间后再发送下一条指令
Wait(100);
// 发送下一条指令
Visa Serial Write(serport, "AT+CMD2");
// 等待一定时间后再发送下一条指令
Wait(100);
// ...
}
// 关闭串口
Visa Serial Close(serport);
在界面中添加一个停止按钮,单击该按钮时将stop设置为true即可停止发送指令。同时需要注意,在循环中添加Wait函数等待一定时间后再发送下一条指令,否则可能会导致串口通信出现错误。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
要在LabVIEW中发送串口指令并实现强制停止,可以使用事件结构处理。
首先,在界面上创建一个停止按钮,并将其与一个全局布尔变量 "Stop?" 关联。然后,创建一个事件结构,将串口写入放在其中。在事件结构内部创建一个 "Stop?" 控制事件,当 "Stop?" 值为真时,停止所有后续的串口写入,并保留未写入的部分。
下面是一个简单的示例代码,说明如何在LabVIEW中使用事件结构处理串口写入:
https://fizzzzer.github.io/images/mypost1/1.png
https://fizzzzer.github.io/images/mypost1/1.png
这个例子模拟了通过串口发送逐个数字的情况。我们在停止按钮按下时改变 "Stop?" 布尔值,并在事件结构中处理此事件。我们监测到了 "St
所有按钮无法点击,是添加串口指令发送事件分支时勾选了锁定前面板直至事件完成,需要编辑事件分支取消勾选。中途强行停止的功能可以再用一个新while结构,添加事件结构,编辑停止按钮事件分支,使用stop函数这样就可以中途停止发送指令了