Beckhoff ADS

通过 ADS/AMS 连接 Beckhoff TwinCAT PLC:AMS 路由、运行时端口、符号路径和读取长度。

以 Markdown 查看

Beckhoff ADS 驱动通过 ADS 和 Beckhoff TwinCAT PLC 对话,也就是承载在 AMS 路由上的那个 TwinCAT 自动化协议。你按 PLC 程序里的符号路径来寻址数值,所以你打进去的就是 TwinCAT 项目声明的那个。在 Connector 里的 Beckhoff ADS 驱动下面添加一台设备;面板只显示这个协议用得到的那些字段。

连接

字段 含义 默认值
主机 PLC 的 IP 地址。它的 AMS Net Id 由这个地址推成 {ip}.1.1。 除非在 PLC 的 AMS Net Id 中另行填写,PLC 的 AMS Net Id 就是这个地址后面跟 .1.1;写成名称时,先把它解析成 IPv4 地址。 空
端口 目标运行时的 AMS 端口:851 是 TwinCAT 3 的第 1 个 PLC 运行时,再往后的 TwinCAT 3 运行时从那里往上数(852、853、……)。框留空时 851 以灰色显示,用的就是这个运行时;以 0 保存的设备也是这样显示的。 851
本机 IP(AMS) 本工作站自己的 IP 地址,它的 AMS Net Id 由此推成 {ip}.1.1。它必须和 PLC 上配置的 AMS 路由对上。框留空时,用的是本工作站在通往 PLC 的网络上的地址,并以灰色显示;在框里填了值,就改用填的值。 空
PLC 的 AMS Net Id PLC 自己的 AMS Net Id,用于 id 不是其 IP 地址后面跟 .1.1 的 PLC:用点分隔的六个 0 到 255 之间的数,与 TwinCAT XAE 在 SYSTEM > Routes 的 NetId Management 选项卡中显示的 Target NetId 一致。框留空时用主机的 IPv4 地址后面跟 .1.1,并以灰色显示。不是 AMS Net Id 的值会让设备保持断开,并说明应该填什么。 空
轮询间隔(ms) 整台设备的读取周期,供没有自己另作规定的点位使用。 1000

设备标题栏显示拼好的 endpoint,例如 ads://192.168.0.1:192.168.0.50:851(本机 IP、PLC IP、AMS 端口)。每个点位都可以设自己的轮询间隔(ms);点位填 0 就退回设备的间隔。

ADS 只应答 PLC 有 AMS 路由的那些工作站:要加哪条路由、在哪里加,见准备 PLC。

准备 PLC

TwinCAT PLC 只对它的 AMS 路由器有路由的工作站应答 ADS。没有这条路由,路由器会在 TCP 端口 48898 接受连接,然后把它关掉或者一直不应答,所以即使网络通路完全正常,连接也会失败。请在 PLC 上为本工作站加一次静态路由:

TwinCAT Add Route 对话框的字段 值
名称:Route Name (Target) 任意名称;提示里建议用本工作站的计算机名。
Net Id:AmsNetId 本工作站的地址后面跟 .1.1,和驱动从本机 IP(AMS)推出来的那个一致。
传输:Transport Type 传输方式 TCP_IP
地址:Address Info 本工作站的地址,并选中 IP Address。
路由类型:Target Route 和 Remote Route Static 和 None

在 TwinCAT XAE 中把 PLC 选为目标系统,打开 SYSTEM > Routes 的 Static Routes 选项卡,再点 Add。在 PLC 自己的桌面上,通知区域里的 TwinCAT 图标通过 Router > Edit Routes 也能打开同一个列表。

这个地址是本工作站在通往 PLC 的那个网络上的地址。装了几块网卡的计算机每块网卡各有一个地址,路由只对它写明的那个地址有效。本机 IP(AMS)留空时,驱动使用 Windows 通往 PLC 时经过的那块网卡的地址,框里以灰色显示它:路由要写的就是这个地址。在框里填了值,就改用填的值,路由也必须写这个值。

PLC 的路由器因为缺少路由而拒绝本工作站时,设备页面会用一条提示代替驱动的错误来说明:一条可以直接添加的路由(它的名称、本工作站的 AMS Net Id、它的地址和传输方式,每项都带复制按钮),以及在 TwinCAT 里添加它的位置。PLC 一应答,提示就会自行消失,日志和智能体读到的也是同一条路由。拒绝连接或一直不出声的端口,会照实说明,而不会被说成缺少路由。

