Ну тогда без бубна
В вашем варианте
Не 100 значений набивать, а всего 20. Вероятность ошибиться меньше, да и модифицировать константы проще, если "десятки" или "единицы" другие будут.Код:VAR mrbits: BYTE; pw1: REAL; mrout1: BOOL; mrout2: BOOL; mrout3: BOOL; mrout4: BOOL; mrout5: BOOL; mrout6: BOOL; mrout7: BOOL; mrout8: BOOL; END_VAR VAR CONSTANT MRlo: ARRAY[0..9] OF BYTE := 2#00000000, 2#00000001, 2#00000010, 2#00000011, 2#00000110, 2#00001000, 2#00001001, 2#00001010, 2#00001011, 2#00001110; MRhi:ARRAY[0..9] OF BYTE := 2#00000000, 2#00010000, 2#01000000, 2#01010000, 2#01110000, 2#10000000, 2#10010000, 2#11000000, 2#11010000, 2#11110000; END_VAR mrbits := MRlo[TRUNC(pw1) MOD 10] + MRhi[(TRUNC(pw1) MOD 100)/10]; mrout1 := mrbits.0; mrout2 := mrbits.1; mrout3 := mrbits.2; mrout4 := mrbits.3; mrout5 := mrbits.4; mrout6 := mrbits.5; mrout7 := mrbits.6; mrout8 := mrbits.7;
Последний раз редактировалось petera; 27.03.2015 в 14:03.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Последний раз редактировалось petera; 27.03.2015 в 14:30.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Да, так чистенько. Только комментарии добавить типа (* маска на единицы кВт *), (* маска на десятки кВт *) и + на OR заменить, чтобы при вероятной попытке что-то поменять две единицы на одной позиции бадабум какой-нибудь не устроили.
Имхо, все предложенные решения не очень:
-Нет минимизации кол-ва щелчков контакторами при переходе с одной нагрузки на другую
-Не учитывается наработка каждого контактора (по щелчкам)
-Нет возможности исключения из набора конкретных выходов/контакторов (поломка например)
..
А как сравнивать байты?... Например нужно включить выход out5 при PWlo от 1 до 9 а при нуле выключить с задержкой через TOF
выдает ошибку - несоответсвие типов невозможно преобразовать BOOL в REAL. че-то я не догоняю как исправить...Сообщение от petera
или задать константу
прокатит???Код:MRxhi: ARRAY[0..9] OF BYTE := 2#1000, 2#1100, 2#1110, 2#1111, 2#1111;
Последний раз редактировалось feLoNy; 23.04.2015 в 12:44.
Последний раз редактировалось feLoNy; 23.04.2015 в 12:44.
Пока все молчат... Мысль следующая (не молчите, хочу мнения специалистов)
Будет ли работать в реальности??? Или что то где то я ошибся??? Нет пока возможности проверить на живом ПЛККод:VAR plcoutbits: BYTE; plcout1: BOOL; plcout2: BOOL; plcout3: BOOL; plcout4: BOOL; END_VAR VAR CONSTANT MRxhi: ARRAY[0..5] OF BYTE := 2#1000, 2#1100, 2#1110, 2#1111, 2#1111; END_VAR plcoutbits := MRxhi [TRUNC(pw1) MOD 1000/10]; IF plcoutbits.0 THEN out1:=1.0; ELSE out1:=0.0; END_IF IF plcoutbits.1 THEN out2:=1.0; ELSE out2:=0.0; END_IF IF plcoutbits.2 THEN out3:=1.0; ELSE out3:=0.0; END_IF IF plcoutbits.3 THEN out4:=1.0; ELSE out4:=0.0; END_IF
и вопрос:актуален как никогдаА как сравнивать байты?... Например нужно включить выход out5 при PWlo от 1 до 9 а при нуле выключить с задержкой через TOF