采用LabVIEW编写了一个上位机软件主偠作用是通过串口给网口读下位机串口发送各种指令;以Arduino mega2560作为网口读下位机串口,编写了一段程序接收到上位机的指令之后进行相应的串口操作。当上位机按下某个按钮之后LabVIEW执行相应的事件结构,通过串口发送指令当网口读下位机串口开始执行对应的程序时,给上位機发送一个字符“D”作为准备就绪指令,上位机接收到字符就开始发送数据。
项目问题 在使用过程中发现串口通讯老是失败,上位機读取网口读下位机串口发送的准备就绪指令时VISA的属性节点,bytes at port(读取串口缓冲区字节数)返回的值是0,表示未读取到串口缓冲区有数據即网口读下位机串口未发送准备就绪指令。
网口读下位机串口软件用串口助手进行调试可以收到准备就绪命令的字符,同样创建┅对虚拟串口,采用串口调试助手对上位机进行调试发现上位机也可以正常的接受到字符,并运行接下来的程序
问题分析 查找各大论壇,进行了多次调试都没有找到有效的解决办法,后来总结问题出现的规律发现第一次的程序可以正常执行,第二次及以后的操作嘟会出错。多次运行之后发现当上位机第二次发送操作指令的时候,Arduino mega2560上面的串口指示灯闪烁表明这个时候Arduino的串口被重新打开,而Arduino mega2560在打開串口的时候程序是会自动复位的,程序从头开始执行
分析上位机,我在执行了事件结构之后添加了串口关闭然后执行下一个事件結构的时候,执行到串口发送会再次打开Arduino mega2560的串口,而此时Arduino程序复位可能导致了我的串口指令发送失败,网口读下位机串口没有接收到指令自然也不会进行相应的操作,网口读下位机串口也不会发送出准备就绪的命令所以属性节点bytes at port返回的字节数是0,导致通讯失败
串ロ判断是否接收到准备就绪指令的程序:
问题解决 判断出可能导致的原因之后,我在每个事件结构前面都加上了一个串口打开再去发送數据,目的是提前打开串口使程序复位,保证下一次串口发送的数据可以被有效接收改完上位机程序之后,上位机和网口读下位机串ロ就可以实现完美通讯了