网络变量

提示!

如果设备(目标系统)不支持,通过网络变量进行的数据交互将不会实现,或者防火墙阻止通讯,又或者另一个客户端/应用打开相同的 UDP端口 定义在网络变量列表中的 属性中。

提示!

只有数组的范围是由一个常量或者 literal 定义的时候,才会被传到路由应用!这种情况下的常量表达式是不能进行范围定义的!例如: "arrVar : ARRAY[0..g_iArraySize-1] OF INT ;" 将不会被传输, "arrVar : ARRAY[0..10] OF INT ;" 就可以被传输。

网络变量必须在变量列表中定义,发送方和接收方(在一个或者不同工程之间处理)的变量列表一致,并且通过广播发送交换这些值。注意这与通过数据服务器交换数据 “数据服务”有着本质不同,数据服务器交换数据是本地应用与远程数据源之间的点对点通讯连接。

 

网络变量的管理 ...

- 在发送设备(发送器)中通过 “全局变量列表 - GVL ”GVL) 来定义

- 在接受设备(接收器)中通过 全局网络变量 (GNVL) 来定义。可以在 “网络变量列表编辑器”中进行查看。

在发送方的 GVL 和接收方的 GNVL 中必须包含相同的变量定义。

提示!

网络变量的最大大小为255比特。网络变量的数量没有限制。

在全局变量列表(GVL)中定义的发送方网络变量,必须设置 “网络属性”。这些属性包括通讯协议和发送参数,根据这些属性,网络变量值将在网络中广播发送,并被所有包含相应GNVL的设备所接收。 当然一个设备可以定义GVLs也可以定义GNVLs,可以作为接收器也可以作为发送器。

提示!

如果交换器既要作为发送器又要作为接收器,列表标识符的(定义在GVL对话框中的属性中,参阅 “链接到文件”)必须是唯一的,以避免产生错误!

注意:传输的方向总是单向的,从GVL (发送方)到 GNVL (接受方)!一个发送器的GVL可以定义在相同或者不同的工程中。所以当创建一个GNVL时,发送器的GVL从网络中所有的GVl列表中进行选择或者从外部文件读取,之前已经产生的(例如通过 “链接到文件”对话框)GVL。如果发送器的GVL需要使用定义在另一个工程中的变量,导出文件是必须的。

作为使用网络变量交换的前提条件,一个网络变量库必须被安装,一旦GVL的网络属性被设置,网络变量的UDP类型将会自动进行定义。

网络变量交换示例

以下程序是一个简单的网络变量交换的示例。在发送器定义一个GVL,在接收器上定义一个GNVL:

首先是标准工程的准备工作,在设备树中定义一个发送器名为“Dev_Sender”,定义一个名为“Dev_Receiver”的接收器:

- 在“Dev_Sender”的“应用”下创建一个程序类型的 POU“prog_sender”。

- 在这个“应用”的任务配置中添加一个任务“Task_S”,调用“prog_sender”。

- 在“Dev_Receiver”的“应用”下创建一个程序类型的POU“prog_receiver”。

- 在这个“应用”的任务配置中添加一个任务“Task_R”,调用“prog_receiver”。

 

1. 在发送方设备中定义全局变量列表:

选择“Dev_Sender”下的“应用”,通过“添加对象”对话框,添加一个全局变量列表“GVL_Sender”,在该列表中写入变量声明:

VAR_GLOBAL
 iglobvar:INT;
 bglobvar:BOOL;
 strglobvar:STRING;
END_VAR
 
插图 38: 在发送方设备中插入GVL

 

2.定义发送方GVL的网络属性:

选择设备树中的“GVL_Sender”,打开它的属性对话框,按照下图配置 “网络属性”

插图 39: 设置GVL网络属性

 

3. 在接收方添加一个全局网络列表:

选择设备“Dev_Receiver”下的“应用”,打开“添加对象”对话框,添加一个全局网络变量列表,和上面定义的GVL相对应:

插图 40: 接收器中创建GNVL列表

 

