Victor_m
Junior Member / Новичок
Участник № / Member № 9501
отправлено / posted
Доброго времени суток. Начинаю остаивать Trace Mode 6.10 (бесплатная версия). Столкнулся с небольшими трудностями с записью 4 байтового значения в ОВЕН СИ30. Возник ряд вопросов относительно ТM и ее работы с DWORD.
1) Возможна ли обработка и отображение на ГЭ считываемого 4 байтового значения в формате UDINT без принудительной склейки двух слов в DWORD с помощью программных решений? 2) Каким образом отправить в счетчик СИ30 четырех байтовое значение или опять необходимо какие-то программные манипуляции? С чтением и записью двухбайтовых значений проблем нет. По отдельности слова засылаются, СИ30 их суммирует и выдает правильное значение. А вот отправить все байты одной посылкой пока не получатся. Пробовал разные варианты с каналом HEX32 и т.д. Как я понимаю, проблема состоит в разделении DWORD в 2xWord.Спасибо за ответ.
Сообщения / Posts 5 | Из / From: РФ
| IP / IP: IP адрес / IP address |
В стандарте ModBus нет понятия 4-х байтовое значение или DWORD.
Так же в описании к СИ30 в параметрах, у которых указан размер "Unsigned long (4 байта)" зафиксированы два modbus-адреса. Т.е., это непосредственно СИ30 читает два регистра и интерпретирует их как одно 4-х байтовое значение. Запись необходимо производить групповой записью в оба регистра.
Сообщения / Posts 17263 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Victor_m
Junior Member / Новичок
Участник № / Member № 9501
отправлено / posted
Да, протокол связи Modbus RTU. Я знаю, что Modbus не поддерживает передачу 4х байтовые значения. В это и суть вопроса... Я хочу передать значение DEC 999999 в CИ30. Создаю элемент Значение аргумента, привязываю его к каналу HEX32 тип данный UDINT и соответственно, упираюсь в то, что я не могу передать это значение непосредственно в СИ30, т.к. функция 3,4,10 Modbus не поддерживает передачу 4х байт данных. Т.е. мне нужно предварительно разделить DWORD на 2хWord... Поэтому, передача двух слов не представляется возможным, потому, что они даже не сформированы ТМ.
Сообщения / Posts 5 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Victor_m
Junior Member / Новичок
Участник № / Member № 9501
отправлено / posted
Соответственно,групповая запись предполагает наличие несколько слов, которые будут записаны друг за другом. В моем случае, ТМ формирует DWORD, которое записать указанным Вам способом нельзя.
Сообщения / Posts 5 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Victor_m
Junior Member / Новичок
Участник № / Member № 9501
отправлено / posted
Но я выход нашел, по средством функций DHL и HLD. Я преобразую входные 4 байта в DWORD, а выходные 4 байта в два Word. Но, это действительно неудобство, потому как налагают дополнительные элементы для преобразования значения...
Ещё один интересный вопрос. Можно ли на одном элементе Значение аргумента производить отображение значения и его ввод? Опять забегая на перёд, мне удалось вывести в панели МРВ соответствующее значение. Но к сожалению, отображение происхотид с привязков к Реальному значениею, а ввод к Входному. Объединить не получилось. Может Вы подскажите, что я делаю не так.
Сообщения / Posts 5 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Victor_m
Junior Member / Новичок
Участник № / Member № 9501
отправлено / posted
Прошу прощения, но за выходные накопились ещё вопросы, которые мягко говоря ставят меня в недоумение. На фото показан результат преобразования с Float в UINT. В каждом из примеров результаты разные. Что это такое? Сообщения / Posts 5 | Из / From: РФ
| IP / IP: IP адрес / IP address |
quote:Отправитель / Originally posted by Victor_m: Т.е. мне нужно предварительно разделить DWORD на 2хWord... Поэтому, передача двух слов не представляется возможным, потому, что они даже не сформированы ТМ.
Верно. DWORD (он же 32 битный DINT или UDINT) необходимо разделить на два WORD'а (он же 16битный INT или UINT).
Указанные типы данных поддерживаются в ТМ6. Что бы Разделить один DINT/UDINT на два INT/UINT используйте в FBD-блоках блок HLD
Сообщения / Posts 17263 | Из / From: Россия
| IP / IP: IP адрес / IP address |
quote:Отправитель / Originally posted by Victor_m: Но я выход нашел, по средством функций DHL и HLD. Я преобразую входные 4 байта в DWORD, а выходные 4 байта в два Word. Но, это действительно неудобство, потому как налагают дополнительные элементы для преобразования значения...
Как мы обсудили в начале топика - В стандарте ModBus нет понятия 4-х байтовое значение или DWORD.
quote:Отправитель / Originally posted by Victor_m:
Ещё один интересный вопрос. Можно ли на одном элементе Значение аргумента производить отображение значения и его ввод? Опять забегая на перёд, мне удалось вывести в панели МРВ соответствующее значение. Но к сожалению, отображение происхотид с привязков к Реальному значениею, а ввод к Входному. Объединить не получилось. Может Вы подскажите, что я делаю не так.
Этот вопрос не относится к тематике данного топика. Создайте отдельный топик и подробно изложите решаемую задачу.
Сообщения / Posts 17263 | Из / From: Россия
| IP / IP: IP адрес / IP address |
quote:Отправитель / Originally posted by Victor_m: На фото показан результат преобразования с Float в UINT. В каждом из примеров результаты разные. Что это такое?
Вы пытаетесь вещественное число разложить на два целочисленных без преобразования.
Для начала над входным аргументом (вещественный) проведите всю мат.обработку и передайте в выходной аргумент программы (он типа inout, целочисленный).