PDA

Просмотр полной версии : Реализация изменения одного параметра по расписанию



Cinks
28.02.2020, 13:14
Есть необходимость производить запись значения в параметр в определенное время, например в 7:00 записать 10, в 16:00 записать 5.) Язык ST(предпочтительней) или FBD.

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

Всех благодарю за участие.

Плюсы в карму полетели.)

IliaIT
29.02.2020, 19:54
Открыть протокол прибора и прочитать как записывать параметра.
сформировать нужное количество пакетов или создать сборку пакетов динамически при помощи любого языка программирования. как условие номер прибора у вас не меняется.
в любом языке программирования открыть ком порт (виртуальный если АС4 или физический если стоит АС3) и послать туда вышесформированый пакет.
все примеры есть в С++ у овена рядом с их библиотекой интеграции приборов.
я лично пишу в дельфи, там для вашей задачи надо 3 компонента : таймер, библиотека работы с ком портом или библиотека овен, и кнопка запуска/остановки. отмечу так же что для различных приборов различные методы посылки значений.

SlavikP
02.03.2020, 08:56
Накидал за обед диспетчер для 4 будильников. В заданое время закидывает в переменную нужное значение.
По образу и подобию можно нарастить до любого количества.
Никаких проверок на корректность не вводил. К железу не привязывался - там сильно все по разному реализуется, сами сделаете.

pt200
02.03.2020, 11:34
Надо учитывать что конкретные цифры можно и пропустить( питания, например, не было)
По этому я бы сделал примерно так( для не корректируемых в процессе параметров):


IF( ( CUR_TIME >= 7:00) AND ( CUR_TIME < 16:00)) THEN
IF( CUR_VALUE <> 10)THEN
CUR_VALUE := 10;
END_IF;
ELSE
IF( CUR_VALUE <> 5)THEN
CUR_VALUE := 5;
END_IF;
END_IF;

Cinks
16.03.2020, 23:45
Надо учитывать что конкретные цифры можно и пропустить( питания, например, не было)
По этому я бы сделал примерно так( для не корректируемых в процессе параметров):


IF( ( CUR_TIME >= 7:00) AND ( CUR_TIME < 16:00)) THEN
IF( CUR_VALUE <> 10)THEN
CUR_VALUE := 10;
END_IF;
ELSE
IF( CUR_VALUE <> 5)THEN
CUR_VALUE := 5;
END_IF;
END_IF;


В сутках 24 часа. Когда время перевалит за 00:00 условие "( CUR_TIME < 16:00)" перестанет действовать и соответственно код неработоспособен, т.к., поставленную задачу не решает.

pt200
17.03.2020, 10:53
В сутках 24 часа. Когда время перевалит за 00:00 условие "( CUR_TIME < 16:00)" перестанет действовать и соответственно код неработоспособен, т.к., поставленную задачу не решает.

Так для этого есть еще и 1я часть условия: "( CUR_TIME >= 7:00) AND ..." или я чего то не понимаю?

Cinks
18.03.2020, 10:14
Так для этого есть еще и 1я часть условия: "( CUR_TIME >= 7:00) AND ..." или я чего то не понимаю?

Это как в последовательном соединении проводников, если один проводник исключить из цепи, вся сеть перестает работать.
Вы же сами говорите в условии, что если "одно" и "второе" верны, то сделать "это". Ну и получается, что до 23:59 они верны, а вот уже после не верны.)

pt200
18.03.2020, 12:52
Если честно не могу понять вопрос: чем время следующих сутках отличается от времени в предыдущих, каждый раз( практически) от 0 до 24х монотонно возрастает?
Соответственно и условие каждый день работает одинаково

Cinks
18.03.2020, 14:20
Если честно не могу понять вопрос: чем время следующих сутках отличается от времени в предыдущих, каждый раз( практически) от 0 до 24х монотонно возрастает?
Соответственно и условие каждый день работает одинаково

Я немного ошибся, но сути это не меняет.
Писал я за выражение IF( ( CUR_TIME <= 7:00) AND ( CUR_TIME > 16:00)), а у вас IF( ( CUR_TIME >= 7:00) AND ( CUR_TIME < 16:00)).

Но сути это не изменило.

IF( ( CUR_TIME >= 7:00) AND ( CUR_TIME < 16:00)) THEN ↚ здесь вы говорите, что если ( CUR_TIME >= 7:00) и ( CUR_TIME < 16:00) ОДНОВРЕМЕННО верны, THEN IF( CUR_VA...

Представим, что время настало 00:00 или 00:01, будет ли верно при этом условие ( CUR_TIME >= 7:00) ?
Нет, не будет. А если не верно одно условие в выражении, то не верно и все выражение в данном случае.
Вроде так!