本工作站用 AMS Net Id 来寻址 PLC,而 PLC 的路由器只应答发给它自己那个 id 的请求:AMS Net Id 和本工作站所用的不一致的 PLC 同样永远不会应答,看起来和缺少路由完全一样。如果 PLC 上已经有这条路由却仍然不应答,请在 TwinCAT XAE 的 SYSTEM > Routes 的 NetId Management 选项卡中核对 Target NetId,并把它填到 PLC 的 AMS Net Id 里;提示里会写出本工作站所用的那个 id。

寻址

Beckhoff 的点位靠点位“信号源”卡片里的两个字段寻址:

字段 含义 接受的取值 默认值
符号 这个变量在 PLC 程序里的符号路径。必填。 自由文本,例如 MAIN.fValue 空
读取长度(字节,留空为自动) 每次读取传输多少字节。留空就按数据类型定读取的大小。 1 及以上,或留空 留空

符号路径就是 TwinCAT 显示的那个:程序变量写作 MAIN.fValue,全局变量列表写作 GVL.MachineSpeed 或 GVL_Settings.rSetpoint。驱动在 PLC 上按名字解析这个符号,并读它的原始字节。自动的读取长度是:

数据类型 自动读取长度
Boolean 1 字节
Int32 4 字节
Float 4 字节
String 16 字节

文本长于 16 个字符时,请把读取长度设到能覆盖声明的大小(一个 TwinCAT 的 STRING(80) 需要 80 字节的文本)。“信号源”卡片里那行只读的源地址(总线)会随着你编辑显示拼好的地址。

PLC 拒绝的读取(例如读一个它没有的符号,或一个它不允许读的符号)会让点位没有值,点位的原因会写出 ADS 错误代码及其含义,例如 ADS error 0x710 (no symbol by that name)。连接保持不断,其他点位照常读取;PLC 应答下一次读取时,这个原因就会消失。

数据类型

数据类型选择器提供驱动能编排的那四种类型:

数据类型 PLC 里的对应物 说明
Boolean BOOL 1 字节,非零为真
Int32 DINT 小端序,和 PLC 一致
Float REAL 小端序,和 PLC 一致
String STRING 读缓冲区里直到第一个 NUL 为止的文本

字节序就是 PLC 自己的小端序,由驱动自动处理;没有字节序选项。文本读取会把返回的缓冲区解码到第一个 NUL 结束符为止,所以一段短文本后面的填充绝不会漏进这个值里。别的 TwinCAT 位宽(INT、LREAL、WORD、……)不提供:请在 PLC 程序里把这样的变量以上面那四种类型之一暴露出来,再在这里读。

写入

访问为读写或只写的点位可以被写。一次写入会解析同一个符号,并写下这个值的字节:布尔 1 字节,Int32 和 Float 各 4 字节。文本写入会铺满这个点位整个读取长度:前面是文本的 UTF-8 字节,后面是零,所以用一段短文本盖住一段长文本时,整个值都被替换掉,旧的一点儿都不剩。装不进声明长度的文本会被拒绝,长度写进诊断日志,绝不会被截短了塞进去。新点位一开始是只读。

PLC 拒绝的写入(例如写一个它不允许写的符号)会以拒绝返回,并带上 ADS 错误代码及其含义,例如 ADS error 0x704 (the symbol may not be written);连接保持不断。

设备发现

这个驱动里的 ADS 没有广播式的设备发现,所以 Connector 不显示“发现设备”按钮。设备和它的符号请手工添加。

需要知道的事

  • 第一次连接失败,通常的原因就是 AMS 路由:PLC 上那条路由的 AMS Net Id 必须恰好是工作站 IP 加上 .1.1,设备页面会给出要添加的整条路由。
  • 驱动在每次连接里只向 PLC 要一次每个符号的句柄,连接关闭时再把句柄还回去。PLC 下载之后,PLC 不再认的句柄会在下一次读取时换掉,所以点位在新程序下照常读取;被这次下载重命名或删掉的符号,会让它的点位没有值,并带上 ADS error 0x710 (no symbol by that name),直到名字重新对上为止。
  • 一台够不着的 PLC 在启动时不花什么代价:设备在后台一直重试,在连接接上之前它的点位读作质量不可用。