推荐使用 python-snap7 库,它对 Siemens S7 系列 PLC 的 I/Q 区和 DB 块读写支持较完善。下面给两个最常用的示例:读写 I/Q 区 和 读写 DB 块。
1,安装
pip install python-snap7
2,连接 PLC
import snap7
# 创建客户端
plc = snap7.client.Client()
# 连接到 PLC (IP, rack, slot)
plc.connect("192.168.0.1", 0, 1)
print("PLC Connected:", plc.get_connected())
3,读写 I/Q 区 (输入/输出映像区)
I 区 = 输入 (Inputs),Q 区 = 输出 (Outputs)。
from snap7.util import get_bool, set_bool
# 读取 Q 区 (输出区),比如 Q0.0
data = plc.read_area(snap7.types.Areas.PA, 0, 0, 1) # PA=Process Outputs
q0_0 = get_bool(data, 0, 0) # byte=0, bit=0
print("Q0.0 =", q0_0)
# 写 Q0.0 = True
set_bool(data, 0, 0, True)
plc.write_area(snap7.types.Areas.PA, 0, 0, data)
4,读写 DB 块
假设 DB1 中有一个 INT 在偏移 0。
from snap7.util import get_int, set_int
# 读取 DB1 偏移 0 的 INT
data = plc.read_area(snap7.types.Areas.DB, 1, 0, 2) # DB1, 偏移0, 长度2字节
value = get_int(data, 0)
print("DB1.DBB0 (INT) =", value)
# 写入新值 1234
set_int(data, 0, 1234)
plc.write_area(snap7.types.Areas.DB, 1, 0, data)
5,说明
Areas.PE → 输入区 (I)
Areas.PA → 输出区 (Q)
Areas.DB → 数据块 (DB)
偏移量和数据类型要与 PLC 程序定义一致,否则会读写错误。
python-s7comm 库更偏底层,协议解析功能强,但实际工程中 snap7 更稳定。
如果这篇文章对你有帮助,记得点个赞/收藏,方便以后查找。
也欢迎在评论区分享你的经验或看法,让更多人受益。
觉得有价值的话,转发给朋友,一起学习成长。祝周末愉快!