Вход

Просмотр полной версии : Зафиксировать значение температуры



Danzel
22.12.2013, 07:42
Помогите пожалуйста, возникла проблема. Имеется ПЛК150, на аналоговый вход подключен датчик температуры, необходимо зафиксировать значение температуры в момент срабатывания устройства, как реализовать это программно

capzap
22.12.2013, 07:51
if current and current<>oldValue then
fixResult:=realTemp;
end if
oldValue:=current

Sergey666
22.12.2013, 10:54
Помогите пожалуйста, возникла проблема. Имеется ПЛК150, на аналоговый вход подключен датчик температуры, необходимо зафиксировать значение температуры в момент срабатывания устройства, как реализовать это программно

Что значит "в момент срабатывания устройства"???
Задавайте простые вопросы не так размыто.
По любому "срабатывание устройства" фиксировать триггером (по фронту) и в момент срабатывания фиксировать значение температуры , куда угодно , хоть в переменную , хоть в массив переменных.

Danzel
22.12.2013, 14:01
Сигнальное устройство, реагирующее на изменение замыканием/размыканием контактной группы, подключенное на дискретный вход ПЛК, так вот при его срабатывании,т.е замыкании контактов, необходимо зафиксировать температуру

Sergey666
22.12.2013, 14:28
Выше был дан исчерпывающий ответ , как это сделать.

Danzel
22.12.2013, 20:44
а можете по подробнее объяснить про выше указанный код программы, а то не понятно по первой строчке

capzap
22.12.2013, 20:57
а можете по подробнее объяснить про выше указанный код программы, а то не понятно по первой строчке

первая строчка олицетворяет собой постоянное слежение за вашим дискретным входом и как только он станет TRUE, условие выделит передний фронт перехода в это состояние, в следующий цикл хоть и переменная current будет высокого потенциала, она будет равна переменной oldValue, которая в свою очередь, в каждом цикле после условия принимает значение состояния входа :) как то так

amn
22.12.2013, 21:30
Вариант capzapа другими словами :):

R_TRIG1(IN:=current);
if R_TRIG1.Q then
fixResult:=realTemp;
end if

capzap
22.12.2013, 22:45
Вариант capzapа другими словами :):

R_TRIG1(IN:=current);
if R_TRIG1.Q then
fixResult:=realTemp;
end if
В Вашем варианте дополнительно целый ФБ, в моем одна лишь булева переменная :)

Danzel
23.12.2013, 14:16
Спасибо за помощь:)

amn
23.12.2013, 19:51
В Вашем варианте дополнительно целый ФБ, в моем одна лишь булева переменная :)

Я это заметил, но Вы так оригинально литературно описали, что вопрошающий мог не сразу понять :)

Sergey666
23.12.2013, 20:24
if current and current<>oldValue then
fixResult:=realTemp;
end if
oldValue:=current

Фиксация будет происходить по изменению , как с 0-1 , так и с 1-0 .
Для переднего фронта надо писать:
if current and (not oldValue) then
...

capzap
23.12.2013, 20:46
Фиксация будет происходить по изменению , как с 0-1 , так и с 1-0 .
Для переднего фронта надо писать:
if current and (not oldValue) then
...

ну насмешили, попробуйте проверить если переменная current будет равна TRUE это первое условие, то чему должна быть равна oldValue чтоб выполнилось неравенство, это вторая часть условия

Sergey666
23.12.2013, 21:46
Нууу.... не знаю , в лом код в исполнение запускать...
Current переходит из true в False:

Ежели False and False <> True (*Еще не переключилось ОлдВэлью:o*)Тады
...Само-собой
усе
Переключаем ОлдВэлью

Кажись так

capzap
23.12.2013, 22:15
Можете не ломаться, я брал из оската, не отрицаю что и по Вашему варианту можно, это тоже самое, просто на любителя