у Вас вроде в тексте точки в двух местах, а в массиве то два то три. Это с чем связано? А в остальном у вас как раз значения байт, переводите через указатель в строку и получаете требуемый результат
у Вас вроде в тексте точки в двух местах, а в массиве то два то три. Это с чем связано? А в остальном у вас как раз значения байт, переводите через указатель в строку и получаете требуемый результат
capzap, Да это так сниффер преобразует. Все равно не могу догнать. Если можно, напишите пример. Меня интересует байтовый массив 56 48 50 52 70 57 66 57 48 49, начинаю преобразовывать 56>8; 48>0; в итоге первый интересующий меня байт должен быть равным 80, далее 50,52 второй байт должен быть равным 24 и так далее. Как то вот так!
у меня нет возможности пример полазать, не по памяти же исходник выложить по телефону. Сперва создаете указатель на строку размером с массив, присваиваете командой АДР имеющийся массив, дальше строке присваиваете значение указателя. И у Вас сразу появится нужная запись в строке.
Откройте в инете любую таблицу аскии, 48 соответствует нулю, 65 соответствует английской А
capzap, спасибо за помощь, кое что получилось '$028024F9B901$032C'.
Если «это так сниффер преобразует» и не принимать во внимание его мусор с долларами, то:Код: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';
и + огромное СПАААСИИИБООО!!! ОЧЕНЬ помогло:-)
Автоматизация Диспетчеризация Сервис
e-mail: ads-kaluga@mail.ru
Здравствуйте, Цапзап.
В ходе компиляции у меня ругается на вышеуказанную строку, после внесения изменений программа заработала (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. Век живи век учись :-)
Последний раз редактировалось Gans; 18.06.2019 в 22:07.
Автоматизация Диспетчеризация Сервис
e-mail: ads-kaluga@mail.ru
Автоматизация Диспетчеризация Сервис
e-mail: ads-kaluga@mail.ru
Совсем запутался. Задача такая, есть переменная STRING с номером абонента '9051458992', это значение нужно разбить пополам "90514" и "58992" в формате DWORD и отправить на панель Скады. Помогите пожалуйста