<< 点击显示目录 >> 主页 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函数获取到的错误代码 |