01-03-02 倍福 Beckhoff (外挂配置)¶
1. 创建潘多拉倍福ADS连接¶
在 TwinCAT 3 中使用结构化文本(ST)编程调用 KXGEM 库,实现 SECS/GEM 的功能接口调用,整个开发过程完全在 PLC 代码中完成。首先,需在潘多拉盒子中至少配置一个TwinCAT桥接服务容器,并将其指向对应的TwinCAT PLC。该容器服务作为 TwinCAT PLC 通过 ST 编程调用 SECS/GEM API 的实际实现,配置完成后无需对潘多拉盒子程序再做任何修改。TwinCAT 运行环境支持 Windows 7/8/9/10/11 及 WinCE。
以下是基于潘多拉客户端界面添加并配置桥接服务的具体操作:
1.1 删除所有已经创建的容器对象实例¶
ℹ️ 取决于当前潘多拉盒子的授权许可证,通常一个潘多拉盒子只允许创建一个容器对象,相应的创建一个SECS/GEM实例对象。如果你使用的潘多拉盒子需要同时映射多个硬件模块(PLC控制器)到各自独立的SECS/GEM实例,请联系sales@kxware.com安装支持多实例的SECS/GEM许可证。

1.2 添加倍福ADS容器对象¶
在左侧空白处右键菜单中选择创建新的连接(容器)

1.3 修改容器通讯配置¶
编辑容器配置,修改ADS访问端口号,以及PLC IPV4地址(注意:此处填写的不是TwinCAT PLC的AMS NetID地址,而是和潘多拉LAN1或LAN2口连接的),点击“保存”按钮。

2. TwinCAT PLC安装KxADSRouter服务程序¶
由于倍福官方暂时尚未发布Linux平台上ADS路由服务程序,为了能够让潘多拉盒子上的TwinCAT SECS/GEM服务程序能顺利铜鼓“ADS”通信协议访问倍福TwinCAT PLC(包括Win7/8/9/10/11 和 WinCE)中的内部变量,我们需要提前在倍福TwinCAT PLC上安装开机自启动的KXADSRouter服务程序。
2.1 WinNT平台安装KxAdsRouter操作步骤¶
下载WinNT平台下运行的KxAdsRouter程序 (适用于Win7/8/9/10/11操作系统)
https://project.kxware.com/attachments/download/3640/KXAdsRouter_NT_1.3.0.26105.zip解压缩文件
.zip文件解压缩到 C:\TwinCAT\GEM\ 目录创建Windows开机自启动
在Windows Startup开始菜单中创建快捷方式指向 C:\TwinCAT\GEM\Kxware.AdsRouter.exe
2.2 WinCE平台安装KxAdsRouter操作步骤¶
下载WinCE平台下运行的KxAdsRouter程序
https://project.kxware.com/attachments/download/3639/KXAdsRouter_CE_1.3.0.26105.zip文件上传PLC
访问 ftp://{PLC_IP_Address}
将解压缩的KxAdsRouter文件夹复制到PLC FTP文件夹下

WinCE远程桌面操作
点击下面链接下载WinCE远程桌面工具
https://project.kxware.com/attachments/download/3641/CERHOST.exe登录WinCE远程桌面,打开StartMan菜单,

新建ads srv开机自启动项目

输入启动文件路径
\Hard Disk\FTP\KXAdsRouter_CE_1.3.0.26105\Kxware.AdsRouter.exe

保存,重启WinCE PLC
3. 编辑配置¶
3.1 编辑变量配置¶
在GEMVariableDefinition中点击“Add”添加参数,在右侧的参数信息配置中配置参数ID(VariableId,唯一,不能重复),参数名称(VariableName,唯一,不能重复),参数描述(Description),参数类型(VariableType,SV/DV/EC),单位(VariableUnit,可为空),最小值(VariableMin),最大值(VariableMax),默认值(VariableDefault),参数类型(VariableFormat.详细参考:https://project.kxware.com/projects/pandora/wiki/01-08-01_SECSGEM%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%AE%9A%E4%B9%89),断电保存(Persistent);

填写参数的获取和转换脚本,比如:MAIN.CHA.Temperature对应参数腔体A的温度反馈值,那么根据VariableValueInputType应做如下配置:
VariableValueScript:
// if VariableValueInputType is Expression input:
(double)REG("MAIN.CHA.Temperature");
//if EventTriggerInputType is Function input:
return (double)REG("MAIN.CHA.Temperature");
如果参数类型是EC,那么需要配置数据转换脚本:
VariableValueConvertbackScript:
W_REG("MAIN.CHA.DefaultRecipeName",(string)Value);

3.2 编辑报警配置¶
在GEMAlarmDefinition中点击“Add”添加报警,在右侧的报警信息配置中配置报警代码(AlarmCode),报警ID(AlarmId,唯一,不能重复),报警描述(AlarmDescription),报警名称(AlarmName,唯一,不能重复),报警文本(AlarmText)。

填写报警的发生和清除脚本,比如:MAIN.OverTemperature为true代表报警发生,false代表报警清除,那么根据AlarmTriggerInputType应做如下配置:
AlarmSETScript:
// if AlarmTriggerInputType is Expression input:
(bool)REG("MAIN.OverTemperature")
//if AlarmTriggerInputType is Function input:
return (bool)REG("MAIN.OverTemperature");

AlarmCLEARScript:
// if AlarmTriggerInputType is Expression input:
!(bool)REG("MAIN.OverTemperature")
//if AlarmTriggerInputType is Function input:
return !(bool)REG("MAIN.OverTemperature");

3.3 编辑事件配置¶
在GEMEventDefinition中点击“Add”添加事件,在右侧的事件信息配置中配置事件ID(EventId,唯一,不能重复),事件描述(EventDescription),事件名称(EventName,唯一,不能重复),事件关联的参数(EventAssociatedVariableNames,可为空);

填写报警的发生的脚本,比如:MAIN.RecipeIsStart为true代表事件发生,那么根据EventTriggerInputType应做如下配置:
EventTriggerScript:
// if EventTriggerInputType is Expression input:
(bool)REG("MAIN.RecipeIsStart")
//if EventTriggerInputType is Function input:
return (bool)REG("MAIN.RecipeIsStart");
