прошу прощения за очередной тупой вопрос, но ответа на форуме найти не смог. Нужно отправить ответ на запрос модбас мастера. Длина данных в ответе 120 байт. Уперся в то, что не могу понять как преобразовать различные типы данных переменных в HEX'ы(и наоборот) для последующей упаковки их в массив ответа.
Чтобы понять рекурсию нужно понять рекурсию
что-то у меня крыша уже едет. Я перемешал яблоки с картошкой. Нужно же ведь всего лишь перевести из десятичной в шестнадцатиричную)))) А я мозг парю как перевести из float в шестнадцатиричную систему))))) Ну анекдот)) извините за беспокойство
Как стандартными средствами перевести число из одной СС в другую? Неужели нет никакой функции соответствующей? Вручную писать переводы из одной СС в другую вообще не серьезно(((((
Чтобы понять рекурсию нужно понять рекурсию
1. Что значит "подгонка ПЛК под Модбас устройство-мастер?
2. Что значит "Нужно отправить ответ на запрос модбас мастера. Длина данных в ответе 120 байт. Уперся в то, что не могу понять как преобразовать различные типы данных переменных в HEX'ы(и наоборот) для последующей упаковки их в массив ответа"?
Если Вы пишете свой собственный Модбас-слейв модуль, то преобразовать REAL можно так
В четыре байта
в DINT такКод:(* FLOAT2BYTES *) (* Converts a REAL Value into the corresponding *) (* digital representation. [Inverse Operation of *) (* "BYTES2FLOAT"] *) FUNCTION float2bytes : ARRAY [0..3] OF BYTE VAR_INPUT IN: REAL; END_VAR VAR ptv: POINTER TO ARRAY [0..3] OF BYTE; END_VAR ptv:=ADR(IN); float2bytes:=ptv^;
Это функции из бесплатной библиотеки HBMutilities.lib http://www.users-conference.com/se_d...es/HBMutil.zipКод:(* FLOAT2DINT *) (* Converts a REAL Value into the corresponding *) (* digital representation. [Inverse Operation of *) (* "DINT2FLOAT"] *) FUNCTION float2dint : DINT VAR_INPUT IN: REAL; END_VAR VAR ptv: POINTER TO DINT; END_VAR ptv:=ADR(IN); float2dint:=ptv^;
А если используете конфигуратор, то не понятно над чем Вы бьетесь.
Проверить преобразования в различные форматы можно здесь http://www.binaryconvert.com/index.html
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
да, я пишу свой модбас слейв, потому что в конфигурации ПЛК нет деления на холд и инпут регистры. Плк опрашивается устройством мастером которое групповым запросом опрашивает регистры modbus по 120 байт за раз. Поменять это устройство никак невозможно, поэтому нужно подстроить ответы ПЛК под эти запросы. В вашем варианте получается тип byte. вроде все верно, но все равно не будет в шестнадцатиричной системе, а ведь посылки MB должны быть в шестнадцатиричной или нет?
Чтобы понять рекурсию нужно понять рекурсию
Стандартная ситуация.
Есть некоторая система. Одно устройство умерло, отремонтировать или заменить на аналогичное или совместимое - не возможно (по любой причине). Программа в ведущем контроллере - не доступна.
Приходится - вот так, лепить эмуляцию.
Но ответа - пересекаются пространства input и holding регистров я так и не услышал. Если не пересекаются (а чаще всего - так) - то и ладно, не все ли равно, какой функцией считывать.
Если все таки собственный модуль Модбас-слейв, то подсчитать CRC можно Функцией CRC_GEN от OSCATA описание http://www.owen.ru/forum/showpost.ph...84&postcount=4
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Вы получите массив из четырех байтов. В них будут нолики и единички - двоичная система счисления!
А HEX это тоже самое, только для удобства восприятия человеком.
0000b=0h
0001b=1h
0010b=2h
0011b=3h
............
1110b=Eh
1111b=Fh
и соответственно представление одного и того же числа
десятичное 23=(0001 0111)b=17h
десятичное 203=(1100 1011)b=CBh
Так что Вы точно зациклились на пустом месте
Как и с
совершенно на ровном местенет деления на холд и инпут регистры
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg