Уже пробовал. Об этом написано на стр.64 в "SPK_Modbus_v1.1"
Уже пробовал. Об этом написано на стр.64 в "SPK_Modbus_v1.1"
Не может ли дело быть в особенностях ТРМ-136 ? Там каждому каналу отведено пять регистров а я, получается использую только два первых.
Да, было такое подозрение. Пробовал считывать 0х0003 "значение температуры float ст. слово" и 0х0004 "значение температуры float мл. слово".
Сейчас два первых: 0х0000 "положение десятичной точки" и 0х0001 "значение температуры int"
Не помогло.
Чувствую, что ерунду какую-то простейшую не вижу, я ведь не программист.
Может быть, подскажите где прочесть кусок справочника/учебника по вопросу преобразования WORD в REAL
У меня есть книга И.В. Петрова по контроллерам, но там не нашел.
У вас skype есть?
Нет..
эл. почта, WhatsApp, телефон.
Здесь можно писать контактные данные?
Напишите мне в личные сообщения (нажав на мой профиль) ваш телефон и во сколько с вами завтра можно будет связаться.
Установите на ПК TeamViewer: https://www.teamviewer.com/ru/
Доброго времени суток. Знает ли кто-нибудь способы заставить работать СПК с HTTP запросами? Есть сервер на backend'e с REST API и информацией в JSON формате. Нужно подружить с ним СПК. Сейчас с этим проблем нет, т.к. АРМ написан на .NET, но пришла идея заменить виндовый АРМ на СПК (типа дешевле и можно одним зайцем убить и АРМ, и ПЛК). Но нагуглить варианты как заставить СПК работать с http запросами и SQLite пока не получается.
В качестве обходного пути можно на сервере, конечно поднять MQTT, т.к. библиотека MQTT под codesys v3 есть, но не хотелось бы.
Добрый день.
Есть пример от 3S:
https://store.codesys.com/http-clien...%20Description
Собственно, там же доступна для приобретения уже готовая библиотека:
https://store.codesys.com/json-http-client-library.html
Добрый день.
На объекте стоит ОВЕН СПК 105, модули расширения 110-е и частотные преобразователи Industrial Systems iG5A. Собственно, вопрос - как их завести с СПК105 по modbus? Пробовал 4-мя способами:
1) добавление Slave-устройства к мастеру Modbus, и далее задание каналов чтения/записи. Ошибка "Шина, возможно, не запущена. Данные не актуальны". Высвечивается красный треугольник напротив слейв-устройства по истечении таймаута;
2) Через библиотеку modulsowenlib, блоки ComConn и UniRead. Блок ComConn включает порт с заданными параметрами (на выходе Done появляется True), блок UniRead "не читает" устройство, по истечении времени timeout выдает ошибку 255 (превышение времени ожидания, как я понимаю);
3) Через библиотеку MODBUS и ComService, блок ComService не включает ком-порт, на выходе не появляется True;
4) Комбинированный метод. В качестве ФБ открытия порта использовал ComConn, в качестве "читающего" ФБ использовал MB_RD_HOLD_REGS (а также MB_RD_INP_REGS) из библиотеки MODBUS. В обоих случаях чтение как будто бы происходит, но за три цикла программы получается следующее: а) флаг Complete=1, ошибка exeption=255, какие-то значения появляются в буфере; б) флаг Complete=0, значения в буфере изменились на другие, счетчик bytecnt=8; в) флаг Complete=0, значения в буфере не изменились, счетчик bytecnt=4; затем повтор с пункта а). Причем, ошибка 255 "привязана" к циклу программы, а не к таймауту ответа. Цикл ставил от 20 до 1000 мс, поведение одинаковое.
Настройки портов проверил, все совпадает. Линия не длинная, 1м от щита до частотника, подключался напрямую, без других устройств в сети. Среда программирования - Codesys 3.5 SP5 Patch 5. Единственное что смущает, что в мануале по частотникам в параметрах modbus прописан параметр "sum check - 2 byte", такого нет в настройках СПК.
При настройке руководствовался интуицией зачеркнуто следующими документами:
- СПК. Настройка обмена по Modbus. Руководство для начинающих и продвинутых пользователей. Версия_ 1.1
- SV-iG5A User Manual.
Благодарен заранее за любую помощь.
Добрый день.
1. Какой номер COM-порта и сетевые настройки выставили в CODESYS?
2. Модули Mx110 опрашиваются успешно?
3. Пробовали опрашивать iG5A с ПК? (OPC-сервером или modbus-тестером)
1) Если настраивать как устройство Modbus_COM, то:
COM-порт: 2
Скорость передачи: 9600
Четность: NONE
Информационные биты: 8
Стоповые биты: 2
Таймаут отклика: 1000
Время между фреймами: 50
"галочка" авто перезапуск соединения
Если через ФБ ComConn, то:
Enable: TRUE
PortNum: 2
PortBaudrate: 9600
PortParity: 0
PortStopBits: 3
PortByteSize: 8
Port_ModeOn: FALSE
Port_CloseOn: FALSE
Ставил или так, или так, то есть либо активен был ФБ и я отключал устройство Modbus Master, либо наоборот.
2)Насчет модулей не могу на данный момент сказать, они находятся удаленно (на крыше), завтра смогу их сконфигурировать только и посмотреть.
3)Нет, не сталкивался еще с подобными задачами. Под рукой есть переходник китайский RS485 на CH340. Типа такого http://www.5v.ru/usb-rs485-m1.htm. Он подойдет в качестве тестера? И какие программы для этого предназначены?
Из программ, например, подойдет наш OPC-сервер:
https://www.owen.ru/product/new_opc_server
2. Модули расширения завелись без проблем.
3. Спасибо за программу, очень помогла. Довольна простая в использовании, без инструкций настроил опрос по modbus. Забыл поменять количество стоп-бит (оставил равным 1) и частотник "ожил".
Производитель не указал, что количество стоп-бит это настраиваемый параметр, а не жестко прописанный, как в мануале по настройке обмена по modbus. Так что инструкцию в топку, а листы параметров оставим себе. Хотя до этого вроде пробовал ставить разные сетевые настройки в СПК, но заработало только сейчас.
Благодарю за помощь. Вопрос закрыт.
Может кто-нибудь знает, как получить информацию о состоянии Modbus Slave устройства? Например, доступ к переменной m_deviceState. (Смотри изображение)
Когда вылетает линия Modbus, то xError отображает ошибку, но только в момент его опроса. А в остальное время, пока Master опрашивает другие устройства, xError - False.
Можно ли как-то узнать - красным или зеленым подсвечен конкретный slave в дереве устройств?Вложение 40109
Здравствуйте!
Подскажите пожалуйста как в CodeSys 3.5 давать широковещательные команды (modbus RTU)?
Modbus работает, настроил slave устройства с заданными адресами все ОК. Но вот широковещательный "0" адрес
устройства задать нельзя, в поле выбора адреса можно задать любые адреса начиная с 1, а не с 0.
В сети планируется 20-40+ устройств с синхронным запуском и остановом, так как устройства это мои платы с моей прошивкой
я могу ОГОГО каких костылей накрутить, но правильней то дать широковещательную команду, но как???
P.S.
Я с этой средой работаю впервые и никак не найду на каком форуме "правильнее" задавать вопросы по CodeSys (Raspberry использую)?
Тут я так понимаю Codesys обсуждается больше в связке с ПЛК фиры Овен?
Все верно - Modbus через конфигурацию не поддерживает Broadcast.
Нужно использовать библиотеки для CODESYS (либо с готовой реализацией Modbus, либо написать свою на базе CAA SerialCom или SysCom).
Применительно к Raspberry - можно вообще реализовать опрос за пределами CODESYS, на базе какой-нибудь готовой linux-библиотеки (libmobus и т.д.) - если это будет вам удобнее.
Да, на форуме компании ОВЕН использование CODESYS обсуждается только применительно к контроллерам ОВЕН.Цитата:
Тут я так понимаю Codesys обсуждается больше в связке с ПЛК фиры Овен?
https://forum.codesys.com/viewforum....0ed115a7821a2cЦитата:
Я с этой средой работаю впервые и никак не найду на каком форуме "правильнее" задавать вопросы по CodeSys (Raspberry использую)?
- эх...Цитата:
Все верно - Modbus через конфигурацию не поддерживает Broadcast.
Спасибо! Так же Ваш документ по визуализации оказался очень полезен, спасибо))))
forum.codesys.com - я пробовал на нем регистрироваться, письмо с активацией не приходит в ответ.
Спасибо за Ваш труд Евгений,
В документации SPK_Sockets_v.1.0 нашел ошибку описания типа хендела буфера:Вложение 40623, проверил она перекочевала в версию 2.
Евгений, если не сложно, раскройте поподробнее тему работы с библиотекой CAA SegBufMan. И вообще на сколько есть смысл с ней заморачиваться если я раз в секунду качаю через ModBus RTU через TCP (самописный клиент) 80 байт и с помощью MemCopy планирую размещать их сразу в подготовленную структуру. Что-то мне подсказывает, что я зря трачу время на изучение путем научного тыка библиотеки CAA SegBufMan так как все равно планирую копировать этот буфер.
А в чем ошибка? Какой тип там должен быть?
Я не вижу особого смысла использования буфера в вашем случае (ради экономии на копировании 80 байт).
С Новым Годом, со всеми соответствующими (добрыми) пожеланиями! Пытаюсь подружить МВ110-4ТД с СПК107. Считая себя скорее электриком, чем программистом, попытался обойти примеры с указателями - я их (надеюсь, пока) не понимаю. Сделал так: в пустой DWORD добавил старший регистр, сдвинул влево на 16, и добавил младший. Преобразовал это в REAL. Все было хорошо, но вес до (примерно) 100 кг взвешивает нормально, а дальнейшие - примерно вполовину. То есть, если загружаю 70 кг, столько же и вижу, а если загружаю 150, вижу (примерно, опять же) 120. Может ли это быть связано с неправильным преобразованием типов? Сегодня переделал с использованием UNION, но попробовать не смогу до понедельника - объект далеко. Потом, на объекте, если вдруг пойдет не так, не смогу переделать - стоя, в шуме, пыли, без интернета - стар я уже для таких подвигов...
Исходя из того, что МВ110-4ТД производится не "производителем слейв-модулей, который - ввиду отсутствия в модбас стандарта на передачу float... (далее по тексту)", а тем же ОВЕНом, что и СПК107, должен же быть какой-то однозначный способ прочитать данные из модуля в СПК - без всевозможных "перепробуйте варианты"?
Добрый день.Цитата:
Исходя из того, что МВ110-4ТД производится не "производителем слейв-модулей, который - ввиду отсутствия в модбас стандарта на передачу REAL... (далее по тексту)", а тем же ОВЕНом, что и СПК107, должен же быть какой-то однозначный способ прочитать данные из модуля в СПК - без всевозможных "перепробуйте варианты"?
Такой способ есть - использовать для опроса готовые шаблоны:
http://www.owen.ru/forum/showthread.php?t=27889
Благодарю, Евгений!
Качаю пакет - не знал, что он есть...
А мой корявый способ преобразования может привести к тому, что показания похожи на правильные, но нелинейны? Или это только на практике попробовать?
Да пожалуй я погорячился. Действительно правильно.
Опрос я реализовал, появился новый вопрос. Связь плохая (GSM), периодически приходят ошибки... связь падает. Как реализовать закрытие сокета? Подойдет ли функция SysSockClose() из библиотеки SysSocket или у них хенделы разные? Пока я в обработке ошибок вставил переход на шаг CLOSE и в нем пытаюсь закрыть через
Но складывается ощущение, что этот код нерабочий.Цитата:
CLIENT_STATE.CLOSE: // закрываем TCP-клиента
fbTcpClient
(
xEnable:= FALSE,
ipAddr:= stIpServer,
uiPort:= uiPortServer,
);
IF NOT fbTcpClient.xActive THEN
eState:= CLIENT_STATE.CREATE;
END_IF
SysSocketClose тут, по идее, избыточен. Проверить работу кода легко - в узле Debug можно посмотреть число используемых хэндлов.
После закрытия сокета оно должно стать на 1 меньше.
Что-то автоматом TcpClient соединение не восстанавливает на СПК207. SysSockClose кстати пробовал, тоже не работает. Видимо придется все таки на SysSocket делать по старинке, и самое тревожное, ощущение такое, что работа с сокетами зависает в СПК207 на уровне операционки при плохой связи. Вложение 40680
Вы на СПК1хх [М01] можете это протестировать? Мы отправили информацию в 3S после вашего первого обращения по этому поводу - судя по баг-трекеру, они исправляли похожие проблемы в SP11 (т.е. на новых СПК они проявляться не должны).
Вложение 40681
Вложение 40682
Добрый день.
Есть проект, он у меня первый на ПЛК ОВЕН, в составе СПК107 (без Ethernet) и двух устройств Мх110 (DI/DO, только DO). Связь по Modbus (38400).
Система получает входной сигнал с датчика, и по очереди включает 1 из 8 выходов по таймерам. Времена работы таймеров 1.5-3.4 сек (т.е. критичны десятые секунд).
Все работает, данные отправляются и получаются. Но все медленно и вот почему:
1. Вижу 3-4 промаргивания индикатора обмена на первом модуле
2. Вижу 2-3 промаргивания на втором
3. Судя по всему отрабатывается цикл основной программы (изменял его от 100 до 500мс, пропорционально изменяется время паузы в обмене)
4. Снова 3-4 промаргивания на первом
5. Снова 2-3 промаргивания на втором
Получается, ввод/вывод обновляется не раз в 100мс (время цикла программы), а в районе одной секунды и не регулярно. Для того, что бы добиться примерно 100мс отклика пришлось узнать среднее время отработки программы (10-12мс) и установить время цикла в минимальное значение (15-20мс). Только тогда система примерно стала укладываться в допуски (а то даже пропускала 500 мс импульс от датчика, пришлось на время разбора опрашивать счетчик, а не вход).
Можно ли как-то настроить, что бы обмен производился непрерывно и "в фоне"?
PS. CodeSys 3.5 драйверы Мх110 3.5.4 (видел более свежие, но при попытке скачать с сайта - ошибка, ftp.owen.ru не отвечает).
Сеанс обмена с каждым устройством занимает несколько циклов. Кроме того, некоторые шаблоны опрашивают модуль несколькими запросами (например, для модулей МК маски входов и выходов читаются отдельно).
Так что вынесение обмена по Modbus в задачу с минимальным временем цикла (10-20 мс) - совершенно правильный подход.
Спасибо.
У меня вся задача, к счастью в 10-12мс уложилась.
Понятно, что вопрос не к вам, но настроечку "асинхронный обмен" очень хотелось бы увидеть. Лаг так будет гораздо меньше, хотя и логика "Читаем вход-считаем-пишем выход" будет нарушена.
ЗЫ. В целом очень понравилась CodeSys 3.5. Все легко, понятно и очень помогли Ваши материалы в тонких случаях. Спасибо вам за труд, надеюсь, будем сотрудничать )
Сегодня опять проблемы ( Не выдерживает система даже 0.2 сек.
Поменял кабель на экранированный (была просто витая пара, расстояние 1.5м со всеми изгибами).
Нет результата.
Время отработки программы не изменилось. 10..12 мс
Пемонтажил систему, вместо Mx110 поставил B&R CP0291 с модулями IO (куплен на другой проект), настроил ему Modbus Slave. По Modus - только параметры и ручное управление/визуализация.
Посмотрим.
Здравствуйте! В использовании есть МВ110-8А и СПК207. К МВ110 подключены два датчика температуры(через Конфигуратор 110 была проверенна их работоспособность). Задача: Вывести на экран СПК207 показания датчиков. Попробовал сделать по примеру: https://www.owen.ru/uploads/34-37_annaev_41.pdf но после добавления устройства "Modbus_Master_COM_Port" вылетает 468 ошибок. Может кто знает, что с этим делать.Вложение 41056Вложение 41056Вложение 41057
Добрый день!
1. В какой версии Codesys работаете?
Для корректно работы необходим Codesys SP5 Patch5.
2. Версии добавляемых устройств (ModbusMaster и т.д.) ставили согласно указанному в Вашем посте документу?
Перейдите к добавленному Modbus_Master_COM_Port на вкладку "Информация" и выложите скриншот, пожалуйста.
Пытаюсь как обычно опрашивать с СПК110[М01] ПЧВ1 через COM1, библиотека ModBus.lib выдает ошибку 16#FB. В описании такой ошибки нет, где посмотреть что не так?
Может быть, 16#FD? Такая ошибка вернется, если в ответе слэйва есть код ошибки Modbus (ILLEGAL_DATA_ADDRESS и т.п.).
Вложение 41204Нет, в том то и дело, что FB выдает.
Тогда это значит, что во втором байте буфера находится значение 16#FB.
Это может произойти в одном из двух случаев:
1. ПЧВ действительно присылает ответ с таким кодом ошибки.
2. Кто-то некорректно работает с буфером (или пользовательский код, или сама библиотека).
Отправьте архив вашего проекта и конфигурацию ПЧВ на support@owen.ru - мы исследуем этот вопрос.