AlKon
Forum Professor / Завсегдатай форума
Участник № / Member № 1919
отправлено / posted
Вопрос такой: Как преобразовать целочисленный аргумент (DINT) в 16-форму представления и показать на экране в 16-системе счисления? Задача у меня такая: есть два/три аргумента типа (DINT) - необходимо сцепить их и получить строку в виде номера сот.телефона: "E7910..." а потом "E" заменить на "+"? Каким образом можно это сделать, используя язык ST?
Сообщения / Posts 229 | Из / From: Россия
| IP / IP: IP адрес / IP address |
AlKon
Forum Professor / Завсегдатай форума
Участник № / Member № 1919
отправлено / posted
Вопрос решен, но только почему в программе при обмене с внутренними функциями передаются строки только из 4 символов?
Сообщения / Posts 229 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Свяжите строковые аргументы с текстовыми атрибутами каналов, например, КОММЕНТАРИЯМИ. Тогда Вы сможете манипулировать строковыми переменными длиной до 40 символов.
Сообщения / Posts 17320 | Из / From: Россия
| IP / IP: IP адрес / IP address |
AlKon
Forum Professor / Завсегдатай форума
Участник № / Member № 1919
отправлено / posted
Сообщите пожалуйста в чем дело: Системная переменная @Set_Date возвращает дату и время в секундах с 00:00:00, 01.01.1970 ? У меня получается, что кол-во секунд смещено на три часа, т.е. на три часа меньше?
Сообщения / Posts 229 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Потому что эта переменная показывает абсолютное безсезонное время по Гринвичу, как и все переменные времени в Trace Mode. При отображении таких переменных они "локализуются" в соответствии с системным временем места наблюдения.
Сообщения / Posts 17320 | Из / From: Россия
| IP / IP: IP адрес / IP address |
AlKon
Forum Professor / Завсегдатай форума
Участник № / Member № 1919
отправлено / posted
Может быть подскажете как присвоить переменной типа "Data and Time" значение из переменных типа Int или Real? т.е. есть переменные дата и время в числовом виде с котроллера, как их перевести в Trace Mode формат?
Сообщения / Posts 229 | Из / From: Россия
| IP / IP: IP адрес / IP address |
AlKon
Forum Professor / Завсегдатай форума
Участник № / Member № 1919
отправлено / posted
И еще: В программе на ST наблюдается такое: при делении: переменных SINT на SINT сообщается, что деление на ноль??? переменных INT на INT результат неправильный??? переменных UINT на UINT результат правильный!!!
отправлено / posted
Особенность заключается в том, что операция деления производится только с числами с типом данных REAL (FLOAT).
Сообщения / Posts 17320 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Grigorovskih
Forum Professor / Завсегдатай форума
Участник № / Member № 1915
отправлено / posted
Здравствуйте Господа!
Расскажите мне вот, что:
Есть у меня 4-х байтовое число типа FLOAT в памяти в виде отдельных двухбайтовых слов, как мне собрав эти слова в двойное корректно воспроизвести это число в виде собственно самого FLOATа? т.е. к примеру, есть число 45.56, в памяти это будет выглядеть так 16#42363d71. Есть функция выполненная в виде FBD блока (упаковка слов). Я искусственно (для проверки) задаю в шестнадцатиричном виде для имеющихся у неё входных аргументов UINT(2шт.) значения 16#4236 и 16#3d71 соответственно, т.е. происходит упаковка слов 16#4236 и 16#3d71 в двойное четырёхбайтовое слово 16#42363d71- Аргумент LREAL (выход функции). По скольку выход этого FBD блока связан с аргументом типа LREAL, значит как я понимаю должно произойти преобразование во FLOAT. Так вот в окне значений аргументов при отладке в шеснадцатиричном виде он показывает то что надо, а именно 16#42363d71, а вот Float он показывает не 45.56, а 1,11085*10^9. В чём ошибка?
Сообщения / Posts 362 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
В Trace Mode встроено преобразование типов, поэтому большое целое число будет большим числом во Float. Реализовать Вашу задачу можно только арифметически. Т.е. выделить мантису, порядок и знак, и преобразовать с помощью программки во Float.
Grigorovskih
Forum Professor / Завсегдатай форума
Участник № / Member № 1915
отправлено / posted
Просто есть контроллер I7188 с которого надо читать DWORD, который разбит на два двухбайтовых регистра, а ложит он туда число прямо из памяти но в виде FLOATa (там на С програмка написана, которая читает данные по нестандартному протоколу с другого устройства и врегистры MB TCP ложит), ну я и решил пойти легким путём, но увы... Придётся сделать как Вы говорите, выделить все составляющие и собрать число так сказать "вручную".
Сообщения / Posts 362 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Grigorovskih
Forum Professor / Завсегдатай форума
Участник № / Member № 1915
отправлено / posted
Поступили более изящно! Написали внешнюю библиотеку которая преобразовывает представленное FLOAT число в обычный REAL.
Сообщения / Posts 362 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Grigorovskih
Forum Professor / Завсегдатай форума
Участник № / Member № 1915
отправлено / posted
Уважаемая тех. поддержка!
Почему Вы не посоветовали мне воспользоваться функцией Rout_Float(3)? Там в текстовике необходимо только указать порядок следования байт и все!
Сообщения / Posts 362 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
У Вас было два регистра с WORD. Алгоритм необходимый для преобразования его во Float нам неизвестен. Помогла бы ли Вам простая перестановка байт на тот момент, мы не знали, поэтому и посоветовать не могли.
Сообщения / Posts 17320 | Из / From: Россия
| IP / IP: IP адрес / IP address |