虚拟仪器
功能介绍:左边上方串口接收区,下方为串口字符发送区。右方为一个波形图表,在程序内部每次将串口发送过来的数据,以f%格式化,显示在波形图表上。
按钮介绍:从左至右依次,发送按钮;清除计数按钮;打开/关闭串口按钮;清除接收区数据;清除波形图表;保存波形;退出程序。
主程序框图介绍:主程序框图主要由3个状态组成:程序的初始化,程序事件的响应,程序的退出。
状态Init:程序初始化,主要把OpenCom等按钮,串口状态,串口接收字符串,波形图标,TX/RX计数等控件,置为False或清零。初始化状态只执行一次,接下来就进入状态Event。
状态Event:程序事件响应,由一个事件结构构成,共需响应8个事件:Open/CloseCom按钮事件;串口号或波特率改变事件;发送按钮事件;清空计数按钮事件;清空接收区按钮事件;清空波形区按钮事件;保存波形按钮事件;菜单选择事件;退出按钮事件。如果在此状态,按下退出按钮,则进入状态Exit,否则程序将一直运行在此状态。
状态Exit:程序退出。退出前需关闭已打开的VISA句柄。
串口接收程序框图介绍:当串口状态为真时,调用串口属性节点”BytesatPort”,如果串口缓冲区有X字节的数据就接收X字节的数据。最后,用一个状态机来实现相邻两个字符串的判断。如果串口在相邻两个字符串之间接收时间大于50ms,则判断为两个独立的字符串;如果小于50ms,则自动拼接前后两个字符串。
这里labview被动接收传感器发送来的数据,即在开发板获取传感器的数据来进行计算控制时,labview用来数据的采集。
这是labview串口配置和指令发送,指令发送用于主动发送再接收时,此处不需要用到该模块,直接将if结构置假即可,或者直接删除。这其中用到的CRC子vi主要是在输入指令不同时自己计算出校验位,如果程序始终只用到一个电机运行速度读取命令,可以直接手工计算并发送校验位。
由于被动接收数据,所以接收到的数据不一定是刚刚好从标识位开始,所以要进行识别。这里用到while循环的移位寄存器,每次连续读取15位,因为一串完整的命令为8位,所以连续15位中肯定存在一组完整的数据,但这样读取数据的弊端在于每读取一串数据必定损失掉一串数据,考虑到labview读取的速度跟不上传感器发送数据的速度,所以这其中会损失掉很多数据,但读取的数据还是可以整体上反应出倾角传感器倾角的变化情况。
串口数据读入并寻找帧头
未找到帧头
读取15位数据后进行帧头寻找,第一位为68,第二位为07,注意都是16进制表示的。如果找到帧头,就输出帧头索引值,如果找不到帧头就将索引值置为14,即最后一位,使得后面索引到的数据都为0,即倾角为0。
组索引和数值转化
根据通信协议,将索引值开始的3位数据读出并转为所需要的角度值,注意正负的转换。
在倾角传感器-开发板-电脑labview连接中,开发板和传感器之间严格进行着发送一串数据接收一串数据的传输,而电脑labview只是来接收传感器数据,所以电脑labview只用RXD端连接传感器的TXD端,TXD置空,因为发现TXD如果接入三者连线中,会导致单片机和传感器间发送接收异常,这个问题在电机控制器-开发板-电脑labview中应该注意避免。
全部0条评论
快来发表一下你的评论吧 !