【发布时间】:2021-02-25 16:55:26
【问题描述】:
有没有办法仅在 C# 中从其变量(名称)中读取数据库数据?考虑 SIMATIC S7 PLC 1200,例如我想从我不知道地址(偏移量)的数据库中读取数据,我只知道数据库编号、符号名称和数据类型。参考请看下图。
我已经通过 Sharp7(非优化数据库方法)建立了工作连接,但我总是需要一个地址。我还寻找了其他一些解决方案,例如,
- Rothenbacher GmbH 的“S7 连接器”
- s7.Net | S7netplus
但它似乎对我不起作用。我也不知道这是否可能,因为我在某处听说 PLC 只取地址而不取变量名。
所有的cmets都非常满意。
【问题讨论】:
-
您正在从通信接口读取数据。我从未使用过 S7,但人们在我工作的地方使用过。 Snap7 论坛更好地回答了这个问题。您不是从数据库读取,而是从硬件接口读取。所以我不确定你为什么使用数据库方法。
-
根据Manual,我必须首先从 PLC.DB
public int DBGet(int DBNumber, byte[] usrData, ref int Size)读取所有字节(数据),然后调用将那个字节转换为我的数据类型的本机 sharp7 方法,即(int,float等等)S7.GetRealAt(Buffer, offsetPosition);。我已经彻底检查了手册,似乎不可能。有一个新的更新,SIMATIC S7 1200 和 1500 将变量名存储在 CPU 中,而低版本只接受地址和数据。您有什么建议使用? -
查看 WriteArea/ReadArea。
-
已经提到了 ReadArea/WriteArea 但到目前为止还没有运气。因为所有数据包都严格依赖于 PDU,它们只引用数据(S7Consts.S7AreaPE| 过程输入。)通过 sharp7 或其他似乎不可能。我可能会转向 OPC UA。
-
区域名称在“S7BlockInfo struct”中。所以你首先要搜索“S7BlockInfo struct”