у Вас вроде в тексте точки в двух местах, а в массиве то два то три. Это с чем связано? А в остальном у вас как раз значения байт, переводите через указатель в строку и получаете требуемый результат
Вид для печати
у Вас вроде в тексте точки в двух местах, а в массиве то два то три. Это с чем связано? А в остальном у вас как раз значения байт, переводите через указатель в строку и получаете требуемый результат
capzap, Да это так сниффер преобразует. Все равно не могу догнать. Если можно, напишите пример. Меня интересует байтовый массив 56 48 50 52 70 57 66 57 48 49, начинаю преобразовывать 56>8; 48>0; в итоге первый интересующий меня байт должен быть равным 80, далее 50,52 второй байт должен быть равным 24 и так далее. Как то вот так!
у меня нет возможности пример полазать, не по памяти же исходник выложить по телефону. Сперва создаете указатель на строку размером с массив, присваиваете командой АДР имеющийся массив, дальше строке присваиваете значение указателя. И у Вас сразу появится нужная запись в строке.
Откройте в инете любую таблицу аскии, 48 соответствует нулю, 65 соответствует английской А
capzap, спасибо за помощь, кое что получилось '$028024F9B901$032C'.
Если «это так сниффер преобразует» и не принимать во внимание его мусор с долларами, то:http://images.devs-on.net/Image/PluC...ysUntitled.pngКод:PROGRAM PLC_PRG
VAR CONSTANT
src: ARRAY[0..9] OF BYTE := 56, 48, 50, 52, 70, 57, 66, 57, 48, 49;
END_VAR
VAR
i: INT;
buf: STRING(5) := '16#00';
pBuf: POINTER TO ARRAY[0..4] OF BYTE;
result: ARRAY[0..4] OF BYTE;
END_VAR
pBuf := ADR(buf);
FOR i := 0 TO SIZEOF(result) - 1 DO
pBuf^[3] := src[i * 2];
pBuf^[4] := src[i * 2 + 1];
result[i] := STRING_TO_BYTE(buf);
END_FOR
В строчке:
saHEX: ARRAY [0..15] OF STRING(1) := '0','1','2','3','4','5','6','7','8','9','A','B','C ','D','E','F';
ошибка, необходимо заменить на:
saHEX: ARRAY [0..15] OF STRING := '0','1','2','3','4','5','6','7','8','9','A','B','C ','D','E','F';
и + огромное СПАААСИИИБООО!!! ОЧЕНЬ помогло:-)
Здравствуйте, Цапзап.
В ходе компиляции у меня ругается на вышеуказанную строку, после внесения изменений программа заработала (CoDeSys 2.3)
Во вложении сам процесс ругательства.
Огромное спасибо за наводку. Померил размер занимаемой памяти
intTemp:=SIZEOF(saHEX);
и .... ппц.
Исправил строку на нижеследующую:
saHEX: ARRAY [0..15] OF STRING(2) := '0','1','2','3','4','5','6','7','8','9','A','B','C ','D','E','F';
Объем занимаемой памяти снизился с 1296 до 48 байт.
P. S. Век живи век учись :-)
Совсем запутался. Задача такая, есть переменная STRING с номером абонента '9051458992', это значение нужно разбить пополам "90514" и "58992" в формате DWORD и отправить на панель Скады. Помогите пожалуйста