PDA

Просмотр полной версии : связь спк105 по ModbusRTU с контроллерами других производителей



vlad37
11.01.2015, 15:23
задача примерно такая:
есть работающий проект, построенный на компонентах icpdas.
интерфейс на персоналке, к ней подключен контроллер по протоколу ModbusTСР. к контроллеру подключены устройства ввода/вывода через ModbusRTU. на контроллере программка собственного сочинения, транслирующая данные, полученные из компьютера в устройства через rs-485. все исправно функционирует
возникла необходимость добавления внешнего (выносного) пульта управления, который было решено реализовать на контроллере спк105, чтобы
1) уложиться в малые габариты (поэтому выбран самый маленький из спк10х)
2) не лепить дополнительно кучу тумблеров и рукояток
3) обойтись без дополнительных модулей ввода/вывода и толстого пучка проводов
связь через ModbusRTU
была изучена среда codesys, создан проект, нарисованы все интерфейсы. все вроде бы работает.
осталось связать спк с контроллером icpdas. и вот здесь произошел облом - связь не работает, спк не отвечает, никак
в проекте было создано устройство Modbus_Com (правильной версии). номер порта был установлен 2, когда была попытка соединения с rs-232 и номер 3 для rs-485
скорость 9600, 8 бит, 1 стоповый, без контроля четности (все как и в контроллере icpdas)
уровнем ниже было создано устройство Modbus_Serial_Device (правильной версии). было оставлено по 2 регистра (чтобы не перегружать на начальной стадии эксперимент), номер сети задан 2 (именно ко второму устройству по адресу 0 идет обращение в контроллере icpdas)
проект перекомпилирован и загружен в контроллер. из контроллера icpdas производится запрос на передачу 1 регистра (сетевое устройство 2, регистр 0).
результаты:
- контроллер спк полностью игнорирует отправленный запрос, регистры не меняют своего значения
- контроллер icpdas выдает ошибку "отсутствует отклик"
то, что на шине rs-485 присутствует сигнал - 100%, иначе на него не реагировали бы устройства ввода/вывода i-70xx.
почему не реагирует спк? вроде бы я все сделал, как в контрольном примере

capzap
11.01.2015, 15:43
первое что бросается в глаза, это предположительно пытаетесь держать в сети два мастера

vlad37
11.01.2015, 16:11
я специально штудировал pdf-ки с сайта овена на эту тему.
сначала хотел сделать спк мастером (повесив на первый com-порт rs-232 контроллера icpdas), но тогда пришлось бы писать разнородный софт для контроллера (мастер для i-70xx и слэйв для спк), что неудобно. поэтому остановился на мастере icpdas и слэйве всем остальном. настройку в codesys произвел именно для режима слэйв так что двух мастеров быть не должно.
в проекте было создано устройство Modbus_Com (правильной версии). номер порта был установлен 2, когда была попытка соединения с rs-232 и номер 3 для rs-485
скорость 9600, 8 бит, 1 стоповый, без контроля четности (все как и в контроллере icpdas)
уровнем ниже было создано устройство Modbus_Serial_Device (правильной версии). было оставлено по 2 регистра (чтобы не перегружать на начальной стадии эксперимент), номер сети задан 2 (именно ко второму устройству по адресу 0 идет обращение в контроллере icpdas)
именно так рекомендовано настраивать режим слэйв спк
хотя я допускаю, что сделал что-то неправильно. что?

capzap
11.01.2015, 16:24
чертеж нарисуйте Вашей сети, какие у кого адреса, кто мастер и проект выкладывайте ( Ваша нетленка не интересует, только то что касается конфигурации сети), так быстрее Вам помогут решить проблему

александр 64
11.01.2015, 16:54
либо напутано с адресами проверте адрес спк судя по описанию 2 это номер порта а какой адрес спк? или с мастерами и слейвами напутано

vlad37
11.01.2015, 17:54
я не художник и не айтишник, нарисовал как смог
это фотографии экрана (во время работы)
16099
16100
16101
16102

это схема соединений
16103

vlad37
11.01.2015, 17:59
com port номер 3, т.к. rs-485
unit id номер 2, т.к. мастер-контроллер обращается ко второму номеру в сети
это видно на фото

ASo
11.01.2015, 18:30
Вы просто не к тому привязали переменные.
Надо к регистрам временного хранения. Тогда вы сможете в них писать из вне. А в СПК - считывать.

александр 64
11.01.2015, 19:10
рисунок №2 в графе переменные надо написать название переменной

александр 64
11.01.2015, 19:13
назначить надо в in это входы q выходы не действуют это слейв он только на прием

александр 64
11.01.2015, 19:19
судя по программе вы пытаетесь передать что то а вам надо принимать от другого контролера

vlad37
11.01.2015, 19:46
Вы просто не к тому привязали переменные.
Надо к регистрам временного хранения. Тогда вы сможете в них писать из вне. А в СПК - считывать.
1) у меня одна переменная была привязана к регистрам, вторая ко входам. ничего в регистры все равно не писалось
2) при обмене по modbus, как мне показалось, запись в IWxx будет вестись вне зависимости от привязки регистров к переменной. просто в случае привязки значение регистра будет перегоняться в переменную, а в отсутствии привязки не будет. но в окошке "соотнесение входов/выходов" значение регистров временного хранения будет отображаться все равно
3) поэтому привязка к переменной была удалена. вопрос ведь не в передаче данных между переменными спк105 (тут все нормально), а в передаче по rs-485

vlad37
11.01.2015, 19:48
все это уже делалось. результат тот же

vlad37
11.01.2015, 19:55
программа при решении проблемы обмена никакой роли не играет. написана просто чтоб была
суть в том, что контроллер 7186 отправляет запрос в спк 105 и не получает ответа (код ошибки "нет ответа"). регистр IW0 никак не реагирует на посылку. может в программе надо как-нибудь открыть порт, инициализировать его?
можно попробовать прозвонить провода, вдруг обрыв. но тестер на работе. контроллер я домой забрал перед праздниками, а тестер забыл взять

ASo
11.01.2015, 20:05
Какую команду отправляет? Приведите номер функции.

vlad37
11.01.2015, 20:21
Какую команду отправляет? Приведите номер функции.
6-я и 16-я (с количеством регистров равным одному)

ASo
11.01.2015, 20:56
Выкладывайте проект для СПК.

vlad37
11.01.2015, 21:46
Выкладывайте проект для СПК.

файл проекта? а как это сделать?

petera
11.01.2015, 23:01
файл проекта? а как это сделать?
Включить расширенный режим и использовать кнопку вложения
16108

выбрать файл для отправки на форум
16109
Нажать кнопку "Загрузить"

vlad37
11.01.2015, 23:44
Включить расширенный режим и использовать кнопку вложения
16108

выбрать файл для отправки на форум
16109
Нажать кнопку "Загрузить"[/QUOTE]


[QUOTE=petera;158323]
вот, вроде загрузилось
вообще, надо будет прихватить модуль ввода/вывода на работе и подключить параллельно спк и модуль ввода/вывода. и посмотреть как будет это функционировать. в принципе, у меня была небольшая авария в выходные. может это сказалось.

Евгений Багаев
23.01.2015, 16:09
vlad37, у СПК105 есть такая особенность, что RS-485 соответствует 2 номер, а RS-232 - 3 в настройках COM-порта в codesys. Также обратите внимание на работу с регистрами:
Input регистры функция чтения 3, записи 16 начиная с 0х0000
Output регистры функция чтения 4, записи нет, начиная с 0х0000

vlad37
24.01.2015, 15:51
vlad37, у СПК105 есть такая особенность, что RS-485 соответствует 2 номер, а RS-232 - 3 в настройках COM-порта в codesys. Также обратите внимание на работу с регистрами:
Input регистры функция чтения 3, записи 16 начиная с 0х0000
Output регистры функция чтения 4, записи нет, начиная с 0х0000

вы точно уверены в номерах портов? в инструкции РЭ_СПК1XX_1590.pdf на странице 75 в таблице Г.1 указано противоположное распределение номеров портов: RS-232 - 2, а RS-485 - 3
16348
что касается записи, то я запускал команды 6 и 16 (для передачи 1 значения) по нулевому адресу. я привязывал регистр к переменной и отвязывал (в окошке на компьютере можно контролировать значение регистра вне зависимости от наличия привязки). но показательно даже не отсутствие изменений значения регистра, а отсутствие ответа от спк105

vlad37
26.01.2015, 10:56
поменял местами номера портов и заработало. как с RS-232, так и с RS-485. спасибо

P.S. а писать в руководстве ложную информацию нехорошо. надо бы исправить

Мурат Ахриев
28.01.2015, 10:33
Приносим извинения за ошибку в руководстве. Исправленная версия руководства доступна на странице СПК.