如何从DB560读取字符串,偏移量为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);发布于 2018-10-02 06:45:51
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);
}https://stackoverflow.com/questions/52590723
复制相似问题