Просмотр полной версии : СПК107 M01 и библиотека ModulsOwenlib
В программах контроллеров СПК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 эти ФБ не работают. При компиляции программы сообщений об ошибках нет,
программа нормально загружается в контроллер, но при запуске обмен с устройством отсутствует. Кто может подсказать как решить эту проблему?
Вопрос очень срочный - надо сдавать объект.
Добрый день.
Номера портов какие заданы? В новом СПК они отличаются от старых.
Номера портов в программе соответствуют их номеру контроллера, т.е. порт 2 соответствует Сом2.
Евгений Кислов
23.07.2019, 10:47
Номера портов в программе соответствуют их номеру контроллера, т.е. порт 2 соответствует Сом2.
Выложите тогда архив проекта (.projectarchive), пожалуйста (вырезав оттуда все, что не относится к проблеме).
Пробовали использовать версию библиотеки 3.5.4.2?
https://owen.ru/product/codesys_v3/libraries
Библиотеке 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-сервером) - чтобы убедиться в корректности используемых сетевых настроек.
Если по отдельности все работает - то должно работать и в связке.
Евгений, спасибо за ответ! Сейчас буду пробовать.
Евгений, добрый день! Огромное спасибо за советы - помогло. Проблема оказалась в настройках порта - на Slave-устройстве контроль по нечетности.
Добрый день.
Подскажите пожалуйста.
Использую блоки UniRead, UniWrite.
Контроллер отправляет корректные запросы по сети (отслеживаю с помощью "читалки" для ModBus RTU). Частотник отправляет корректные ответы.
Как мне правильно записать переменную типа WORD, куда сохранять данные?
Есть в блоке UniRead вход VarAdr. Но какую переменную туда записать, не понимаю.
Евгений Кислов
01.06.2020, 20:08
Есть в блоке UniRead вход VarAdr. Но какую переменную туда записать, не понимаю.
ADR(переменная нужного типа)
ADR(переменная нужного типа)
Прописываю переменную типа WORD, запускаю обмен. Переменная равна нулю. Хотя частотник отвечает, что данная переменная равна 4 (в шестнадцатеричной системе).
Аналогично пробую записать переменную типа POINTER TO BYTE. Тоже ноль.49405
ADR(переменная нужного типа)
Только сейчас заметил на выходе блока ошибку 40. В документации такое не указано. В чём может быть причина?
Евгений Кислов
02.06.2020, 06:54
В том, что вы не используете оператор ADR.
Если Motor_1_Read_In - это переменная типа WORD, то на вход VarAdr надо присвоить ADR(Motor_1_Read_In)
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot