PDA

Просмотр полной версии : Обнуление счетчика МВ11-16ДН



Juan Esteban
19.03.2021, 13:36
Снова здравствуйте! Никак не могу разобраться, как обнулять счетчик модуля дискретных входов МВ110-16ДН. В инструкции написано, что надо записывать 0 в соответствующий регистр, но создание Register output module постоянно обнуляет счетчик, что бессмысленно.

В похожей теме прочитал, что надо использовать библиотеку Modbus.lib, но там, походу, надо как-то открывать СОМ-порт на контроллере, но все мои попытки не увенчались успехом.

Посоветуйте, как правильно его обнулять?

Juan Esteban
19.03.2021, 13:57
Да вот читаю целый день, но походу не там. Подскажите направление поиска: как можно сделать эту запись по команде?

Juan Esteban
19.03.2021, 14:06
А разве можно одно устройство в модбас-мастере два раза прописывать? Потому что мне надо по времени опрашивать счётчик и по запросу обнулять, если выставить оба режима, он будет так же по времени его обнулять, что мне не нужно.

Juan Esteban
19.03.2021, 16:02
Спасибо, буду пробовать. Если бы пальцем не ткнули, вряд ли бы нашел.

Juan Esteban
19.03.2021, 17:37
А зачем вообще обнулять? Пока обнуляете, есть риск потерять импульс (по задаче конечно же)

Надо по ТЗ. Счетчик считает среду, один импульс - 10 л, при объемах в десятки кубов не принципиален, плюс обнуление будет проводится по команде оператора, т.е. без расхода в линии.

Juan Esteban
20.03.2021, 06:01
В ТЗ так и написано - записать 0 в модуль ввода ? ))

Нет, конечно. Я решил отталкиваться от того, что написано в инструкции к модулю. Может быть, можно сделать и иначе - но тогда, скорее всего, надо будет следить за переполнением счетчика.

Вообще, у вас странная манера - задавать вопросы, плавно подводящие к тому, что я болван и все делаю неправильно, вместо того, чтобы прямо написать, что задачу можно решить еще так-то и так-то, что это лучше потому-то и потому-то. Это же форум, а не экзамен.

Juan Esteban
23.03.2021, 07:51
Вы прочли только то что на картинке или заглянули всё же в документацию, как насчет раздела 3.2.2 это несколько ниже того текста который на скрине

Добрался сегодня до оборудования, попробовал опрос по команде - почему-то не работает. Сделал элементы Register input module State с командными переменными, установил режим работы By command, в подпрограмму опроса дискретных модулей добавил в начале присвоение 255 командной переменной. Запускаю - опрос не идет, лампочка на модуле не мигает. Командная переменная показывает то 255, то 0, а собственно переменная входов не реагирует на замыкание входов.

Что я делаю не так? Как этот опрос/запись по команде правильно делать?

upd. Обнаружил, что он-таки реагирует, но только при стопе программы. То есть значения переменной входов обновляются при остановке программы. При запуске - также ноль реакции.

Juan Esteban
23.03.2021, 08:36
там не написано что то вроде того что один раз запуск системы, а второй раз триггер записи

Написано. Я пробовал два раза присваивать, и в разных местах, но без особого толку.

Juan Esteban
23.03.2021, 12:51
Короче, проблему я решил следующим образом: у своего модуля дискретных входов переменную входов и переменную счетчика оставил обычными Register input module (не State, т.е без управляющих переменных), а переменную для обнуления сделал в виде Register output module State, т.е. с управляющей переменной). При этом режим работы я оставил By polling time. Чтобы обнулить счетчик пришлось по сигналу на обнуление:
1) передать 255 в управляющую переменную,
2) через 1 с по таймеру еще раз передать 255 в управляющую переменную,
3) выключить сигнал на обнуление,
4) еще через 1 с по таймеру передать 254 в управляющую переменную для остановки записи 0 в счетчик.

Возможно, сделал я это через задницу, но оно, по крайней мере, работает.

Таким образом, выяснилось следующее:
1) для записи по запросу не надо выставлять режим работы в By command на модуле, достаточно добавить State-выход и посылать на него управляющие сигналы.
2) для того, чтобы эти сигналы отрабатывали, нужно время, для чего пришлось добавлять таймеры. Время таймеров задано исходя из времени опроса модуля (у меня 1 с), меньше - не работает.

A.Simonov
23.03.2021, 15:13
Короче, проблему я решил следующим образом: у своего модуля дискретных входов переменную входов и переменную счетчика оставил обычными Register input module (не State, т.е без управляющих переменных), а переменную для обнуления сделал в виде Register output module State, т.е. с управляющей переменной). При этом режим работы я оставил By polling time. Чтобы обнулить счетчик пришлось по сигналу на обнуление:
1) передать 255 в управляющую переменную,
2) через 1 с по таймеру еще раз передать 255 в управляющую переменную,
3) выключить сигнал на обнуление,
4) еще через 1 с по таймеру передать 254 в управляющую переменную для остановки записи 0 в счетчик.

Возможно, сделал я это через задницу, но оно, по крайней мере, работает.

Таким образом, выяснилось следующее:
1) для записи по запросу не надо выставлять режим работы в By command на модуле, достаточно добавить State-выход и посылать на него управляющие сигналы.
2) для того, чтобы эти сигналы отрабатывали, нужно время, для чего пришлось добавлять таймеры. Время таймеров задано исходя из времени опроса модуля (у меня 1 с), меньше - не работает.

Добрый день.

Сегодня проверил режим by comand
Режим работает.

Алгоритм такой:
1) Создаете в конфигурации modbus мастера
2) Создаете в конфигурации universal modbus device (режим работы ставите by comand)
3) Добавляете переменную register output module State

Порядок произведения записи
1) Записать желаемое значение переменной в канале register output module State
2) В командный канал переменной register output module State необходимо записать 255 (это нужно сделать один раз, чтобы включить канал в работу)
3) После того как в канале опять появится 0, нужно еще раз записать туда 255, это произведет запись. Далее после каждой записи 255 в канал будет происходить запись переменной в slave устройство)

P.S.
Если записать в канал 254 - это отключит его, и тогда нужно будет опять два раза записать 255 туда, чтобы вновь записать переменную.

Juan Esteban
23.03.2021, 15:34
Ну вот по такому алгоритму я и действовал безрезультатно, пока не пришёл к вышеизложенным выводам - что, например, выставлять режим By command для записи по команде необязательно.

A.Simonov
23.03.2021, 16:52
Ну вот по такому алгоритму я и действовал безрезультатно, пока не пришёл к вышеизложенным выводам - что, например, выставлять режим By command для записи по команде необязательно.

Только сегодня проверил на реальном оборудовании, все работает.
Я правильно понимаю что в качестве мастера используется ПЛК110 [М02] или ПЛК160 [М02]?
Какая прошивка на устройстве?

Juan Esteban
23.03.2021, 17:59
ПЛК110[M02], про прошивку не знаю. Да оно скорее всего и работает, как вы говорите, просто у меня, предположу, из-за большого времени опроса, управляющая переменная обнулялась до того, как передавалась на модуль.

С другой стороны, мне с этого модуля надо считывать по времени дискретные входы и значение собственно счетчика, так что даже лучше, что для них нет необходимости делать State-переменные и прописывать их опрос в режиме By command.