AR下ANSL通信

<< 点击显示目录 >>

主页  PVI通信 > 应用例程 > AutomationRuntime >

AR下ANSL通信

1. 功能块功能描述

ANSL通讯例程及注意事项

 

2. 功能块软件配置信息

AS版本

AS4.2.8.54

操作系统版本

D4.26

伺服操作系统版本

 

需要库

AsANSL

编写人

 

测试人

 

审核人

 

项目名称

 

任务说明

AnslCom 通讯任务

AnslData 通讯配置数据模块

 

3. 版本信息

软件版本

修改内容

修改人

V1.00.0

创建

刘柏严

 

4. ANSL与IMA比较

 

比较

IMA

ANSL

整体比较

调用通讯函数任务 + 通讯配置数据模块

调用通讯函数任务 + 通讯配置数据模块

通讯函数任务

IMAinit

IMAcomm

IMAclose

AsANSLClientStart()

AsANSLClientStop()

以下用于诊断

AsANSLClientDiag()

AsANSLClientDiagAll()

AsANSLClientDiagConn()

AsANSLClientDiagConnAll()

AsANSLClientDiagRedConn()

AsANSLClientDiagPv()

AsANSLClientDiagPvAll()

AsANSLServerRRInfo()

AsANSLServerConnCount()

AsANSLServerDiagConnAll()

 

通讯配置数据模块

Txt配置

以  “ “  定义通讯内容

以  \    分隔关键字

例如:

"/SV=READ_WRITE/SERVPV=ima_serv:a /CLNTPV=var_task:a"

 

Xml格式

以 ‘’和 <>定义通讯内容

例如:

'<Write LocalPvName="TestClienTask:a" RemotePvName="TestServerTask:a" SyncPv="0" RefreshRate="100" Hysteresis="0"/>'

 

通讯速度比较

PPC2100 (Server) <-> C70(Clint)

5000字节 大约 100ms 数量级

PPC2100 (Server) <-> C70(Clint)

5000字节 大约 10ms 数量级

通讯设置

堆栈必须设大 例如:65536 或更大

任务tolerance必须设大 例如:3000000us

通讯连接数量必须设大   例如:32

Runtime 必须高于 4.08

必须使用以太网

必须有足够内存  例如:大于10MB

建议通讯连接数量例如:32

建议堆栈设大 例如:65536或更大

CPU负载空闲大于25%,否则通讯刷新速度自动降低。

诊断信息获取

方便,可以直接显示错误变量及错误号

可以直接显示有几个变量通讯不正常,但是要想确认具体哪一个通讯不正常需要外部程序配合

通讯配置内容

"/CN=IF5.4"

 

其中IF5表示自己(Clint)接口

4表示目标(Server)Node号

<Connection ConnName="AnslCross1" TargetAddr="10.43.49.218" AnslPort="11169" Timeout="5000" SendDelay="2" BfSize="65536" ConnMode="0">

ConnName 只是给这个连接去一个名字,其它函数调用时用来区分不同连接。

TargetAddr 表示目标IP地址,没有自己IP地址设定。这点与IMA有较大不同。

 

变量/结构体  读

可以

可以

读 属性

连续读取

Clint 给读取变量进行赋值操作会马上变回原值(Server值)

 

事件读取 Server 变量改变时 读一次

Clint 可以给读取变量进行赋值操作,直到Server变量改变了,才将Clint数值覆盖。

 

变量/结构体  写

可以

可以

写属性

连续写

事件写 Clint变量改变后写一次

变量             读/写

可以

不可以

通过变量控制通讯

 

可以

"/CONPV=var_task:condition_1 /CONVAL=1 /MINT=0 /MAXT=0"

通常用来页面通讯,不同页面通讯不同内容,以节省通讯资源

不可以

无此配置

估计是由于通讯很快,所以不需要按照页面通讯。

控制变量刷新速度

不可以

无此配置

可以

RefreshRate="500"

单位ms,此参数设置很小不会造成报警。

通讯速度和任务周期关系

通常在10ms任务周期,冗余时间加长。变量通讯速度和任务周期有关系。

任务周期可以任意。

变量通讯速度和任务周期没有关系。

变量通讯速度在数据模块中配置。

 

 

5. ANSL 通讯实现

基本格式

 

1 – 配置ANSL客户端(固定格式不要修改)

<?xml version="1.0" encoding="utf-8"?>
<AnslClient>

内容
</AnslClient>

 

2 – 客户端诊断信息 只有三个变量可以配置 变量类型不要错(固定格式不要修改)

