Главная   Downloads   Разное  
FAQ     Поиск   Регистрация   Вход 
Текущее время: Пт мар 29, 2024 09:16

Часовой пояс: UTC + 3 часа (Russia: MSK)




Начать новую тему Ответить на тему  [ 57 сообщений ]  На страницу Назад  1, 2, 3, 4  Вперёд
Автор Сообщение
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Вс янв 17, 2010 10:47 
Не в сети
Site Admin
Аватара пользователя

Регистрация: Вт сен 19, 2006 21:13
Сообщения: 3510
Откуда: Москва
зато работает в CP1E. жаль конечно что не пашет в самой программе для CJ1M, будем ждать появления CJ2M, где-то пролетало что планируется к выпуску.


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Вс янв 17, 2010 23:59 
Не в сети

Регистрация: Вт фев 12, 2008 11:30
Сообщения: 324
Откуда: Cherepovets
Ярослав, спасибо за представленную программу. Второе огромное спасибо за пример вычисления контрольной суммы. Буду разбираться.
Ярослав писал(а):
Идея опроса модулей ICPCON такова.
1. Надо опросить все (до 16) модули на линии выполнив всего один запрос команды PMCR. Максимально уменьшаем время опроса.
2. Требуется определить кто ответил, кто нет. - в целях безопасности.
3. Поддержать протокол ICPCON, для различных модулей дискретного ввода/вывода.

Идея понятна. Тоже сталкивался с подобной задачей для применения с другими модулями. Для медленного протокола HART очень актуально.
Выполнил примерно так:
Шаг 1 – Вызов последовательности запроса измеряемой величины. Для запроса из программы контроллера передается количество опрашиваемых датчиков. Опрос проводится по циклу. Первым опрашивается датчик с сетевым номером 1. Если датчик с каким-либо серийным номером не отвечает более двух попыток, то выполняется переход к следующему шагу.
Шаг 2 – Запрос серийного номера в формате короткого фрейма. Если датчик не отвечает, то выполняется переход к следующему шагу.
Шаг 3 – Запрос измеряемого параметра следующего по порядку датчика.
Ограничения: Цикл опроса 6 датчиков составляет минимум 4 секунды. (Скорость обмена по каналу HART составляет 1200 бит в секунду). При неисправности одного из каналов цикл увеличивается до 7 секунд.
Все это записано в одной последовательности. Пример находится здесь contents/files.php?action=downloadfile&filename=Example.zip&dir=n10 .
Номер неотвечающего датчика для второго порта нулевого модуля определяется по биту превышения время Tfs, Tfr, Tr (бит 1518.05) и счетчику повторных вызовов равному = 0 (третья цифра в слове 1518). Номер повтора - в слове 1524 и есть не ответивший номер датчика.
Однако, протокол не в состоянии определить два подряд отключенных сетевых номера. Вероятность такого варианта мала и я ее пропустил.
Другой пример вскоре выложу и поясню если необходимо. Он основан на опросе приоритетных сетевых номеров с меньшим периодом, а остальных - с большим.
Тоже считаю, что применение индексных регистров очень полезно, так как не люблю использовать функциональные блоки, а пользуюсь подпрограммами. Такая необходимость вызвана наличием старых версий процессорных модулей, которые не поддерживают FB.


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Пн янв 18, 2010 09:38 
Не в сети

Регистрация: Пт янв 30, 2009 21:25
Сообщения: 518
I1 писал(а):
Ограничения: Цикл опроса 6 датчиков составляет минимум 4 секунды. (Скорость обмена по каналу HART составляет 1200 бит в секунду). При неисправности одного из каналов цикл увеличивается до 7 секунд.


Для таких скоростей связи, считаю что вполне возможно, во время выполнения последовательности, (ведь длительность цикла программы как правило 6-10 мсек) читать системные биты и счетчики модуля SCU, и по ним определять кто опрашивается 2 раза а кто не опрашивается. Ну или по временам ожидания. В таком случае можно определить каждого неответившего за весь цикл опроса.
Кстати, сейчас подумал, может и для ICPCON можно так сделать, если контроль системных данных модуля SCU, сделать через прерывания по времени(для ускорения контроля). Но возможно сам модуль SCU не будет успевать обновлять данные в области памяти контроллера, а пользовать процедуры насильного их чтения, это уже опять мучения програмиста.

Самому пока не приходилось работать по HART протоколу, и на данный момент нет таких перспектив. Так что не могу ничего сказать.

А будут вопросы по "Овен" протоколу, обязательно отпишу.

_________________
А нам, все равно, и ровно.


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Вт янв 19, 2010 11:45 
Не в сети

Регистрация: Вт фев 12, 2008 11:30
Сообщения: 324
Откуда: Cherepovets
Выложил в примеры обещанную программу контроллера, протокол и экран терминала для управления интеллектуальным электроприводом и контакторами TeSys по протоколу modbus RTU. Название архива Drive.zip
К сожалению, не все пояснения влезли (ограничено количество символов для описания файла)
Хотел добавить, что можно меня ругать в форуме и предлагать другие решения.
Основная цель примера - показать вариант вызова протокола обмена с различным приоритетом для работающего и остановленного электропривода.
Возможно выполнить опрос по тому же физическому порту других устройств с более низким приоритетом.


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Чт май 12, 2011 23:01 
Не в сети

Регистрация: Пт сен 29, 2006 08:46
Сообщения: 66
Откуда: Невинка-Город химиков!
Всем привет!!!
Подскажите баранкину?- учу модбас и cx-протокол и уже 3ий день моск выкипает, дошел до макросов. а тут у Вас пример про чтение трех слов.... итак..
I1 писал(а):
передаем:
Address <а> ~(R(1),1) - сетевой номер (указываешь его в первом слове передачи)
Data <a>+~(R(2),1)+R(3),2)+R(4),2)+с - код команды, адрес, количество байт (второе, третее, четвертое слово)
Check code <c> ~CRC16(65535)(2Bytу BIN)
принимаем:
~(W(1),1)+~(R(2),1)+(*,1)+(W(2),2)+(W(3),2)+(W(4),2)+с


Мне вот здесь непонятны три первые элемента
~(W(1),1)+~(R(2),1)+(*,1)+(W(2),2)+(W(3),2)+(W(4),2)+с
вот это можно разжевать в двух словах? зачем мы читаем байт ~(R(2),1) и что означает (*,1)?
~(W(1),1)+~(R(2),1)+(*,1)


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Пт май 13, 2011 08:30 
Не в сети
Site Admin
Аватара пользователя

Регистрация: Вт сен 19, 2006 21:13
Сообщения: 3510
Откуда: Москва
чтоб моск не кипел нужно таблетку скачать W344-RU2-06CX-ProtocolOperManual.pdf
отсюда contents/files.php?&dir=n20

Чтение из контроллера в шаблоне на приём? ну что здесь странного, принимаемые данные должны соответствовать шаблону, иначе ошибка, в модбасе ответ идёт с тем-же кодом что и запрос, автор этого решил так сделать, нормально.
(*,1) этот байт в ответе просто оказалась ненужна, но в шаблоне указывать всё равно нужно.
Похоже в этом примере чтение трёх слов, часть шаблона можно было заменить на константы, так удобнее.

<a>+[03]+[20]+(W(1),2)+(W(2),2)+(W(3),2)+(*,8)+(W(4),2)+(*,2)+(W(7),2)+(W(8),2)+(W(9),2)+(*,4)+(W(5),2)+(W(6),2)+<c>
здесь из инвертора читается 16 слов, в контроллер записывается только то что нужно.
<a>+[03]+<l>+(W(1),*)+<c>
а это "резиновый" шаблон на приём, <l> это длина размером в байт, для (W(1),*), т.е. в контроллер записывается всё что пришло, если только соответствует шаблону.


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Пт май 13, 2011 11:41 
Не в сети

Регистрация: Пт сен 29, 2006 08:46
Сообщения: 66
Откуда: Невинка-Город химиков!
спасибо Олег , но я именно этот мануал и перевариваю, но видимо пока недостаточно.
Олег писал(а):
<a>+[03]+[20]+(W(1),2)+(W(2),2)+(W(3),2)+(*,8)+(W(4),2)+(*,2)+(W(7),2)+(W(8),2)+(W(9),2)+(*,4)+(W(5),2)+(W(6),2)+<c>
здесь из инвертора читается 16 слов, в контроллер записывается только то что нужно..

03- код команды ?, (константа)
20 сколько байтов будет в сообщении (константа)
и далее пишем в слова то что нужно , пропуская часть байтов
соответственно адрес устройства, который должен быть получен первым в принимаемом сообщении -у Вас прописан в цх-протоколе в Adress<A> и допустим это ~(R(1),1)

