PDA

Просмотр полной версии : СПК107 M01 и библиотека ModulsOwenlib



vlalys
23.07.2019, 09:41
В программах контроллеров СПК107 использовалась библиотека ModulsOwenlib, 3.4.0.8 (OWEN) и в частности ее ФБ UniRead и UniWrite.
Данные ФБ крайне необходимы, т.к. требуется обмен с устройством по адресу 255 (вот такой нестандартный адрес в буржуинском оборудовании).
При переносе программы в контроллер СПК107 М01 эти ФБ не работают. При компиляции программы сообщений об ошибках нет,
программа нормально загружается в контроллер, но при запуске обмен с устройством отсутствует. Кто может подсказать как решить эту проблему?
Вопрос очень срочный - надо сдавать объект.

Евгений Кислов
23.07.2019, 10:18
В программах контроллеров СПК107 использовалась библиотека ModulsOwenlib, 3.4.0.8 (OWEN) и в частности ее ФБ UniRead и UniWrite.
Данные ФБ крайне необходимы, т.к. требуется обмен с устройством по адресу 255 (вот такой нестандартный адрес в буржуинском оборудовании).
При переносе программы в контроллер СПК107 М01 эти ФБ не работают. При компиляции программы сообщений об ошибках нет,
программа нормально загружается в контроллер, но при запуске обмен с устройством отсутствует. Кто может подсказать как решить эту проблему?
Вопрос очень срочный - надо сдавать объект.

Добрый день.
Номера портов какие заданы? В новом СПК они отличаются от старых.

vlalys
23.07.2019, 10:30
Номера портов в программе соответствуют их номеру контроллера, т.е. порт 2 соответствует Сом2.

Евгений Кислов
23.07.2019, 10:47
Номера портов в программе соответствуют их номеру контроллера, т.е. порт 2 соответствует Сом2.

Выложите тогда архив проекта (.projectarchive), пожалуйста (вырезав оттуда все, что не относится к проблеме).
Пробовали использовать версию библиотеки 3.5.4.2?
https://owen.ru/product/codesys_v3/libraries

vlalys
23.07.2019, 11:55
Библиотеке Modules,3.5.4.2 требуется библиотека Modbus? 3.5.4.2 которую не могу пока найти (есть 3.5.4.3).
Высылаю архив простейшей программки, которой тестировал запись по адресу.
При этом смотрел осциллографом на шине Com-порта физическое наличие передачи - никаких импульсов.

Евгений Кислов
23.07.2019, 12:19
У меня ваша программа работает корректно.
Замкнул у себя на СПК порт RS-485-2 на RS-485-1, на RS-485-1 поднял Modbus Slave стандартными средствами CODESYS - и получил в нем значение от вашего блока.

43714

Что может быть (сразу насчет осциллографа - возможно, вы подключили его не к тем пинам?..):

1. На слэйве неправильные сетевые настройки (например, не та четность и т.д.) или указывается не тот адрес регистра и т.д.
2. Проблемы с подключением (перепутаны A и B, разрыв на линии связи).

Я рекомендую сначала повторить мой эксперимент (опросить с одного порта СПК другой - проще будет через конфигурацию) - чтобы убедиться в исправности портов.
Потом подключить ваше slave-устройство к ПК и опросить его каким-нибудь модбас мастером (например, OPC-сервером) - чтобы убедиться в корректности используемых сетевых настроек.
Если по отдельности все работает - то должно работать и в связке.

vlalys
23.07.2019, 12:22
Евгений, спасибо за ответ! Сейчас буду пробовать.

vlalys
24.07.2019, 05:00
Евгений, добрый день! Огромное спасибо за советы - помогло. Проблема оказалась в настройках порта - на Slave-устройстве контроль по нечетности.

ultra76
01.06.2020, 19:48
Добрый день.
Подскажите пожалуйста.
Использую блоки UniRead, UniWrite.
Контроллер отправляет корректные запросы по сети (отслеживаю с помощью "читалки" для ModBus RTU). Частотник отправляет корректные ответы.
Как мне правильно записать переменную типа WORD, куда сохранять данные?
Есть в блоке UniRead вход VarAdr. Но какую переменную туда записать, не понимаю.

Евгений Кислов
01.06.2020, 20:08
Есть в блоке UniRead вход VarAdr. Но какую переменную туда записать, не понимаю.

ADR(переменная нужного типа)

ultra76
01.06.2020, 20:39
ADR(переменная нужного типа)

Прописываю переменную типа WORD, запускаю обмен. Переменная равна нулю. Хотя частотник отвечает, что данная переменная равна 4 (в шестнадцатеричной системе).
Аналогично пробую записать переменную типа POINTER TO BYTE. Тоже ноль.49405

ultra76
01.06.2020, 20:42
ADR(переменная нужного типа)

Только сейчас заметил на выходе блока ошибку 40. В документации такое не указано. В чём может быть причина?

Евгений Кислов
02.06.2020, 06:54
В том, что вы не используете оператор ADR.
Если Motor_1_Read_In - это переменная типа WORD, то на вход VarAdr надо присвоить ADR(Motor_1_Read_In)