如何从DB560读取PLC的字符串,偏移量为0.0,大小为12字节。垃圾值来自输出。
S7Client客户端=新的S7Client();client.SetConnectionType(S7.S7_BASIC);int res = …
的前2个字节 的 S7数据类型字符串 强> 如下面所述:
位置n:最大长度 位置n + 1:当前长度
因此,第一个字符不在位置n而在位置n + 2处。
byte[] data = new byte[14]; client.ReadArea(S7.S7AreaDB, 560, 0, 14, data); String ret = S7.GetStringAt(data,0+2,12);
替代方案:
byte[] data = new byte[12]; client.ReadArea(S7.S7AreaDB, 560, 2, 12, data); String ret = S7.GetStringAt(data,0,12);
或者你将moka7代码改为这样的代码(这是sharp7的代码):
public static string GetStringAt(byte[] Buffer, int Pos) { int size = (int)Buffer[Pos + 1]; //Current length of the string return Encoding.UTF8.GetString(Buffer, Pos + 2, size); }