引言
随着计算机技术应用的日渐广泛,工业自动化技术也随之不断地向着更高层次的综合自动化方向发展。阀门作为工业自动化中最重要的被控对象之一,如何做到检测和控制的集中化、智能化已经成为了该领域重要的课题。本文设计了一种集保护与控制为一体的基于RS485总线和MODBUSRTU协议的阀门测试系统,该系统能够对多台阀门进行集中式检测,并且可以做到精确控制,保障多台阀门正确高效的运行。
1 方案综述
基于RS485总线和MODBUSRTU协议的阀门测试系统总体方案如图1所示,系统主要由上位机、通信接口、阀门控制器等部分组成。通过RS485总线和基于MODBUSRTU的通信协议来实现上位机与多台阀门控制器之间的信息传输,完成对多台阀门的检测和控制[1]。
图1 阀门测试系统构架
2 系统总体设计
2.1 硬件设计
阀门控制器微控制器采用NXP公司的LPC1766芯片[2]。
本系统主要是计算机串口通过RS232/RS485智能转换器连接多台阀门控制器,对RS485总线上的设备轮流进行通信。因此该智能转换器必须解决两个关键问题,即如何从RS232线上获得电路和RS485接口驱动所需的功率和如何智能控制RS485的收发使能。基于以上几点,本文采用HEXINIII型转换器,它无需任何初始化设置,只需用到RXD(收)、TXD(发)、GND(地)信号,加上独有的内部零延时自动收发转换技术,可满足系统需求。
硬件模块连接如图2所示。
图2 硬件模块连接图
2.2 RS485的MODBUSRTU通信规程设计
本系统主要通过RS485总线向每个阀门控制器发送信息,来集中检测每个阀门当前的状态,并且达到控制的目的。接好RS485连接线,在上位机发送相关命令(基于MODBUS RTU协议)即可控制阀门操作。为了能够达到集中化、智能化的目的,基于MODBUSRTU通信协议设计的通信规程如下[3]。
字符格式:1位起始位、8位数据、无校验、1位停止位,波特率9 600 bps。
主机查询命令格式如下:
从机应答命令格式如下:
地址分配:分机地址0~255,其中0=广播地址,247=从机默认地址,1~247为从机编程地址。
功能表如表1所列。
表1
① 输出状态(Ostate)一个字节(各位1有效,0无效)反映正在执行的状态,如表2所列。
表2
② 输入状态(Instate)一个字节(各位1有效,0无效)反映检测到的状态,如表3所列。
表3
③ 控制寄存器(RegCtrl)控制开关阀及停止操作,RegCtrl控制寄存器值如表4所列。
表4
根据设定的基于RS485的MODBUSRTU通信规程,可以举几个很简单的例子说明上位机与各个阀门控制器之间的通信过程。
当要求地址号01的阀门做开阀操作时,主机会发送01 05 01 02 91 88,即向01号从机发送开阀命令,01号从机接收到该命令后会回复主机01 05 01 02 91 88,同时做开阀操作。当要求读取地址号01的阀门的所有状态信息时,主机会发送01 0A 00 26 A0,命令共5个字节,地址、命令(0AH)、长度分别为1个字节,校验2个字节,表示向01号从机发读取阀门控制器所有信息(除ID号及版本信息外),若01号从机接收到该消息后若向主机发送01 0A 03 32 00 01 F9 80,则表示从机向主机发送开度以及输入/输出状态,并且此时开度为50%,阀门无故障,正在做关阀操作。
2.3 软件设计
如图3所示,以同时连接4台阀门控制器为例,待系统上电,各个模块完成相应的初始化操作。上位机取得各个设备的控制权之后,每个阀门控制器会向上控机返回自己的地址号以及版本信息,上位机确认信息后根据工作需要选择相应的检测和控制方式[4]。
图3 系统软件流程图
根据上图可把整个系统的软件流程具体分为检测模块、控制模块和记忆模块。检测模块主要用于在集中检测中快速高效率地对当前连接的阀门的状态进行检测。控制模块主要是根据检测模块反馈的信息作出相应的控制指令与阀门控制器通信来控制阀门,保障阀门的正常运行。而记忆模块则是为了防止系统突然断电后数据的丢失,将每一个阀门的状态信息和控制信息以日志的形式保存下来存于Excel表格中。
2.3.1 检测模块
检测模块能返回的状态主要分为输出状态和输入状态。其中输出状态表示阀门正在执行的状态,输入状态表示检测到的当前状态。在本系统中,希望保证能集中化地检测出当前所有连接阀门的状态信息。为此在该模块中设计了一个接收线程,当系统初始化返回当前连接阀门的地址信息之后,选择集中检测,根据我们设计的基于RS485的MODBUSRTU阀门通信规程,上位机根据返回的当前所有阀门控制器的地址信息轮流发送0A指令,每一个阀门控制器在接收到信息之后会先进行匹配,成功之后会将自己当前的状态信息发送给上位机,此时的接收线程则是不停地处于监听状态,每当接收到一个不同地址的阀门控制器的反馈消息,就会创建一个属于该阀门的状态显示器对象(CDisplay),并且在该状态显示器中设计了一个仪表盘去显示当前阀门的开度情况,仪表盘的上方和下方分别会显示阀门此时的输出状态和输入状态。
接收线程(TestThread)若查询到新的地址的阀门,则根据该地址信息建立一个对应的状态显示器,并且在该显示器中显示当前阀门状态信息,相关代码如下:
while(1){
if(pInfo->is_thread_close)
return 0;
wCount=100;
bReadStat=ReadFile(hcom,str,wCount,&wCount,NULL);//接收串口数据
if(!bReadStat){
pInfo->pthis->MessageBox("读取失败!串口将关闭");
pInfo->is_Com_Running=false;
pInfo->is_thread_close=true;
}
if(wCount>0){
int k =(int)str[0];
pInfo->pmy_dis[k]->SetInput(&str[0]);//根据地址向显示模块传送对应信息
if(pInfo->pmy_dis[k]->Is_input_Valid()){
pInfo->pthis->InvalidateRect(pInfo->pmy_dis[k]->m_rcclient,true);
pInfo->pthis->GetDlgItem(IDC_EDITk)->SetWindowText("k");//显示阀门地址
}
}
}
2.3.2 控制模块
若当前连接的阀门存在故障,可以通过控制模块发出相应的指令与阀门控制器通信来达到消除故障的目的。因此,如何准确的从多个阀门中找到有故障的阀门并且及时做出必要的控制是本模块的关键。根据设计的基于RS485的MODBUSRTU阀门通信规程,当发出05命令时,RS485总线上的每一个阀门控制器都会接收到该消息,并且根据指令中的地址信息做出匹配。若地址相匹配则该控制器会作出相对应的处理,保障阀门的故障问题快速得到解决。地址匹配没有成功的阀门控制器则会丢弃这个消息,不作任何处理[5]。例如,地址为05的阀门控制器返回的输入状态为10,表示地址为05的阀门出现了漏电的状况,此时控制人员则可通过控制模块控制该阀门做关阀操作,并且请工作人员立即处理。
系统对相关指令的处理代码如下:
m_data_is_renew=true;
cmd_recv=input[1];//功能码信息
recv_addr=input[0];//地址码信息判断指令
switch (cmd_recv){
case 1://作出相应的处理
break;
……
default:
break;
}
2.3.3 记忆模块
为了保障系统的稳定性,必须保存所有阀门每一次的状态信息和控制信息。比如当系统突然断电,若之前没有完成对相关信息的保存,则工作人员不能了解之前阀门状态,无法快速恢复对阀门的操作控制。因此,记忆模块是非常重要的。在检测模块中保存的是所有阀门的操作信息日志,在控制模块中则可以查出具体阀门的操作信息日志。每当RS485总线上存在通信时,记忆模块会对数据进行汇总,提取相应的信息存入Excel表。为了能调用Excel的接口,打开MFC ClassWizard→Automation→Add Class→From a type library,选择[Excel的安装路径]\EXCEL.exe,然后把所有的类都添加进去,头文件为excel.h,源文件为excel.cpp。
首先动态创建一个save.txt的文档并且保存实时的串口信息,然后从save.txt中读入串口信息并且按照自己串口字符的格式进行选择性提取存入save.xls表格,若保存成功则删除save.txt文件节省资源,以达到实时性存取的目的。流程图如图4所示。
图4 记忆模块流程图
3 总结与展望
上位机软件采用VC++6.0进行编制,调用Windows的API函数来实现串口通信。通过RS485总线和MODBUSRTU协议对多台阀门进行组网,上位机对整个系统进行集中式检测,并且提取信息存入Excel表格中,进行数据的汇总。图5为本系统的检测界面,能保证同时集中检测4台阀门的状态信息。图6为记忆模块中的相关日志信息,便于工作人员在异常状态下恢复对阀门的控制。
本文设计的阀门测试系统运行稳定,采用基于RS485总线和MODBUSRTU协议的自定义通信规程,能够集中检测多台阀门状态、并且达到精确控制的目的。本系统是对阀门测试系统向着集中化、智能化发展的一次成功的探索,取得了很好的效果,并且在其他工程项目中也存在一定的参考意义。由于本系统采用的是RS485的总线进行组网通信,考虑到有线网络需要较大工作量的网络铺设等因素,也可以采用无线通信的方式,例如在阀门控制器中利用无线WiFi芯片,通过手机等智能终端进行远程检测和控制,并且可能将成为未来主流的研究方向。
图5 阀门测试系统界面
图6 Excel保存文档