<Diag TimeStamp="VarClientTimeStamp" ClientConn="VarNumConn" ClientConnErr="TestClientTask:VarNumConnErr"/>

 

注意:这里配置的变量属于ANSL和任务交户变量,此处与IMA有较大不同。通常诊断信息都是调用函数时获取的,在ANSL通讯中,可以通过数据模块直接配置部分诊断变量。需要注意的是变量类型一定不要修改。

 

3 – 配置连接

<Connection ConnName="AnslCross1" TargetAddr="10.43.49.218" AnslPort="11169" Timeout="5000" SendDelay="2" BfSize="65536" ConnMode="0">
...
</Connection>

4 – 配置连接诊断信息(可以根据需要修改)

<Diag ConnName="TestClientTask:VarConnName" TargetAddr="TestClientTask:VarTargetAddr" ConnState="TestClientTask:VarConnState" ConnErr="TestClientTask:VarConnError" TimeStamp="TestClientTask:VarConnTimeStamp" ConnPvRead="TestClientTask:VarNumPvRead" ConnPvReadErr="TestClientTask:VarNumPvReadError" ConnPvWrite="TestClientTask:VarNumPvWrite" ConnPvWriteErr="TestClientTask:VarNumPvWriteError" NumReadJobs="TestClientTask:VarNumReadJobs" NumWriteJobs="TestClientTask:VarNumWriteJobs" NumConnErr="TestClientTask:VarNumConnErr"/>

 

要注意:

配置连接诊断信息 和 配置客户端诊断信息 关键字都是 Diag, 需要注意顺序不能交换.

 

通讯变量属性

Read/Write

读或写

必须配置

LocalPvName

本地变量名称

Task:PV

必须配置

RemotePvName

服务器变量名称

Task:PV

必须配置

DefaultValue

默认值

通常是0,拔掉通讯线,数据保持。

SyncPv

同步属性

全局变量/结构体  都不可以

局部变量不可以,因为小于4字节

局部数组可以

局部结构体可以

大小不能大于4096

0 – 异步通讯  改变时读或写

1 – 同步通讯  每次都刷新读或写

即时设置同步通讯,RefreshRate依然有效。

 

例如只读变量在Client端每次都会刷新,与异步读的区别是异步读是Server端改变时读取,

RefreshRate

数据刷新时间

[ms]

即时设置同步通讯,RefreshRate依然有效。

设置过小不会有报警。

 

 

两个局部变量异步通讯

举例: Read LocalPvName="Test:a" RemotePvName="Server:serverUsintCont"  … … …

局部变量需要任务名称

两个全局变量异步通讯

举例: Read LocalPvName="gTest" RemotePvName="gServerStru.a"

全局变量不需要任务名称

结构体下属变量

填写具体名称

例如: gServerStru.a

数组或结构体数组

填写具体名称

例如: gServerStru

注意:

不断点的情况下多次修改配置文件可能造成部分变量通讯断,此时需要重新启动.

IMA也是同样问题。大多数情况下工程师修改通讯内容都会重新启动防止出问题。

注意:

没有测试AsANSLClientStop() 函数.如果需要可以自行进行测试.

对于大多数应用只使用AsANSLClientStart()应该足够,没有使用Stop的原因是不确定操作系统及硬件是否可以完美释放内存。

 

6. 例程任务说明

 

例程任务说明AnslCom   --- ANSL客户端任务

client.Cmd.

Reset

修改配置数据模块后重新连接命令

 

GetPvError

当Status .ConnReadError 或Status .ConnWriteError不为0时表示有读或写变量通讯没有建立连接,此时可以用此命令获取连接失败的变量信息,在结构体Status .ConnErrorPV中显示

 


 

client. Status.

FunErrorNumber

AsANSLClientStart / AsANSLClientDiagPvAll

功能块报警号

 

ConnState

数据模块配置的状态信息变量

通讯状态 1-成功 0-失败

 

ConnErrorNum

数据模块配置的变量

报警代码

 

ConnReadError

数据模块配置的变量

读取失败的连接数

 

ConnWriteError

数据模块配置的变量

写失败的连接数

 

ConnReadJobs

数据模块配置的变量

读取计数,通讯成功后此变量递增

 

ConnWriteJobs

数据模块配置的变量

写计数,通讯成功后此变量递增

 

ConnErrorPV

LocalPV

通过AsANSLClientDiagPvAll函数获取到的Client错误连接名字

 

ConnErrorPV

RemotePV

通过AsANSLClientDiagPvAll函数获取到的Server错误连接名字

 

ConnErrorPV

ErrorNumber

通过AsANSLClientDiagPvAll函数获取到的错误代码