правильно?


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Пт май 13, 2011 17:58 
Не в сети
Site Admin
Аватара пользователя

Регистрация: Вт сен 19, 2006 21:13
Сообщения: 3510
Откуда: Москва
Правильно

константой можно и так записать
<a>+[0320]+(W(1),2) на две части я делил так, для наглядности.

~(R(1),1) это взять из первого (считая с ноля) слова PMCR один байт, поменяв предварительно байты местами

[20] это не 20 а 16 слов (32 байта), ошибся я.


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Пт май 13, 2011 19:57 
Не в сети

Регистрация: Вт фев 12, 2008 11:30
Сообщения: 324
Откуда: Cherepovets
Oleg писал(а):
Всем привет!!!
Подскажите баранкину?- учу модбас и cx-протокол и уже 3ий день моск выкипает, дошел до макросов. а тут у Вас пример про чтение трех слов.... итак..
I1 писал(а):
передаем:
Address <а> ~(R(1),1) - сетевой номер (указываешь его в первом слове передачи)
Data <a>+~(R(2),1)+R(3),2)+R(4),2)+с - код команды, адрес, количество байт (второе, третее, четвертое слово)
Check code <c> ~CRC16(65535)(2Bytу BIN)
принимаем:
~(W(1),1)+~(R(2),1)+(*,1)+(W(2),2)+(W(3),2)+(W(4),2)+с


Мне вот здесь непонятны три первые элемента
~(W(1),1)+~(R(2),1)+(*,1)+(W(2),2)+(W(3),2)+(W(4),2)+с
вот это можно разжевать в двух словах? зачем мы читаем байт ~(R(2),1) и что означает (*,1)?
~(W(1),1)+~(R(2),1)+(*,1)


Уже разобрались без моего участия? :)
байт ~(R(2),1) - адрес в приеме должен соответствовать запрошенному адресу или второму слову длиной один байт в области передачи.
(*,1) означает, что один байт с количеством передаваемых слов оставляем без внимания
При ответе на команжу управления в области приема от устройства должен прийти сетевой номер и три запрошеных слова статуса из указанного в запросе адреса данных. Адреса данных и их назначение смотрим в руководстве по эксплуатации устройства


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Пт май 13, 2011 21:22 
Не в сети

Регистрация: Пт сен 29, 2006 08:46
Сообщения: 66
Откуда: Невинка-Город химиков!
Очень спасибо, но я все равно ЭТО не вкурил :shock:
I1 писал(а):
~(W(1),1)+~(R(2),1)+(*,1)+(W(2),2)+(W(3),2)+(W(4),2)+с

~(R(2),1) - адрес в приеме должен соответствовать запрошенному адресу или второму слову длиной один байт в области передачи.

ЭтоЖ модбас рту? следовательно (наскока я понимаю) первым прилетает адрес слэйва, который мы и пишем ~(W(1),1) во второе слово принимаемых данных
потом должно прилетать "команда" и мы сравниваем ее с шаблоном в ~(R(2),1), второй байт нам не интересен, и мы его "того-этого" (*,1)
но этож поидее СЧЕТЧИК БАЙТ ?
а уже потом милости просим данные.
не так ? :oops:
ps -седня уже получился первый линк с частотником ABB 550. получили первое слово о текущей скорости !(результАААт) а придется подружить сетку из двух десятков этих частотников через OMRON с сеткой рашшин оборудованием СЕНСОР ......и возможно с сеткой приборов ТЕРМОДАТ ....чуйствую я что "секаса" будет много :mrgreen:
Большое Вам спасибо!!!!!


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Пт май 13, 2011 23:13 
Не в сети
Site Admin
Аватара пользователя

Регистрация: Вт сен 19, 2006 21:13
Сообщения: 3510
Откуда: Москва
Не парься, "секаса" только когда разбираешся с прогой. Очень помогает трассировка из CX-Protocol,

20 частотников на одном порту многовато, придётся думать как скорость опроса сохранить. например быстрее прочитать 20 регистров одной посылкой, чем два регистра за две посылки, у модбаса должна быть пауза между посылками в сети, у V1000 минимум 5ms у V7 было 10 ms (задержка перед ответом). это конечно выше чем предусмотрено стандартом, мож у ABB 550 получше? Если связь идёт на 485 проводах а не на 422, возможно придётся вводить задержку на передачу, иначе частотники могут не определить посылки.
Если весь опрос организован через контроллер, т.е. на каждый адрес вызывается PMCR, и время цикла контроллера выше чем задержка для инвертора, могут быть потери во времени из-за пауз между обнаружением окончания передачи и вызовом новой инструкции, (вроде SCU может генерить прерывания для контроллера, не разбирался с этим.) Как вариант, можно вызывать одну последовательность с кучей шагов, т.е. сразу опрашивать несколько частотников.


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Пн май 16, 2011 17:11 
Не в сети

