该节点是作为 ST-One 项目的一部分创建的。
安装
您可以直接从 Node-RED 界面中的 “管理面板” 菜单安装此节点。
或者,在 Node-RED 用户目录中运行以下命令 - 通常在 Linux 上是 ~/.node-red
或在 Windows 上是 %HOMEPATH%\.nodered
npm install node-red-contrib-s7
需要 NodeJS 版本 10 或更高版本以及 Node-RED 版本 1.0 或更高版本。
用法
每个与 PLC 的连接都由 S7 端点配置节点表示。您可以配置 PLC 的地址、可用变量及其地址以及读取变量的循环时间。
S7 In 节点使变量的值在流中以三种不同的模式可用:
- 单个变量:可以从配置的变量中选择单个变量,并且每个周期发送一条消息,或者如果检查了 diff 则仅当它发生变化时发送消息。
msg.payload
包含变量的值,msg.topic
具有变量的名称。 - 所有变量,每条消息一个:与单变量模式类似,但适用于配置的所有变量。如果选中 diff,则每次任何变量更改时都会发送一条消息。如果未选中 diff,则在每个周期中为每个变量发送一条消息。必须注意此模式下每秒的消息数。
- 所有变量:在此模式下,
msg.payload
包含一个包含所有配置变量及其值的对象。如果选中 diff,则当至少一个变量更改其值时,将发送一条消息。
变量寻址
S7 Endpoint 上配置的变量及其地址遵循的方案与 Step 7 或 TIA Portal 上使用的方案略有不同。以下是一些可以指导您处理变量的示例:
地址 | 相当于 Step7 | JS 数据类型 | 描述 |
---|---|---|---|
DB5,X0.1 | DB5.DBX0.1 | 布尔值 | DB 5 字节 0 的位 1 |
DB23,B1 或 DB23,BYTE1 | DB23.DBB1 | 数字 | DB 23 的字节 1 (0-255) |
DB100,C2 或 DB100,CHAR2 | DB100.DBB2 | 字符串 | DB 100 的字节 2 作为字符 |
DB42,I3 或 DB42,INT3 | DB42.DBW3 | 数字 | DB 42 的字节 3 处有符号 16 位数字 |
DB57,WORD4 | DB57.DBW4 | 数字 | DB 57 字节 4 处的无符号 16 位数字 |
DB13,DI5 或 DB13,DINT5 | DB13.DBD5 | 数字 | DB 13 的字节 5 处有符号 32 位数字 |
DB19,DW6 或 DB19,DWORD6 | DB19.DBD6 | 数字 | DB 19 的字节 6 处的无符号 32 位数字 |
DB21,R7 或 DB21,REAL7 | DB21.DBD7 | 数字 | DB 21 的字节 7 处的浮点 32 位数字 |
DB2,S7.10* | - | 字符串 | 从 DB 2 的字节 7 开始的长度为 10 的字符串 |
I1.0 或 E1.0 | I1.0 或 E1.0 | 布尔值 | 输入区域字节 1 的位 0 |
Q2.1 或 A2.1 | Q2.1 或 A2.1 | 布尔值 | 输出区域字节 2 的位 1 |
M3.2 | M3.2 | 布尔值 | 内存区域字节 3 的位 2 |
IB4 或 EB4 | IB4 或 EB4 | 数字 | 输入区域的字节 4 (0 -255) |
QB5 或 AB5 | QB5 或 AB5 | 数字 | 输出区域的字节 5 (0 -255) |
MB6 | MB6 | 数字 | 内存区域的字节 6 (0 -255) |
IC7 或 EC7 | IB7 或 EB7 | 字符串 | 输入区域的字节 7 作为字符 |
QC8 或 AC8 | QB8 或 AB8 | 字符串 | 输出区域的字节 8 作为字符 |
MC9 | MB9 | 字符串 | 内存区域的字节 9 作为字符 |
II10 或 EI10 | IW10 或 EW10 | 数字 | 输入区域字节 10 处的有符号 16 位数字 |
QI12 或 AI12 | QW12 或 AW12 | 数字 | 输出区域字节 12 处的有符号 16 位数字 |
MI14 | MW14 | 数字 | 内存区域字节 14 处的有符号 16 位数字 |
IW16 或 EW16 | IW16 或 EW16 | 数字 | 输入区域字节 16 处的无符号 16 位数字 |
QW18 或 AW18 | QW18 或 AW18 | 数字 | 输出区域字节 18 处的无符号 16 位数字 |
MW20 | MW20 | 数字 | 内存区域字节 20 处的无符号 16 位数字 |
IDI22 或 EDI22 | ID22 或 ED22 | 数字 | 输入区域字节 22 处的有符号 32 位数字 |
QDI24 或 ADI24 | QD24 或 AD24 | 数字 | 输出区域字节 24 处的有符号 32 位数字 |
MDI26 | MD26 | 数字 | 内存区域字节 26 处的有符号 32 位数字 |
ID28 或 ED28 | ID28 或 ED28 | 数字 | 输入区域字节 28 处的无符号 32 位数字 |
QD30 或 AD30 | QD30 或 AD30 | 数字 | 输出区域字节 30 处的无符号 32 位数字 |
MD32 | MD32 | 数字 | 内存区域字节 32 处的无符号 32 位数字 |
IR34 或 ER34 | IR34 或 ER34 | 数字 | 输入区域字节 34 处的浮点 32 位数字 |
QR36 或 AR36 | QR36 或 AR36 | 数字 | 输出区域字节 36 处的浮点 32 位数字 |
MR38 | MR38 | 数字 | 内存区域字节 38 处的浮点 32 位数字 |
DB1,DT0 | - | 日期** | DATE_AND_TIME 格式的时间戳 |
DB1,DTZ10 | - | 日期** | DATE_AND_TIME 格式的时间戳(UTC) |
DB2,DTL2 | - | 日期** | DTL 格式的时间戳 |
DB2,DTLZ12 | - | 日期** | DTL 格式的时间戳(UTC 格式) |
DB57,RWORD4 | DB57.DBW4 | 数字 | DB 57 字节 4 处的无符号 16 位数字,解释为 Little-Endian |
DB13,RDI5 或 DB13,RDINT5 | DB13.DBD5 | 数字 | DB 13 的字节 5 处的有符号 32 位数字,解释为 Little-Endian |
MRW20 | MW20 | 数字 | 内存区域字节 20 处的无符号 16 位数字,解释为 Little-Endian |
备注:
- 布尔值 表示是非类型的值,例如开或关。
- 数字 表示可以是整数或浮点数的值。
- 字符串 表示文本类型的值。
- 日期 表示时间戳类型的值。
*) 请注意,PLC 上的字符串在开头使用 2 个额外字节来表示字符串的大小/长度
**) 请注意,javascriptDate
始终以UTC 表示。请使用其他节点(例如node-red-contrib-moment)来正确处理类型转换
关于 S7-1200/1500 的注意事项
这些较新的 PLC 提供 S7 协议的 “扩展” 版本,而我们只有 “基本” 版本。
因此,需要对 PLC 进行一些额外的配置步骤:
- 对于我们想要访问的数据库,必须禁用 “优化块访问”。
- 在 CPU 属性的 “保护” 部分中,启用 “允许使用 PUT/GET 访问” 复选框。
标志注意事项!
最新的标志!8.FS4(可能还有 0BA8)逻辑模块无需再将模式设置为 TSAP,而是使用默认的机架/插槽值 0/2 即可正常工作。
下表显示无需在控制器程序中进行额外设置即可访问的存储区域:
标志块 | 标志 VM 范围 | 示例 Node-RED 地址 | 描述 |
---|---|---|---|
I | 1024 - 1031 | DB1,BYTE1024 或 DB1,X1024.5 或 DB1,WORD1024 | 读取输入端子 1...8 或 6 或 1...16 |
AI | 1032 - 1063 | DB1,WORD1032 | 读取模拟输入端子 1。始终为字大小。 |
Q | 1064 - 1071 | DB1,BYTE1064 或 DB1,X1064.5 或 DB1,WORD1064 | 读取输出端子 1...8 或 6 或 1...16 |
AQ | 1072 - 1103 | DB1,WORD1072 | 读取模拟输出端子 1。始终为字大小。 |
M | 1104 - 1117 | DB1,BYTE1104 或 DB1,X1104.5 或 DB1,WORD1104 | 读取位标志 M1...M8 或 M6 或 M1...16 |
AM | 1118 - 1245 | DB1,WORD1118 | 读取模拟标志 1。始终为字大小。 |
NI | 1246 - 1061 | DB1,BYTE1246 或 DB1,X1246.5 或 DB1,WORD1246 | 读取网络输入 1...8 或 6 或 1...16 |
NAI | 1262 - 1389 | DB1,WORD1262 | 读取模拟网络输入 1。始终为字大小。 |
NQ | 1390 - 1405 | DB1,BYTE1390 或 DB1,X1390.5 或 DB1,WORD1390 | 读取网络输出 1...8 或 6 或 1...16 |
NAQ | 1406 - 1469 | DB1,WORD1406 | 读取网络输出 1。始终为字大小。 |
这个表格描述了在 Siemens Logo! 控制器中可访问的不同存储区域,并提供了如何在 Node-RED 中使用这些区域的实际示例。每个区域都有特定的范围和功能,例如读取输入端子、模拟输入或输出端子等。
另一方面,Logo 内存区域 VM 0-849 从控制器外部是可变的,但需要将它们映射到 Logo 程序中。如果没有映射,写入这些地址的数据将不会影响程序的执行。上述范围内使用的VM地址可以使用“网络”功能块在Logo程序中读取/写入(在功能块设置中使用“本地变量存储器(VM)”选项将VM映射到功能堵塞)。
一些寻址示例:
标志虚拟机 | 示例 Node-RED 地址 | 描述 |
---|---|---|
0 | DB1,BYTE0 | 读/写访问 |
1 | DB1,X1.3 | 读/写访问 注意:使用布尔值 |
2..3 | DB1,WORD2 | 读/写访问 |
4..7 | DB1,DWORD4 | 读/写访问 |
这个表格描述了在 Siemens Logo! 控制器中可变的虚拟机存储区域,以及如何在 Node-RED 中访问这些区域。每个区域都提供了读写访问权限,不同的地址范围表示不同的数据类型和大小。例如,BYTE、WORD、DWORD 分别表示不同大小的数据单位。
回复