温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于
Labview
Modbus
监控
系统
设计
梁长峰
2023年1月机电技术机电技术基于基于Labview的的Modbus监控系统设计监控系统设计*梁长峰贾王纤曹 菁陶斯弦雷 钧(湖北汽车工业学院 电气与信息工程学院,湖北 十堰 442002)摘要文章设计了基于Labview的Modbus监控系统,以Labview为上位机,单片机为下位机,上位机和下位机之间采用Modbus通信方式,由上位机发送指令进行通信。监控系统工作时,Labview程序首先进行初始化,然后等待用户的指令,根据指令转入到相应程序模块,如数据采集模块,可以采集下位机送入通信串口的数据;数据处理模块,可以解析采集到的数据并在人机交互界面显示;保存模块,可以实时保存采集的数据。关键词Labview;Modbus;通信中图分类号:TP273文献标识码:A文章编号:1672-4801(2023)01-016-04DOI:10.19508/ki.1672-4801.2023.01.005*湖北汽车工业学院大学生创新训练计划项目(DC2022028)作者简介:梁长峰(2002),男,本科生,从事自动化技术方面的学习与研究。通讯作者:雷钧(1975),男,教授,研究方向为工业互联与智能制造等。1通信协议设计Modbus通信协议,是一种串行通信协议,是Modicon公司于1979年开发的一种应用层报文传输协议1。由于易于部署和维护,可靠性强,因此本文中的单片机与Labview之间采用Modbus通信协议。Modbus通信协议有RTU和ASCII两种传输方式2。在相同的速率之下,采用RTU模式时,传送的数据要大于ASCII模式,本文采用RTU模式。文中所设计的系统采用0 x10功能码(写多个寄存器),用于向单片机写入参数;以及0 x03功能码(读多个寄存器),用于读取单片机采集到的数据。2Labview上位机软件设计为了实现上位机与下位机之间的通信,上位机对采集的数据进行显示、存储等操作,设计了Labview软件程序,主要包含初始化模块、数据接收、发送、处理、保存等功能。主监控系统主要包含数据接收、发送、处理、存储模块。本系统的通信策略是:在通信时打开串口连接,上位机定时循环发送读取命令并接收数据,如果判断通信有错误时不关闭串口连接,而是丢弃读缓冲区的数据以节约通信时间,主程序流程图如图1所示。程序运行后,首先进行初始化操作。初始化完成后,即清空串口数据操作,单片机没有任何返开始打开串口串口是否被占用?提示用户串口打开失败打开串口读取数据判断返回的数据是否正确?丢弃错误数据是否否是读取数据并解析、显示图图1 1LabviewLabview主程序流程图主程序流程图回值,所以不进行数据处理,程序返回“等待命令”状态。若此时点击前面板“open”按钮,如果串口不被其他程序占用,串口会被打开,串口指示灯被点亮。需要注意的是,用户若没有点击“open”按钮而直接点击“采集”按钮,程序则会提醒用户“串口未打开!”,用户点击“open”按钮后再点击“采集”按钮,程序就会将用户设定好的加热时间写入串口,之后如果用户不进行操作,程序就进入超时状态。此时加热时间已经被写入单片机了,所以单片机有返回值,程序会发送读取命令给单片机,程序处理单片机返回的数据并在前面板显示,程序又进入“等待命令”状态。接下来若不进行任何操作,程序又进入“超时”状态,由此达到一个循环采集数据的目的。若按下前面板“保存图像”按钮,前面板上的波形会被实时保存。若按下前面板“exit”按钮,程序停止运行,至此一个完整的流程结束。前面板如图2所示。2.1数据发送模块在设计此模块的过程中,主要用到了“VISA写入”函数3-5,此函数可以将写缓冲区的内容写入指定的串口。数据发送流程图如图3所示。16第1期图图2 2LabviewLabview前面板前面板开始用户写入参数点击 采集 按钮串口是否被占用?提示用户串口打开失败生成CRC校验码否是生成命令发送至串口图图3 3数据发送流程图数据发送流程图数据发送的程序框图如图 4 所示。其中,CRC 校验码由 CRC16校验模块生成,可以看到,CRC16校验模块是作为一个子模块进行调用的6,在CRC16校验main.vi的前面板设置好输入、输出的接线端子,就可以使CRC16校验的vi作为一个子模块进行调用,其可以在多个场合直接进行调用,调用起来十分方便。具体方法是先点击前面板“参数”输入控件,再点击前面板右上角,将其设置为输入端;输出端也是同样操作,前面板“命令”显示控件设置为输出端。图图4 4数据发送程序框图数据发送程序框图2.2数据接收模块设计此模块用到了“VISA读取”函数,此函数可将串口的数据读取到读缓冲区。数据接收流程图如图5所示。开始发送读取数据命令数据是否正确?接收数据否是上位机进一步处理图图5 5数据接收流程图数据接收流程图其中,发送读取命令中,设置定时器100 ms,即每 0.1 s上位机发送一次读取命令。程序框图如图6所示。若不设置定时器,导致的结果就是前面板没有数据或波形显示。出现这个现象并不表明没有采集到数据,而是采集数据、处理数据、显示数据这些工作都是一瞬间完成的,用户无法观测到数据的显示。数据是否正确的标准,是根据返回的字节数是否正确来进行判断,如果字节数正确就接收数据,并送到上位机进行下一步处理;不正确则丢弃。数据接收模块的程序框图如图6所示。图图6 6数据接收模块程序框图数据接收模块程序框图2.3数据处理模块接收到下位机返回的数据后,将数据发送至前面板的“读缓冲区”(前面板隐藏了该显示控件),但返回的数据为十六进制字符串,由此设计了“数据处理模块”,程序框图如图7所示。图图7 7数据处理模块程序框图数据处理模块程序框图梁长峰 等:基于Labview的Modbus监控系统设计172023年1月机电技术机电技术数据处理时用到了“截取字符串”函数,可以将“读缓冲区”的数据截取出来再进行处理。还用到了“强制转换类型”函数,截取到的数据类型是字符串,使用此函数可以将输入端的数据类型转换为用户想要的数据类型。返回的数据中“站号”位于第一个字节,所以设置偏移量为0,字节数为1,即可将站号读取出来;“电流”位于第四个字节,占两个字节,设置偏移量为4,字节数为2,读取到的字符串转换为十进制数,再除以10,就可以得到实际的电流值。电压、功率、加热时间、能量、控制信号也类似操作。处理完成后,将电流、电压、功率捆绑起来,以波形图的方式显示。要注意的是,处理完数据进行显示的时候,可以用“捆绑”函数将类型相同数据放在一张图上显示。如果类型不同,可以用上述“强制转换类型”函数将数据转换成同一种数据再进行捆绑。2.4数据保存模块数据接收处理后,要进行实时保存的操作,数据保存模块程序框图如图8所示。此模块用到了创建路径的函数,基路径为FolderPath,名称或相对路径为“figure-格式化时间”,创建了波形的调用节点。含义为在FolderPath路径下创建了名为“figure-格式化时间”的BMP文件。图图8 8数据保存模块程序框图数据保存模块程序框图其中,添加的路径由如图 9 所示程序创建。操作步骤为:首先获取到应用程序目录,再使用“创建路径”函数,函数后有一个判断文件夹“Data”是否存在的函数,若存在,就在该文件夹下保存数据;若不存在,则创建文件夹后再保存数据。3下位机软件通信设计下位机单片机判定是否收到了主机Labview图图9 9创建路径创建路径的指令,若收到了数据指令,首先判定 CRC校验是否正确,再判断站号是否正确,然后再根据站号、功能码、寄存器地址、寄存器个数、字节数等数据等进行处理,并将处理结果反馈给主机,如果传输字节数错误,则会返回错误数据。下位机单片机通信程序流程图如图10所示。初始化启动A/D是否接收到主机指令?返回错误数据否是向主机返回值Modbus解析是否正确?否是图图1010下位机单片机通信程序流程图下位机单片机通信程序流程图4监控系统测试4.1通信测试软件设计完成后,对各模块进行测试,首先要确认上位机与下位机通信是否成功7,是否正确。具体命令举例如表1所示。写入4个寄存器(8个字节):10 10 1000 000408 1234 5678 90AB CDEF 4930。注释:主站发送命令。从站地址(10)、命令码(10)、起始地址高(10)、起始地址低(00)、寄存器高位(00)、寄存器低位(04),每个寄存器 2 个字节,字节数(08),Modbus通讯规约中的寄存器指的是16位(即2字节),并且高位在前,数据(高位+低位)1234(地址1000)、5678(地址1001)、90AB(地址1002)、CDEF(地址1003)、CRC校验(4930)。返回:10 10 10 00 00 04 C6 4B。注释:从站正常响应返回从站地址、功能码、起始地址和预置寄存器数。从站地址(10)、命令码(10),起始地址高(10),起始地址低(00),寄存器高位(00),寄存器低位(04),CRC 校验(C64B),返回的数据如图11所示。表表1 1具体命令举例具体命令举例命令写入寄存器读出寄存器地址码从站地址10从站地址10功能码命令码10命令码03数据(N8bit)起始地址1000起始地址1000寄存器个数0004寄存器个数0004字节数08数据1234567890ABCDEFCRC校验CRC校验码4930CRC校验码438818第1期从图11中可以看出,串口打开后,Labview将写缓冲区写寄存器命令发送至串口后,读缓冲区接收到单片机返回的数据 10 10 10 00 00 04 C64B。写命令通信测试通过。图图1111写命令通信测试写命令通信测试读出 4 个寄存器:10 03 1000 0004 4388。注释:主站发送命令,要读的寄存器起始地址及寄存器的数量从站地址(10)、命令码(03)、起始地址高(10)、起始地址低(00)、寄存器高位(00)、寄存器低位(04)、CRC校验(4388)。返 回:10 03 08 12 34 56 78 90 AB CD EF D53D。注释:从站响应信息中的寄存器数据为二进制数据,每个寄存器分别对应2个字节,第一个字节为高位数据,第二个字节为低位数据。从站地址(10)、命令码(03)、字节数(08)、数据 1 高位(12)、数据1低位(34)、数据2高位(56)、数据2低位(78)、数据3高位(90)、数据3低位(AB)、数据4高位(CD)、数据4低位(EF)、CRC校验(3DD5),返回的数据如图12所示。从图 12 中可以看出,Labview 将写缓冲区读寄存器命令10 03 1000 0004 4388发送至串口后,读 缓 冲 区 接 收 到 单 片 机 返 回 的 数 据 为10 03 08 12 34 56 78 90 AB CD EF 3D D5,读命令测试通过。除此之外,还有命令错误返回信息,用户可进行自定义。0 x90:功能码错误,收到了不支持的功图图1212读命令通信测试读命令通信测试能码;0 x91:命令长度错误;0 x92:写入或读出寄存器个数或字节数错误;0 x93:寄存器地址错误。4.1监控系统测试在完成了能量采集模块的软件和硬件设计之后,对整个系统进行了全面的测试。系统上电后,用户若不打开串口就点击“采集”按钮,程序会提示用户“串口未打开!”。用户打开串口,如果其他程序正在占用该串口,程序会提示用户“串口打开失败!”。选择正确的串口并打开后,串口指示灯会被点亮,此时设置参数,再点击前面板上“采集”按钮,就能直观的看到图表上有波形产生,如图2所示。4.2数据保存测试数据接收并处理之后,当前面板上的“图像保存”按钮按下后,波形图就会实时保存到程序对应的一个名为“Data”文件夹的目录下,保存的图像名称为“figure-当前时间”。5结束语本文在 Labview2020 软件平台,实现了基于Modbus的单片机与上位机之间的数据传输。通过一系列测试,系统是运行可靠的,并且该系统中部分模块可以作为子VI被其他系统所调用。参考文献:1