Цитата Сообщение от Brandon_heat_dre Посмотреть сообщение
В общем не знаю что это был за регистр 40 , слово состояния прекрасно считалось с адреса C417 кодом приведенным выше. Есть теперь пара других вопросов по итогу что такое Buffer и как он заполняется, числа там совсем не понятные по логике же они должны быть в двоичном виде типа 101011100 и так далее а там какой то набор из 1 23 2 64 215 и так далее в итоге строчкой x:=BYTE_TO_WORD(buf2[1]) OR SHL(BYTE_TO_WORD(buf2[0]),8); все переводится в божеский вид 515 или 519 и это уже число полностью соотвествует битам заложенным в слово состояния если число 515 перевести в двоичный вид.

и теперь всплывает вопрос а как бы записать правильно командное слово?


ShowString(0,0,0,WORD_TO_STRING(x));


IF com_ready1=TRUE THEN


w2(
Enable:=TRUE,
Mode:= MB_RTU,
DevAddr:=1,
FirstAddr:=16#C417,
Quantity:=2,
ComHandle:=Settings1.Port,
TimeOut:=T#100ms,
Buffer:=buf2,
);

compl1:=w2.Complete;
err1:=w2.Exception;

IF err1=0 AND compl1 THEN
ClearScreen(0);

x:=BYTE_TO_WORD(buf2[1]) OR SHL(BYTE_TO_WORD(buf2[0]),8);
ShowString(0,0,0,WORD_TO_STRING(x));
END_IF

END_IF

Что не понятно с буфером?
Буфер обЪявлен byte.
Считываются регистры, то есть 1 регистр = 2 byte.
Сложив данные двух byte вы получаете нужное вам значение.
Для записи обратное дейстие:
раскладываются переменные по Byte в буфер и передаются