我需要使用预定义标签从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");
有人有任何建议吗?
答案 0 :(得分:0)
解决问题的一种简洁方法,对我来说最好的方法是使用OPC UA服务器......
我相信最近的一些S7型号可能有内置的OPC UA服务器
理论上也可以使用另一个支持以太网/ IP协议的PLC品牌,例如Omron或AB,使用Ethernet / IP可以按名称而不是通过内存地址引用变量,但我认为这个功能只是出现在高级PLC中。
无论如何,使用原始S7协议无法实现您的目的
答案 1 :(得分:-1)
构建内存映射。将数据读入字节数组。然后,您可以使用地址(偏移到数组)使用BitConverter转换数据。所以你需要使用下面的类创建一个字典。然后,您可以在字典中查找地址。要构建字典,请读取表格的一行,将一个条目添加到字典中。
class Map
{
public static Dictionary<string, Map> dict = new Dictionary<string, Map>();
string name { get; set; }
long address { get; set; }
Type _type { get; set; }
}