注意:以下内容是摘自ChatGPT的回答,注意辨别是否正确。
node-snap7 是 Snap7 的 Node.js 绑定库,允许 Node.js 应用程序与 西门子 S7 PLC 进行通信。它提供了多种方法用于连接、读取和写入 PLC 数据。
1. S7Client 类的方法
S7Client 是 node-snap7 主要的客户端类,提供与 PLC 通信的核心功能。
(1)连接与断开
| 方法 | 作用 |
|---|
ConnectTo(ip, rack, slot, callback) | 连接到 PLC,指定 IP 地址、机架 (Rack) 和 插槽 (Slot) |
Connect() | 连接到之前 SetConnectionParams() 设置的 PLC |
Disconnect() | 断开与 PLC 的连接 |
SetConnectionParams(address, localTSAP, remoteTSAP) | 设置连接参数 |
SetConnectionType(type) | 设置连接类型,默认 102 (PG/PC) |
GetConnected() | 检查当前是否连接到 PLC |
(2)读取数据
| 方法 | 作用 |
|---|
ReadArea(area, dbNumber, start, amount, wordLen, callback) | 读取指定 区域 (DB, Inputs, Outputs 等) 的数据 |
DBRead(dbNumber, start, size, callback) | 读取 DB块 (Data Block) 数据 |
ReadMultiVars(items, callback) | 读取多个变量数据 |
ReadSZL(id, index, callback) | 读取 SZL (System Zone List) 数据 |
(3)写入数据
| 方法 | 作用 |
|---|
WriteArea(area, dbNumber, start, amount, wordLen, buffer, callback) | 向 PLC 的指定区域写入数据 |
DBWrite(dbNumber, start, size, buffer, callback) | 向 DB块 (Data Block) 写入数据 |
WriteMultiVars(items, callback) | 写入多个变量数据 |
(4)PLC 控制
| 方法 | 作用 |
|---|
PLCStop(callback) | 停止 PLC |
PLCColdStart(callback) | 冷启动 PLC |
PLCWarmStart(callback) | 热启动 PLC |
(5)PLC 状态
| 方法 | 作用 |
|---|
GetCPUInfo(callback) | 获取 PLC CPU 信息 |
GetCPUTimer(callback) | 获取 CPU 计时器 |
GetCPUStatus(callback) | 获取 CPU 状态 (RUN, STOP) |
GetOrderCode(callback) | 获取 PLC 订货号 |
GetPlcDateTime(callback) | 获取 PLC 当前日期时间 |
SetPlcSystemDateTime(callback) | 设置 PLC 系统时间 |
(6)诊断 & 其他
| 方法 | 作用 |
|---|
GetExecTime() | 获取上次执行命令所用的时间 (ms) |
ErrorText(errorCode) | 返回错误代码的文本描述 |
LastError() | 获取上次错误的错误码 |
SetAsCallback(callback, userdata) | 设置回调函数 |
SetPlcSystemDateTime(callback) | 设置 PLC 系统时间 |
2. S7Server 类的方法
S7Server 允许将 Node.js 程序模拟成 PLC 服务器,供其他 S7 设备访问。
| 方法 | 作用 |
|---|
StartTo(ip) | 启动服务器,监听指定 IP |
Stop() | 停止服务器 |
RegisterArea(area, index, userData) | 注册服务器的存储区域 |
UnregisterArea(area, index) | 取消注册存储区域 |
PickValue(area, index, start, size, callback) | 读取服务器的数据 |
DropValue(area, index, start, size, buffer, callback) | 写入服务器的数据 |
3. 数据区域常量
在 ReadArea() 和 WriteArea() 时,需要指定 area 代表 PLC 存储区域:
| 常量 | 代表区域 |
|---|
S7AreaPE | 过程输入 (I) |
S7AreaPA | 过程输出 (Q) |
S7AreaMK | 记忆 (M) |
S7AreaDB | 数据块 (DB) |
S7AreaCT | 计数器 (C) |
S7AreaTM | 计时器 (T) |
4. 数据类型常量
在 ReadArea() 和 WriteArea() 时,需要指定 wordLen 代表数据类型:
| 常量 | 代表数据类型 |
|---|
S7WLBit | 1 bit |
S7WLByte | 1 字节 |
S7WLWord | 2 字节 (Word) |
S7WLDWord | 4 字节 (Double Word) |
S7WLReal | 4 字节 (浮点数) |
S7WLCounter | 计数器 |
S7WLTimer | 计时器 |
总结
- S7Client:用于连接、读写 PLC 数据、控制 PLC 运行状态、查询 PLC 信息。
- S7Server:用于在 Node.js 端模拟一个 PLC 服务器,供其他 S7 设备访问。
- 数据区域 & 数据类型:使用
S7AreaDB 等常量指定区域,S7WLByte 等常量指定数据类型。
你可以根据具体需求选择适合的方法进行 PLC 交互。