Помогите, пожалуйста.
Имеется выше упомянутый счетчик. Отправляю с ПЛК-100 запросы, получаю ответы в десятеричной форме. Никак не могу сообразить как их опять вернуть в шестнадцатеричный формат для последующей трансляции в web сервер. Полный ступор.
Помогите, пожалуйста.
Имеется выше упомянутый счетчик. Отправляю с ПЛК-100 запросы, получаю ответы в десятеричной форме. Никак не могу сообразить как их опять вернуть в шестнадцатеричный формат для последующей трансляции в web сервер. Полный ступор.
Не совсем понятно что именно нужно сделать? Если сконвертировать бинарное в 16 -ичную строку
ну примерно так
ss:STRING:='0000';
ptr : pointer to byte;
value:WORD:=16#12AB;
ptr:=adr(ss);
for i:=0 to 3 do
value:=SHR(value,i*4);
if ((value and 16#F)<10) then
ptr^:=16#30+(value and 16#F); (*16#30 - код '0'*)
else
ptr^:=16#41+(value and 16#F)-16#A; (*16#41 - код 'A'*)
end_if
ptr:=ptr+1;
end_for
Часто задаваемые вопросы по кодесис
1) Почему программа не работает - Следует выполнить "Онлайн ->Старт"
2) Где скачать CoDeSys, таргеты, прошивки, библиотеки - http://www.owen.ru/catalog/codesys_v3/opisanie
Обмен между счетчиком и контроллером происходит в шестнадцатеричном формате.
Ну, например:
Запрос:
C0 04 00 73 3C
Ответ:
C0 23 21 08 01 01 08 11 00 99 1C
Отправляю ответ на web страничку, а там ответ представляется уже в десятичном виде. В общем хотелось чтобы полученный ответ: C0 23 21 08 01 01 08 11 00 99 1C отразился без изменений на web страничке. Ну вот такой кавардак!
Помогите решить проблему!
PROGRAM PLC_PRG
VAR
data: ARRAY [1..11] OF BYTE:=16#C0,16#23,16#21,16#08,16#01,16#01,16#08,16 #11,16#00,16#99,16#1C;
data_input:POINTER TO BYTE;
input_sz:BYTE:=11;
str_res:STRING(255);
ptr : POINTER TO BYTE;
i: INT;
END_VAR
data_input:=ADR(data[1]);
ptr:=ADR(str_res);
FOR i:=1 TO input_sz DO
IF ((SHR(data_input^,4) AND 16#F)<10) THEN
ptr^:=16#30+(SHR(data_input^,4) AND 16#F); (*16#30 - ??? '0'*)
ELSE
ptr^:=16#41+(SHR(data_input^,4) AND 16#F)-16#A; (*16#41 - ??? 'A'*)
END_IF
ptr:=ptr+1;
IF ((data_input^ AND 16#F)<10) THEN
ptr^:=16#30+(data_input^ AND 16#F); (*16#30 - ??? '0'*)
ELSE
ptr^:=16#41+(data_input^ AND 16#F)-16#A; (*16#41 - ??? 'A'*)
END_IF
ptr:=ptr+1;
ptr^:=32;
ptr:=ptr+1;
data_input:=data_input+1;
END_FOR
ptr^:=0;
Часто задаваемые вопросы по кодесис
1) Почему программа не работает - Следует выполнить "Онлайн ->Старт"
2) Где скачать CoDeSys, таргеты, прошивки, библиотеки - http://www.owen.ru/catalog/codesys_v3/opisanie
большое спасибо!