Че ж такое то?
Codesys 2.3.9.41
Таргет 2.10
Если хотите, наделаю скриншотов настроек.
Но должно же быть более красивое решение.
Че ж такое то?
Codesys 2.3.9.41
Таргет 2.10
Если хотите, наделаю скриншотов настроек.
Но должно же быть более красивое решение.
У меня нормально открывается. Так-то респект, конечно. Но код не очень понравился: много условий, деление на POU довольно наивное, кучки данных тут и там. Вообще наличие в коде повторяющихся рисунков текста это верный признак того, что часть кода просится «за скобки» — в отдельные функциональные блоки и типы данных. Дела иначе обстоят в графических языках, но здесь-то текст.
Взять, скажем, MainRoom со 137 строки. Там регулировки яркости идут счётчиками CTUD. И везде в аргументах счётчиков идентичные по своей логике выражения. Так почему не вынести эту логику в свой ФБ на основе того же CTUD, чтобы не писать одну и ту же комбинацию AND/OR/NOT?
Или вот такое:Это автомат ротации цветов. По достижении одной комбинации уставок задаётся следующая комбинация. Реально суть переключений сводится к этому: state := MAX(1, (state + 1) MOD 7), причём нулевое состояние можно использовать вместо признака Auto. А суть условий сводится к тому, что все условия делятся на 100. В итоге можно обойтись одним условием и обезопасить себя от несоответствий:Код:IF ((R_out=100)AND(G_out=0)AND(B_out=0)AND(Auto)) THEN R_set:=100; G_set:=100; B_set:=0; END_IF; IF ((R_out=100)AND(G_out=100)AND(B_out=0)AND(Auto)) THEN R_set:=0; G_set:=100; B_set:=0; END_IF; IF ((R_out=0)AND(G_out=100)AND(B_out=0)AND(Auto)) THEN R_set:=0; G_set:=100; B_set:=100; END_IF; IF ((R_out=0)AND(G_out=100)AND(B_out=100)AND(Auto)) THEN R_set:=0; G_set:=0; B_set:=100; END_IF; IF ((R_out=0)AND(G_out=0)AND(B_out=100)AND(Auto)) THEN R_set:=100; G_set:=0; B_set:=100; END_IF; IF ((R_out=100)AND(G_out=0)AND(B_out=100)AND(Auto)) THEN R_set:=100; G_set:=0; B_set:=0; END_IF;И тому подобное. Код надо писать так, чтобы как можно труднее было ошибиться из-за копипаста.Код:IF state > 0 AND R_out MOD 100 = 0 AND G_out MOD 100 = 0 ABD B_out MOD 100 = 0 THEN state := MAX(1, (state + 1) MOD 7); R_set := SEL(state.0, 0, 100); G_set := SEL(state.1, 0, 100); B_set := SEL(state.2, 0, 100); END_IF
Yegor, в этом проекте интересен не код, а авторские идеи по управлению освещением. Посмотри сколько он всего понапридумывал.
Последний раз редактировалось Вольд; 23.06.2015 в 11:15.
Клёво. Особенно клёво, если эти фишки не сбивают с толку остальных жильцов.
Я, кстати, делал что-то в таком роде вот этому товарищу: http://www.owen.ru/forum/showthread.php?t=18565 Там, впрочем, не было вещей вроде конечников в шкафчиках ванной; не было и графической панели. Он подумывал об управлении с планшета по вайфаю, но по некоторым причинам эта тема не пошла. В итоге мне дали просто раскладку сцен по нефиксированным кнопкам. По одиночному нажатию включается/выключается свет согласно последней сцене, по удержанию — меняются сцены. Переводить эту раскладку вручную мне очень не хотелось, и я написал прогу на сишарпе, которая генерировала вот такой ST-код:из вот такого:Код:shower36(button := DI36, sceneCount := 2, lightsOn => state.0); bathroom7(button := DI7, sceneCount := 2, lightsOn => state.1); bathroom8(button := DI8, sceneCount := 1, lightsOn => state.2); (* ... *) MO[30] := (shower36.sceneIdx = 0 AND shower36.lightsOn); DO9 := (shower36.sceneIdx = 0 AND shower36.lightsOn) OR (bathroom8.sceneIdx = 0 AND bathroom8.lightsOn); DO23 := (shower36.sceneIdx = 1 AND shower36.lightsOn);... что в свою очередь получалось напрямую из такого: http://imgur.com/6C97kes Разумеется, это только часть всего — там на порядок больше.Код:shower36 m30p9 p23 bathroom7 m31 m32 bathroom8 p8p9 laundry26 p7 laundry22 m20 m28 m20m28
Проект не выкладываю, т.к. с заказчиком это не обговаривали.
Последний раз редактировалось Yegor; 23.06.2015 в 12:32.
Yegor, а что за ОС стояла на том планшете ?
Последний раз редактировалось Вольд; 23.06.2015 в 13:52.
Андроид. Я знаю про полуготовые решения под эту платформу, если что У меня и опыт разработки под андроид есть какой-никакой.
путь к таргетам - по умолчанию: C:\CoDeSys\Targets\PLC100.K_L\\IOModules\
в приложении - експорт