Читать строку из plc используя moka7

Как прочитать строку из ПЛК из 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);

1 ответ

Первые 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);
}
Другие вопросы по тегам