Спасибо за такой большой и развернутый материал по этой теме, так удивительно, что ни одного комментария на эту тему!)
Ещё раз спасибо, буду «углубляться»
1. Также хотелось бы понять механизм появления данных, считанных по Модбас — в какой момент и как они появляются?.. Скажем, классический сценарий работы ЦПУ — считываем входы, делаем программу — записываем выходы.
Где в этом цикле будет находиться перемещине данных из буфера коммуникационного модуля в область ДБ?.. Нужно ли это учитывать при написании программы? Могут ли данные появиться в середине цикла программы и может ли это повлиять на работоспособность?
Насколько я могу судить, считываемые данные могут появиться в любой момент времени (мы не знаем, через сколько ответит слейв или если есть на линии отваленные устройства то к циклу опроса добавится задержка). Не знаю, важно ли это или нет.
2. Я всё со своей записью в регистры «по изменению» в релеынй модуль WirenBoard.
Как писал выше — кейс: управлять лампочками через релейный модуль «в параллель» с входными сигналами. Релейный модуль меняет состояние выходных каналов по фронту входных сигналов, а также может менять состояние (R/W) выходных каналов через modbus.
Остаётся продумать механизм записи. Похоже, он просто выглядит из, как минимум, 2х циклов: чтение выходов (скажем, слово из 8 бит, по биту на выход), проверки слова на запись, если слово на запись != считанному слову -> посылка слова на запись, непосредственно запись в слейв.
Также для повышения быстродействия, по всей видимости (если опрашиваем ХХ устройств) на отклик — можно предусмотреть «прерывания» — если слова на запись != считанным словам, то изменить шаг с условного 1(считывание первого устройства) на 10 — (запись в 1 устройство).
Но опять же, придётся учитывать, что остальная запись пройдет скорее всего, «в холостую», т… е в остальные слейвы будут записаны те же данные, что там и были(для простоты программы).
3. Эмулятор под S7-1200/1500 позволит протестировать Modbus TCP?.. Лет 9 назад вроде не умел, согласно документации…
4.0 Если использовать Modbus TCP, сколько коннектов можно поднять на S7-1200?.. У него вроде было до 8 коннектов, вот я не знаю — туда входят коннекты Модбаса? Вопрос в том ключе, что как работает драйвер ModbusTСP с несколькими слейвами — если делать опрос «по шагам» — то понятно, что как «поллинг».
А что если использовать несколько экземпляров ModbusTСP драйвера, каждый со своим коннекшеном, могу ли я тем самым повысить быстродействие?
4.1 Такой финт ушами для MB_MASTER (несколько экземпляров) в режиме ModbusRTU Over TCP всё равно не пройдет, ведь я понимаю, один экземлпяр на один коммуникационный модуль?
4.2 Что если я поставлю на каждый конвертер TCP-RTU и буду поднимать отдельный MB_MASTER RTU over TCP на каждый конвертер — в теории это же должно повысить быстродействие (см 4.0)?.. Мало того, можно использовать топологию «звезда».
Скажем, в условиях домашнего применения можно было бы HVAC повесить на один шлейф, а управление светом — на другой и вместо RS485 модуля купить 2 преобразователя TCP-RTU.
Вопрос целесообразности пока не сильно затрагиваю, хотелось бы понять больше принцип работы.
Хотелось бы понять а зачем… «заворачивать» ФБ модбаса в мультиэкземпляр как таковой… Это хорошая практика? В примерах Сименс похожий подход?.. Не должна как по мне, падать программа при изменении формата хранения данных…
Там скорее всего… я не знаю как сказать — драйвер модбаса обращается к «жестко» прописанным адресам в ДБ, и если ДБ «сместить» (добавить новую переменную выше по течению) драйвер модбаса наверное, «сходит с ума»?.. хотелось бы поподробнее понять механизм, что там происходит и почему… По всей видимости, нужен какой-то online memory rebuild или типа того, чтобы после изменения олнайн программа продолжала «жить»…
Возможно, в справке по online change про это что-нибудь рассказано, но я с сименсом давно уже не работал…
Что значит «интерфейс» внешнего ФБ?.. Изменение его структуры, добавление новых данных и т.д.?
Можно ли как-то автоматически отслеживать, что произошла загрузка\изменение ФБ и запуск инициализации коммуникации «с начала»?.. Либо даже не с начала а с последнего шага…
Может ли в таком случае быть потерян какой-то управляющий сигнал на запись?.. (если мы использовали что-то в стиле one shot в шаге 3, а пере-инициализация началась на шаге 1 и мы «потеряли» команду управления?) В-общем, похоже нужно быть внимательным… Может быть, можно и автоматически останавливать коммуникацию?..
Спасибо, интересно читать ваши статьи, понятно, доходчиво и развернёто.
Я в своё время делал этот обмен на LAD, было больновато)) У вас конечно, на SCL поизящней будет.
Как я вижу — у вас идёт циклическое чтение\запись независимо от условий.
И я вроде, тоже так делал. Однако, в случае, если выходами слейвов может управлять кто-то ещё (например, модуль реле у WirenBoard может переключать выходы от своих входов, а может «рулиться» по модбас — задача управления светом).
Соответственно, нужно делать некий кроссчек на проверку, была ли переменная изменена, чтобы не было такого, что слейв пишет на выход «0», а мы туда статически пишем «1». В ПЧ и т.д. обычно используют режим local\remote либо как здесь некий ControlFromPLC бит, как подтверждение «легитимности» записи.
В-общем, за счёт того, что Modbus в Siemens прописывается «руками» о циклической записи нужно помнить, я так понимю.
Или в дебрях руководства к драйверу что-нибудь написано про то, что если с последней записи данных значения не изменились то в интерфейс новые значения подаваться не будут? В любом случае, это не отменяет необходимость чтения выходов слейва и только потом записи (если пришел реквест на запись).
Пока оставляем прием данных без обработки, компилируем и грузим программу, смотрим на результат. Кстати, обращаю еще внимание на один факт. Поскольку мы работаем, завернув системные вызовы в свой функциональный блок, то любое изменение «своего» ФБ с последующей загрузкой ПЛК, будет нарушать обмен в связи с переинициализацией экземпляра нашего ФБ. Например, будет уходить в ноль значение «шага обмена». Да и внутренние статические переменные коммуникационных вызовов тоже пострадают. Самый простой способ — стоп и старт контроллера. В боевом проекте это опасно, поэтому там на вход Init я бы подал еще одну переменную и поднимал ее самостоятельно после изменений в коммуникациях. Пока же боремся с остановом обмена простым стоп-стартом ПЛК.
Можно ещё раз другими словами?.. Я немного не понял… ПЛК грузится в RUN «онлайн» без стопа? соответственно, модбас драйвер уже инициализирован и новые значения при их прогрузке не подхватывает, так? Напомните, S7-1200 может грузиться онлайн или через стоп?
А блок инициализации можно вызывать принудительно? Не хотелось бы, условно говоря останавливать процесс ради переинициализации обмена данными.
ЗЫ. Планирую поставить какой-нибудь 1200й в качестве главного ПЛК для умного дома.
Архив программы новостей наверняка есть у самого телеканала) вопрос как сделать какую-то структуру хранения данных, которая 1-2-100 тысяч лет выдержит?)
ну 100к лет может и не надо, хотя бы 1-2))
Если посмотреть на историю — что творилось 2000 лет назад еле разобрать — бумага полустлевшая, города под слоем пепла, так и приходится восстанавливать по черепичкам.
На чём хранить данные, чтобы они считались без проблем? Гранит? Нержавейка? Супер-пупер пластик?
А что, сделал «базовый» бэкап, а потом наращивай его «инкрементальными» архивами)))
Просто исходить из того, что библиотеки децентрализованы по городам? А что, если они пропадут? Как много нам понадобится времени, чтобы вернуть назад знания из этих библиотек? А сколько ещё «необщедоступных» знаний про военную технику и т.д… Но этот момент пока можно было бы опустить.
Просто в доступе в офрме бункера и легко читаемый знаю грубо говоря только пирамиду. Обеспечивать считываемость информации на тысячи лет кроме гранита тоже материалов не знаю. Какие пароли и клавиатуры, какие резерные источники?) Если мы будем говорить о скажем, тысячах лет запаса на работоспособность?)
вроде как была где-то заметка, что не очень разумно было Землянам, находящимся на данной стадии развития «светиться» в космосе, заявляя о себе)) В любом случае, вояджер далеко не улетит особо, там до ближайшей экзопланеты вроде как 4 световых года, так что сильно волноваться не стоит.
А по поводу бэкапа — если не для рептилоидов то хотя бы для самих себя. Сколько понадобится человечеству времени чтобы достигнуть существующего уровня если будут утеряны скажем 80% данных\технологий?
Хотя бы на уровне государства этот вопрос имел сколько нибудь значимый вес? что будет если исчезнут все научные библиотеки, институты и т.д.? Наверное, никто не рассматривал такое развитие событий всерьёз. Я к тому, что сколько времени нужно было чтобы все эти матаны, теории вероятностей и т.д. были положены «на бумагу», и что будет если мы утеряем эти данные?
А дальше по поводу памятника человечеству (себе любимым) — вроде слышал о каком-то хайповом проекте типа современной пирамиды. Почему бы не построить нечто такое, скажем, выдерживающее ядерный удар? Конечно же, всякие ITER'ы и т.д. по своей наукоёмкости, сложности и стоимости наверное, превосходят пирамиду Хеопса:
«По оценкам специалистов строительство пирамиды Хеопса могло обойтись фараону в сумму от 5 до 12 миллиардов долларов на современные деньги.» — из интернетов.
Не самые большие деньги, как по мне, с учетом военного бюджета США в сотни миллиардов в год)))
А ведь можно было бы поверх еще и ТВ-шоу сделать типа Дом-2, часть денег вернуть?)
То же самое и с полётом на Марс хотя бы. Скинулись бы всем миром по миллиарду-другому, на 200 миллиардов можно было бы неплохую программу сбацать. Но пока, к сожалению, человека немного некогда делать ТВ-шоу из полёта на Марс… а жаль…
Мне тоже непонятно, почему не раскрыто преимущество между преобразованаием СЭС в электричество->потребитель против СЭС->электролиз->водород?
Или основной принцип в том, что в течение дня СЭС может производить гораздо больше электричества, чем утилизировать и водород это способ хранения энергии?
Плюс если помножить на, что технология развивается в Японии, а там, как я понмю из географии за 7й класс полезных ископаемых (энергии) совсем бы сказать мало. Может быть, это часть какой-то программы энергетической независимости Японии?
Если так, у них остаётся только солнце, но тогда возвращаюсь к первому вопросу — почему энергию солнца эффективнее преобразовывать в водород, а не использовать в виде электричества
Немного не по теме, но пока не встречал места, где можно было бы подискуссировать не следующую тему: некий бэкап всех знаний\технологий человечества.
Насколько вероятно, что в случае масштабного катаклизма на замле (война, климат и т.д) в случае гибели бОльшей части людей «погибнут» все наши знания? Наши накопленные знания сейчас по-большому счёту, в бумажных книгах\чертежах, в головах и компьютерах. Насколько вероятно, что в случае мировых катаклизмов мы потеряем людей, владеющих знаниями и носители знаний? Или нужно исходить из того, что знания слишком «децентрализованы» — т.е. научные библиотеки распространены по всему миру?
Мелькнула мысль, что не нужно ли людям сделать некое хранилище-бэкап всех знаний? Пирамида Хеопаса между тем неплохо сохранила в себе знания о цивилизации 4000-летней давности. Нам случайно не нужна такая или раза в три больше? Или децентрализованная сеть бункеров со «знаниями» по всей планете?)
Почему бы в конце концов, не построить пирамиду раза в 3 больше хеопсовской just for fun?) В космос родстеры запускаем, на Марс\луну летаем, почему бы и на земле не построить Памятник Человечеству?)
Если бы взяли идеи и практики из Iobroker (количество драйверов, гибкость, телеграмм и т.д.), добавили Pro-mode в виде скриптов на какие-то «замороченные» события и логику (для DIYщиков), сделали некий «магазин» или просто «библиотеку» скриптов, добавили возможность делать кастомный HMI (Iridium)… Я бы за это заплатил!
Iobroker страдает, как по мне, отсутствием мануалов\гайдов на российском пространстве, но при этом очень гибок. Вы могли бы занять хорошую нишу устройства для интеграции «всего-в-одно». Жду когда кто-то наладит выпуск производительного мини-пк с HMI из коробки но при этом будет давать широкие возможности по интеграции (не вендор-лок) и глубокого кастомайзинга для DIY.
Ещё раз спасибо, буду «углубляться»
Где в этом цикле будет находиться перемещине данных из буфера коммуникационного модуля в область ДБ?.. Нужно ли это учитывать при написании программы? Могут ли данные появиться в середине цикла программы и может ли это повлиять на работоспособность?
Насколько я могу судить, считываемые данные могут появиться в любой момент времени (мы не знаем, через сколько ответит слейв или если есть на линии отваленные устройства то к циклу опроса добавится задержка). Не знаю, важно ли это или нет.
2. Я всё со своей записью в регистры «по изменению» в релеынй модуль WirenBoard.
Как писал выше — кейс: управлять лампочками через релейный модуль «в параллель» с входными сигналами. Релейный модуль меняет состояние выходных каналов по фронту входных сигналов, а также может менять состояние (R/W) выходных каналов через modbus.
Остаётся продумать механизм записи. Похоже, он просто выглядит из, как минимум, 2х циклов: чтение выходов (скажем, слово из 8 бит, по биту на выход), проверки слова на запись, если слово на запись != считанному слову -> посылка слова на запись, непосредственно запись в слейв.
Также для повышения быстродействия, по всей видимости (если опрашиваем ХХ устройств) на отклик — можно предусмотреть «прерывания» — если слова на запись != считанным словам, то изменить шаг с условного 1(считывание первого устройства) на 10 — (запись в 1 устройство).
Но опять же, придётся учитывать, что остальная запись пройдет скорее всего, «в холостую», т… е в остальные слейвы будут записаны те же данные, что там и были(для простоты программы).
3. Эмулятор под S7-1200/1500 позволит протестировать Modbus TCP?.. Лет 9 назад вроде не умел, согласно документации…
4.0 Если использовать Modbus TCP, сколько коннектов можно поднять на S7-1200?.. У него вроде было до 8 коннектов, вот я не знаю — туда входят коннекты Модбаса? Вопрос в том ключе, что как работает драйвер ModbusTСP с несколькими слейвами — если делать опрос «по шагам» — то понятно, что как «поллинг».
А что если использовать несколько экземпляров ModbusTСP драйвера, каждый со своим коннекшеном, могу ли я тем самым повысить быстродействие?
4.1 Такой финт ушами для MB_MASTER (несколько экземпляров) в режиме ModbusRTU Over TCP всё равно не пройдет, ведь я понимаю, один экземлпяр на один коммуникационный модуль?
4.2 Что если я поставлю на каждый конвертер TCP-RTU и буду поднимать отдельный MB_MASTER RTU over TCP на каждый конвертер — в теории это же должно повысить быстродействие (см 4.0)?.. Мало того, можно использовать топологию «звезда».
Скажем, в условиях домашнего применения можно было бы HVAC повесить на один шлейф, а управление светом — на другой и вместо RS485 модуля купить 2 преобразователя TCP-RTU.
Вопрос целесообразности пока не сильно затрагиваю, хотелось бы понять больше принцип работы.
Там скорее всего… я не знаю как сказать — драйвер модбаса обращается к «жестко» прописанным адресам в ДБ, и если ДБ «сместить» (добавить новую переменную выше по течению) драйвер модбаса наверное, «сходит с ума»?.. хотелось бы поподробнее понять механизм, что там происходит и почему… По всей видимости, нужен какой-то online memory rebuild или типа того, чтобы после изменения олнайн программа продолжала «жить»…
Возможно, в справке по online change про это что-нибудь рассказано, но я с сименсом давно уже не работал…
Что значит «интерфейс» внешнего ФБ?.. Изменение его структуры, добавление новых данных и т.д.?
Можно ли как-то автоматически отслеживать, что произошла загрузка\изменение ФБ и запуск инициализации коммуникации «с начала»?.. Либо даже не с начала а с последнего шага…
Может ли в таком случае быть потерян какой-то управляющий сигнал на запись?.. (если мы использовали что-то в стиле one shot в шаге 3, а пере-инициализация началась на шаге 1 и мы «потеряли» команду управления?) В-общем, похоже нужно быть внимательным… Может быть, можно и автоматически останавливать коммуникацию?..
Я в своё время делал этот обмен на LAD, было больновато)) У вас конечно, на SCL поизящней будет.
Как я вижу — у вас идёт циклическое чтение\запись независимо от условий.
И я вроде, тоже так делал. Однако, в случае, если выходами слейвов может управлять кто-то ещё (например, модуль реле у WirenBoard может переключать выходы от своих входов, а может «рулиться» по модбас — задача управления светом).
Соответственно, нужно делать некий кроссчек на проверку, была ли переменная изменена, чтобы не было такого, что слейв пишет на выход «0», а мы туда статически пишем «1». В ПЧ и т.д. обычно используют режим local\remote либо как здесь некий ControlFromPLC бит, как подтверждение «легитимности» записи.
В-общем, за счёт того, что Modbus в Siemens прописывается «руками» о циклической записи нужно помнить, я так понимю.
Или в дебрях руководства к драйверу что-нибудь написано про то, что если с последней записи данных значения не изменились то в интерфейс новые значения подаваться не будут? В любом случае, это не отменяет необходимость чтения выходов слейва и только потом записи (если пришел реквест на запись).
Можно ещё раз другими словами?.. Я немного не понял… ПЛК грузится в RUN «онлайн» без стопа? соответственно, модбас драйвер уже инициализирован и новые значения при их прогрузке не подхватывает, так? Напомните, S7-1200 может грузиться онлайн или через стоп?
А блок инициализации можно вызывать принудительно? Не хотелось бы, условно говоря останавливать процесс ради переинициализации обмена данными.
ЗЫ. Планирую поставить какой-нибудь 1200й в качестве главного ПЛК для умного дома.
ну 100к лет может и не надо, хотя бы 1-2))
Если посмотреть на историю — что творилось 2000 лет назад еле разобрать — бумага полустлевшая, города под слоем пепла, так и приходится восстанавливать по черепичкам.
На чём хранить данные, чтобы они считались без проблем? Гранит? Нержавейка? Супер-пупер пластик?
А что, сделал «базовый» бэкап, а потом наращивай его «инкрементальными» архивами)))
А по поводу бэкапа — если не для рептилоидов то хотя бы для самих себя. Сколько понадобится человечеству времени чтобы достигнуть существующего уровня если будут утеряны скажем 80% данных\технологий?
Хотя бы на уровне государства этот вопрос имел сколько нибудь значимый вес? что будет если исчезнут все научные библиотеки, институты и т.д.? Наверное, никто не рассматривал такое развитие событий всерьёз. Я к тому, что сколько времени нужно было чтобы все эти матаны, теории вероятностей и т.д. были положены «на бумагу», и что будет если мы утеряем эти данные?
А дальше по поводу памятника человечеству (себе любимым) — вроде слышал о каком-то хайповом проекте типа современной пирамиды. Почему бы не построить нечто такое, скажем, выдерживающее ядерный удар? Конечно же, всякие ITER'ы и т.д. по своей наукоёмкости, сложности и стоимости наверное, превосходят пирамиду Хеопса:
«По оценкам специалистов строительство пирамиды Хеопса могло обойтись фараону в сумму от 5 до 12 миллиардов долларов на современные деньги.» — из интернетов.
Не самые большие деньги, как по мне, с учетом военного бюджета США в сотни миллиардов в год)))
А ведь можно было бы поверх еще и ТВ-шоу сделать типа Дом-2, часть денег вернуть?)
То же самое и с полётом на Марс хотя бы. Скинулись бы всем миром по миллиарду-другому, на 200 миллиардов можно было бы неплохую программу сбацать. Но пока, к сожалению, человека немного некогда делать ТВ-шоу из полёта на Марс… а жаль…
Или основной принцип в том, что в течение дня СЭС может производить гораздо больше электричества, чем утилизировать и водород это способ хранения энергии?
Плюс если помножить на, что технология развивается в Японии, а там, как я понмю из географии за 7й класс полезных ископаемых (энергии) совсем бы сказать мало. Может быть, это часть какой-то программы энергетической независимости Японии?
Если так, у них остаётся только солнце, но тогда возвращаюсь к первому вопросу — почему энергию солнца эффективнее преобразовывать в водород, а не использовать в виде электричества
Насколько вероятно, что в случае масштабного катаклизма на замле (война, климат и т.д) в случае гибели бОльшей части людей «погибнут» все наши знания? Наши накопленные знания сейчас по-большому счёту, в бумажных книгах\чертежах, в головах и компьютерах. Насколько вероятно, что в случае мировых катаклизмов мы потеряем людей, владеющих знаниями и носители знаний? Или нужно исходить из того, что знания слишком «децентрализованы» — т.е. научные библиотеки распространены по всему миру?
Мелькнула мысль, что не нужно ли людям сделать некое хранилище-бэкап всех знаний? Пирамида Хеопаса между тем неплохо сохранила в себе знания о цивилизации 4000-летней давности. Нам случайно не нужна такая или раза в три больше? Или децентрализованная сеть бункеров со «знаниями» по всей планете?)
Почему бы в конце концов, не построить пирамиду раза в 3 больше хеопсовской just for fun?) В космос родстеры запускаем, на Марс\луну летаем, почему бы и на земле не построить Памятник Человечеству?)
Если бы взяли идеи и практики из Iobroker (количество драйверов, гибкость, телеграмм и т.д.), добавили Pro-mode в виде скриптов на какие-то «замороченные» события и логику (для DIYщиков), сделали некий «магазин» или просто «библиотеку» скриптов, добавили возможность делать кастомный HMI (Iridium)… Я бы за это заплатил!
Iobroker страдает, как по мне, отсутствием мануалов\гайдов на российском пространстве, но при этом очень гибок. Вы могли бы занять хорошую нишу устройства для интеграции «всего-в-одно». Жду когда кто-то наладит выпуск производительного мини-пк с HMI из коробки но при этом будет давать широкие возможности по интеграции (не вендор-лок) и глубокого кастомайзинга для DIY.