Сообщение от
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