UMAS(施耐德电气 PLC)
该协议用于施耐德电气的 PLC,例如 M340、M580 以及搭载 Unity 固件的 Quantum PLC。
该驱动支持 PLC 标签的读取、写入和浏览。
需要在 PLC 上启用数据字典(Data Dictionary)。
| 该驱动提供 Java 和 Plc4Py 两种实现。两者的标签地址语法略有不同;如有差异,将在下文说明。 |
|---|
支持的操作
| 名称 | 值 | 描述 |
|---|---|---|
read | ||
write | ||
browse | ||
ping | ||
subscribe | Java,轮询模拟实现。Go,原生实现——Go 驱动的订阅并非基于轮询读取构建。 |
连接字符串
UMAS 的连接字符串格式如下:-
umas:{transport}://{ip-address}:{port}?{options}一个示例连接字符串如下:-
umas:tcp://127.0.0.1:502注意,transport、port 和 option 字段是可选的。
连接字符串选项
| 名称 | 类型 | 默认值 | 必填 | 描述 |
|---|---|---|---|---|
| 名称 | 类型 | 默认值 | 必填 | 描述 |
| UMAS (Schneider Electric) | 代码 |
umas
Maven 依赖
<dependency>
<groupId>org.apache.plc4x</groupId>
<artifactId>plc4j-driver-umas</artifactId>
<version>1.0.0</version>
</dependency>默认传输协议
tcp
支持的传输协议
tcp
配置选项:
unit-identifier
INT
0
Modbus 单元标识符(从站地址)。UMAS 通常使用 0。
request-timeout-ms
INT
4000
UMAS 请求的超时时间(毫秒)。
max-frame-size
整数 (INT)
65535
UMAS 最大帧长度。PLC 在 InitComms 期间报告其实际限制值。
browser-generate-array-nodes
BOOLEAN
true
告知浏览器生成表示各个数组元素的虚拟子节点。
传输配置选项:
tcp
tcp.connect-timeout-ms
INT
5000
以毫秒为单位的连接超时时间。
tcp.read-timeout-ms
INT
0
以毫秒为单位的套接字读取超时时间。0 表示不超时。
tcp.write-timeout-ms
INT
0
套接字写入超时时间(毫秒)。0 表示不超时。
tcp.no-delay
BOOLEAN
true
启用 TCP_NODELAY(禁用 Nagle 算法)。
tcp.keep-alive
BOOLEAN
false
启用 SO_KEEPALIVE。
tcp.send-buffer-size
INT
81920
以字节为单位的发送缓冲区大小。0 表示使用系统默认值。
tcp.receive-buffer-size
INT
81920
以字节为单位的接收缓冲区大小。0 表示使用系统默认值。
tcp.local-address
STRING
要绑定的本地地址(可选)。如未设置,使用默认值。
tcp.local-port
INT
0
用于绑定的本地端口(可选)。0 表示使用临时端口。
标签地址
寻址功能已在 Go、Java 和 Python 中实现。关于各实现所支持的内容,请参阅协议支持矩阵](...)。
通用格式
UMAS 地址是在 PLC 程序中声明的符号名称,遵循常规的 IEC 61131-3 约定:
{tag-name}
{tag-name}[{index}]
{tag-name}.{child-name}
{tag-name}.{child-name}[{index}].{child-name}根据标签类型的的不同,子名称参数是可选的。例如,BOOL 数据类型的标签可以是 TESTING_BOOL_1,而如果是 UDT,则标签名称后面会跟子名称 TESTING_UDT_1.START,其本身也可以是 BOOL。方括号中的索引用于选择单个元素,可以出现在路径的任意位置。
| 数组选择使用共享的表示法——单个索引、闭区间范围,以及可选的、位于类型之前的数组声明下界。参见 数组寻址。 |
|---|
Java 驱动从 PLC 的数据字典中获取数据类型,因此地址不带 :{data-type} 后缀——添加该后缀会使地址无效。 |
|---|
内存区域
除了 PLC 中定义的标签之外,Plc4Py 还可以访问 %S 和 %SW 系统内存区域。
这些区域中数据的具体地址细节在设备手册中有说明。
这些区域的地址格式示例为 %SW1 或 %S20。
这些系统内存地址仅受 Plc4Py 支持。Java 驱动的地址解析器只接受符号名称,会拒绝以 % 开头的地址。 |
|---|
数据类型
支持以下数据类型
- BOOL(布尔)
- SINT(有符号 8 位整数)
- USINT(无符号 8 位整数)
- BYTE(无符号 8 位整数)
- INT(有符号 16 位整数)
- UINT(无符号 16 位整数)
- WORD(无符号 16 位整数)
- DINT(有符号 32 位整数)
- UDINT(无符号 32 位整数)
- DWORD(无符号 32 位整数)
- REAL(浮点数)
- STRING(字符)
- TIME
- DATE
- TOD(一天中的时间)
- DATE_AND_TIME
示例
| 地址 | 含义 |
|---|---|
g_r32 | 一个简单的全局变量 |
g_plant.meta.r32 | 一个嵌套的结构体成员 |
g_arrInt[3] | 数组的第四个元素 |
g_plant.items[2].value | 结构体与数组的混合访问 |
说明与提示
Go 驱动生成的 DataItem 解析器没有针对 DATE、TIME_OF_DAY(TOD)或 DATE_AND_TIME 的分支——仅凭解析器本身,这三种类型都会落到"不支持的类型"。驱动通过以下方式弥补了这一缺口:decodeReadResponse 和 encodeWriteValue 中的 plc4go/internal/umas/Values.go 手动解码并手动编码这三种时间类型(以及 STRING),其方式与 plc4j 的 UmasConnection 相同,因此 DATE 和 TIME_OF_DAY 标签的读写能够成功完成,而不是被拒绝。上表列出的每种数据类型在两种语言中都能读写。
UMAS 在任何语言中都没有附带捕获的测试数据——没有任何数据包捕获或黄金字节序列可供任一驱动进行比对。Java 和 Go 驱动改为相互验证:它们的符号地址模式逐字节完全一致,并且上述 Go 时间/字符串解码是有意移植自 plc4j 的手动解码实现。请将该驱动的正确性视为已通过跨实现一致性验证,而非通过真实捕获的通信交换验证。
评论
登录后参与评论
KnowForge