Просмотр полной версии : Помогите разобраться с СПК-207 + устройство на ModBus с Trigger = RISING_EDGE
orensnake
17.01.2016, 12:15
Добрый день коллеги!
Возникла проблема со связью из СПК207 с контроллером сервопривода (ASD-A2) по шине ModBus.
На текущий момент все читается, записывается, КРОМЕ одного адреса. В контроллер сервопривода по адресу 0x050E записывается код внутренней программы (одной из 64) по перемещению.
Циклическую запись по этому смещению вести категорически нельзя из-за особенностей реализации самого контроллера сервопривода - при записи сразу же начинает выполняться подпрограмма. При записи 0, к примеру, контроллер сервопривода выполняет 0 встроенную программу - поиск 0.
Мне же необходимо в определенные моменты выдавать команды на установку необходимой мне в текущей момент "программы перемещения".
Для исключения постоянной записи кода подпрограммы решил использовать RISING_EDGE.
По идее, для передачи нужного значения необходимо:
1) записать в соответствующую переменную необходимое значение
2) в соответствующую переменную Trigger Variable необходимо выставить True
Делаю все по такому принципу - но.. не работает.
Если же выставить для соответствующего ModBus Slave устройства свойство xTrigger в True - то в контроллер сервопривода уходит значение 0, вне зависимости от того, что я выставил.
Вопрос - что я делаю не так, и как исправить ситуацию?
P.S. Готов предоставить скриншоты и прочие необходимые данные по Вашему запросу.
P.S. Готов предоставить скриншоты и прочие необходимые данные по Вашему запросу.Ну а что сразу не предоставляете?
Вот мой расклад, где я однократной записью команды вызывал:
21805
21806
Там, правда, конвейер предусмотрен, чтобы команды одну за другой передавать. Он к теме не относится.
Как видите, сначала в выходные переменные Cmd, Arg0 и Arg1 записывается команда с аргументами, а затем tx переводится в TRUE, после чего происходит однократная запись в три регистра слейва. Боевой код уже.
orensnake
17.01.2016, 17:47
Ну а что сразу не предоставляете?
Исправляюсь.
По настройкам аналогично - не могу понять почему именно при выставлении Servo1WR в моем случае не отсылается команда. Пробовал делать задержку и по таймеру и по увеличению счетчика - не уходит по ModBus моя команда. Может надо еще что-то покрутить в настройках канала или самого слейва?
Баловался руками (изменение значений переменных). Ну и в таком режиме тоже должно работать - но не работает почему-то.
Может быть что-то не так с версиями таргета/версий библиотек modbus и какой-то редкий глюк?
Сейчас использую
CoDeSys 3.2 SP5
Owen SPK2xx 03.CS.WEB версия 3.5.4.20
ModBus COM Version: 3.4.0.0
ModBus Master Version: 3.5.4.0
ModBus Slave Version: 3.5.4.0
По идее все компилируется, но не работает. Чудеса.
P.S. Адрес и команда выдраны из софта, идущего вместе с контроллером привода. Опробовал с компа - нужные мне шаги работают. Видимо дело в кодесис/СПК/настройках
Код покажите.
Я бы сравнил фактические запросы софта и СПК.
orensnake
17.01.2016, 20:16
Ок.
Вкратце и по порядку.
Есть визуализация. (visu в аттаче).
В настройках реакции на кнопку - выполнение ST кода (ButtonClick в аттаче)
Связка переменных визуализации и переменных в GVL/PLC_PRG - (VisuLink в аттаче - используется фрейм, но это не важно)
Описание переменных в GVL - (GVL в аттаче)
Ну и настройки канала и его связь в предыдущем моем посте.
Получаем, при нажатии на кнопку в форме выставляется код команды (5) и выставляем триггер в TRUE.
Переменные в форме связаны с объявленными в GVL переменными, которые в конечном счете используются в настройках канала по модбаз.
orensnake
17.01.2016, 20:25
Код покажите.
Я бы сравнил фактические запросы софта и СПК.
Сегодня, к сожалению, нечем промониторить. Смогу только завтра. Проснифил запрос из ПО, используемого для настройки и управления контроллером сервопривода, используя Device Monitoring Studio. Выделил для себя передаваемую по modbus команду:
Packet 58384: MODBUS Request (packet size: 13, data size: 9), 02.01.2016 23:14:48.400 +0.0
Mode: RTU
Address: 1 (Slave)
Function: 16 (Write Multiple Registers)
Starting Address: 1294
Number of Registers: 2
Parsed As:
Registers 41294-41295:
Register0: 5
Register1: 0
CRC:23922 (OK)
То есть
функция 16, адрес - 1294=0x050e, 2 регистра со значениями 5 и 0.
Собственно все то же самое и реализую. Завтра буду снифить трафик с СПК до контроллера сервопривода.
Если не секрет, каким софтом сниффили?
orensnake
17.01.2016, 21:32
Если не секрет, каким софтом сниффили?
Device Monitoring Studio - http://freeserialanalyzer.com/features
Триальный на 21 день. Но в принципе нормально обрабатывает пакеты, да и расшифровка налету.
Когда будете снифить, попробуйте без визуализации лучше. Убедитесь, что нигде в переменные Servo1WR и Servo1Cmd не происходит запись (в т.ч. отцепите их от фрейма), потом подготовьте в них значения для записи и запишите по Ctrl+F7.
orensnake
18.01.2016, 07:02
Когда будете снифить, попробуйте без визуализации лучше. Убедитесь, что нигде в переменные Servo1WR и Servo1Cmd не происходит запись (в т.ч. отцепите их от фрейма), потом подготовьте в них значения для записи и запишите по Ctrl+F7.
Создан новый проект.
PROGRAM PLC_PRG
VAR
ServoWR : BOOL := FALSE;
ServoCMD : WORD;
wZero : WORD := 0;
ReadedCMD : WORD;
tmp : WORD;
tmpCMD : WORD;
tmpWR : BOOL;
END_VAR
tmp := ReadedCMD;
ServoCMD := tmpCMD;
ServoWR := tmpWR;
Добавил соотнесение
21822
Извиняюсь, удалил часть сообщения.
Накосячил с номером регистра - сейчас поправил и с тестового проекта все работает (и чтение, и запись, и устройство отрабатывает). О чудо! Осталось понять что не работало с основном и почему.
Хм. заинтересовала настройка
21823
Указано "Использовать родительскую настройку". Соответственно берется из мастера. У мастера тоже "Использовать родительскую настройку". Соответственно ссылается на ком порт - но там ничего не настраивается.
Поставил в основном проекте "Включено 2 (всегда в задаче цикла шины)" и ... заработало и с визуализациями.
Всем спасибо, особенно Yegor за желание помочь разобраться.
Тему можно закрывать.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot