关键词: LonWorks,现场总线,Neuron芯片, LonWorks产品,LON节点,组态软件,网络变量, 显式消息,inTouch,LonTalk协议
一、概述
(一)组态软件的控制方法
inTouch组态软件是国际上广泛应用的先进的组态控制软件,是一种可实现各种控制功能的具有配置性质的程序。通过组态就可以实现预定的控制方案。可以使用户在不需要编代码程序的情况下,便可生成适合自己需求的应用系统,它由开发人员完成,本文提出了基于LonWorks网络控制来实现对inTouch组态软件的开发方法,描述了一种基于LonWorks网络技术的组态方法,及其设计思想和实现方法。
(二)LonWorks网络控制方法 – 节点
LON网上的每个控制节点称为LON节点、LonWorks产品或LonWorks智能设备,它包括一片Neuron芯片、传感器和控制设备、收发器和电源。
Neuron芯片是节点的核心部分,它内置一套完整的通信协议,即LonTalk协议,确保节点间使用可靠的通讯标准进行互操作。因为Neuron芯片可以直接与它所监视的传感器和控制设备相连,所以一个Neuron芯片可以传输传感器或控制设备的状态、执行控制算法,和其它Neuron芯片进行数据交换等。使用Neuron芯片,开发人员可以集中精力设计并开发出更好的应用对象而无需耗费太多的时间去设计通讯协议、通讯的软件和硬件,这样减少了开发的工作量,节省了大量的开发时间。
LonWorks节点编程是用Neuron C 来实现的,程序要经过编译和烧录后才能载入节点中运行;或者也有一些节点经过编译可以直接下载到节点运行。在此我们把组态的思想引入组态软件中,为控制网络预先提供丰富的控制功能模块,通过改变网络节点之间的逻辑关系来达到改变网络控制功能的目的。
(三)引入组态到LonWorks控制网络的优点、特点
● 用户不需要用Neuron C语言编程,只要根据实际需要进行适合自己的组态配置。
● 实现的功能多,方便用户实现各种控制功能。
● LonWorks本身带有通讯协议,组网方便、灵活。
二、LonWorks控制网络的组态应用
(一)组态软件生成
inTouch组态软件将控制功能模块称为“软PLC或Soft PLC”,也有的称“软逻辑”。组态控制软件编程工具采用图形化编程语言,只需用鼠标“点击、拖动”就可以建立一个可重复使用的控制方案,大大减少工程时间和人力。一个应用程序中可以有很多控制模块。开发人员利用Neuron C 语言编制通用控制程序。通用控制程序由许多基本功能模块组成,各个模块可以实现不同的控制功能。基本功能模块有若干个输入和输出,每个输入和输出管脚都有唯一的名称,不同种类的功能块其每个管脚的意义、取值范围也不相同。
inTouch控制模块基本功能块包括:
数学运算模块,实现数的加、减、乘、除、乘方、开方等基本运算;
逻辑运算模块,实现逻辑的与、或、非、延时、选择开关等功能;
变量模块,提供运算的操作数并存放最终的运算结果;
常用的控制算法模块(例如PID控制等)。
inTouch组态软件存盘时自动对程序进行编译、检查语法错误,同时生成一定格式的消息包,准备传递给Neuron芯片。这些特定格式的数据包有:控制模块综合描述(例如所含的控制模块总个数,参数总个数,中间变量总个数等),各模块的描述(例如该模块的模块数,参数个数,中间变量等),各模块的参数表,各模块代码表,各模块的中间变量存放顺序表等。
组态Neuron节点通过显式消息与PC机进行通讯,接收模块消息包。该节点中存有与基本功能模块相应的执行模块代码,将数学模块、逻辑模块、变量模块和控制算法模块等分别写成单独的函数,可按照组态软件生成的消息包被调用,并可将执行结果传送给PC机或其它 Neuron节点。假如inTouch组态中某个功能块的参数发生了改变,则重新编译程序并将最新生成的模块消息包发给 Neuron芯片,使之总是执行最新的功能块,实现组态的在线编译与控制。组态Neuron节点在接收消息时,根据消息标签将消息数据赋给该节点定义的不同的数据结构。只有当组态软件生成的所有相关消息被收到后,功能块才可以执行。
Neuron各节点之间通过网络变量进行通讯。在组态Neuron节点中,预定义一定数量的网络变量,既有输入类型,也有输出类型。其总个数不超过Neuron C 语言中允许定义的网络变量的总个数。
LonWorks网络变量的使用极大的简化了开发和安装分散系统的处理过程,各节点可以独自定义,然后简单地连接在一起或断开某几个连接,以构成新的LONWORKS应用,大大增加了系统的灵活性,开放性。网络变量通过给节点相互之间明确的网络接口而极大地提高了节点产品的互操作性。互操作性带来得好处是:节点能很方便地安装到不同类型的网络中,并保持节点应用的网络配置独立性。节点可以安装到网络中并且只要网络变量数据类型匹配,就可以逻辑建立地与网络上的其它节点的连接。
一个网络变量NV(Network Variables)是节点的一个对象,它可以定义为输入也可以定义为输出网络变量。当一个网络变量在一个节点的应用程序中被赋值后,LonTalk协议将修改了的输出网络变量新值构成隐式消息,透明的传送到可与之共享数据的其它节点或PC机。这里的网络变量其实为隐式消息。
由于每个网络变量的数据长度一经确定就不能改变,且最多只有31B,所以限制了它的使用范围。为此,可考虑同时使用了Neuron C 提供的显示消息这一数据类型。
显式消息的长度是可变的,且最长可以是228B。显式消息必须使用一个预定的对象来构造,然后使用显式函数以及预定事件来处理这些显式消息。
用预定事件msg_arrives来接收消息。
本设计中,由message-code判断要接收的消息数据msg_in.data应该存放到那一部分数据结构。message-code有head, stragehead, code, parameter, index, 和run等。其中,head为控制模块头,stragehead为控制模块描述头,code为接收代码表,parameter为接收参数表,index为接收索引表,run为接收程序开始执行命令。这些消息分别对应组态软件编译生成的消息包格式。只有当组态Neuron节点收到全部的模块消息和执行命令run后,模块才被执行。
(二)实例
对于实现一个加法运算(加法器)来讲,其组态功能图如图:
模块1为变量模块(输入输出模块)中的常量模块,模块2、3都为变量模块(输入输出模块)中的网络变量输入模块,模块4为数学运算模块中的加法模块,模块5为变量模块(输入输出模块)中的输出模块。
若要实现这样一个加法功能,首先在组态工具中画出如图2所示的功能组态图,经编译后生成所需的模块代码。如模块头文件为:
Varsize 12 0 0 0 0 //中间变量所需暂存单元
Stragenum 1 //控制模块个数
Parasize 2 //参数所需存储单元
Codesize 20 //代码所需存储单元
Indexsize 24 //索引所需存储单元
Globalsize 0 //全局变量所需存储单元
在模块进行执行时,
1) 执行模块1,将参数值从参数表中取值,放入中间变量表;
2) 执行模块2,将相应的输入网络变量放入中间变量表;
3) 执行模块3,将相应的输入网络变量放入中间变量表;
4) 执行到模块4时,从中间变量表中取使能端的参数,从中间变量表中取输入端1的参数,从中间变量表中取输入端2的参数,将两操作数相加,运算结果放回中间变量表。
5) 执行模块5,从中间变量表中将数值赋给相应的输出网络变量。
2.3 数据结构
Ø 代码结构:由4个字节组成,分别用16进制表示。
Category Kind Index Index
Ø 代码结构的含义:
第一字节表示种类( category),即四大模块(数学模块、逻辑模块、变量模块和控制模块)中的某一类;
第二字节表示类型(kind),即某一模块中的具体功能;
第三和第四字节表示索引(index)。
Ø 索引表的结构:由二个字节组成;在程序中用16进制表示。
数据类型 中间变量表的指针值
Ø 索引(index)表的含义:
I. 占两个字节。
II. 分别由各个功能块的四个部分组成:
A. 第一部分表示某个功能块由几个输入、输出集成,分别对应中间变量表的指针数值。
B. 第二部分表示输入网络变量。本设计中输入数据由消息节点的消息变量发送,再由接受节点接受,通过网络传递到另一个接受节点上来,并转化成网络变量,再由网络变量送入PTAG表,以便进行运算。
C. 第三部分表示输出网络变量。运算结果放入PTAG中间变量表,输出时再从中间变量表中取出运算结果,送入接受方节点(本节点上)即NEUM节点上的输出网络变量,经网络上传递后,再由连接后的输入网络变量从另一个节点(即消息节点)上可以读出数据。
D. 第四部分表示常量。其值由参数表中取出,参数表中的数据由消息发送过来。
III. 各个功能块的次序和每个功能块中四个部分的次序,由组态的次序决定。
第一部分的格式:
数据类型 中间变量表的指针值
第二部分(输入网络变量的格式):
数据类型 第几个输入信号(从0开始) 数据类型 中间变量表的指针值
第三部分(输出网络变量)的格式:
数据类型 |
中间变量表的指针值 |
数据类型 |
第几个输入信号(从0开始) |
第四部分(常量)的格式:
数据类型 |
参数表指针的数值 |
数据类型 |
中间变量表的指针值 |
Ø 中间变量表的结构:由数据的类型决定字节长度。
输入/输出端的数据 输入/输出羰的数据 Enable信号
中间变量表通过赋初值来确定其结构,此时中间网络变量只有空结构,没有数据,其数据等待输入,由变量模块、取数据函数GET()、设置数据函数SET()来完成。变量模块中分三个类型,有常量、网络变量输入和网络变量输出。这三种类型的数据最终都要放入中间变量表中,输入时,如是常量,则从参数表中取出常量,放入中间变量表中。参数表中的数据预先由消息节点发送,在读参数表时已读入数据。由READP()程序完成。
如不是常量,则由网络变量输入来接受数据,数据还是由消息节点发送过来,用GET()函数读入,再由SET()函数放入PTAG中间变量表,以备运算使用。
输出时,再由中间变量表中取出,放进输出网络变量进行输出。再由节点通过网络传递到消息节点,通过消息节点上的输入网络变量可以观察运算结果。
特别要注意的是:中间变量表的字节长度是随着常量数据的类型(只有整型和浮点型)、网络变量的数据类型来确定,因而,不同的模块运算中间变量表的长度是不同的,这也反映在索引表的内容上。
Ø 中间变量(Ptag)表的格式:(一个模块)
Ø 参数表的格式:(放常量)
要实现这样的加法功能,先在组态工具中画出如上图的组态功能图,经编译后生成所需的控制模块代码。
如设计代码为:{0,0,0,0,0,1,0,2,0,1,0,4,1,0,0,6,0,2,0,10}。索引表设计为:{16,0,16,0,16,0,16,3,16,1,16,6,16,0,16,3,16,6,16,9,16,9,16,0}。//16 完全和程序中生成的数据类型的编程方法有关。
三、结束语
在LonWorks控制网络技术的基础上实现组态控制有着广阔的发展空间。依靠极强的Neuron芯片及LonTalk协议,使得组态控制得以在线编译并实时运行。采用消息包的形式向Neuron 芯片传送组态控制的模块,减少了Neuron 编程的工作量以及编译工作,增加了系统的灵活性和开放性。为组态软件的发展提供了更为开阔的市场。