OK. Спасибо. Похоже другого варианта нет.
OK. Спасибо. Похоже другого варианта нет.
Я тоже так думал и даже помучил знатоков вопросамиА потом пришло понимание, которым хочу поделиться. Потому что понимание значительно лучше запоминания.
Мое понимание связано с использованием понятий "клиент-сервер" вместо или вместе с понятиями "мастер-слейв". Да, кто-то более образованый в данном вопросе найдет разницу. Но нам покатит и так.
Где лежат данные в паре "клиент-сервер"? На сервере (= у слейва). Чтобы разместить данные в памяти, нужно резервировать ячейки - байты, слова, двойные слова, стринги... Естественно, что резервирование компилятор будет производить по некоему правилу, но все же - в порядке возрастания адресов. Вот откуда то наращавание адресов, которое мы видим в Конфигураторе и о котором ты пишешь.
А теперь посмотрим на клиента (мастера, инициатора обмена). Ему нужны данные, хранимые на сервере. Ему может захотеться обратиться к любому из имеющихся адресов (номеров регистров). То есть Конфигуратору клиента (мастера) нужно сказать: "наша переменная по адресу АТ%18.11.1.0.0 в (нашей) области ввода-вывода находится на сервере в регистре номер 40050". Именно при конфигурировании мастера мы и заносим в Register Input(Output) Module во вкладку "Параметры модуля" как Register Address.
Резюме. При работе с Конфигуратором ПЛК нужно:
У слейва разместить данные (последовательно возрастают адреса памяти)
У мастера - указать, по какими номерами регистров на сервере лежат данные
При работе не с Конфигуратором адреса в памяти сервера можно связывать с номерами регистров Модбаса произвольным образом. Отсюда такие номера как 40000, 30000 и т.д.
Можно. Но всегда ли нужно?
Если я верно понял смысл твоего примера:
Мастеру нужно постоячнно мониторить все данные на сервере, сравнивая их со своими копиями. Ничего себе траффик может гудеть!
А в чем выгода? Только потому, что "раздваивать ввод-вывод - клиника", как сказал один парень?
Ну, нам не холодно и не жарко от того, что при желании изменить данные я пишу
АТ%18.11.1.0.0 := 12345;
а при желании прочесть данные я обращаюсь к АТ%18.12.1.0.0 (другой адрес в области обмена). Очень даже комфортно нам в нашей больничке![]()
Спасибо. Буду переваривать. Интересного много...
Что-то ты мрачноват, Учитель. Я тоже чту Страстную Пятницу, но как-то смиреннее
Не зарекайся. Думаю, что задачи бывают разные - и оптимальная организация обмена тоже не всегда одна и та же. Несмотря на видимый душевный комфорт от "четкого решения навсега".Для себя решил. Всегда.
Чтобы читающим нас было понятно, вокруг чего идет спор, я позволю себе чуть подробнее показать специфику своего обмена.
Основной прикол тут в динамичности требований. В процессе работы программа ПЛК может находиться в разных состояниях (фазах работы). В одном состоянии требуется работать с одной группой данных, хранящихся у слейва (сервера), в другом - с другой группой. Иногда, по действиям оператора или иным событиям, возникает задача разового обращения к некоей третьей, четвертой группе. И, как неизменная составляющая, в фоновом режиме постоянно вычитываются одна важная парочка регистров.
Все это, заметьте, с совершенно разным бэкграундом. Есть фазы работы, в которых вся эта модбас-болтовня может идти в развалочку, а есть суровые моменты жизни, когда нужно все похерить кроме той нашей парочки регистров - но их читать максимально быстро-часто.
Вот именно в те суровые моменты система "виртуально общего пула данных" никак не катит!
Поэтому у меня запущено 8 модулей модбас (библиотека уважаемого Валенка). Они опрашиваются по довольно сложной логике программы, но примерно это может выглядеть так:
1 1 1 1 1 1 2 1 1 1 1 3 1 2 1 1 1 1 1 1 1 1 1....1 3 1 2 1 4 1 1 1 1 1 1
То есть идет некое действие - вызывается нужный модуль или модули, а между ними непрерывно шарашит наш фоновый модуль опроса двух регистров.
Кстати, вопрос к Автору библиотеки. Выяснилось, что есть одно неудобство при отладке. Когда отлаживаю по шагам, то весь процесс обмена останавливается. Как-то это в штатном Конфигураторе не так - там ввод-вывод в фоне идет. Толком не исследовал, да и не представляю, чтобы это можно было изменить в твоей библиотеке, так что мирюсь. Остальные преимущества перевешивают, как слон моську![]()
Последний раз редактировалось drvlas; 23.04.2011 в 10:21.
Я ж понимаю, я ж не в претензии
Ладно, наши понимания сложности различаются в разыДля меня - сложная логика, и баста!
А нужно ли? Я вот подумываю перевести ИП-320 тоже на твою библиотеку (сделав его слейвом, ясен перец). И тогда пусть приходы ловят непосвященные![]()
Всех с Праздником. Очень интересная полемика. И снова про эти самые регистры...Чем больше читаю про модбас. тем больше каша в голове.
• 1 (0x01) — чтение значений из нескольких регистров флагов (Read Coil Status)
• 2 (0x02) — чтение значений из нескольких дискретных регистров (Read Discrete Inputs)
• 3 (0x03) — чтение значений из нескольких регистров хранения (Read Holding Registers)
• 4 (0x04) — чтение значений из нескольких регистров ввода (Read Input Registers.
Выше приведённое описание мне мало о чём говорит...
В параметрах модуля Register imput module даются на выбор три команды функции 3, 4 и ещё некая функция Read bytes.
Так вот, в чём собственно говоря разница между чтением регистров хранения и чтением регистров ввода?
Чем мне руководствоваться при выборе той или иной команды для чтения дивайса?
Если регистр хранения записывается в контроллере, то где? В какой памяти энергонезависимой или энергозависимой. Какая польза мне от того, что он сохранился? Я имею ввиду возможное прикладное использование этого факта...И как его потом извлекать?
Или я опять не туда попёр?
В общем, чем дальше в лес, тем больше дров...
Вы то уж маститые, не первый год играетесь с контроллерами, объясните мне "особо одарённому".
Спасибо. Ещё раз всех с праздником...
Это разные регистры.
Вообще говоря, в протоколе МОДБАС 4 разных адресных пространства с одинаковыми адресами! И в общем случае, чтение ф-ей 3 и 4 - это м.б. чтения разных переменных. Реально так не делает никакой производитель, во всяком случае, мне такие устройства не известны.
А дальше - все понятно из описания. Только для ввода логические и слово и для вывода и ввода(контроля) тоже.
OK/ Спасибо. Теперь следующие непонятки. Установил связь с дивайсом Модбас RTU (ПЛК154 мастер). На контроллере светодиод связь горит, на дивайсе Rx и Tx тоже горят, команду установил 255, Last error =0,- вроде всё чудесно должно быть , а ничего не принимается. Адреса несколько странноватые у дивайса. Все начинаются на 4. Например 40003, 40005,40057, 40063 и т.д. и т.п. Посоветовали мне забивать последние цифры 3, 5, 57, 63 и т.д. Пытался адреса на единицу меньше адреса устанавливать, а воз и ныне там...Кто-нибудь может сталкивался с подобным???
Регистры 4хххх - это Holding Register. При этом хххх нумеруется с 1, а адрес, который идет в посылке - с 0, т.е. на 1 меньше.
Считываются ф-ей 3.
Пробовать для начала лучше с устройства с жестко прошитыми регистрами МОДБАС