【发布时间】:2017-10-07 20:12:52
【问题描述】:
我需要使用预定义的标签从 PLC(Siemens S7300) 读取数据。我得到了这些数据的地址,但由于客户的要求,我不能使用他们的地址。我无法处理这个问题。我尝试了一些像(S7.NET)这样的库,但我做不到。
我尝试了一些编码,但都没有给我正确的结果。
如果我尝试
plc.Read("MD40")
为了读取第一行的价值,它给了我价值。
但正如我所说,我不能使用像 (MD40,DB100.DBX0 etc) 这样的值地址。我需要读取像
plc.Read("SP_Bası_1")
.
或者如果我想读取第二行值,我必须使用 bool data = plc.Read("HMI_Start"); 之类的东西,而不是 bool data = plc.Read("MD20.0");
有人有什么建议吗?
【问题讨论】:
-
IEEE754 是浮点数,因为它是四个字节,所以它在 c# 中是一个单一的。读取数据的正确方法是放入一个 BinaryStream 类,一次读取一种类型。对我来说很简单,因为我是 EE 并且以前做过数百次。我怀疑您必须对这些设备进行编程,并且需要将编译器的输出转换为内存块。数据可能是有序的,因此使用 BinaryStream 首先读取一个(四个字节),然后是一个字节布尔值,然后是另一个字节布尔值。
-
@jdweng 感谢您的回答。我的问题不是数据类型。例如。如果我需要阅读第二行,我必须使用 bool data = plc.Read("HMI_Start");插入 plc.Read("MD20.0")。这清楚吗?英语不是我的母语,我无法解释我的问题
-
然后将两个字符串放入类中,即 PLC 标签和地址。如果需要,可以有两个字典,一个通过 PLC 标签查找,另一个通过地址名称查找。
-
但是访问数据地址几乎是一样的。在这个方法中,我首先定义地址,然后通过标签访问,我需要访问而不在 C# 代码中定义任何地址。我是 PLC 的新手,我不能直接访问 PLC 标签,而不在 C# 代码中定义任何地址吗? (在 PLC 内存中定义标签?)
-
我认为您误解了客户的要求。在您的代码内部,您需要地址。客户只想按名称查找值。如果出于安全原因他不希望您在表中创建地址,那么您需要通过顺序遍历表来动态获取数据,直到您获得数据(慢得多)。