慧程HiperMatrix系统支持对西门子S7系列的PLC,HiperMatrix使用 S7 协议通过 TCP/IP 连接到西门子 PLC。与 Modbus 和某些 Allen Bradley 连接类似,Siemens S7 设备不支持标签浏览。您可以在HiperMatrix手动创建设备属性,或使用 点位导入/导出在 Excel 创建所有点位。目前,HiperMATRIX具有以下西门子 PLC 的驱动程序:
- Siemens S7-200
- Siemens S7-S200Smart
- Siemens S7-SNon200
- Siemens S7-S300
- Siemens S7-S400
- Siemens S7-S1200
- Siemens S7-S1500
1.连接到西门子PLC
(1)进入边缘连接服务-连接管理,点击新建连接。
(2)选择西门子PLC,选择对应的西门子设备型号。

(3)选择对应的西门子PLC。
(4)输入连接名称和连接地址。

| 通用信息 | 内容 |
|---|---|
| 名称 | 设备连接的名称 |
| 描述 | 设备连接的描述 |
| 节点组 | 节点组指的是集群场景下该连接可以指定给某个边缘节点,属于该节点的设备均可使用此连接,不属于该节点的设备无法正常使用此连接 |
| 启用 | 连接是否处于活动状态。禁用此设置会终止与设备的通信。 |
| 连接性 | |
| 主机名 | 设备的主机名或 IP 地址。如192.168.13.12 |
| 端口 | 连接到设备时使用的端口。默认值为 102。 |
| 超时 | 请求超时时间,以毫秒为单位。默认值为 2,000。 |
| 高级 | |
| CPU插槽号 | 槽号是用来分配CPU模块、电源模块、接口模块、I/O信号模块、通信模块、功能模块等在机架上的具体位置的,主要是用来标记设备的唯一性的,有点各就各位的意思,无规矩不成方圆,只有槽号确定了,位置也就定了,地址才能明确。默认0 注意: 若使用S7 200 Smart 进行连接, 请将此参数设置为 1, 否则读取出错 |
| 机架号 | 设备所在机架的编号。对于扩展的多个机架,安装有CPU的机架称为主机架,即机架号为0,扩展的机架编号依次为1号机架、2号机架、3号机架,这个在通信时会告知与之通信的设备CPU在什么位置。默认为 0。 |
| 连接超时后重新连接 | 在连续几次超时后,设备连接将尝试重新连接到设备。此设置确定在重新连接之前必须发生多少次连续超时。 |
-
可以点击测试连接测试连接是否可以成功,如失败可以在连接日志中查看失败原因。
-
点击提交。提交完成后将显示连接列表,连接状态应该为已连接,启用状态为启用。
西门子设备不支持浏览功能,因此西门子设备对的数据地址需要手动配置或通过excel文件导入的方式进行配置。
2.配置西门子数据地址
2.1 手动指定每个地址
(1)进入设备管理,进入已创建好的设备(关联创建好的西门子PLC的连接),选择一个属性点击编辑
(2)设置数据类型,如 32位浮点数
(3)设置数据地址,如 DB1.DBD6.0
(4)点击确定,那么在属性列表中将能看到对应的参数
2.2 西门子设备地址语法
西门子协议定义格式如下:
%{Memory-Area}{Transfer-Size-Code}{Byte-Offset}.[Bit-Offset}]
- Memory Area: S7驱动允许访问的内存区域。
- Transfer-Size-Code:数据类型代码,根据数据类型参照下面的表格进行设置 [XBWD]。
- Byte-Offset:在内存区域中的的字节起始位。
- Bit-Offset:bit偏移位 。
/**
* TODO S7地址的正则表达式校验
*/
/**
* 对于 INPUTS, OUTPUTS, FLAGS, V 正则地址
* I Q M V
* 例如: I70.1, IW4, MW10, MD22, M70.0, VW8
*/
private static final Pattern ADDRESS_PATTERN =
Pattern.compile("^(?<memoryArea>.)(?<transferSizeCode>[XBWD]?)(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?");
/**
* DB数据块的正则地址
* 目前仅凭借此正则决定DB地址的正确
* 例如: DB1.DBD22, DB1.DBX18.1,DB1.DBD2
*/
private static final Pattern DATA_BLOCK_ADDRESS_PATTERN =
Pattern.compile("^DB(?<blockNumber>\\d{1,5}).DB(?<transferSizeCode>[XBWD]?)(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?");
2.3 内存区域访问补充说明
| Code | Name | Description |
|---|---|---|
| I | INPUTS | 外部输入,各种按钮,开关,传感器等把信号给至PLC的都称之为输入。 |
| Q | OUTPUTS | 是输出端,PLC 输出信号控制别的元件都是接在Q上,如指示灯,继电器等等。 |
| M | FLAGS_MARKERS | 是PLC 内部的辅助继电器,只存在与PLC 内部,主要作用把各个程序段在内部连接起来。 |
| DB | DATA_BLOCKS | 数据存储区,可以用来存储各种非开关量的数字量,像温度等等。包含用户定义数据结构的内存区域通常由整数数据块号访问。请注意,数据块地址的地址格式稍微复杂一些。 |
| V | Holding register | V存储区,变量存储器,具有保持功能。 |
比如一个int16类型的Field,DB1.DBW1.0就是一个合法的origin定义。S7各种数据类型的说明:
2.4 数字功能代码补充说明
| Code | Short-Code | Name | Description | Size in bits | Supported PLC Types |
|---|---|---|---|---|---|
| Bit-Strings (Will all interpreted as sequence of boolean values in PLC4X) | |||||
| BOOL | X | Bit | Single boolean value | 1 | All |
| BYTE | B | Byte | Array of 8 boolean values | 1 | All |
| WORD | W | Word | Array of 16 boolean values | 2 | All |
| DWORD | D | Double-Word | Array of 32 boolean values | 4 | All |
| LWORD | X | Long-Word | Array of 64 boolean values | 8 | S7_1500 |
| Integer values | |||||
| SINT | B | Small int | 8 bit integer (signed) | 1 | S7_1200, S7_1500 |
| USINT | B | Small unsigned int | 8 bit integer (unsigned) | 1 | S7_1200, S7_1500 |
| INT | W | Integer | 16 bit integer (signed) | 2 | All |
| UINT | W | Unsigned integer | 16 bit integer (unsigned) | 2 | S7_1200, S7_1500 |
| DINT | D | Double integer | 32 bit integer (signed) | 4 | All |
| UDINT | D | Unsigned Double Integer | 32 bit integer (unsigned) | 4 | S7_1200, S7_1500 |
| LINT | X | Long integer | 64 bit integer (signed) | 8 | S7_1500 |
| ULINT | X | Unsigned long integer | 64 bit integer (unsigned) | 8 | S7_1500 |
| Floaring pooint values | |||||
| REAL | D | Real | 32 bit IEEE 754 full precision floating point value (signed) | 4 | All |
| LREAL | X | Long Real | 64 bit IEEE 754 double precision floating point value (signed) | 8 | S7_1200, S7_1500 |
| Character values | |||||
| CHAR | B | Character | 8 bit character | 1 | All |
| WCHAR | X | Double byte character | 16 bit character value | 2 | S7_1200, S7_1500 |
| STRING | X | String | String 2 + n bytes | 1 | All |
| WSTRING | X | Double byte String | String of 16 bit characters 2 + n bytes | 1 | S7_1200, S7_1500 |
| Temporal values | |||||
| S5TIME | X | S5 Time | S5 Time (like in duration) | 2 | S7_300, S7_400, S7_1500 |
| TIME | X | Time | Time (like in duration) (Minutes, Seconds, Milliseconds) | 4 | All |
| LTIME | X | Long Time | Long Time (like in duration) (Minutes, Seconds, Milliseconds, Microseconds, Nanoseconds) | 8 | S7_1500 |
| DATE | X | Date | Date | 2 | All |
| TIME_OF_DAY | X | Time of day | Time (like in 4:40PM) | 4 | All |
| DATE_AND_TIME | X | Date and Time | Date and time (like in 03.05.2020 4:40 PM) | 8 | S7_300, S7_400, S7_1500 |
2.5 数据类型转换规则
| S7 Type | IOT前端选择 |
|---|---|
| BOOL | 布尔值 |
| BYTE | 8位整数 |
| WORD | 32位整数 |
| DWORD | 64位整数 |
| REAL | 32位浮点数/64位浮点数 |
| TIME | 64位整数 |
| DATE_AND_TIME | 日期 |
| DATE | 日期 |
| STRING | 字符串 |
2.6 举例合法地址对应的配置
| s7源地址 | 地址值 | 属性配置 |
|---|---|---|
| I70.1 | I70.1 | ![]() |
| IW4 | IW4 | ![]() |
| MD18 | MD18 | ![]() |


