0

如何从 DB560 中读取来自 PLC 的字符串,偏移量为 0.0,大小为 12 字节。垃圾值出现在输出端。

S7Client client = new S7Client();
client.SetConnectionType (S7.S7_BASIC);
int res = client.ConnectTo("192.168.0.1", 0, 1); 
byte[] data = new byte[12];
client.ReadArea(S7.S7AreaDB, 560, 0, 12, data); 
String ret = S7.GetStringAt(data,0,12);
System.out.println(ret);
4

1 回答 1

0

S7 数据类型字符串的前 2 个字节如下:

位置 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);
}
于 2018-10-02T06:45:51.797 回答