S7 数据对接

S7 协议数据采集与设备控制

版本说明(当前版本功能有缺)

由于当前版本telegraf(数据对接) 不支持 connectionType (参考下文的技术参数说明)

device-service v1.5.0 虽然支持S7 ,但数据采集仅作为PG连接,部分PLC支持的PG连接数小于2 时数据对接无法滚动升级,后台配置下发功能故障

官方支持 20240610

我们已经向telegraf提交了对于connectionType的功能,预计20240610后1.31.0 版本支持

临时性构建

我们根据提交 重新构建了telegraf 1.28.5版本 registry.cn-hangzhou.aliyuncs.com/engi_cloud/telegraf:1.28.5-engi 由于不能保证镜像的稳定性,不纳入标准化功能

需要在升级device-service 1.5.0后额外进行修改device-service 配置文件中参数 engi.kubernetes.telegraf.image

设备类配置

新增设备类

设备类名称:『自定义』 通讯方式:S7 设备通讯类型:直连设备

时间格式:『随便选,无效』 以采集时间为准 jsonQuery:『无需填写』

设备类物模型属性配置

属性Key,按下列点位定义填写 【数据区标识】.【数据类型标识】【地址】 【数据区标识】.【数据类型标识】【地址】.【bit】 举例 <DB1.R4> <DB1.X2.1> <I.X1.1>

支持的数据区标识

数据区数据区标识
process inputsPEI区
process outputsPAO区
MerkersMKM区
DBDB[Number]DB块
countersC
timersT

支持的数据类型

数据类型数据类型标识
bitX
ByteB
WordW
Double WordDW
Interger(16)I
Double IntegerDI
RealR
date-timeDT
StringS

设备类采集脚本

用默认的即可。不用改

设备类控制配置

用默认的即可。不用改

新增设备

设备名称:『自定义』 通讯方式:S7 设备通讯类型:直连设备

技术参数

技术参数列表

参数名参数值模板是否必填默认值其它
server127.0.0.1必填非默认102端口填写具体端口如 127.0.0.1:103
rack0必填轨道号,根据实际填写
slot1必填槽号,根据实际填写
typeS7_1200必填类型,从下列值选择填入:S7_300 , S7_400 , S7_1200 , S7-1500 , LOGO
pduSize18非必填18非必填,根据实际情况调整,参考技术参数说明
connectionTypeOP非必填OP采集连接类型,从下列值选择填入:PD ,OP , basic
writeConnectionTypeOP非必填OP控制连接类型,从下列值选择填入:PD ,OP , basic

技术参数说明

type

根据PLC 系列填入 ,可选项有 7_300 , S7_400 , S7_1200 , S7-1500 , LOGO 200smart 填LOGO

connectionType与writeConnectionType

我们在数据采集侧 需要 起码2 个连接,控制侧 需要 1个连接 (对接要求)

西门子S7系列一般支持三种类型的S7访问

类型说明
PD作为PG/PC连接
OP作为显示屏、触摸屏一类连接
basicS7 basic 通信
三种类型在很多PLC都会有连接数量的限制,而且PG/PC连接可能数量较少

这里采集和控制侧 开放出来实施时根据现场情况调整

pduSize

这里pduSize 指代 一个 pdu中 fields 也是采集点位的个数,假设一共40点 pduSize=20 也就是分两批进行采集,实际讨论时我们认证pdu-size 一般指byte数

不同系列\批次的PLC其实对S7的单包长度其实是有限制的,支持的pduSizeByte (byte) 大概在240 ~ 960,像300/400是有明确限制:S7-300 max. 240 byte PDU 、S7-400 max. 480 byte PDU 。

这里我们提供了一个较为保守的默认值为18,对于的是240 bytes 由于对接使用的 驱动协议库默认设置pduSize 为 38 ,大约为 480 bytes

现场使用的PLC 型号一般不会真的这么差,所以我们也是强烈建议提高 pduSize 以 提高数据采集效率

同时 我们也基于type 对pduSize 进行了一些限制检查 ,对于S7-300 限制 18 ;LOGO不设限,但建议使用默认18;全局限制最大 38。

超出PLC支持的长度时对接容器内部会采集报错(开发可以注意下这个)