在“名称”栏中输入“GNVL_Receiver”;在“发送方”栏中,下拉列表会提供当前工程中所有具有网络属性的GVL,当前的示例中只有“GVL_Sender”,选择它(提示:如果想利用其他工程中的GVL,一个列表的导出文件是非常有用的,可以通过“导入文件”将列表直接导入)。

 

点击“确定”按钮关闭对话框,“GNVL_Receiver”将被插入到“Device_Receiver”中的“应用”下。该GNVL会自动包含与“GVL_Sender”中完全一样的变量声明 :

插图 41: GNVL_receiver包含与 GVL_Sender 相同的变量声明

 

4. 可选择:查看全局网络变量列表的网络设置:

如果需要GNVL列表的网络设定 ,是在添加对象时进行的定义,可以被修改和查看。因为这种情况,选择GNVL_Receiver右键菜单打开网络设定对话框中GNVL属性( “网络设置 ”)。

插图 42: GNVL网络设定

 

5. 测试网络变量的转换:

按以下步骤,可以对在线模式中的网络变量交换进行检查:

-在发送方“应用”prog_sender中,对变量iglobvar做如下运算:

插图 43: 网络变量示例

-在接收方“应用”prog_rec中,也输入对变量iglobvar的运算

插图 44: 网络变量示例

- 在同一个网络中,登录发送方和接收方的“应用”并启动;然后查看给接收方ivar_local赋值的iglobvar,是否与当前发送方显示的iglobvar一致。

V2.3 和 V3 控制器之间的网络变量通信:

如果控制器需要再不同版本下(V2.3 <-> V3)的编程系统中进行相互工作,通过网络变量的方式进行是可行的。然而在这种情况下不能单纯的使用导出或者导入进行发送器和接收器的匹配列表的构建。由于这样的情况,在 V2.3 和V3中,变量导出文件(*.exp vs *.gvl)包含不同的信息。如果一个接受 GNVL 列表是由V3创建,所需的网络参数必须是由之前V3版本的发送器导出的一个 *.gvl-文件。如果是由V2.3产生的 *.exp文件,就不包含这些信息。

在V2.3和V3版本之间进行网络变量获取解决方案:

1. 重新创建 V2.3 的NVLV3(添加GVL的一个网络属性,包含在V2.3中定义的相同的变量声明)

2. 导出新的 GVL 到一个 *.exp 文件中(“连接到文件”属性)

提示:设置选项“从生成中排除”,将会保持GVL在工程中没有编译错误并且忽略名称。只有在GVL需要重新创建导出文件的时候才需要这个选项功能。

3. 重新导入列表,这意味着通过使用先前生成的*.exp 文件重新创建一个GNVL列表,以获得当前网络变量列表。

示例

这是一个2.3版本的工程23.pro,工程中包含一个全局变量列表 GVL_23 有如下定义: VAR_GLOBAL trans23: INT; END_VAR.

变量 trans23 应该是 V3 应用中的可读文件。

插图 45: V2.3 工程中的全局变量

GVL_23列表的网络属性配置如下:

插图 46: GVL_23的属性

如果导出 GVL_23 到*.exp文件,那么这个文件将包含定义 VAR_GLOBAL trans23: INT; END_VAR由于这个原因,首先需要在V3中重新建立GVL_23(参见下图中GVL_23定义):

在 V3 工程中添加一个名为 GVL_23 的全局变量并按照以下步骤操作:

  • 设置网络属性并定义 23.pro
  • 在“连接到文件”属性中配置导出文件"23.gvl"
  • 建议:设置“编译中排除”选项,以便于将文件保存在磁盘上进行进一步修改
  • 编译 V3 工程产生 23.gvl 文件(包含变量+配置设置!)
插图 47: 在V3中重新产生 GVL
插图 48: 导出文件 "23.gvl"

 

现在从23.gvl中添加一个GNVL 对象(选项“从文件导入”),其中包含从 2.3 PLC中读取变量 trans23

插图 49: V3 工程中的GNVL

 

现在如果 V23 工程和V3应用都已经在同一个网络中运行, V3 应用可以从工程23.pro中读取变量 trans23 。