雷 亮(天津水利电力机电研究所,天津 301900)
低压机组控制模块软件开发环境研究
雷亮
(天津水利电力机电研究所,天津 301900)
摘要:本文介绍水轮机低压机组控制装置结构,且在Linux环境下搭建一个为低压机组控制装置搭载的软模块的开发环境,并测试串口数据传输实际情况。
关键词:串口;Linux;Java;控制装置
智能技术已经开始影响世界经济,工业领域的智能化业已突显,水电站的自动化控制集成程度越来越高,发电机组的集中控制越来越趋于专有化、智能化,能够集成信息采集、控制、同期、保护功能于一体的发电机控制模块将会在未来发电机控制领域发挥主导作用。智能模块作为控制主体需要完成各种复杂的功能,对信息交换的要求也就比较高,各功能模块所需数据的获取及共享需要一个可靠的平台,选择一个可靠的信息平台并建立一套完善的信息机制是非常必要的。
建立整个数据集成系统需要选择一个良好的载体平台才能够保证程序良好地运行,选择好数据载体和通讯端口可使模块适应大多数应用场合。
2.1系统平台—Linux
低压机组控制模块的系统平台选择Linux,Linux在家用电脑系统中并没有占有较大份额,但在工业领域中却有着很高的地位,它在可靠性、可伸缩性、运行速度等方面很突出。
首先,Linux是开源的,任何人都可以看它的源代码,这就使得它特别安全,这种安全的特性对于工业领域的安全要求来说是至关重要的,而Windows却不能做到这一点,因为Windows不可能开源,只能不断地打补丁来修补新发现地漏洞,致使系统越来越臃肿。
其次,Linux有着一个很高效地内核,Linux平台对硬件要求较低,而且,可以免费获得许多程序和驱动。Linux对系统内存有着绝对的支配权,并不像Windows那样依赖虚拟内存,可以在相对低配置地平台上完成相对于Windows更多地工作。Windows使用“页面文件”,它的作用是扩展内存,就是说用硬盘虚拟内存的方式来为应用程序提供比内存大的多的运行空间。但这个方式有一个缺点,就是硬盘比内存响应速度慢。所以,如果一台计算机有较少内存时,虚拟内存(就是某一些硬盘空间)就会被频繁使用,结果就使得计算机的运行速度非常慢。尽管用户也可以将“页面文件”调小以希望能降低虚拟内存的份额,但Windows本身却不会响应用户要求,虚拟内存(即页面文件)还是在被使用着。这就是使用Windows的困境之一:用户无法真正掌控系统。而对于Linux,用户可以设置完全不用虚拟内存,也可以设置成先使用内存,不够时再使用虚拟内存。当然也可以设置成尽量使用虚拟内存,留出系统的内存作为它用,用户有决定的权力。
综上所述,低压机组控制模块软件系统选用Linux作为系统平台,可以降低低压机组控制模块运行要求、提高可靠性。
2.2数据载体
低压机组控制模块信息交换平台必须可靠高效,它应该将各种不同类型的数据存储起来,并建立一个系统各功能模块都能识别的统一数据接口,让有权限的模块索取所需数据。数据载体的目的是把信息读取出来,并共享到每个需要数据的模块,我们选择拓展标记语言xml来实现低压机组控制模块数据的共享,此标记语言不仅可以实现数据共享,其用处还有很多:如HTML、留言板、J2EE的WEB配置信息、word和excel、hibernate的*.cfg.xml映射关系存储等。智能模块能读懂这种标记,模块或者模块之间的信息传递可以依靠这种标记来实现,这种不需要体系数据库的数据存储、更新和读取能够更快更有效地将场数据共享。
2.3通讯方式
低压机组控制装置的信息交换支持现阶段流行的方式:RJ45、DB9、USB、can-open接口,其中,USB接口主要设计功能为系统升级或者补充程序编写端口,RJ45用于支持以太网,DB9用于支持采用RS232及RS485两种通讯方式的硬件;can-open用于支持can总线。本文将介绍为模块编写RS485 RTU规约过程中的平台及环境设置。
开发系统选择在SUSELinuxEnterpriseserver 11环境下。测试硬件的串口采用MOXA的UPORT 1150USB转串口产品,串口在现在的工业通讯领域还被经常应用。开发选用的java版本为1.7.0_51,需要下载的支持串口开发的开发包为:RXTX-2.1-7-bins-R2。
为在Linux平台上开发串口驱动,选择支持Linux平台的开发环境——WildFly,即Jboss,它是一个免费的、开放源码J2EE的实现,安装方便,需要内存和硬盘空间较小。
3.1安装/更新所需java到Linux
安装新版本的java(本次为1.7.0_51,安装在/usr/java下),安装完成后根据安装路径设置环境变量,以下设置建议写在bash_profile里以保证每次登录都可以更新内存环境变量,PATH变量用于标识安装java开发工具包(JavaDevelopmentKit,JDK)的位置,而CLASSPATH变量设置为存储.class文件的目录:
(1)设置java_home:exportJAVA_HOME=/usr/java/jdk1.7.0_51
(2)设置java路径:exportPATH=$JAVA_HOME/bin: $PATH
(3)设置java库路径:exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
值得注意的是:必须在PATH变量插入分号和句号,分号是PATH目录中入口之间的分隔符,而插入句号说明是当前目录(符号应是英文状态下输入)。
安装完成后系统默认的java依然是系统最初安装的java1.6,未重启计算机前(或未重新登录前)想要最新安装的java1.7发挥作用,需要在系统配置内设定一些参数。
在登录系统后,键入:java-version来查看现行java的版本,可以用whichjava来确定现行java的安装路径。键入whichjava后得知现行的java安装目录为:/usr/bin/java,而现在需要运行的java安装在/usr/java下,且文件夹名字为jdk1.7.0_51,想要立即使用新版java而不重新登录的话,可以在这里做个链接,系统能找到新安装的java。
要建立链接,首先要进入现行安装目录,键入cd/usr/bin来到安装目录,键入mvjavajava.bakforstore将现在的java隐藏起来,做一个软链接:ln-s /usr/java/jdk1.7.0_51/bin/javajava。此时再次输入whichjava,系统回复:/usr/java/jdk1.7.0_51/bin/java,java,链接已经成功,符合开发要求。
此时,只要指定运行库就能够直接支持java的运行了,因此,要添加CLASSPATH目录的内容。可以在上述的CLASSPATH后面添加,也可以在/etc/profile里添加以下段落来实现系统对java的调用::$JAVA_HOME/jre/lib。系统就可以找到必须的. so文件来支持java运行了。
做完以上工作,必须使配置生效:在/etc/下执行sourceprofile命令(或者在/目录下执行source bash_profile),执行之后键入java-version,系统回复:javaversion1.7.0_51,此时配置java完成。
3.2测试配置串口参数
将MOXAUPORT1150接入系统,即将其USB口插入服务器的USB口,然后在MOXA官网下载此硬件对Linux的驱动,下载驱动版本为:Linux3.x,下载并解压缩,解压缩后可以看到多个文件,其中包含有makefile和mxinstall两个文件,在此目录下执行. /mxinstall来安装UPORT驱动到系统,安装过程中需要确认安全性,按照提示说明更改设置即可。
安装完成后,可以看到UPORT的ACTIVE灯亮,说明安装成功。这时,可以用:dmesg|greptty来查看可用接口,系统回复为:
[0.000000]console[tty0]enabled
[0.475003]serial8250:ttyS0atI/O0x3f8(irq=4) isa16550A
[0.525630]serial8250:ttyS1atI/O0x2f8(irq=3) isa16550A
[0.626041]00:07:ttyS0atI/O0x3f8(irq=4)isa 16550A
[0.626203]00:08:ttyS1atI/O0x2f8(irq=3)isa 16550A
[2083684.682727]usb1-1.1:MOXAUPort1150 converternowattachedtottyUSB0
由于UPORT1150支持RS232和RS485两种硬件平台,所以,系统完成对USB端口的添加后,必须要设置串口属性,设置串口有setserial-gdev/ttys [0|1|2|3],4种方式分别为:
这里测试用两线制RS485,所以设置串口为1模式工作,键入命令:setserial/dev/ttyUSB0port1,执行完毕后,即可实现在串口发送和接收数据了。
3.3安装RXTX
RXTX是系统对串口的驱动必要的开源库,安装后,就可以直接利用事先定义好的串口函数来进行通讯。此库文件包包含有多个文件,其中x86_64-unknown-linux-gun里面存放的就是为SUSE系统准备的库文件,将放在其中的librxtxSrial. so文件拷贝到/usr/java/jdk1.7.0_51/jre/lib/i386下,将RXTXcomm.jar复制到/usr/java/jdk/jre/lib/ext下,就完成了RXTX开源库的安装。
接下来对串口进行协议开发,本次用的是ModbusRTU协议。
(1)定义Modbus的主体功能;
(2)建立数据的发送格式,根据协议要求需要将格式转换成要求的标准格式;
(3)建立RTU的传输函数;
(4)设置端口并建立连所需连接。
部分代码及注释
packageModbusInstance;
publicclassModbus{
/**
*定义功能码和接口函数
*/
publicstaticfinalintdebug=0;
/**
*读保持寄存器功能码。
*/
publicstaticfinalbyteREAD_MULTIPLE_REGISTERS=(byte)0x03;
/**
*读输入寄存器功能码。*/
publicstaticfinalbyteREAD_INPUT_REGISTERS=(byte)0x04;
/**
*写保持寄存器功能码。
*/
publicstaticfinalbyteWRITE_MULTIPLE_REGISTERS=(byte)0x10;
/**
*写线圈状态功能码。
*/
……
建立好读取机制后编译运行,设备运行结果为:
Sent:01030010000445CC
Received:010308000000000000000095
数据1:0;数据2:0;数据3:0;数据4:0;
实际观测UPORT数据发送灯闪烁正常,且监视到数据发送和数据接收,协议符合ModbusRTU,数据可通过串口传输,接下来就是编译和在实际环境下运行。将程序测试用端口在程序中换成实际设备使用端口,将设备(主站)通过RS485连接到测试从站,重新编译且生成可在实际设备上运行的可执行文件。必须保证实际环境Java版本和测试版本一致。
建立java可执行文件,在工程上右键点击export,在弹出的对话框中选择java->RunableJAR file->下一步->Launch configuration选择已测试好的程序且在exportdestination中选择要保存,并勾选libraryhandling中的 Copyrequiredlibraryintoa sub-foldernexttothegeneratedJAR。点击Finish完成,将生成的文件和library文件夹拷贝到实际运行低压机组控制模块上,在终端登录低压机组控制模块的Linux平台用户,采用ssh连接,连接到同一网络后用sshroot@X.X.X.X来实现登录。
登录后在登录环境下输入:java-jar/etc/MBInquire.jar,测试返回为:
Sent:01030010000445CC
Received:010308000000000000000095
数据1:0;数据2:0;数据3:0;数据4:0;。
实际运行与测试时数据相同,设备实际数据可以被正确地读取到一体化设备,且连续测试72h以上数据均可正常读取存储。
在Linux环境下搭建一个为水轮机低压机组控制装置搭载的软模块的软件开发环境是可行的,其串口数据传输稳定可靠。
参考文献:
[1]【美】杰里米.里夫金.第三次工业革命[M].北京:中信出版社,2012:277.
[2]【美】AlapatiSamR.数据库管理艺术[M].北京:人民邮电出版社,2010:7.
[3]王定一,等.水电站计算机监视与控制[M].北京:中国电力出版社,2001:233.
[4]【美】PallaviJain,ShadabSIddiqui.J2EE专业项目实例开发(修订版)[M].北京:中国水利水电出版社,2007:3.
[5]【美】EviNemeth,GarthSnyder,TrentRHein,etal.UNIXand Linux System Administration Handbook[M].4thed.NewJersey:PrenticeHall.
中图分类号:TV736
文献标识码:A
文章编号:1672-5387(2015)03-0038-04
DOI:10.13599/j.cnki.11-5130.2015.03.011
收稿日期:2014-11-17
基金项目:中国水利水电科学研究院科研专项(TJ0145B262014)。
作者简介:雷亮(1985-),男,助理工程师,从事水电厂自动化系统方案设计、设备开发、技术服务及质量管理工作。