基于Python实现设备控制台的集中控制和管理
2016-07-20张西波
摘 要:利用Nport6650串口服务器连接不同通信设备的控制台,把控制台的串口信号转换为IP信号送到电脑上,在电脑上安装Nport 6650 的驱动程序,映射通信设备的控制台为电脑上的虚拟串口。使用Python编写脚本程序,通过程序打开不同的虚拟串口连到不同设备的控制台,从而实现对设备的集中控制和管理。
关键词:控制台;Python;面向对象;线程 ;串口服务器;串口通信
中图分类号:TP393.0 文献标识码:A
1 引 言
随着民航的发展,航班量的迅速增加,对通信设备正常率要求的提高,如何快速判断出运行设备的故障点成为解决故障的关键点。判断故障的常用方式是通过登录设备的控制端,通过对设备命令行的操作来发现故障。控制台方式是最基本、最简单的方式,基本智能化的设备自身都带有一个控制台。控制台物理接口实质上就是一个RJ45接口形式的串口,通过console线连接到电脑,使用超级终端软件来对设备进行配置和管理。本文实现一种通过串口服务器把通信设备的控制台都集中连接,然后通过串口服务器把RS232信号转变成网络信号,通过网线传到远端的电脑,在远端的电脑上,通过选择python编制图形化程序的菜单,选择不同菜单切换到不同设备的控制台,从而实现远程对设备的集中配置、管理和排故操作。
2 控制系统的架构
利用串口服务器提供的串口转网络功能,将RS232串口信号转换成TCP/IP网络信号,实现RS232串口与TCP/IP网络接口的数据双向透明传输,使得串口设备能够立即具备TCP/IP网络接口功能,连接网络进行数据通信,极大的扩展串口设备的通信距离。由于串口服务器上有32个串口,很容易增加设备到系统中,系统的结构如图1所示。
图1 系统结构示意图
3 硬件组成
系统硬件由一台串口服务器和一台电脑组成,使用时,先要在电脑上安装串口服务器的驱动程序、配置电脑和串口服务器的ip地址,以及配置串口通信参数。
网络配置:我们使用的串口服务器是moxa Nport6650,首先配置串口服务器网口的ip地址和电脑网口的ip地址。配置完后,在电脑上安装串口服务器的驱动程序,安装过程中根据提示,输入串口服务器的ip地址,软件自动找到串口服务器上串口,正确安装后,能在电脑的设备管理器中找到虚拟的串口。
计算技术与自动化2016年6月
第35卷第2期张西波:基于Python实现设备控制台的集中控制和管理
串口服务器上串口通信参数的配置:网页登录到串口服务器,里面可以配置的参数有很多,主要配置串口的操作模式和通信参数,其它的参数可以使用缺省参数。在serial port setting下选择操作模式设置application为device control,设置mode:RealCOM其余的选择缺省。串口服务器上串口的通信参数设为9600、8个数据位、1个停止位无奇偶校验(设备控制台的通信参数一般是9600bps,具体速率根据实际工作情况设定)。
4 软件设计
4.1 界面部分的设计
集中控制台软件使用Python开发,使用图形界面,方便操作,采用面向对象的方法来设计和实现,软件由ConsoleForm.py和monitor_main.py两个文件组成。界面的处理部分在ConsoleForm.py中实现,通信处理和菜单响应的实际处理部分在monitor_main.py中实现。Python作为一种“胶水性”的语言,提供了众多图形界面开发库,非常适合GUI的快速开发,界面部分我选择wxPython。wxPython是Python语言下的一套优秀GUI图形库,允许程序员很方便的创建完整的、功能健全的GUI用户界面,它具有非常优秀的跨平台能力。wxPython应用采用事件驱动的方式来实现用户界面和wxPython系统的交互,通过使用wx.EvtHandler类中的Bind方法可以将绑定事件的类型、事件对象和事件处理函数关联起来。事件驱动的流程大致是开始初始化等待,大部分时间花在等待和响应。事件驱动就是不断的循环,从队列中抓取消息,然后再进行处理。
4.2 与设备console口交互部分的设计
控制台工作的模式基本都是采用命令和响应模式,用户输入一行命令然后回车,设备就根据你的输入来响应你,执行成功或者失败都有信息发给你,在程序的实现上就是一个串口接收和处理程序,为了提高程序的响应速度,对接收的处理使用线程方式,只要接收到数据就产生一个接收事件,程序就马上把接收到的数据显示出来。对不同设备控制台的切换实际就是打开串口服务器映射到电脑上的不同虚拟串口。异步串口通信使用pySerial模块,pySerial封装了对串口的访问。在windows和linux操作系统平台上都有统一的调用接口。通过python属性访问串口设置,通信支持不同的字节大小、停止位、校验位和流控设置,可以有或者没有接收超时,有类似文件操作的API:read和write。支持二进制传输,没有null消除,没有cr-lf转换。线程使用threading模块,ComPortThread工作线程不停查询被监视串口,如果接收到数据,就产生串口接收事件,接收事件处理程序将数据在文本控件窗口显示。同线程的协调使用threading.Event, threading.Event可以使一个线程等待其它线程的通知机制来协调工作线程的操作,一旦一个线程开始执行,它就处于"alive"状态,除非线程执行完毕,或者引发了一个未处理的异常。
4.3 程序关键处理部分
class TerminalFrame(consoleForm.MyFrame1):
def OnNorth(self,event): #切换到华北语音数据网
self.__changeConsole('com5')
def OnOa(self,event): #切换到OA路由器
self.__changeConsole('com2')
def OnKey(self,event):
if self.serial.isOpen():#judge port is open?
code=event.GetKeyCode()
if code<256:
if code==13:
self.serial.write('\\r')
else:
char=chr(code)
self.serial.write(char)
def OnSerialRead(self,event):
text=event.data
self.text_ctrl_output.AppendText(text)
def ComPortThread(self):
while self.alive.isSet(): #loop while alive event is true
text=self.serial.read(1) #read one,with timeout
if text:
n=self.serial.inWaiting()
if n:
text=text+self.serial.read(n)
event=SerialRxEvent(self.GetId(),text)
self.GetEventHandler().AddPendingEvent(event)
#~self.OnSerialRead(text)
5 结束语
使用该设计方案完成OA路由器、华北语音数据网和ATM交换机控制台的集中连接,在实际的应用中运行良好,使用方便。由于串口服务器有很多的串口,可以很容易接入更多基于串口通信设备的控制台,实现更多设备的集中配置和管理。方案中使用ip技术,有效解决机房和机务值班室距离远,在故障时,机务员不能及时分析、查找和处理故障的问题。
参考文献
[1] 马宏杰.附录一.ASCII字符码/十六进/十进制对照表[J].微机通信原理与实用技术,1994,10:313.
[2] 周伟.Python的GUI程序设计[J].python开发技术详解,2009,8:192-217.
[3] pyserial在线文档[DB/OL].http://pythonhosted.org/pyserial/