Открываю этот пример, меняю адрес регистра, IP адрес, порт на свои значения, сохраняю для профайлера, запускаю профайлер. Нажимаю запуск, профайлер вылетает. В логе записано только START и всё, даже STOP нету. В чём может причина? В примере ничего не говорилось про то, как должен быть настроен контроллер FX3u. Поддерживает ли TraceMode протокол UDP или связь с контроллером осуществляется на базе TCP/IP?
Сообщения / Posts 11 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Протокол обмена от производителя, который используется для этого драйвера, ориентирован на TCP. У драйвера по этому протоколу добавлены новые функции, в связи с чем несколько расширился формат записи параметров в строке "Дполнителько" соответствующего "Источника". После <IP-адрес>:<порт> надо поставить "точку с запятой" - ";". Контроллер должен предоставлять информацию по выбраннму Вами регистру.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Anatoly S.
Junior Member / Новичок
Участник № / Member № 4459
отправлено / posted
А какие новые функции добавлены??? Я пытаюсь считать с контроллера FX3u число типа FLOAT допустим 27,4, а TRACEMODE считывает число 13107. То есть старшее и младшее слова меняются местами. Как можно нормально считать FLOAT?
Сообщения / Posts 11 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Поскольку вещественные числа в контроллерах Mitsubishi, как правило, хранятся в D-регистрах как {вещественное число} * 10, то Вам необходимо связать описатель Источника данных в адресном пространстве контроллера с каналом класса FLOAT и внутри этого канала выполнить необходимую обработку - в нашем случае использовать множитель 0.1
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Anatoly S.
Junior Member / Новичок
Участник № / Member № 4459
отправлено / posted
Данный совет не помог моей проблеме, в итоге вместо 27,4 я получил число 1310,7. Уважаемая тех.поддержка, пожалуйста, помогите. Я Вам отправил письмо на hotline3@adastra.ru - прочтите, пожалуйста. Продублирую здесь вопрос: Не могли бы вы, пожалуйста, ответить на такие вопросы:
1. При считывании по протоколу Melsec числа типа FLOAT из области памяти D ПЛК Mitsubishi FX3u, в TRACEMODE получаем число с неправильной последовательностью байт, а именно старшее и младшее слова поменяны местами (27,4 (0x333341DB) считывается как 13107 (0x41DB3333)). Как изменить порядок считывания байт?
2. Как в среде TRACEMODE организовать передачу считанных данных по одному протоколу (например, Melsec) передать дальше по другому протоколу (например, МЭК 104). То есть я настроил отдельно считывание по MELSEC, настроил отправку пакетов по МЭК 104, как организовать связь между считываемыми и отправляемыми данными (может быть в "программе" что-то навроде "a_IEC = a_MC;" или еще где-то, у меня ощущение, что это должно делаться гораздо проще)?
Сообщения / Posts 11 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
1. Если в памяти контроллера в двух (четырех) регистрах типа D формируется вещественное число, то и считывать в ПК нужно оба (четыре) этих регистра в самом простом варианте в два (четыре)канала класса HEX16 и с помощью программы "собирать" из них вещественное число с последующей записью в канал класса FLOAT. Под "сборкой" понимается формирование мантиссы, порядка и знаков мантиссы и порядка вещественного числа. Более сложный вариант предполагает выполнение группого запроса с помощью канала CALL ChGrReq с получением содержимого регистров на его аргументах, "сборку" вещественных чисел программой и помещение результатов в каналы FLOAT. А вообще, лучше оперировать в контроллере целочисленными значениями и, зная вес разрядов, собирать их на ПК как было предложено в предыдущем ответе. 2. Ощущение на этот раз не подвело, канал CALL с типом вызова Move.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Anatoly S.
Junior Member / Новичок
Участник № / Member № 4459
отправлено / posted
Спасибо большое за ответ и совет. К сожалению, нам не представляется возможности изменить тип параметров с Float на Int, т.к. программа уже готова и отлажена в контроллере и менять типы переменных у большого количества параметров не желательно.
Формат хранения в памяти контроллера стандартный, 4хбайтовый. Читаю FLOAT из одного регистра D70. Я так понимаю, что FLOAT TM6 также 4хбайтовый.
Насколько я знаю в протоколе MODBUS можно изменять последовательность байт (0,1,2,3 или 1,0,3,2 и т.д.). Меня интересует возможно ли это сделать для протокола Melsec или это получается недоработка TM6 в том, что числа типа Float считываются неправильно?
Сообщения / Posts 11 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Ваша проект сделан так, что в канал считывается содержимое одного д в у х б а й т о в о г о регистра D70. То что в PLC возможно хранение вещественного числа в двух смежных D-регистрах каналу TRACE MODE не известно. Кстати, в документации melsec отсутствует прямое указание на "стандартный 4-х байтовый" формат хранения.... Для протокола Modbus не существует "стандартного" представления вещественного числа, но поскольку данный протокол весьма распространен и его применяют множество разработчиков, подчас довольно своеобразно трактующие представление вещественных чисел, то и отмеченная Вами возможность имеется в нашей системе.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Anatoly S.
Junior Member / Новичок
Участник № / Member № 4459
отправлено / posted
Спасибо большое за разъяснение, теперь как-то всё встало на свои места (что касаемо регистров). Вы уже ответили в общих чертах каким образом считывать FLOAT, который хранится в двух регистрах D:
quote: нужно оба (четыре) этих регистра в самом простом варианте в два (четыре)канала класса HEX16 и с помощью программы "собирать" из них вещественное число с последующей записью в канал класса FLOAT. Под "сборкой" понимается формирование мантиссы, порядка и знаков мантиссы и порядка вещественного числа. Более сложный вариант предполагает выполнение группого запроса с помощью канала CALL ChGrReq с получением содержимого регистров на его аргументах, "сборку" вещественных чисел программой и помещение результатов в каналы FLOAT. А вообще, лучше оперировать в контроллере целочисленными значениями и, зная вес разрядов, собирать их на ПК как было предложено в предыдущем ответе.
А какой формат хранения REAL у TraceMode? По стандарту IEEE754 как Single? То есть 23 бита мантисса, 8 бит экспонента со смещением от 127, 1 знаковый бит? Если можете, пожалуйста, дайте пример по "склейке" двух каналов hex16 во FLOAT или хотя бы ссылку, где можно прочитать подробное описание языка Техно ST.
Сообщения / Posts 11 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Формат хранения вещественного числа в TRACE MODE выполняется по IEEE 754-1985. Примером таким не располагаем, но подобная программа, на наш взгляд, может с успехом разрабатываться как на ST, так и на FBD. Подробное описание языков представлено во встроенной в систему разработки документации.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |