PDA

Просмотр полной версии : Счетчики СЭТ-4TM.02



kanadchikov
30.07.2011, 13:13
Помогите, пожалуйста.
Имеется выше упомянутый счетчик. Отправляю с ПЛК-100 запросы, получаю ответы в десятеричной форме. Никак не могу сообразить как их опять вернуть в шестнадцатеричный формат для последующей трансляции в web сервер. Полный ступор.

Малышев Олег
01.08.2011, 09:49
Не совсем понятно что именно нужно сделать? Если сконвертировать бинарное в 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

kanadchikov
01.08.2011, 13:49
Обмен между счетчиком и контроллером происходит в шестнадцатеричном формате.
Ну, например:
Запрос:
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 страничке. Ну вот такой кавардак!

kanadchikov
11.08.2011, 11:00
Помогите решить проблему!

Малышев Олег
12.08.2011, 08:30
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;

kanadchikov
17.08.2011, 14:06
большое спасибо!