协议

UMAS(施耐德电气 PLC)

qianmoQqianmoQ· 更新于 2026-10-01· 阅读 10 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

该协议用于施耐德电气的 PLC,例如 M340、M580 以及搭载 Unity 固件的 Quantum PLC。

该驱动支持 PLC 标签的读取、写入和浏览。

需要在 PLC 上启用数据字典(Data Dictionary)。

该驱动提供 Java 和 Plc4Py 两种实现。两者的标签地址语法略有不同;如有差异,将在下文说明。

支持的操作

名称值描述
read
write
browse
ping
subscribeJava,轮询模拟实现。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 的手动解码实现。请将该驱动的正确性视为已通过跨实现一致性验证,而非通过真实捕获的通信交换验证。

评论

登录后参与评论

正在加载评论…