利用VB开发的基于Modbus规约的直播室分体空调无线智能监控系统
- 格式:pdf
- 大小:684.97 KB
- 文档页数:2
基于CAN和Modbus的多联空调网关自动测试系统设计Design of Automatic Test System for Multi connected Air Conditioning Gateway Based on CAN and ModbusZhang Ze’e(GREE ELECTRIC APPLIANCES,INC.OF ZHUHAI,Guangdong Zhuhai 519070)摘要:本文设计了一种基于CAN和Modbus RTU协议的多联空调网关功能自动测试系统,系统实现了网关提供的所有开放协议位的自动测试,上位机软件采用LabVIEW编程实现。
本文所介绍方案可为其他搭载多通讯协议的电子产品的自动测试系统设计提供参考。
关键词:CAN; Modbus; 多联空调; 网关; 自动测试;LabVIEW中图分类号:TP273 文献标识码:A文章编号:Abstract: This paper designs an automatic test system for the functions of the multi connected air conditioning gateway based on CAN and Modbus RTU protocols. The system realizes the automatic test ofall open protocol bits provided by the gateway. The upper computer software is programmed by LabVIEW. The scheme introduced in this paper can provide reference for the design of automatic test system of other electronic products equipped with multiple communication protocols.Key words: CAN; Modbus; Multi connected air conditioner; Gateway; Automated testing;LabVIEWCLC number: TP273 Document code:A Article ID:1.背景1.1Modbus协议介绍Modbus协议是施耐德电气于1979年开发的一种消息传递结构,用于在智能设备之间建立客户端-服务器通信。
基于VB6.0的上位机与PLC实时通信技术VB6.0是一种编程语言,可用于开发上位机与PLC之间的实时通信技术。
PLC是一种可编程逻辑控制器,用于控制和监控自动化设备。
通过实时通信,上位机可以与PLC进行数据交换和控制操作。
1. 通信协议选择:PLC与上位机之间的通信需要选择适当的通信协议。
常见的通信协议包括Modbus、OPC、Profibus等。
根据实际需求和设备的支持情况选择合适的通信协议。
2. 串口通信:VB6.0通过串口通信与PLC进行连接。
通常采用RS232、RS485等串口通信方式。
在编程中,需要设置串口的波特率、数据位、停止位、校验位等参数。
通过VB6.0的串口通信类库,可以实现数据的读取和写入。
3. 数据采集和监控:通过VB6.0实现对PLC数据的采集和监控。
可以使用定时器触发方式,周期性的读取PLC设备的数据。
通过VB6.0的数据处理和显示功能,可以实时显示PLC设备的状态和数据信息,如温度、压力、流量等。
4. 控制指令的发送:通过VB6.0向PLC发送控制指令,实现对设备的控制。
根据PLC 的控制逻辑,编写相应的控制程序,将控制指令发送给PLC设备。
通过串口通信,将控制指令发送出去,实现设备的开关、调节等操作。
5. 异常处理:在实时通信中,可能会出现通信故障、数据错误等异常情况。
需要在编程中添加异常处理的代码,对异常情况进行处理,保证通信的稳定性和可靠性。
基于VB6.0的上位机与PLC实时通信技术可以广泛应用于自动化控制、工业监控、智能家居等领域。
通过实时通信,可以实现对设备的远程监控和控制,提高设备的自动化程度和工作效率。
在编程过程中,需要注意通信协议的选择和参数的设置,以确保通信的正确和可靠。
需要添加适当的异常处理机制,提升系统的稳定性和可靠性。
VB编写的Modbus RTU协议通讯源程序modbus rtu协议可以算是一种事实上的工业标准协议,为许多仪表、PLC等所支持。
以前有几个用户问如何使用VB编程来与我们的KND-K3系列PLC通讯,于是整了一个demo程序。
这次把这个demo共享,希望能给大家一点帮助。
1)模块文件:modCRC,其中包含了CRC校验的函数。
'data 待校验的数组名称'no 数组中元素个数'btLoCRC 算出的CRC高字节'btHiCRC 算出的CRC低字节Public Function CalCRC16Fast(data() As Byte, no As Integer, btLoCRC As Byte, btHiCRC As Byte) As StringDim CL As Byte, CH As Byte '多项式码&HA001Dim SaveHi As Byte, SaveLo As ByteDim i As IntegerDim Flag As IntegerbtHiCRC = &HFFbtLoCRC = &HFFCL = &H1CH = &HA0For i = 0 To (no - 1)btHiCRC = btHiCRC Xor data(i) '每一个数据与CRC寄存器进行异或For Flag = 0 To 7SaveHi = btLoCRCSaveLo = btHiCRCbtLoCRC = btLoCRC \ 2 '高位右移一位btHiCRC = btHiCRC \ 2 '低位右移一位If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1btHiCRC = btHiCRC Or &H80 '则低位字节右移后前面补1End If '否则自动补0If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或btLoCRC = btLoCRC Xor CHbtHiCRC = btHiCRC Xor CLEnd IfNext FlagNext iDim ReturnData(1) As ByteReturnData(0) = btHiCRC 'CRC高位ReturnData(1) = btLoCRC 'CRC低位CalCRC16Fast = ReturnDataEnd FunctionPublic Function CalCRC16Tbl(data() As Byte, no As Integer, btLoCRC As Byte, btHiCRC As Byte) As StringDim btLoCRC As ByteDim btHiCRC As BytebtLoCRC = &HFFbtHiCRC = &HFFDim i As IntegerDim iIndex As LongFor i = 0 To (no - 1)iIndex = btHiCRC Xor data(i)btHiCRC = btLoCRC Xor GetCRCLo(iIndex) '低位处理btLoCRC = GetCRCHi(iIndex) '高位处理Next iDim ReturnData(1) As ByteReturnData(0) = btHiCRC 'CRC高位ReturnData(1) = btLoCRC 'CRC低位CalCRC16Tbl = ReturnDataEnd Function'CRC低位字节值表Function GetCRCLo(Ind As Long) As ByteGetCRCLo = Choose(Ind + 1, _&H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, _&H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, _&H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, _&H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, _&H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, _&H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, _&H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, _&H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, _&H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, _&H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, _&H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, _&H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, _&H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, _&H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, _&H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, _&H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, _&H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, _&H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, _&H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, _&H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, _&H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, _&H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, _&H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, _&H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40)End Function'CRC高位字节值表Function GetCRCHi(Ind As Long) As ByteGetCRCHi = Choose(Ind + 1, _&H0, &HC0, &HC1, &H1, &HC3, &H3, &H2, &HC2, &HC6, &H6, &H7, &HC7, &H5, &HC5, &HC4, &H4, &HCC, &HC, &HD, &HCD, &HF, &HCF, &HCE, &HE, &HA, &HCA, &HCB, &HB, &HC9, &H9, &H8, &HC8, &HD8, &H18, &H19, &HD9, &H1B, &HDB, &HDA, &H1A, &H1E, &HDE, &HDF, &H1F, &HDD, &H1D, &H1C, &HDC, &H14, &HD4, &HD5, &H15, &HD7, &H17, &H16, &HD6, &HD2, &H12, &H13, &HD3, &H11, &HD1, &HD0, &H10, &HF0, &H30, &H31, &HF1, &H33, &HF3, &HF2, &H32, &H36, &HF6, &HF7, &H37, &HF5, &H35, &H34, &HF4, &H3C, &HFC, &HFD, &H3D, &HFF, &H3F, &H3E, &HFE, &HFA, &H3A, &H3B, &HFB, &H39, &HF9, &HF8, &H38, &H28, &HE8, &HE9, &H29, &HEB, &H2B, &H2A, &HEA, &HEE, &H2E, &H2F, &HEF, &H2D, &HED, &HEC, &H2C, &HE4, &H24, &H25, &HE5, &H27, &HE7, &HE6, &H26, &H22, &HE2, &HE3, &H23, &HE1, &H21, &H20, &HE0, &HA0, &H60, _ &H61, &HA1, &H63, &HA3, &HA2, &H62, &H66, &HA6, &HA7, &H67, &HA5, &H65, &H64, &HA4, &H6C, &HAC, &HAD, &H6D, &HAF, &H6F, &H6E, &HAE, &HAA, &H6A, &H6B, &HAB, &H69, &HA9, &HA8, &H68, &H78, &HB8, &HB9, &H79, &HBB, &H7B, &H7A, &HBA, &HBE, &H7E, &H7F, &HBF, &H7D, &HBD, &HBC, &H7C, &HB4, &H74, &H75, &HB5, &H77, &HB7, &HB6, &H76, &H72, &HB2, &HB3, &H73, &HB1, &H71, &H70, &HB0, &H50, &H90, &H91, &H51, &H93, &H53, &H52, &H92, &H96, &H56, &H57, &H97, &H55, &H95, &H94, &H54, &H9C, &H5C, &H5D, &H9D, &H5F, &H9F, &H9E, &H5E, &H5A, &H9A, &H9B, &H5B, &H99, &H59, &H58, &H98, &H88, &H48, &H49, &H89, &H4B, &H8B, &H8A, &H4A, &H4E, &H8E, &H8F, &H4F, &H8D, &H4D, &H4C, &H8C, &H44, &H84, &H85, &H45, &H87, &H47, &H46, &H86, &H82, &H42, &H43, &H83, &H41, &H81, &H80, &H40)End Function2)窗体:FORM1,上面放置的控件如下:Begin VB.Form frmComCaption = "Form1"ClientHeight = 8235ClientLeft = 3885ClientTop = 2250ClientWidth = 6810LinkTopic = "Form1"ScaleHeight = 8235ScaleWidth = 6810Begin VB.TextBox txtReceive ‘注:放置接收上来的IB0数据Height = 495Left = 1200TabIndex = 2Top = 2280Width = 1335EndBegin mandButton Command1Caption = "读取IB0"Height = 495Left = 2760TabIndex = 1Top = 2280Width = 1695EndBegin mandButton cmdSDOCaption = "置位Q1.1"Height = 495Left = 2160TabIndex = 0Top = 3720Width = 1575EndBegin MSCommLib.MSComm ComK3Left = 480Top = 1080_ExtentX = 1005_ExtentY = 1005_V ersion = 393216DTREnable = -1 'TrueEnd①Form_Load事件,在此主要是实现了打开并初始化串口Private Sub Form_Load()With ComK3.CommPort = 1.Settings = "19200,N,8,1".InputMode = comInputModeBinary '二进制收发.InBufferSize = 512.OutBufferSize = 512If (Not .PortOpen) Then .PortOpen = True End WithEnd Sub②Form_UnLoad事件,在此主要是关闭串口Private Sub Form_Unload(Cancel As Integer)If (ComK3.PortOpen) ThenComK3.PortOpen = FalseEnd IfEnd Sub③“置位Q1.1”按钮单击事件'设置Q1.1为1Private Sub cmdSDO_Click()Dim btSend(8) As BytebtSend(0) = &H1 '目标站号btSend(1) = &H5 '功能码btSend(2) = &H0 'Q1.1地址(0009)高字节btSend(3) = &H9 'Q1.1地址(0009)低字节btSend(4) = &HFF '强制值高字节btSend(5) = &H0 '强制值低字节Dim crcDim btCRCHi As Byte, btCRCLo As Bytecrc = CalCRC16Fast(btSend, 6, btCRCLo, btCRCHi)btSend(6) = btCRCHibtSend(7) = btCRCLoComK3.Output = CV ar(btSend)End Sub④“读取IB0”按钮单击事件'查表知I0.0的modbus地址为0000,从I0.0开始读取连续8位Private Sub Command1_Click()'发请求Dim btSend(8) As BytebtSend(0) = &H1 '目标站号btSend(1) = &H2 '功能码btSend(2) = &H0 'I0.0地址(0000)高字节btSend(3) = &H0 'i0.0地址(0000)低字节btSend(4) = &H0 '读取个数高字节btSend(5) = &H8 '读取个数低字节Dim crcDim btCRCHi As Byte, btCRCLo As Bytecrc = CalCRC16Fast(btSend, 6, btCRCLo, btCRCHi)btSend(6) = btCRCHibtSend(7) = btCRCLoComK3.Output = CV ar(btSend)'注意下面编写的接收过程很简单,要编写实际应用的监控程序来说需要更完善Dim btReceive As V ariantWith ComK3DoDoEventsLoop Until .InBufferCount = 6.InputLen = 6btReceive = .InputIf btReceive(1) = &H2 Then '若正确,返回帧的第2个字节为功能码.实际上,此处应首先进行CRC校验txtReceive.Text = Hex$(btReceive(3))End IfEnd WithEnd Sub。
基于Matlab GUI串口通信的实时温度监控系统设计薛飞;杨友良;孟凡伟;董福涛【摘要】为提高温度监控系统中数据处理速度和软件开发效率,设计了基于Matlab图形用户界面(GUI)的温度实时监控系统.系统利用Matlab串口工具箱,以Modbus协议为通信协议,通过计算机控制岛电SRS13A型温控器,实现了在金属加热过程中对其表面温度值的实时监控.系统软件界面简洁,操作方便,内存占用小,通过参数配置可实现多种工作方式.实验测试结果表明,系统运行稳定,以1s的采样间隔和0.1℃的测量精度,快速准确地绘制了系统在不同参数配置下的温度响应曲线.【期刊名称】《计算机应用》【年(卷),期】2014(034)001【总页数】5页(P292-296)【关键词】Matlab图形用户界面;Modbus协议;串口通信;温度测量;实时监控【作者】薛飞;杨友良;孟凡伟;董福涛【作者单位】河北联合大学电气工程学院,河北唐山 063000;河北联合大学电气工程学院,河北唐山 063000;河北联合大学电气工程学院,河北唐山 063000;轧制技术及连轧自动化国家重点实验室(东北大学),沈阳 110819【正文语种】中文【中图分类】TP302.1;TP277.2温度的稳定控制是冶金生产过程中的重要环节。
温度控制器作为温控系统中常用的智能设备,通常以串口通信实现与计算机之间的信息传递。
它的通信效率不仅决定了温控过程中温控器的响应速度和温控精度,也直接影响着整个生产过程的运行效果和产品质量[1]。
近年来,国内外研究学者分别在不同软件平台上实现了计算机与温控器的串口通信,并在研究温控系统性能方面取得了一定成果。
Popovic等[2]利用ABB公司的可编程逻辑控制器(Programmable Logic Controller, PLC)以一种简便的方式实现了上位机软件与温控器之间的数据通信,保证了温控系统性能指标的同时简化了软件开发程序。
空压机远程监控系统的设计与实现作者:张吉同来源:《山东工业技术》2016年第05期摘要:本文通过对压风机远程监控所使用的硬件结构、连接、配置以及对modbus通信协议进行论述;同时使用VB编程语言对上位机的软件组态进行了详细的设计和实现。
关键词:压风机;Modbus;串口DOI:10.16640/ki.37-1222/t.2016.05.2480 引言空压机是煤矿生产的重要组成部分,是煤矿机电的四大设备之一,它担负着为煤矿的所有风动设备提供动力来源以及井下压风自救的气源,它的安全经济运行对煤矿安全生产起着至关重要的作用。
长期以来煤矿空压机的监控大部分都是采用就地的模式,每个压风机机房需要24小时人工值守。
但是由于空压机的高噪音,给工人的身心健康造成严重污染。
随着通信技术、控制技术和计算机技术的发展,实现空压机系统远程监控成为了可能,也体现了“以人为本”的管理理念,也是实现无人值守减员增效的数字化矿山的要求。
1 系统架构空压机远程监控系统主要有三层结构:设备层、监控分站、远程监控平台。
设备层主要是空压机上安装的各种传感器,负责空压机主要参数的采集,其主要包括温度传感器、压力传感器、电流电压采集器等。
监控分站每台压风机都采用一台PLC做为监控分站,主要负责压风机各个传感器采集数据的收集,并在就地模式下可对压风机各种采集数据进行加工处理、显示、报警、并提供远程通信接口等,并可实现对单台压风机进行启停等控制功能。
远程监控平台是利用ATC-1000设备把RS485串口转换为RJ45网口,并接入交换机,通过矿地面工业环网把各台压风机的信息传输到矿调度中心的上位机电脑,实现对压风机的远程监测和控制功能。
系统组成如图1所示:2 硬件系统连接及配置因为每台压风机都提供了一个RS485的串行接口,所以每一台压风机都要进行编号,即每台压风机的通信地址。
编号从第一台压风机001开始到最后一台压风机004结束。
接着使用两根带屏蔽层的电缆把四台压机并联起来,接入ACT-1000的两个RS485的接线柱上,然后通过ACT-1000的RJ45接口接入交换机,再通过网线接入地面环网交换机进入环网,通过光线环网进入监控中心机房的服务器。
基于VB的台达PLC与监控计算机的串行通信实现中达电通股份有限公司-—--中达电通上海机电PLC产品处王乃全Implementation of Serial Communication Between Monitoring Computer and Delta PLC Based on Visual BasicWang Naiquan摘要:PLC直接与现场控制层的检测仪器仪表设备连接,是底层控制网络的组成部分,是工厂自动化系统的基石,因此实现与监控层计算机的通信对系统的优化运行有重要意义。
文章基于VB讨论台达DVP PLC与监控计算机的通信问题.关键词:VB 通信协议可编程控制器Abstract: The PLC is a composing part of Infranet,it links to the measuring instrument and device in field control layer directly,and is the footstone of factory automation system. Therefore it is very important to realize the communication between PLC and monitoring layer computer for optimization of syste running. The paper discussed the related communication problems between Delta DVP PLC and monitoring computer based on Visual Basic.Key Words: Visual Basic Communication protocal Programable logic controller[中图分类号]TP273 [文献标识码]B 文章编号1 引言现场设备层中的设备种类繁多,有传感器、启动器、驱动器、I/O部件、变送器、阀门等等,当然也包括现场检测仪器仪表设备。
最近,本人为了实现电脑与Delta V FD-M变频器通讯,特意用VB6.0编了一个Modbus协议通讯软件。
这只是一个测试版,但Modbus的ASCII协议和RTU协议都已经实现。
现在将源程序上传,希望可以帮助到有需要的朋友,谢谢!另外,假如你觉得有更好的想法,欢迎指教。
如果对本程序有任何意见和建议,也可以一起讨论,共同进步。
大家多多支持俺啊。
附:VB6源程序Option ExplicitPrivate Text1text As StringPrivate RTUCRC As String'串口选择Private Sub Combo1_Click()mPort = Combo1.ListIndex + 1End Sub'数据位改变< span style="color: #008000;">Private Sub Combo2_Click()Call settingEnd Sub'波特率改变< span style="color: #008000;">Private Sub Combo3_Click()Call settingEnd Sub'奇偶校验改变< span style="color: #008000;">Private Sub Combo4_Click()Call settingEnd Sub'停止位改变< span style="color: #008000;">Private Sub Combo5_Click()Call settingPrivate Sub setting()MSComm1.Settings = CStr(Combo3.Text) & ","& CStr(Combo4.Text) & ","& CStr(C ombo2.Text) _& ","& CStr(Combo5.Text)End Sub'打开关闭串口< span style="color: #008000;">Private Sub Command1_Click()On Error Resume NextIf MSComm1.PortOpen = False ThenMSComm1.PortOpen = TrueElseMSComm1.PortOpen = FalseEnd IfIf MSComm1.PortOpen Then'打开关闭按钮显示文字及combo1使能Command1.Caption = "关闭串口"Combo1.Enabled = FalseElseCommand1.Caption = "打开串口"Combo1.Enabled = TrueEnd IfIf Err Then'打开串口失败,则显示出错信息MsgBox Error$, 48, "错误信息"Exit SubEnd IfEnd Sub'10转16进制< span style="color: #008000;">Private Sub Command2_Click(Index As Integer)On Error Resume NextText4.Text = Hex(Text3.Text)If Err Then''则显示出错信息< span style="color: #008000;">MsgBox Error$, 48, "错误信息"Exit SubEnd If'16转10进制< span style="color: #008000;">Private Sub Command3_Click()Dim a As Longa = Val("&H"& CStr(Text4.Text))Text3.Text = aEnd Sub'手动串口发送< span style="color: #008000;">Private Sub Command4_Click()If MSComm1.PortOpen = False ThenMsgBox"请先打开串口< span style="color: #800000;">", , "错误信息" Exit SubEnd IfCall sentsubEnd Sub'清除接收窗< span style="color: #008000;">Private Sub Command5_Click()Text2.Text = ""End SubPrivate Sub Command6_Click()Unload MeEnd SubPrivate Sub Command7_Click()On Error Resume NextDim STP As StringSTP = CStr(Chr(2)) & "010001"& CStr(Chr(3)) & "25"MSComm1.Settings = "9600,N,7,2"MSComm1.PortOpen = TrueMSComm1.Output = STPMSComm1.PortOpen = FalseIf Err Then'打开串口失败,则显示出错信息MsgBox Error$, 48, "错误信息"Exit SubEnd IfEnd SubPrivate Sub Command8_Click()On Error Resume NextDim FWD As StringFWD = CStr(Chr(2)) & "010101"& CStr(Chr(3)) & "26" MSComm1.Settings = "9600,N,7,2"MSComm1.PortOpen = TrueMSComm1.Output = FWDMSComm1.PortOpen = FalseIf Err Then'打开串口失败,则显示出错信息MsgBox Error$, 48, "错误信息"Exit SubEnd IfEnd SubPrivate Sub Command9_Click()On Error Resume NextDim REV As StringREV = CStr(Chr(2)) & "010201"& CStr(Chr(3)) & "27" MSComm1.Settings = "9600,N,7,2"MSComm1.PortOpen = TrueMSComm1.Output = REVMSComm1.PortOpen = FalseIf Err Then'打开串口失败,则显示出错信息MsgBox Error$, 48, "错误信息"Exit SubEnd IfEnd Sub'窗口加载Private Sub Form_Load()Dim d%For d = 1To16Combo1.AddItem ("COM"& CStr(d))NextCombo1.ListIndex = 0Combo2.AddItem "6"Combo2.AddItem "7"Combo2.AddItem "8"Combo2.ListIndex = 2Combo3.AddItem "110" Combo3.AddItem "330" Combo3.AddItem "1200" Combo3.AddItem "2400" Combo3.AddItem "4800" Combo3.AddItem "9600" Combo3.AddItem "19200" Combo3.AddItem "38400" Combo3.AddItem "56000" Combo3.AddItem "57600" Combo3.AddItem "115200" Combo3.ListIndex = 5Combo4.AddItem "n" Combo4.AddItem "o" Combo4.AddItem "e" Combo4.ListIndex = 0Combo5.AddItem "1" Combo5.AddItem "2" Combo5.ListIndex = 0For d = 0To254Combo6.AddItem dNextCombo6.ListIndex = 1Text1.Text = "010*********" Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = "1000"Text6.Text = "06"Text7.Text = "0"Text8.Text = "1"Option1.value = TrueOption3.value = TrueOption7.value = TrueOption9.value = TrueIf MSComm1.PortOpen = False ThenCommand1.Caption = "打开串口"ElseCommand1.Caption = "关闭串口"End IfEnd Sub'串口接收程序< span style="color: #008000;">Private Sub MSComm1_OnComm()Dim Hexchr As String, hexstring As String, i As Integer, j As Integer, hexdisp As Str ingIf Option8.value Thenhexstring = MSComm1.Input '十六进制显示< span style="color: #008000;">i = Len(hexstring)For j = 1To iHexchr = Mid(hexstring, j, 1)If Hex(Asc(Hexchr)) < 16ThenText2.Text = Text2.Text & "0"& Hex(Asc(Hexchr)) & " "ElseText2.Text = Text2.Text & Hex(Asc(Hexchr)) & " "End IfNext jText2.Text = Text2.Text & CStr(Chr(13)) & CStr(Chr(10))ElseText2.Text = Text2.Text & MSComm1.Input & CStr(Chr(13)) & CStr(Chr(10)) 'ASCII 码显示< span style="color: #008000;">End IfEnd Sub'手动发送选择< span style="color: #008000;">Private Sub Option1_Click()If Option1.value = True ThenTimer1.Enabled = FalseCommand4.Enabled = TrueElseTimer1.Enabled = TrueCommand4.Enabled = FalseEnd IfEnd Sub'Delta ASCII发送协议Private Sub Option10_Click()Combo6.Enabled = TrueText6.Enabled = TrueText7.Enabled = TrueText8.Enabled = TrueLabel10.Enabled = TrueLabel11.Enabled = TrueLabel12.Enabled = TrueLabel13.Enabled = TrueOption6.Enabled = FalseOption7.Enabled = FalseOption11.value = TrueCombo2.ListIndex = 1Combo5.ListIndex = 1Text1.Enabled = FalseLabel14.Enabled = FalseFrame7.Visible = TrueEnd Sub'自动发送选择< span style="color: #008000;"> Private Sub Option2_Click()If Option2.value = True ThenTimer1.Enabled = TrueCommand4.Enabled = FalseElseTimer1.Enabled = FalseCommand4.Enabled = TrueEnd IfEnd SubPrivate Sub Option3_Click() 'Non选项< span style="color: #008000;"> Combo6.Enabled = FalseText6.Enabled = FalseText7.Enabled = FalseText8.Enabled = FalseLabel10.Enabled = FalseLabel11.Enabled = FalseLabel12.Enabled = FalseLabel13.Enabled = FalseOption6.Enabled = TrueOption7.Enabled = TrueCombo2.ListIndex = 2Combo5.ListIndex = 0Text1.Enabled = TrueLabel14.Enabled = TrueFrame7.Visible = FalseEnd SubPrivate Sub Option4_Click() 'ASCII选项< span style="color: #008000;"> Combo6.Enabled = TrueText6.Enabled = TrueText7.Enabled = TrueText8.Enabled = TrueLabel10.Enabled = TrueLabel11.Enabled = TrueLabel12.Enabled = TrueLabel13.Enabled = TrueOption6.Enabled = FalseOption7.Enabled = FalseCombo2.ListIndex = 1Combo5.ListIndex = 1Text1.Enabled = FalseLabel14.Enabled = FalseFrame7.Visible = FalseEnd SubPrivate Sub Option5_Click() 'RTU选项< span style="color: #008000;"> Combo6.Enabled = TrueText6.Enabled = TrueText7.Enabled = TrueText8.Enabled = TrueLabel10.Enabled = TrueLabel11.Enabled = TrueLabel12.Enabled = TrueLabel13.Enabled = TrueOption6.Enabled = FalseOption7.Enabled = FalseCombo2.ListIndex = 2Combo5.ListIndex = 1Text1.Enabled = FalseLabel14.Enabled = FalseFrame7.Visible = FalseEnd Sub'发送时间间隔调整输入< span style="color: #008000;">Private Sub Text5_Change()Dim number As StringDim num As IntegerDim numcyc As Integernum = Len(Text5.Text)For numcyc = 1To numnumber = Mid(Text5.Text, numcyc, 1)Select Case InStr("0123456789", number)Case0MsgBox"输入时间间隔错误,请重新输入", , "错误信息"Exit SubEnd SelectNextTimer1.Interval = Text5.TextEnd Sub'自动发送定时器< span style="color: #008000;">Private Sub Timer1_Timer()If MSComm1.PortOpen ThenCall sentsubEnd IfEnd Sub'状态刷新定时器< span style="color: #008000;">Private Sub Timer2_Timer()StatusBar1.Panels(1).Text = "串口选择:< span style="color: #800000;">" & CStr(Comb o1.Text)StatusBar1.Panels(2).Text = "串口设置:< span style="color: #800000;">" & CStr(MSC omm1.Settings)StatusBar1.Panels(3).Text = "串口状态:< span style="color: #800000;">" & CStr(MSC omm1.PortOpen)End Sub'串口发送子程序Private Sub sentsub()Dim optioncase%If Option3.value Then optioncase = 1If Option4.value Then optioncase = 2If Option5.value Then optioncase = 3If Option10.value Then optioncase = 4Select Case optioncaseCase1If Option6.value ThenText1text = Text1.TextCall HexsentElseText1text = Text1.TextCall ASCIIsentEnd IfCase2Call incorporate '将输入的十进制从机地址、命令、资料地址和资料内容合并成字符串Call ASCIIcheckCall ASCIIsentCase3Call incorporate '将输入的十进制从机地址、命令、资料地址和资料内容合并成字符串Call RTUcheckCall HexsentCase4Call incorporate1 '将输入的十进制从机地址、命令、资料地址和资料内容合并成字符串Call deltaASCIICall ASCIIsentEnd SelectEnd Sub'十六进制发送< span style="color: #008000;">Private Sub Hexsent()Dim hexchrlen%, Hexchr As String, hexcyc%, hexmid As Byte, hexmiddle As String Dim hexchrgroup() As Byte, i As Integerhexchrlen = Len(Text1text)For hexcyc = 1To hexchrlen '检查Text1文本框内数值是否合适Hexchr = Mid(Text1text, hexcyc, 1)If InStr("0123456789ABCDEFabcdef", Hexchr) = 0ThenMsgBox"无效的数值,请重新输入< span style="color: #800000;">", , "错误信息" Exit SubEnd IfNextReDim hexchrgroup(1To hexchrlen \ 2) As ByteFor hexcyc = 1To hexchrlen Step2'将文本框内数值分成两个、两个i = i + 1Hexchr = Mid(Text1text, hexcyc, 2)hexmid = Val("&H"& CStr(Hexchr))hexchrgroup(i) = hexmid'MSComm1.Output = CStr(hexmid)NextMSComm1.Output = hexchrgroupEnd Sub'ASC码发送< span style="color: #008000;">Private Sub ASCIIsent()MSComm1.Output = Text1textEnd Sub'ASC校验,此段程序计算出LRC校验值,并加上字头和字尾Private Sub ASCIIcheck()Dim a%, b%, chrnum%, Lrcbyte As StringDim checksum%, char%, AscLrc%, Lrc%chrnum = Len(Text1text)For a = 1To chrnum Step2char= Val("&H"& CStr(Mid(Text1text, a, 2))) '两个两个的取字符< span style="color: #008000;">checksum = checksum + char'全部加起来< span style="color: #008000;">NextAscLrc = checksum Mod&H100 '取255的余数< span style="color: #008000;">Lrc = (&HFF - AscLrc) + 1'取二次补If Lrc < 16Then'此段程序是判断Hex(lrc)是否是一位数,Lrcbyte = "0"+ CStr(Hex(Lrc)) '如果是的话,前面加0;否则不加零ElseLrcbyte = CStr(Hex(Lrc))End IfText1text = CStr(Chr(58)) & CStr(Text1text) & Lrcbyte & CStr(Chr(13)) & CStr(Chr(1 0))End Sub'DeltaASCII校验,此段程序计算出LRC校验值,并加上字头和字尾Private Sub deltaASCII()Dim a%, b%, chrnum%, Lrcbyte As StringDim checksum%, char%, Lrc%chrnum = Len(Text1text)For a = 1To chrnumchar= Asc(Mid(Text1text, a, 1)) '两个两个的取字符< span style="color: #008000;"> checksum = checksum + char'全部加起来< span style="color: #008000;">NextLrc = (checksum + &H3) Mod&H100 '取255的余数< span style="color: #008000;"> If Lrc < 16Then'此段程序是判断Hex(lrc)是否是一位数,Lrcbyte = "0"+ CStr(Hex(Lrc)) '如果是的话,前面加0;否则不加零ElseLrcbyte = CStr(Hex(Lrc))End IfText1text = CStr(Chr(2)) & CStr(Text1text) & CStr(Chr(3)) & LrcbyteEnd Sub'RTU校验< span style="color: #008000;">Private Sub RTUcheck()Dim CRC() As ByteDim d(5) As ByteDim string1 As StringDim j As Integer, chrlength As Integer, temp As Stringstring1 = Text1textchrlength = Len(string1)For j = 0To chrlength / 2- 1temp = Mid(string1, j * 2+ 1, 2)d(j) = Val("&H"& temp)NextRTUCRC = CRC16(d) '调用CRC16计算函数, CRC(0)为高位, CRC(1)为低位Text1text = Text1text & RTUCRCEnd SubPrivate Sub incorporate() '将输入的十进制从机地址、命令、资料地址和资料内容合并成字符串Dim wholechar As String, wc%, wcyc%, wchar As StringDim SID As String, Cmd As String, InfoAdd As String, data As StringDim SIDnum%, Cmdnum%, InfoAddNum%, Datanum%On Error Resume Nextwholechar = CStr(Combo6.Text) & CStr(Text6.Text) & CStr(Text7.Text) & CStr(Text8.T ext)wc = Len(wholechar)For wcyc = 1To wcwchar = Mid(wholechar, wcyc, 1)If InStr("0123456789", wchar) = 0ThenMsgBox"输入错误,请重新输入< span style="color: #800000;">", , "错误提示"Exit SubEnd IfNextSIDnum = Len(CStr(Hex(Combo6.Text)))Select Case SIDnumExit SubCase1SID = "0"& CStr(Hex(Combo6.Text)) Case2SID = CStr(Hex(Combo6.Text))End SelectCmdnum = Len(CStr(Hex(Text6.Text))) Select Case CmdnumCase0Exit SubCase1Cmd = "0"& CStr(Hex(Text6.Text)) Case1Cmd = CStr(Hex(Text6.Text))End SelectInfoAddNum = Len(CStr(Hex(Text7.Text))) Select Case InfoAddNumCase0Exit SubCase1InfoAdd = "000"& CStr(Hex(Text7.Text)) Case2InfoAdd = "00"& CStr(Hex(Text7.Text)) Case3InfoAdd = "0"& CStr(Hex(Text7.Text)) Case4InfoAdd = CStr(Hex(Text7.Text))End SelectDatanum = Len(CStr(Hex(Text8.Text))) Select Case DatanumCase0Exit Subdata = "000"& CStr(Hex(Text8.Text))Case2data = "00"& CStr(Hex(Text8.Text))Case3data = "0"& CStr(Hex(Text8.Text))Case4data = CStr(Hex(Text8.Text))End SelectIf Err Then'显示出错信息< span style="color: #008000;">MsgBox Error$, 48, "错误信息"Exit SubEnd IfText1text = CStr(SID) & CStr(Cmd) & CStr(InfoAdd) & CStr(data)End SubPrivate Sub incorporate1() '将输入的十进制从机地址、命令、资料地址和资料内容合并成字符串Dim wholechar As String, wc%, wcyc%, wchar As StringDim SID As String, Cmd As String, InfoAdd As String, data As StringDim SIDnum%, Cmdnum%, InfoAddNum%, Datanum%On Error Resume Nextwholechar = CStr(Combo6.Text) & CStr(Text7.Text) & CStr(Text8.Text)wc = Len(wholechar)For wcyc = 1To wcwchar = Mid(wholechar, wcyc, 1)If InStr("0123456789", wchar) = 0ThenMsgBox"输入错误,请重新输入< span style="color: #800000;">", , "错误提示"Exit SubEnd IfNextSIDnum = Len(CStr(Hex(Combo6.Text)))Select Case SIDnumCase0Case1SID = "0"& CStr(Hex(Combo6.Text)) Case2SID = CStr(Hex(Combo6.Text))End Select'Cmdnum = Len(CStr(Hex(Text6.Text)))'Select Case Cmdnum'Case 0' Exit Sub'Case 1' Cmd = "0" & CStr(Hex(Text6.Text))'Case 1' Cmd = CStr(Hex(Text6.Text))'End SelectInfoAddNum = Len(CStr(Hex(Text7.Text))) Select Case InfoAddNumCase0Exit SubCase1InfoAdd = "0"& CStr(Hex(Text7.Text)) Case2InfoAdd = CStr(Hex(Text7.Text))End SelectDatanum = Len(CStr(Hex(Text8.Text))) Select Case DatanumCase0Exit SubCase1data = "000"& CStr(Hex(Text8.Text)) Case2data = "00"& CStr(Hex(Text8.Text)) Case3data = "0"& CStr(Hex(Text8.Text))Case4data = CStr(Hex(Text8.Text))End SelectIf Err Then'显示出错信息< span style="color: #008000;">MsgBox Error$, 48, "错误信息"Exit SubEnd IfIf Option11.value ThenCmd = "08"Text1text = CStr(SID) & CStr(Cmd) & CStr(InfoAdd)ElseCmd = "07"Text1text = CStr(SID) & CStr(Cmd) & CStr(InfoAdd) & CStr(data)End IfEnd SubPrivate Function CRC16(data() As Byte) As StringDim CRC16Lo As Byte, CRC16Hi As Byte'CRC寄存器< span style="color: #00800 0;">Dim CL As Byte, CH As Byte'多项式码&HA001Dim CRCLo As String, CRCHi As StringDim SaveHi As Byte, SaveLo As ByteDim i As IntegerDim Flag As IntegerCRC16Lo = &HFFCRC16Hi = &HFFCL = &H1CH = &HA0For i = 0To UBound(data)CRC16Lo = CRC16Lo Xor data(i) '每一个数据与CRC寄存器进行异或For Flag = 0To7SaveHi = CRC16HiSaveLo = CRC16LoCRC16Hi = CRC16Hi \ 2'高位右移一位< span style="color: #008000;">CRC16Lo = CRC16Lo \ 2'低位右移一位< span style="color: #008000;">If((SaveHi And&H1) = &H1) Then'如果高位字节最后一位为1< span style="color: #008000;">CRC16Lo = CRC16Lo Or&H80 '则低位字节右移后前面补1< span style="color: #008 000;">End If'否则自动补0< span style="color: #008000;">If((SaveLo And&H1) = &H1) Then'如果LSB为1,则与多项式码进行异或CRC16Hi = CRC16Hi Xor CHCRC16Lo = CRC16Lo Xor CLEnd IfNext FlagNext iIf Len(Hex(CRC16Hi)) = 1ThenCRCHi = "0"+ Hex(CRC16Hi)ElseCRCHi = Hex(CRC16Hi)End IfIf Len(Hex(CRC16Lo)) = 1ThenCRCLo = "0"+ Hex(CRC16Lo)ElseCRCLo = Hex(CRC16Lo)End IfCRC16 = CRCLo + CRCHiEnd Function。
《基于Modbus的数控系统监控功能设计与实现》一、引言随着工业自动化技术的不断发展,数控系统在制造业中的应用越来越广泛。
为了提高数控系统的可靠性和效率,监控功能的设计与实现显得尤为重要。
Modbus作为一种常用的工业通信协议,具有广泛的兼容性和可靠性,因此在数控系统监控功能的设计与实现中得到了广泛应用。
本文将介绍基于Modbus的数控系统监控功能的设计与实现,为相关领域的研究和应用提供参考。
二、系统概述本系统基于Modbus通信协议,实现对数控系统的实时监控。
系统主要由上位机监控软件、Modbus通信模块、数控系统三部分组成。
上位机监控软件负责数据的采集、处理和显示,Modbus通信模块负责与数控系统进行数据交换,数控系统则负责执行监控指令。
三、功能设计1. 数据采集:通过Modbus通信模块实时采集数控系统的各种数据,包括机床状态、电机运行数据、加工参数等。
2. 数据处理:上位机监控软件对采集到的数据进行处理,包括数据格式转换、数据存储、数据分析等。
3. 实时显示:将处理后的数据以图表、曲线等形式实时显示在监控界面上,方便操作人员查看。
4. 报警功能:当数控系统出现异常时,系统应能及时发出报警,提醒操作人员进行处理。
5. 远程控制:通过上位机监控软件实现远程控制功能,包括远程启动、停止、急停等操作。
6. 数据存储与查询:将历史数据存储在数据库中,方便后期查询和分析。
四、实现方法1. 硬件设计:硬件部分主要包括Modbus通信模块和数控系统。
Modbus通信模块应具备高速、稳定的数据传输能力,以保证数据的实时性和准确性。
数控系统应支持Modbus通信协议,以便与上位机监控软件进行数据交换。
2. 软件设计:软件部分主要包括上位机监控软件和Modbus 通信协议的实现。
上位机监控软件应具备友好的界面和丰富的功能,方便操作人员使用。
Modbus通信协议的实现应遵循标准规范,以保证数据的可靠传输。
3. 数据处理与显示:上位机监控软件通过Modbus通信模块实时采集数据,对数据进行处理后以图表、曲线等形式显示在界面上。
执行ModBus RTU协议应答的设备与VB的连接实例
关键词:ModBus RTU VB 通信OCX控件
ModBus RTU协议广泛应用于工业现场,监控软件除了使用商业组态软件外,使用VB是最基础且简单可行的办法,但对于不熟悉VB代码的工控界朋友也是个繁琐事,为此这里简单介绍一种可行的办法,使用ytmc.ocx控件!
l无需了解规约,不用一条条看规约,然后去编程,把这个任务交给ytmc控件。
l不用去编写繁琐的程序代码,只需填写控件属性。
l支持最大256个从机设备轮询。
关于该控件如何使用,下面我们来看个实例:
1、新建工程窗口,添加OCX组件
2、设置添加控件的属性
3、添加3局语句即可,仅此3句!
* 指定模块类型,自定义模块请参考说明书添加
ytmc1.ModuleName(address) = “M6001TRv100"
* 启动通信
call ytmc1.StartComm
* 定时刷新
call DMSS_All()
4、至此设置完毕,连接设备运行即可查看效果!
控件下载链接:/item.htm?id=19191725736 经检测有效!。
《工业控制计算机》2018年第31卷第8期为了节目播出的需要,直播室里面一般会放置比较多的播出设备,如工作站、调音台等,这些播出设备都是由半导体或者其他特殊电子器件组成的精密设备,所以其所需的运行物理环境是要求非常严格的。
由于受客观条件的限制,如工程成本、楼层高度,这些场所往往无法安装中央空调或者智能型的分体空调。
因此,为了既能提高空调运行的可靠性和稳定性,确保播出设备的正常运行,又能起到节能减排的效果,可以采用通过加装分体空调远程控制器,利用VB6.0开发上位机监控软件,本文设计开发了一种适合于广播电视系统的分体空调远程智能化管理系统。
1系统结构设计基于VB6.0和Modbus-RTU 通讯规约的直播室的分体空调智能监控系统主要是以普通PC 机作为监控主站,每个直播室的主备空调远程控制器作为从站,监控主站通过RS485总线转ZigBee 实现无线连接各个从站,主从站之间采用Modbus-RTU 通讯规约进行传输数据,系统架构由终端控制层、网络传输层和监控管理层组成,每层实现如下功能,总体设计架构方案如图1所示。
图1系统总体架构图1)终端控制层主要是完成对每个直播室两台分体空调运行状态参数采集,通过RS485转ZigBee 模块通过无线网络方式上传数据,同时接收上位机发送的远程控制空调的指令,实现分体空调的远程开关机、改变运行模式、调节温度、改变风速等功能。
2)网络传输层主要是上位机监控管理层和终端控制层之间数据传输桥梁的作用,由从节点,路由器节点和主节点组成,从节点采集到空调运行参数通过无线网络传送到主节点,再由主节点转换成RS485总线上传到上位机,路由器节点是用来解决扩大通信距离的问题。
3)监控管理层主要是完成空调运行参数的自动化处理和保存,同时发送控制指令实现分体空调的远程控制。
2硬件配置系统硬件的组成安装需要保证不影响原有直播室的声学效果,同时需要保持原有分体空调系统原有遥控器的本地控制功能。
本系统的硬件部分主要是空调远程控制器、ZigBee 模块和PC 机组成,具体技术参数要求如表1所示。
表1硬件配置表3Modbus 通讯规约Modbus 通讯规约是目前工业控制领域最通用的通讯规约之一,该协议支持RS485、RS232、以太网通讯接口等,分为RTU 传输模式和ASC Ⅱ码传输模式。
本项目采用的空调远程控制器采用的是通过Modbus-RTU 通讯模式实现与各直播室的分体空调远程控制器进行通信。
具体的读写报文格式举例如下:例1:上位机读取空调远程控制器运行状态:0203000000018439(从机地址02)空调远程控制器从机返回报文:020********D 84利用VB 开发的基于Modbus 规约的直播室分体空调无线智能监控系统杨勇(广西人民广播电台,广西南宁530022)Wireless Intelligent Monitoring System of Split Air Conditionerin Direct Broadcast Room Based on Modbus Protocol Developed by VB摘要:介绍了一种利用ZigBee 无线网络技术和VB6.0可视化编程的优势开发分体空调监控系统的设计方案,实现了对分体空调的无线智能化远程控制。
通过实验表明:不但可以有效提高值班人员工作效率和分体空调运行的可靠性,而且避免了能源的浪费和传统机房布线的繁琐,对于节能减排,节约工程成本和保障安全播出具有重要的现实意义。
关键词:ZigBee ,直播室,分体空调,VB6.0,Modbus 协议,监控系统Abstract 押This paper introduces a design scheme of the control system of air conditioning system based on ZigBee wire⁃less network technology and VB6.0visual programming熏and realizes the wireless intelligent remote control of the split air con⁃ditioner.Experiments show that not only can effectively improve the working efficiency of the personnel on duty and fission air conditioning running reliability熏but also avoid the waste of energy and traditional room wiring of trival熏for energy conservation and emissions reduction熏save engineering cost and guarantee safe broadcasting has important practical significance.Keywords 押ZigBee熏direct broadcast room熏split air conditioner熏VB6.0熏modbus protocol熏monitoringsystem45利用VB 开发的基于Modbus 规约的直播室分体空调无线智能监控系统例2:上位机远程控制空调开关命令:040600000001485F (从机地址04)空调远程控制器从机返回报文:040600000001485F4上位机监控软件开发上位机的监控软件使用的是VB6.0开发的,该编译语言是一种面向对象、结构化、可视化的高级编译设计语言,采用其自带的串口通信控件Microsoft Communication Control (MSComm )建立主从机之间的数据连接。
通过给空调远程控制器备配置的唯一的地址码和Modbus-RTU 通讯规约实现相关数据的写入和读取,实现了对每个直播室的主备分体空调的远程监控,具体监控界面如图2所示。
图2监控界面4.1串口的初始化串口的初始化主要是与空调远程控制器的通讯参数进行匹配完成数据连接的准备工作。
具体的初始化过程代码如下:Private Sub Form_Load穴雪mPort =3MSComm1.RThreshold =1MSComm1.SThreshold =1MSComm1.InputMode =1MSComm1.Settings =″9600熏n熏8熏1″MSComm1.PortOpen =True ……End Sub4.2定期采集空调远程控制器运行状态参数通过VB6.0的定期器Timer1控件实现对分体空调运行参数的周期性采集,在定时器的Timer 事件过程中编译上位机对每一台空调远程控制器发送采集数据的子程序,主要程序代码如下:Dim j As Interger j=0Private Timer1_Timer ()j=j+1Ifj >=14Then j=0’实现定期采集数据conditioner Read (j )’调用与n 号空调远程控制器从机通信的子程序End Sub因为每个空调远程控制器的查询指令除了地址码不一样,其他的指令格式和内容都是相同的,定期采集的子程序主要代码如下:Public Sub conditioner Read (k As Integer )Dim Modbus (7)As ByteModbus (0)=Hex (k )'从机地址号码Modbus (1)=&H3'采用读取寄存器功能Modbus (2)=&H0'寄存器的起始地址高字节Modbus (3)=&H0'寄存器的起始地址低字节Modbus (4)=&H0'寄存器数量高字节Modbus (5)=&H3'寄存器数量低字节Call CRC16(Modbus (),5)'进行CRC16校验Modbus (6)=CRC16Lo'校验位低字节Modbus (7)=CRC16Hi'校验位高字节MSComm1.Output=Modbus Delay (2000)'延时BL=Frm Main.MSComm1.In Buffer Count '说明在接收缓冲区中等待的字符数MSComm1.Input Len=Cmd Lenth If MSComm1.Port Open=True Theninputbuf=MSComm1.Input '将输入缓冲区中的数据存入安全数组中If BL <4Then '数据长度小于4,不正常不处理Exit Sub End If End IfMSComm1.In Buffer Count=0End Sub5结束语本文在基于Modbus-RTU 通讯规约的基础上采用VB6.0开发了直播室分体空调无线监控系统,实现了对直播室分体空调运行状况的无线远程智能化监控。
通过反复实验测试,该系统具有稳定性高、操作简单方便、工程造价低和通用性强等特点,能够很好满足广电系统中直播室或者播出机房中分体空调的实时监控的安全播出需求。
参考文献[1]王兴贵,张明智,杜莹.Modbus RTU 通信协议在智能仪表与工控机通信中的应用[J ].低压电器,2008(2):8-11[2]王念春.基于Modbus 协议的PC 与下位机PLC 间的通信程序[J ].自动化表,2001,22(8):44-46,49[3]谢伟.基于物联网的节能型机房环境控制系统设计实现[D ].成都:西南交通大学,2011[4]魏金文,马维华,吴侨.基于物联网的空调集中控制系统设计与实现[J ].微型电脑应用,2012(6):23-25[5]范逸之.利用Visual Basic 实现串并行通信技术[M ].北京:清华大学出版社,2001[6]微软公司.VB6.0控件参考手册[K ].北京:北京希望电子出版社,1999[7]孟祥剑,黎向阳.基于MODBUS 协议的人机界面和单片机串行通信[J ].重庆理工大学学报(自然科学),2014,28(9):87-91[8]吕国芳,唐海龙,李进.基于Modbus RTU 的串口调试软件的实现[J ].计算机技术与发展,2009,19(9):236-238[收稿日期:2018.3.19]46。