微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LonWorks 现场总线的一种应用方法

LonWorks 现场总线的一种应用方法

时间:07-23 来源:互联网 点击:
本文介绍了利用LonWorks现场总线代替原有的现场工业控制总线。利用LonWorks底层的显形报文格式和广播方式将原来的通信协议转换成LonWorks的通信协议,把LonWorks作为通信协处理机使用,利用LonWorks的并行口与控制器如8031、80C196进行数据交换。解决了原有控制网络通信速度慢、拓扑结构不合理的问题,这种应用方法对原有的硬件不需要做大的修改,软件方面也只改通信部分,控制软件可以不变。这样即可以提升控制网络的性能,又可以减少人力物力,是LonWorks现场总线的一个典型应用方法。

一.概要
交通部上海船舶运输科学研究所于1989年开始研制实时船用网络系统,历时3年,于1991年研制成功,命名为船用2+实时网络系统,并首次应用于南海904运输补给舰,目前已用于多艘舰船,有远望3号、053舰等。至今为止,形成了船用控制网络的批量产品。在当时由于现场总线技术还未开始应用,使得2+网络添补了国内船用控制网络的一个空白,并形成产品推广使用了多年。现在看来,2+网络系统在船舶控制系统中还是起作主要作用。使得船舶控制从单机转变为网络型自动控制。2+网络系统的拓扑结构见图1,从图中可以看出,这种树形的网络结构不尽合理,通信总机肩负着很重要的任务,可靠性要求很高。从控制机到控制机最远的路由要通过3个交换机,造成通信时间加长,实时性不高。随着现场总线技术的不断完善,选用一种能结合我国实际的现场总线技术代替船用控制网络已非常必要。

二.LonWorks现场总线的特点:
LonWorks技术的核心是神经元芯片(Neuronchip),它由美国摩托罗拉公司和日本东芝公司生产,有以下几个特点:
(1)LonWorks技术的基本元件——Neuron芯片,同时具备了通信与控制功能,并且固化了ISO/OSI的全部七层通信协议,以及34种常见的I/O控制对象。
(2)改善了CSMA,LonWorks称之为PredictiveP-PersistantCSMA。这样,在网络负载很重时,不会导致网络瘫痪。
(3)网络通信采用了面向对象的设计方法,LonWorks技术将其称之为"网络变量"。使网络通信的设计简化成为参数设置。这样,不但节省了大量的设计工作量,同时增加了通信的可靠性。
(4)LonWorks技术的通信的每帧有效字节可以从0到228个字节。
(5)LonWorks技术的通信速度可达1.25MBps(此时有效距离为130M)。
(6)LonWorks技术一个测控网络上的节点数可以达到32000个。
(7)LonWorks技术的直接通信距离可以达到2700m(双绞线,78KBps)。
(8)针对不同的通信介质有不同的收发器和路由器。
(9)有LON-WEB网关,可以连接INTERNET。

三.应用方法:
目前LonWorks现场总线技术已经在国内开始应用。但多采用网络变量的方式进行数据通信,其主要优点在于:软件编程方便、可采用标准的网络变量便于今后和其它标准的LonWorks设备进行通信。但采用网络变量通信是要用LONMAKER软件进行网络变量的现场绑定(BIND),必须要在现场配备一台PC机进行网络变量绑定,对于只有几个节点的控制对象来说,势必要增加设备的投资。如果在设备运行过程中遇到节点损坏需要更换节点时,又要重复做一遍节点的网络变量绑定。这就要对最终用户的维修人员进行培训,教会他们用LONMAKER软件进行网络变量的现场绑定。对于技术水平不高的用户,只好由开发人员亲自到现场进行维护。这大大提高的控制设备的维护成本。
在LonWorks的应用过程中,可采用两种通信方式即网络变量通信和显形报文通信。根据各自通信特点我们选用显形报文通信方式。采取显形报文通信方式最大的好处在于系统安装配置时不需要绑定,便于现场用户的安装和维护。显形报文通信的数据包和长度可以由用户定义,就可以突破LonWorks关于每个控制节点不能超过63个网络变量的限制。通过显形报文还可以在不同的网络之间进行协议和路由的转换。但采取显形报文通信也有其不足之处:控制网络系统成了封闭系统,不能和其他LonWorks产品进行互连,另外软件的编制过程也较为复杂,要增加相应的用户协议。
下面是利用显形报文进行数据块传送的一个例子:
msg_tagmotor;
#defineMOTOR_ON0
typedefenum{
MOTOR_FWD,
MOTOR_REV
}motor_dir;
struct{
longmotor_speed;
motor_dirmotor_direction;
intmotor_ramp_up_rate;
}motor_on_message;
when(some_event){
msg_out.tag=motor;
msg_out.code=MOTOR_ON;
motor_on_message.motor_direction=MOTOR_FWD;
motor_on_message.motor_speed=500;
motor_on_message.ramp_up_rate=100;
memcpy(msg_out.data,motor_on_message,
sizeof(motor_on_message));
msg_send();

具体

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top