PDA

Просмотр полной версии : Сброс значения TRUE в FALSE



РустамДж
25.07.2018, 14:37
Добрый день!
Столкнулся с такой задачей. С Верхнего уровня подаю команду TRUE на СПК207, конкретно в ModbusTCPSlaveDevice определенный адрес, он срабатывает реле переключает. Теперь, как сделать чтобы адрес, на который поступила команда TRUE обнулилось в False автоматически через определенное время? Среда программирования CoDeSys v3.5.

Евгений Кислов
25.07.2018, 15:29
Добрый день!
Столкнулся с такой задачей. С Верхнего уровня подаю команду TRUE на СПК207, конкретно в ModbusTCPSlaveDevice определенный адрес, он срабатывает реле переключает. Теперь, как сделать чтобы адрес, на который поступила команда TRUE обнулилось в False автоматически через определенное время? Среда программирования CoDeSys v3.5.

Добрый день.
Насколько я понимаю, команда с верхнего уровня приходит однократно, а не циклически?
В этом случае можно установить таймаут ожидания запросов от мастера - если в течение этого времени не будет получено ни одной команды, то значения всех регистров слэйва будут сброшены в 0.

38145

Если такое поведение не подходит (например, мастер постоянно читает данные слэйва или же сбрасывать надо только определенные регистры, а не все), то следует объявить дополнительную переменную. В эту переменную в зависимости от нужных Вам условий необходимо записывать либо значение из регистра слэйва, либо 0. Проще всего сделать это с помощью оператора SEL.

Если возникнут дополнительные вопросы, то вы можете связаться со мной по skype (данные в подписи).

ferret_maybe
25.07.2018, 15:32
Как один из вариантов может быть:
TON1(IN:=Value,PT:=Time);
IF (TON1.Q=TRUE) THEN
Value:=FALSE;
END_IF;

Евгений Кислов
25.07.2018, 15:36
Как один из вариантов может быть:
TON1(IN:=Value,PT:=Time);
IF (TON1.Q=TRUE) THEN
Value:=FALSE;
END_IF;

Дело в том, что если Value привязана к области Modbus Slave - то ее значение нельзя изменить из программы. Это особенность реализации Modbus Slave в конфигурации CODESYS 3.5.

РустамДж
25.07.2018, 21:01
Добрый вечер!
1 вариант не пойдет, так как Верхнему уровню нужно постоянное чтение состояния контактов модуля ввода.
Я в CoDeSys не так силен, можете скинуть какой не будь пример, как это реализовать. Язык программирования выбрал CFC. Ситуация такая, я посылаю команду TRUE на переменную test1 присвоенная на контакт ModbusTCPSlaveDevice, та передает эту команду на переменную test2 на контакт модуля вывода МУ110-220.32Р. Модуль переключает реле. Сегодня использовал между ними таймер TP, переменная test2 отключается, а переменная test1 стоит в положении TRUE. По пробовал еще добавить элемент MOVE переменная test1 стала выключатся, но теперь гонит переменная test2. Еще выходит сообщение что я использую одну и ту же переменную в начале и в конце. Может я что та не так делаю, подскажите!!!

Евгений Кислов
26.07.2018, 06:57
Давайте свяжемся с вами по Skype? Я вам отправил запрос на добавление.

РустамДж
26.07.2018, 07:30
Добрый день!
Я работаю на железной дороге, тут запрещают безопасники использовать skype. Есть AnyDesk и могу установить teamviewer. Или же вечером связаться с Вами из дома.

Евгений Кислов
26.07.2018, 07:47
Установите, пожалуйста, TeamViewer и пришлите в личку телефон, по которому с вами можно связаться.