华拓科技网
您的当前位置:首页Nport在系统集成及软件项目开发中的应用

Nport在系统集成及软件项目开发中的应用

来源:华拓科技网


Nport在系统集成及软件项目开发中的应用

摘要:在系统集成及软件项目开发中会经常使用串口或串口设备获取相关设备信息进行数据的读取和显示,有时串口设备的接口类型可能是通过rs-232或rs-485方式进行连接,这对于有限个串口设备接入一台计算机是可行的。但是如果用户想通过一个设备来实现这些设备的联网,nport无疑是最好的选择。只要根据需求进行相关配置,用户就可以方便地实现对硬件设备的远程监控。 关键词:nport系统集成串口设备

本文以我在一个系统集成软件项目中通过nport设备对4个大楼的28部电梯的上、下行状态及电梯运行楼层的状态监控为例对nport实现多串口设备监控进行简单介绍。 1 nport概述

nport又称为串口设备联网服务器,它可以在串口和以太网界面间轻易地执行双向数据的传输,从而使我们达到同时集中管理串口设备的目的。 2 软件项目需求

连接方式:ba通讯盒(485)-〉moxa485转tcp/ip(tcp/ip)-〉管理网交换机-〉集成服务器。 电梯分布:

一号楼:十部电梯,编号为3#-13#。其中3#-8#电梯所接nport地址为:10.4.1.152。9#-13#电梯所接nport地址为:10.4.1.153。

二号楼:十部电梯,编号为15#-24#。其中15#-19#电梯所接nport地址为:10.4.1.156。20#-24#电梯所接nport地址为:10.4.1.157。 三号楼:六部电梯,编号为25#-30#。其中25#电梯所接nport地址为:10.4.1.158。26#-30#电梯所接nport地址为:10.4.1.159。 四号楼:两部电梯,编号为1#-2#。电梯所接nport地址为:10.4.1.151。

读取数据:上下行状态、桥箱所在楼层。 3 nport配置

首先,在本机电脑保证能够正常ping通每个连接nport设备的计算机;然后,进行nport配置。我们以其中一台nport设备为例:打开ie浏览器,在地址栏中输入http://10.4.1.151,出现如下图1.1所示的界面:

我们将串口设备的波特率统一设置为9600,将serialport type设置为real com(如图1.2)。)

点击submit按钮,完成一台nport设备的设置,然后按照同样的方式设置其他6台设备。

我们下载nport window driver manager软件进行串口和ip地址的设置。

设置完成后如下图所示:

通过以上设置我们可以看出:10.4.1.151对应的串口为com9;10.4.1.152对应的串口为com10;10.4.1.153对应的串口为com11;

10.4.1.156对应的串口为com14;10.4.1.157对应的串口为com15;10.4.1.158对应的串口为com12;10.4.1.159对应的串口为com13。至此,完成了nport配置。 4 相关串口通信协议及软件实现

本协议共有两条命令,全部是字节流形式,主机发送控制命令、ba板采用被动接收并以应答的方式发回电梯状态信息,分别介绍如下:

4.1 发送命令格式 4.2 接收命令格式 4.3 软件实现 巡查地址请求函数:

//发送巡查地址请求命令(a1h+地址编号) private void sendrequest(int index) { byte[]data = new byte; //开始标志a1h data[0] = 0xa1; //获得十六进制地址编号

byte hexnum = gethexnum (index); data = hexnum; if(serialport1.isopen) {

serialport1.write(data, 0, 2); //向串口写入数据 } }

由于电梯地址和串口的对应关系为:com9:1#、2#;com10:3#-13#;com11:9#-13#;com14:15#-19#;com15:20#-24#;com12:25#;com13:26#-30#。

我们要轮流对这几个com口进行打开关闭操作,即先打开com9然后关闭再打开com10,依次类推,所以封装一个com口操作的函数: private void setnextaddressrequest(int index) { //切换com端口,首先关闭串口 if (this.serialport1.isopen) {

this.serialport1.close(); } try

{ string other_init = “initialize”; string baud_rate = “baudrate”;

string port_name = “add” + index.tostring() + “portname”; string infopath = directory.getcurrentdirectory(); serialport1.baudrate =

convert.toint32(inioperater.read(other_init, baud_rate));

serialport1.portname = inioperater.read(other_init, port_name);

serialport1.open(); }

catch (exception ex) {

messagebox.show(“端口被占用或未正常连接!”); } }

这样在程序中只要index循环加一就可以循环打开和关闭串口了。 以1#电梯为例,当我们调用函数sendrequest(1)发送地址请求指令后返回如下数据:82 00 05 00 00 15 03 16,在

serialport_datareceived()事件进行数据解析。根据协议:其中82h为开始标志,第7位03为运行楼层信息,状态2为00,后半位转换为四位二进制为0000,即up和dn均为0说明电梯正在3楼停留,16为前几个状态字的异或结果,循环调用这两个函数就可以获得所有电梯的运行楼层和上下行状态信息了。 最终软件对于电梯监控部分的实现界面如下图所示: 5结论

可以看出,nport在监控多串口设备数据读取方面的作用是十分强大和方便的。在本项目中将串口的通信类型统一设置成realcom方

式(当然也可以设置为tcp/ip方式以socket方式读取数据),该项目已经如期交付给顾客,目前正处于试运行阶段,反映良好。 参考文献:

[1]杨子杰.《串口通信多线程实现的分析》.计算机应用研究,2001年.

[2]麻志毅.面向对象分析与设计.机械工业出版社,2008年. [3]刘甫迎,刘光会,王蓉.c#程序设计教程(第2版).北京:电子工业出版社,2008.

[4]张辉.《现代通信原理与技术》.西安电子科技大学出版社.2008 年7月.

因篇幅问题不能全部显示,请点此查看更多更全内容