Регистрация: Вт фев 12, 2008 11:30
Сообщения: 324
Откуда: Cherepovets
Oleg писал(а):
... второй байт нам не интересен, и мы его "того-этого" (*,1)
но этож поидее СЧЕТЧИК БАЙТ ?

смущает, что счетчик не нужен? Что ж, можно и его попользовать. Укажем что Length <l> будет (0)(1Byte BIN) и запишем вместо ...+(*,1)+... выражение ...+<l>+...
Это как дополнительный контроль целосности пакета, как уже имеющаяся проверка контрольной суммы.
А количество частотников на одной линии - многовато. Если одновременно всеми управлять не нужно и одновременно работает 3-5 штук, то можно попробовать опрашивать работающие чаще, а остановленые реже. Я в таком случае для каждого сетевого номера запускал свой таймер опроса. Для работающего привода устанавливал таймер с меньшей уставкой, а для остановленного - с большей уставкой. Таймер каждого перезапускаем при опросе привода. Чтобы выбрать сетевой номер для опроса, нужно сравнить все значения таймеров и выбрать наименьшее. Выкладывал в примерах эту программку.


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Пн янв 30, 2012 15:54 
Не в сети

Регистрация: Пт окт 14, 2011 17:04
Сообщения: 726
по модулю scu появился вопрос, вернее как реализовать в программере проверку и обработку ошибки: например если какой нибудь slave не ответил.

в протоколе последовательность имеет к примеру три шага, в каждом шаге идет (например) опрос состояния устройства последовательно (1-3).
вызов этой последовательности из программера одной инструкцией.

скажем 2ое устройство не ответило, как обработать эту ошибку (нужно получить номер устройства? т.е. надо зафиксировать ошибку и узнать какое устр-во не ответило?


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Вт янв 31, 2012 07:44 
Не в сети
Site Admin
Аватара пользователя

Регистрация: Вт сен 19, 2006 21:13
Сообщения: 3510
Откуда: Москва
В инструкци на модуль описано назначения флагов. есть там и номер шага который выполняется.


В начало
 Профиль  
 
 Заголовок сообщения: Re: ModBus RTU? SCU
СообщениеДобавлено: Вт янв 31, 2012 13:03 
Не в сети

Регистрация: Пт янв 30, 2009 21:25
Сообщения: 518
Могу ошибаться, но я понял данную систему фирмы ОМРОН так. - (некоторые аспекты мог подзабыть, сам вспоминать буду месяца через два-три)

1. Выполняются команды указанные в последовательности, по окончанию выполнения макроса для одного ведомого можно или продолжить выполнять последовательность или выйти из выполнения последовательности. После выхода из последовательности можно проверить в системной области модуля SCU на каком шаге вывалились.
2. Следовательно - данный режим никак не подходит для опроса в одной последовательности сразу нескольких ведомых адресов. т.к. не сможешь определить более одного не ответившего. Сам делал такой опрос, ради увеличения скорости опроса - но счастья не наступило, равно как и скорость опроса не возросла. Получил только лишние программные проблемы.
3. Для увеличения скорости опроса надо видимо брать быстрые модули SCU.
4. Шаги есть смысл плодить только для опроса одного ведомого по нескольким запросам.
5.
alexjdie писал(а):
вызов этой последовательности из программера одной инструкцией
Из вышесказанного не рекомендую, попробуйте библиотечные функции ОМРОН или напиши что-то сам, для опроса нескольких адресов. Можно порыться в примерах ан сайте.

_________________
А нам, все равно, и ровно.


В начало
 Профиль  
 
Показать сообщения за:  Сортировка  
Начать новую тему Ответить на тему  [ 57 сообщений ]  На страницу Назад  1, 2, 3, 4  Вперёд

Часовой пояс: UTC + 3 часа (Russia: MSK)


Кто сейчас на конференции

Сейчас этот форум просматривают: в настоящее время на конференции нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Переход:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская документация по phpBB 3