Просмотр полной версии : Как из REAL сделать 2 * WORD (для Modbus)?
SokolovA
13.07.2016, 21:19
Добрый вечер!
ПЛК 150 используется как модуль ввода-вывода для СПК 110 (зачем, не спрашивайте, рак мозга у одного товарища-погроммиста).
Протокол обмена - Modbus-RTU через RS485.
Модбас передает максимум переменные типа WORD. Аналоговые входы\выходы имеют тип REAL (по длине - 2хWORD).
Вопрос - как сделать в Codesys 2.3 из REAL два WORD.
MEMCPY, насколько я понял, оно не умеет.
Как еще?
Заранее спасибо!
lara197a
13.07.2016, 21:41
модбас передает все
4 байта
8 байт
флоат
файл
и т.д.
плк 150 тоже
_Mikhail
13.07.2016, 22:32
Для передачи REAL между ПЛК и СПК не надо его разбивать. нужно считывать оба регистра и составлять обратно REAL.Все это описано http://www.owen.ru/forum/showthread.php?t=23897
(зачем, не спрашивайте, рак мозга у одного товарища-погроммиста)
вполне нормальное решение, чтоб не закупать модули по отдельности
а вот по Вам
1) выше уже написано что конфигуратор плк150 позволяет иметь в слейве и реалы в том числе
2) memcpy может и не работает, только она для КДС3.5, а в КДС2.3 используется sysmemcpy
3) вариантов как еще масса
SokolovA
13.07.2016, 23:08
вполне нормальное решение, чтоб не закупать модули по отдельности
а вот по Вам
1) выше уже написано что конфигуратор плк150 позволяет иметь в слейве и реалы в том числе
2) memcpy может и не работает, только она для КДС3.5, а в КДС2.3 используется sysmemcpy
3) вариантов как еще масса
Неа, не нормальное, ни по деньгам - экономии в данном конкретном случае в минус рубль, ни по технологичности - вместо разработки я трачу время на разбивку\склеивание переменных.
ПЛК 150 передает REAL. А вот на стороне 3.6 у меня такая http://i.piccy.info/i9/08796125136446202e0ae4ae0143f4ac/1468439960/201414/1051572/150.jpg (http1://i.piccy.info/i9/08796125136446202e0ae4ae0143f4ac/1468439960/201414/1051572/150.jpg).
Модбас больше чем WORD не принимает, тип сменить нельзя, он зависит от команды, а они только для BOOL (Функция 01), BYTE (02), WORD (03, 04).
2. За sysmemcpy спасибо.
3. А какой вариант наилучший, напишите плиз!
lara197a
13.07.2016, 23:43
преобразовывает в ворд
2байта тупо улетели
опять берете исходное
сдвигаете в право(могу путать право-лево) на 16
и преобразовываете в ворд.
получаете второй ворд
можно почитать что такое реал
упаковываете в один регистр мантису
в др. экспоненту.
у меня раз попадалась обратная задача с расходомера данные прочесть
создал фб. потребуется кину в личку.
Неа, не нормальное, ни по деньгам - экономии в данном конкретном случае в минус рубль, ни по технологичности - вместо разработки я трачу время на разбивку\склеивание переменных.
ПЛК 150 передает REAL. А вот на стороне 3.6 у меня такая http://i.piccy.info/i9/08796125136446202e0ae4ae0143f4ac/1468439960/201414/1051572/150.jpg (http1://i.piccy.info/i9/08796125136446202e0ae4ae0143f4ac/1468439960/201414/1051572/150.jpg).
Модбас больше чем WORD не принимает, тип сменить нельзя, он зависит от команды, а они только для BOOL (Функция 01), BYTE (02), WORD (03, 04).
2. За sysmemcpy спасибо.
3. А какой вариант наилучший, напишите плиз!
Т.е. у Вас нет сложностей опрашивать несколько устройств в сети, вместо одного?
У Вас нет проблем с габаритами шкафа для этой мини-задачи?
Из модуля аналоговых входов, Вам тоже пришлось бы "выуживать" РЕАЛ по модбас, не вижу разницы с текущим вариантом комплектации. Если Вы планировали забирать ИНТ-ы, то кто мешает делать это в плк?
SokolovA
14.07.2016, 12:32
Нормальное решение программиста который не занимается хренью в виде разбивки/склеивания мифических регистров, а пересылает целиком структуры и пьет пиво пока вы пытаетесь "экономить рубль".
Модбас вообще не работает c BOOL, BYTE, WORD.
Функции 1,2 - атавизм. Функции 3,4 позволяют прочитать объем абстрактных данных от 2 до 250 байт куда можно пихнуть практически все что угодно с точки зрения автоматизации.
Рубль тут никто не экономит, написал, чтобы не спрашивали про финансовую составляющую.
Ок, и как же их переслать, эти структуры, со стороны 2.3, если аналоговый вход имеетр тип REAL, а в 3.6 я не могу задать произвольный тип переменной, которая мне приходит по модбасу, она только WORD или меньше. То есть 250 байт он может и могет, но они будут разбиты на N переменных типа WORD. Которые нужно резать на источнике (ПЛК 150) и склеивать на приемнике (СПК 110).
Еще раз, скрин (http://i.piccy.info/i9/08796125136446202e0ae4ae0143f4ac/1468439960/201414/1051572/150.jpg).
Тип WORD в переменной не меняется.
Т.е. у Вас нет сложностей опрашивать несколько устройств в сети, вместо одного?
У Вас нет проблем с габаритами шкафа для этой мини-задачи?
Из модуля аналоговых входов, Вам тоже пришлось бы "выуживать" РЕАЛ по модбас, не вижу разницы с текущим вариантом комплектации. Если Вы планировали забирать ИНТ-ы, то кто мешает делать это в плк?
А в чем проблема опрашивать 5 модулей? Они это сами делают, мне ни строчки кода писать не надо, только раздать адреса и настройки залить в модули.
Проблемы, наверное, будут, когда один из модулей отвалится, но тогда и вся система станет неработоспособной.
Габариты - это не мои проблемы, в данной задаче. Но, в общем и целом, шкафы производства РФ пока еще есть и они стоят копейки.
Из модулей мне ничего выуживать не надо, есть готовое решение от Овена - шаблоны модулей. Вопросы взаимодействия с шиной от меня экранированы в данном случае, что упрощает и ускоряет разработку.
Либо у меня не тот кодесис, либо я что-то делаю не так. Еще раз, тип аналогового входа на ПЛК 150 - REAL. В модбас-слейв на ПЛК я могу сделать переменную REAL. Но на 3.6 мой канал имеет тип ARRAY [0...4] OF WORD, и изменить ни тип канала, ни, соответственно, тип переменных в канале я не могу руками.
В этом-то вся и проблема.
Значит, нужно на ПЛК запихивать REAL в два WORD, а на СПК наоборот их склеивать.
Что не так? :)
Что не так? :)
да много чего не так, не ликбез же проводить
переходите в тему http://www.owen.ru/forum/showthread.php?t=23897 скачивайте документ SPK_Modbus_v.0.ХХ до страницы 120 раздел 6.4.2. Описание реализации на языке ST ну и дальше по описанию
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot