PDA

Просмотр полной версии : ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)



Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [37] 38 39 40 41 42

kondor3000
03.10.2022, 12:47
…столкнулся с конфликтом двух библиотек

SmsOwenLib (2.3.0.25)
Oscat_basic_333

В обоих присутствуют POU с именами «IS_NUM», «ISC_NUM», «TO_UML», что вызывает ошибку компиляции №3700.
РЭ предлагает "просто" заменить имя повторяющегося POU.
Прошу подсказать:
Как переименовать или выборочно удалить неиспользуемые POU в библиотеке (из Oscat использую только ф/б ONTIME)
(p.s. Всем здравствуйте…)

Теоретически, открываете биб-ку SmsOwenLib (2.3.0.25) как проект, меняете название повторяющихся объектов на похожие, сохраняете как биб-ку. Далее пользуетесь как обычно.
Второй вариант, копируете (создаёте ) свой ФБ из Оскат, в проекте, а биб-ку уделяете.

Hrenotehnik
03.10.2022, 13:53
Возможность изолированного редактирования библиотек стало для меня открытием.
Проблема решена.
Всем спасибо за рекомендации.

kondor3000
03.10.2022, 13:56
Возможность изолированного редактирования библиотек стало для меня открытием.
Проблема решена.
Всем спасибо за рекомендации.

Больше того, вы можете создавать свои биб-ки, со своими ФБ и функциями, например часто повторяющимися из проекта в проект.

AlexBut
05.10.2022, 12:48
Доброго дня.Новичок в Линукс. Скачал и установил Astra Linux common ed 2.12 и начал с Modbus Poll т.к. этот инструмент нужен
часто на выездах. Всё работает (Modpoll) но хотелось бы аналог Modbus Poll с графической оболочкой для удобства-может кто подскажет
где взять для Линукс?

AlexBut
10.10.2022, 12:22
Устанавливаю исп ситему MS4D по инструкции из Установка mplc4.pdf
sudo mount -o loop /home/but/Загрузки/orel-stable.iso /opt/repo - грт в ответ нет такой папки или директории?
хотя точно есть

kondor3000
10.10.2022, 12:35
Устанавливаю исп ситему MS4D по инструкции из Установка mplc4.pdf
sudo mount -o loop /home/but/Загрузки/orel-stable.iso /opt/repo - грт в ответ нет такой папки или директории?
хотя точно есть
По исп. среде MS4D, есть соответствующий раздел, там и спрашивайте
https://owen.ru/forum/forumdisplay.php?f=78

Doffy
12.10.2022, 15:40
Здравствуйте, не подскажете, как реализовать умную лестницу, через cfc. Нужно чтобы вкл и выкл поэтапно(будет по датчикам с 2 сторон), и чтобы время горения света обновлялось, если пройдет кто-то еще мимо датчика, также если одновременно пройти мимо двух, то получается свет пойдет к середине.

1exan
12.10.2022, 16:05
Здравствуйте, не подскажете, как реализовать умную лестницу, через cfc. Нужно чтобы вкл и выкл поэтапно(будет по датчикам с 2 сторон), и чтобы время горения света обновлялось, если пройдет кто-то еще мимо датчика, также если одновременно пройти мимо двух, то получается свет пойдет к середине.

Вам рано реализовывать, надо больше проработать задачу. Если уже установлено оборудование - надо начинать с его параметров - характеристики и количество входных сигналов и сигналов управления освещением, параметры лестницы - количество пролётов, длина, примерная скорость спуска/подъёма.
И когда сможете описать на словах большинство возможных сценариев, тогда и начнёте реализовывать.

Doffy
12.10.2022, 16:19
Приветствую, уже все подключено, и обговорен возможный способ. https://drive.google.com/file/d/1AkWfvQyMNYyKgDHpNQ_AUYWghnusCHPK/view?usp=sharing. Будет 11 ламп, каждая через 1 проем, 2 кнопки, одна с одной стороны, другая с другой. Скорость вкл.2 сек, выключения также, после того, как загорелась 1 лампа свет будет гореть 20сек, и если кто-то еще пройдет, то таймер обновится, но лампы не выкл.. В общем как-то так.63119

melky
12.10.2022, 16:24
Вот после слов "Если загорелась 1 лампа" не понятен смысл кучи таймеров по 2 сек...

Doffy
12.10.2022, 16:27
ну это так я просто пробовал разные способы, 1 лампа загорелась, через 2 секунды следующая и тд, чтобы человек поднимался и перед ним лестница загоралась

Doffy
12.10.2022, 16:31
про 20сек, это таймер действия, ну нажал на кнопку и лампы горят в течении 20сек, также есть повторное нажатие, находится на входе в T1. если допустим нажать через 5сек, после 1 нажатия, то он принудительно выключит свет. 63120

1exan
12.10.2022, 18:38
ну это так я просто пробовал разные способы, 1 лампа загорелась, через 2 секунды следующая и тд, чтобы человек поднимался и перед ним лестница загоралась

Все эти плавные зажигания и погасания - нефункциональны.
Главная цель такой подсветки - чтобы человек не сломал себе ногу идя по лестнице.
Люди разные и скорость подьёма/спуска у всех разная, а ещё человек может просто остановиться и постоять в середине лестницы.

И удобней делать не кнопки, а датчики пересечения входа на лестницу снизу и сверху, а ещё нужен датчик освещения - чтобы подсветка не включалась при достаточном естественном освещении.

Самый простой вариант- сработал датчик сверху(снизу) - лампочки зажглись (с вау-эффектом - последовательно сверху-донизу (снизу-доверху)) и горят некоторое время, необходимое для прохода лестницы и потом ещё сколько-то или пока не сработает нижний(верхний) датчик.

Тут конечно может быть ситуация, что в процессе спуска(подъёма) на лестницу зайдет другой человек снизу(сверху) - кстати какая у вас вероятность такого события? Чтобы прямо качественно обойти такое придётся организовывать счётчик людей, находящихся в данный момент на лестнице со всеми вытекающими или просто отключать освещение лестницы с задержкой, заведомо достаточной для прохода лестницы после получения последнего сигнала от датчика.

melky
12.10.2022, 20:33
Помню мы делали электрику шефу и поставили датчик движения, освещение лестницы просто верхнее. Где-то через полгодика или даже раньше жена шефа приказала выключить его к чертям...
1. движение животных приводило к включению света
2. ночью в туалет нагишом и тут бац, смотрите соседи, тут я такая вся....

Если лестница не глухая, хватает естественного освещения, чтобы ноги не сломать или подсветка должна быть мягкая и тусклая. :)

1exan
13.10.2022, 04:54
Помню мы делали электрику шефу и поставили датчик движения, освещение лестницы просто верхнее. Где-то через полгодика или даже раньше жена шефа приказала выключить его к чертям...
1. движение животных приводило к включению света
2. ночью в туалет нагишом и тут бац, смотрите соседи, тут я такая вся....

Если лестница не глухая, хватает естественного освещения, чтобы ноги не сломать или подсветка должна быть мягкая и тусклая. :)

1. От животных можно защититься, если использовать оптический барьерный датчик и поставить его на высоте чуть выше хвоста.

2. Сказать соседям, чтобы не караулили ваше окно по ночам :)

Doffy
13.10.2022, 09:24
Все эти плавные зажигания и погасания - нефункциональны.
Главная цель такой подсветки - чтобы человек не сломал себе ногу идя по лестнице.
Люди разные и скорость подьёма/спуска у всех разная, а ещё человек может просто остановиться и постоять в середине лестницы.

И удобней делать не кнопки, а датчики пересечения входа на лестницу снизу и сверху, а ещё нужен датчик освещения - чтобы подсветка не включалась при достаточном естественном освещении.

Самый простой вариант- сработал датчик сверху(снизу) - лампочки зажглись (с вау-эффектом - последовательно сверху-донизу (снизу-доверху)) и горят некоторое время, необходимое для прохода лестницы и потом ещё сколько-то или пока не сработает нижний(верхний) датчик.

Тут конечно может быть ситуация, что в процессе спуска(подъёма) на лестницу зайдет другой человек снизу(сверху) - кстати какая у вас вероятность такого события? Чтобы прямо качественно обойти такое придётся организовывать счётчик людей, находящихся в данный момент на лестнице со всеми вытекающими или просто отключать освещение лестницы с задержкой, заведомо достаточной для прохода лестницы после получения последнего сигнала от датчика.

Вот такое небольшое тз мне сказали реализовать.
1. Предусмотреть отключение всего освещения в помещении
по нажатию любой клавиши (5 сек).
2. Предусмотреть клавишу «В отпуск». (Отключить все группы кроме холодильников и отопления, с запоминанием статусов всех осветительных групп).
3. При включении освещения в с/у, запускать соответствующую вытяжку, с задержкой отключения 15 мин, после того как выключили свет.
4. Предусмотреть поэтапное (1 сек каждый светильник) включения светильников лестницы c задержкой на отключения на 20 сек.
5. Предусмотреть принудительное отключение подсветки лестницы (повторное нажатие клавиши через 2 секунды после включения подсветки).
6. Предусмотреть одновременное включения с двух сторон.
7. Предусмотреть включение подсветки всей лестницы сразу (без таймера отключения).

1exan
13.10.2022, 09:47
Не нужен тут ПЛК - максимум ПР102. И вообще - достаточно какой-нибудь nano-ардуины (если есть желание).

В библиотеке oscat есть такой FB "SHR4_8UDE" - прямо то, что вам нужно, только добавьте выходов:



FUNCTION_BLOCK SHR_8UDE
VAR_INPUT
SET : BOOL;
D0: BOOL;
D7: BOOL;
CLK: BOOL;
DN : BOOL;
RST: BOOL;
END_VAR
VAR_OUTPUT
Q0: BOOL;
Q1: BOOL;
Q2: BOOL;
Q3: BOOL;
Q4: BOOL;
Q5: BOOL;
Q6: BOOL;
Q7: BOOL;
END_VAR
VAR
trig : R_TRIG;
END_VAR

(*
version 1.2 14. mar. 2009
programmer hugo
tested by tobias

8 bit shift register with reset

*)


(*------------------------------------------------------------------*)

(* trig.Q signals a rising edge on clk *)
trig(clk := clk);

IF set OR rst THEN
Q0 := NOT RST;
Q1 := Q0;
Q2 := Q0;
Q3 := Q0;
Q4 := Q0;
Q5 := Q0;
Q6 := Q0;
Q7 := Q0;
ELSIF trig.Q THEN
IF dn THEN
Q0 := Q1;
Q1 := Q2;
Q2 := Q3;
Q3 := Q4;
Q4 := Q5;
Q5 := Q6;
Q6 := Q7;
Q7 := D7;
ELSE
Q7 := Q6;
Q6 := Q5;
Q5 := Q4;
Q4 := Q3;
Q3 := Q2;
Q2 := Q1;
Q1 := Q0;
Q0 := D0;
END_IF;
END_IF;



(* revision history
hm 4. aug. 2006 rev 1.0
original version

hm 25. oct. 2008 rev 1.1
optimized code

hm 14. mar. 2009 rev 1.2
removed double assignments

*)

Doffy
13.10.2022, 09:53
Просто плк уже есть, и почему бы на нем не сделать это, а остальное докупать нужно.

1exan
13.10.2022, 10:09
Вот такое небольшое тз мне сказали реализовать.
1. Предусмотреть отключение всего освещения в помещении
по нажатию любой клавиши (5 сек).
2. Предусмотреть клавишу «В отпуск». (Отключить все группы кроме холодильников и отопления, с запоминанием статусов всех осветительных групп).
3. При включении освещения в с/у, запускать соответствующую вытяжку, с задержкой отключения 15 мин, после того как выключили свет.
4. Предусмотреть поэтапное (1 сек каждый светильник) включения светильников лестницы c задержкой на отключения на 20 сек.
5. Предусмотреть принудительное отключение подсветки лестницы (повторное нажатие клавиши через 2 секунды после включения подсветки).
6. Предусмотреть одновременное включения с двух сторон.
7. Предусмотреть включение подсветки всей лестницы сразу (без таймера отключения).

Начните с составления перечня всех входных и выходных сигналов ПЛК

Doffy
13.10.2022, 10:33
Не нужен тут ПЛК - максимум ПР102. И вообще - достаточно какой-нибудь nano-ардуины (если есть желание).

В библиотеке oscat есть такой FB "SHR4_8UDE" - прямо то, что вам нужно, только добавьте выходов:



FUNCTION_BLOCK SHR_8UDE
VAR_INPUT
SET : BOOL;
D0: BOOL;
D7: BOOL;
CLK: BOOL;
DN : BOOL;
RST: BOOL;
END_VAR
VAR_OUTPUT
Q0: BOOL;
Q1: BOOL;
Q2: BOOL;
Q3: BOOL;
Q4: BOOL;
Q5: BOOL;
Q6: BOOL;
Q7: BOOL;
END_VAR
VAR
trig : R_TRIG;
END_VAR

(*
version 1.2 14. mar. 2009
programmer hugo
tested by tobias

8 bit shift register with reset

*)


(*------------------------------------------------------------------*)

(* trig.Q signals a rising edge on clk *)
trig(clk := clk);

IF set OR rst THEN
Q0 := NOT RST;
Q1 := Q0;
Q2 := Q0;
Q3 := Q0;
Q4 := Q0;
Q5 := Q0;
Q6 := Q0;
Q7 := Q0;
ELSIF trig.Q THEN
IF dn THEN
Q0 := Q1;
Q1 := Q2;
Q2 := Q3;
Q3 := Q4;
Q4 := Q5;
Q5 := Q6;
Q6 := Q7;
Q7 := D7;
ELSE
Q7 := Q6;
Q6 := Q5;
Q5 := Q4;
Q4 := Q3;
Q3 := Q2;
Q2 := Q1;
Q1 := Q0;
Q0 := D0;
END_IF;
END_IF;



(* revision history
hm 4. aug. 2006 rev 1.0
original version

hm 25. oct. 2008 rev 1.1
optimized code

hm 14. mar. 2009 rev 1.2
removed double assignments

*)



просто выхода добавить к схеме, без всего, как примерно выглядеть будет не подскажете. Просто 2 блока rtrig и shr

1exan
13.10.2022, 11:17
просто выхода добавить к схеме, без всего, как примерно выглядеть будет не подскажете. Просто 2 блока rtrig и shr

Описание блока (аналогичного, на 4 выхода):


Функциональный блок SHR4_4UDE представляет собой четырехбитный регистр сдвига c
выбором направления сдвига. По переднему фронту входа SET выходы Q0…Q3 принимают
значение TRUE. По переднему фронту входа RST выходы Q0...Q3 сбрасываются в FALSE в
независимости от состояния остальных входов. По переднему фронту входа CLK значения на
выходах Q0…Q3 сдвигаются по алгоритму, определяемому состоянием входа DN:
DN=FALSE (сдвиг вверх):
• Q2---- > Q3
• Q1---- > Q2
• Q0---- > Q1
• D0---- > Q0
DN=TRUE (сдвиг вниз):
• Q1---- > Q0
• Q2---- > Q1
• Q3---- > Q2
• D3---- > Q3
Вход SET имеет приоритет над входом CLK.

Этот блок - это не конечное решение, а просто идея как управлять последовательным зажиганием/гашением ламп без кучи таймеров.
Выходы этого блока - это и есть лампочки, но сейчас там выходов всего 8, добавьте до требуемых 11 по аналогии. Ну и конечно обвязку управления блоком снаружи надо сделать:
Входы SET и RST - использовать для одновременного включения/отключения всех ламп. CLK - вход управления сдвигом, на него подавать импульсы с необходимой частотой. Входа D0 и D4(будет D11) - использовать при переключении "последовательное зажигание/гашение". Вход DN - переключение направления гашения/зажигания.

Doffy
13.10.2022, 11:36
63139 что-то типо такого, без времени, я просто в этом деле еще новичок, опыт нарабатываю, практикуюсь.

1exan
13.10.2022, 11:52
Создайте новый ФБ на ST:
Объявление:




FUNCTION_BLOCK SHR_11UDE
VAR_INPUT
SET : BOOL;
D0: BOOL;
D11: BOOL;
CLK: BOOL;
DN : BOOL;
RST: BOOL;
END_VAR
VAR_OUTPUT
Q0: BOOL;
Q1: BOOL;
Q2: BOOL;
Q3: BOOL;
Q4: BOOL;
Q5: BOOL;
Q6: BOOL;
Q7: BOOL;
Q8: BOOL;
Q9: BOOL;
Q10: BOOL;
END_VAR
VAR
trig : R_TRIG;
END_VAR


Код ФБ:


trig(clk := clk);

IF set OR rst THEN
Q0 := NOT RST;
Q1 := Q0;
Q2 := Q0;
Q3 := Q0;
Q4 := Q0;
Q5 := Q0;
Q6 := Q0;
Q7 := Q0;
Q8 := Q0;
Q9 := Q0;
Q10 := Q0;
ELSIF trig.Q THEN
IF dn THEN
Q0 := Q1;
Q1 := Q2;
Q2 := Q3;
Q3 := Q4;
Q4 := Q5;
Q5 := Q6;
Q6 := Q7;
Q7 := Q8;
Q8 := Q9;
Q9 := Q10;
Q10 := D11;
ELSE
Q10 := Q9;
Q9 := Q8;
Q8 := Q7;
Q7 := Q6;
Q6 := Q5;
Q5 := Q4;
Q4 := Q3;
Q3 := Q2;
Q2 := Q1;
Q1 := Q0;
Q0 := D0;
END_IF;
END_IF;

Doffy
13.10.2022, 11:57
это то я сделал, а дополнительный блок cfc не нужен?

1exan
13.10.2022, 12:02
63139 что-то типо такого, без времени, я просто в этом деле еще новичок, опыт нарабатываю, практикуюсь.

Здесь два блока на 8 и 4 выхода - а нужен один, на 11 выходов

Doffy
13.10.2022, 12:18
а как их в 1 засунуть, если библиотека только на 8?

1exan
13.10.2022, 12:25
Конечно придётся создать СВОЙ блок, его код я привёл выше.

Я надеюсь вы не ограничены по времени в этом проекте.

Doffy
13.10.2022, 12:30
времени предостаточно, я 2 недели сижу в codesys. Я изначально как раз так думал, просто название блока указал неверное. Спасибо.63140

kondor3000
13.10.2022, 13:23
времени предостаточно, я 2 недели сижу в codesys. Я изначально как раз так думал, просто название блока указал неверное. Спасибо.63140

У вас на скрине, три блока серым цветом, они не объявлены в PLC_PRG, и не работают в программе. ФБ надо объявлять и вызывать в PLC_PRG.

1exan
13.10.2022, 13:48
У вас на скрине, три блока серым цветом, они не объявлены в PLC_PRG, и не работают в программе. ФБ надо объявлять и вызывать в PLC_PRG.

Совсем не обязательно использовать все имеющиеся программные модули. Кроме того, чтобы например, избежать сообщений об ошибках в разрабатываемых (незаконченных) программных модулях, можно совсем исключить их из компиляции (соответствующий пункт в контекстном меню по ПКМ на программном модуле).

Doffy
13.10.2022, 14:21
63141 63142 включает по порядку, но нужно нажимать 6 вход, а как без нажатия настроить, это таймеры добавлять? и по поводу того, чтобы 2 сразу включалось на встречу нужно 2 блок добавлять в обратном порядке? И да будет еще 2 разных датчика движения

1exan
13.10.2022, 16:00
63141 63142 включает по порядку, но нужно нажимать 6 вход, а как без нажатия настроить, это таймеры добавлять? и по поводу того, чтобы 2 сразу включалось на встречу нужно 2 блок добавлять в обратном порядке? И да будет еще 2 разных датчика движения

Не усложняйте себе задачу этим "навстречу" - это что, два человека пошли на встрече друг-другу одновременно секунда в секунду? Через небольшое время после того как один человек пройдет датчик, ВСЯ лестница будет освещена. Сколько ступеней на лестнице?
На вход CLK надо подавать импульсы с генератора. Посмотрите в том-же oscat ФБ "GEN_PULSE".

Doffy
13.10.2022, 16:26
Не усложняйте себе задачу этим "навстречу" - это что, два человека пошли на встрече друг-другу одновременно секунда в секунду? Через небольшое время после того как один человек пройдет датчик, ВСЯ лестница будет освещена. Сколько ступеней на лестнице?
На вход CLK надо подавать импульсы с генератора. Посмотрите в том-же oscat ФБ "GEN_PULSE".

ступеней 25, ламп 11 ну через ступеньку. По поводу навстречу, думаю да, сдалась эта хрень, сделать бы хотя бы то, что уже есть. Включение все-таки думаю надо по порядку. А вот если 2 будет уже идти то можно и все сразу. А триггер куда тыкать?)63143

kondor3000
13.10.2022, 16:31
ступеней 25, ламп 11 ну через ступеньку. По поводу навстречу, думаю да, сдалась эта хрень, сделать бы хотя бы то, что уже есть. Включение все-таки думаю надо по порядку. А вот если 2 будет уже идти то можно и все сразу. А триггер куда тыкать?)63143

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

1exan
13.10.2022, 16:38
ступеней 25, ламп 11 ну через ступеньку. По поводу навстречу, думаю да, сдалась эта хрень, сделать бы хотя бы то, что уже есть. Включение все-таки думаю надо по порядку. А вот если 2 будет уже идти то можно и все сразу. А триггер куда тыкать?)63143

Да, так пойдет.
Теперь нужны ещё два RS триггера, каждый из которых будут означать, что запущен процесс освещения вниз(вверх). Сделайте так, что если один включен, то второй уже не включается.
Еще нужен таймер TOF, который запускается импульсом с любого из датчиков и отсчитывает задержку отключения. Задним фронтом этого таймера отключайте триггеры и гасите свет.

Может сделаете свою отдельную тему, чтобы не распылять вопросы и ответы?

Doffy
13.10.2022, 16:41
Можно в разрыв провода триггер поставить как было, а можно и вообще выкинуть, по крайней мере попробовать.

сначала соединил), потом убрал, с убранным работает, но таймер автовыключ вроде нет

Doffy
13.10.2022, 16:53
окей, спасибо большое за помощь.

kondor3000
14.10.2022, 11:25
Всем здравствуйте, помогите решить данную дилемму, включает сразу 2 выхода и если не отпускать подачу тока, то моргает. Адреса все разные, соединено все отлично. https://drive.google.com/drive/folders/1L8pG40QtVKB9B9ZIAIFWFFXB2yZDPhKt?usp=sharing

Вы бы скрин сделали, со своей проблемой. Сижу с телефона, проект открыть не могу.

1exan
14.10.2022, 12:16
Вы бы скрин сделали, со своей проблемой. Сижу с телефона, проект открыть не могу.

Судя по тексту сообщения, он всё-же упал со своей неосвещённой лестницы и забыл пароль от предыдущего аккаунта :)

Duvall
14.10.2022, 12:36
с лестницей все ок), а тот проект не я делал, но аккаунт мой.

kondor3000
14.10.2022, 13:24
63153 как-то так

Так у вас на двух сработавших, одно и тоже название ФБ. Все экземпляры блоков должны иметь разное название. Конечно будет срабатывать.
Скрин с видео, это жесть)))

Duvall
14.10.2022, 14:38
да уже нашел)))
походу не тот проект запилил в контроллер, тк проверял это

Duvall
17.10.2022, 17:03
здравствуйте, еще такой вопрос, как называется элемент, где 1 вход и 2 выхода. при 1 нажатии 1, при 2 другой, чтобы чередовались

kondor3000
17.10.2022, 18:06
здравствуйте, еще такой вопрос, как называется элемент, где 1 вход и 2 выхода. при 1 нажатии 1, при 2 другой, чтобы чередовались

В общем случае, это функц. блок (ФБ) с одним входом и двумя выходами, работающий по определённому алгоритму, а названий может быть множество, например ключ, коммутатор, переключатель.

Duvall
18.10.2022, 10:30
В общем случае, это функц. блок (ФБ) с одним входом и двумя выходами, работающий по определённому алгоритму, а названий может быть множество, например ключ, коммутатор, переключатель.

искал в оскате похожий элемент, без двойных нажатий и тп, а просто переключение, чтобы один выход провезти к set, а другой к reset, то есть если 1 раз нажать, то будет set, и если еще раз, то уже reset. Не подскажете подходящий элемент в оскате, он вообще там есть, я только находил с двойным, тройным и длинным.

petera
18.10.2022, 11:02
искал в оскате похожий элемент, без двойных нажатий и тп, а просто переключение, чтобы один выход провезти к set, а другой к reset, то есть если 1 раз нажать, то будет set, и если еще раз, то уже reset. Не подскажете подходящий элемент в оскате, он вообще там есть, я только находил с двойным, тройным и длинным.

Какой Оскат, элементарно делается
Например
63184

Первое нажатие
63185

Второе
63186

Duvall
18.10.2022, 11:26
Какой Оскат, элементарно делается
Например
63184

Первое нажатие
63185

Второе
63186

спасибо большое)

Duvall
18.10.2022, 14:07
Какой Оскат, элементарно делается
Например
63184

Первое нажатие
63185

Второе
63186

но так не работает вкл 63190, он вкл и сразу же выкл поэтапно, нужно чтобы 1 раз нажал и все вкл, еще раз нажал и все выкл, как раз 2 выход ведет к reset, чтобы принудительно все без задержки выключить

petera
18.10.2022, 14:30
но так не работает вкл 63190, он вкл и сразу же выкл поэтапно, нужно чтобы 1 раз нажал и все вкл, еще раз нажал и все выкл, как раз 2 выход ведет к reset, чтобы принудительно все без задержки выключить

Работает, как и заказывали

здравствуйте, еще такой вопрос, как называется элемент, где 1 вход и 2 выхода. при 1 нажатии 1, при 2 другой, чтобы чередовались
...просто переключение, чтобы один выход провезти к set, а другой к reset, то есть если 1 раз нажать, то будет set, и если еще раз, то уже reset

ЗЫ
https://owen.ru/forum/attachment.php?attachmentid=63191&d=1666093619

А теперь, вдруг понадобилось

..нужно чтобы 1 раз нажал и все вкл, еще раз нажал и все выкл,
Определитесь уже, что нужно

Duvall
18.10.2022, 15:01
Работает, как и заказывали


ЗЫ
https://owen.ru/forum/attachment.php?attachmentid=63191&d=1666093619

А теперь, вдруг понадобилось

Определитесь уже, что нужно

там как раз 1 выход ведет к set, а другой к reset, поэтому 1 раз нажал все вкл, а другой все выкл.63192

DkCat
18.10.2022, 15:01
Здравствуйте!
Я в загородном доме делаю освещение на ПР102+ПРМы. На 1-ом этаже стоит ПР102+ПРМ, на 2-ом ПР102+ПРМ+ПРМ. Эти ПР102 я соединил между собой по RS-485.
Мне нужно чтобы некоторые "лампочки", подключенные к ПР102 2-го этажа загорались при нажатии кнопок подключённых к ПР102 первого этажа и наоборот. Например:
1. На первом этаже, на выходе из дома, установлен нажимной выключатель, так называемый "Мастер", при нажатии на который должен выключаться свет во всём доме.
2. На втором этаже установлен вытяжной вентилятор (подключен к ПР102 второго этажа), который должен включаться выключателем света в туалете первого этажа.

Нужно ли при этом делать один ПР102 - Slave, а другой Master?
Какие "макросы" ну или "преобразователи" нужно добавить в программы для ПР102(1 эт.) и ПР102(2 эт.), чтоб можно было передавать команды в оба направления?

Спасибо!

petera
18.10.2022, 15:06
там как раз 1 выход ведет к set, а другой к reset, поэтому 1 раз нажал все вкл, а другой все выкл.63192

На входе RST нарисуй кружочек (инверсия)

kondor3000
18.10.2022, 15:07
Сделайте так, будет и всё включено и переключение и всё выключено. 63193
Это самостоятельный переключатель на 4 положения, без привязки к схеме автора.

petera
18.10.2022, 15:10
Сделайте так, будет и всё включено и переключение и всё выключено. 63193

Ерунда, извините..
Нужен один кружочек (инверсия) у входа RST

petera
18.10.2022, 15:13
там как раз 1 выход ведет к set, а другой к reset, поэтому 1 раз нажал все вкл, а другой все выкл.63192

Про кружочек на входе RST
63194

petera
18.10.2022, 15:18
Если не знаете, как сделать кружочек(инверсию)

https://owen.ru/forum/attachment.php?attachmentid=63195&d=1666095414

kondor3000
18.10.2022, 15:35
Здравствуйте!
Я в загородном доме делаю освещение на ПР102+ПРМы. На 1-ом этаже стоит ПР102+ПРМ, на 2-ом ПР102+ПРМ+ПРМ. Эти ПР102 я соединил между собой по RS-485.
Мне нужно чтобы некоторые "лампочки", подключенные к ПР102 2-го этажа загорались при нажатии кнопок подключённых к ПР102 первого этажа и наоборот. Например:
1. На первом этаже, на выходе из дома, установлен нажимной выключатель, так называемый "Мастер", при нажатии на который должен выключаться свет во всём доме.
2. На втором этаже установлен вытяжной вентилятор (подключен к ПР102 второго этажа), который должен включаться выключателем света в туалете первого этажа.

Нужно ли при этом делать один ПР102 - Slave, а другой Master?
Какие "макросы" ну или "преобразователи" нужно добавить в программы для ПР102(1 эт.) и ПР102(2 эт.), чтоб можно было передавать команды в оба направления?

Спасибо!

Надо делать один ПР102 - Slave, а другой Master. Для передачи переменных из одного ПР в другой, есть сетевые переменные. Вы их создаёте для сброса и для вентилятора.
И управляйте ими хоть с первого, хоть со 2 этажа.
А вопросы про ПР102 надо задавать в разделе программируемые реле.

petera
18.10.2022, 15:38
На входе RST нарисуй кружочек (инверсия)
Похоже просто одним кружочком не обойтись...
Т.к. входы SET и RST у ФБ - "потенциальные", то
нужно сделать так
63196

иначе постоянные "1" на SET или RST заблокируют работу от входа CLK

кружочек ненужен!!!

Duvall
18.10.2022, 15:40
На входе RST нарисуй кружочек (инверсия)

cделал инверсию, но теперь не работает поэтапное вкл, тк либо включен set, либо reset 3 не дано), остальные 4 элемента не могут функционировать, тк вкл reset, а если вкл set, то они и не нужны, тк все горит и без них, но конкретно, нужно, чтобы было поэтапное вкл, и принудительное вкл/выкл
можно 3 элемент добавить?

petera
18.10.2022, 15:46
cделал инверсию, но теперь не работает поэтапное вкл, тк либо включен set, либо reset 3 не дано)
можно 3 элемент добавить?

СМ. мой предыдущий совет (выше)
На SET или RST будут приходить одиночные импульсы, в момент нажатия in1

Duvall
18.10.2022, 15:56
Похоже просто одним кружочком не обойтись...
Т.к. входы SET и RST у ФБ - "потенциальные", то
нужно сделать так
63196

иначе постоянные "1" на SET или RST заблокируют работу от входа CLK

кружочек ненужен!!!

понял, ща сделаю, спасибо

Duvall
18.10.2022, 16:18
СМ. мой предыдущий совет (выше)
На SET или RST будут приходить одиночные импульсы, в момент нажатия in1
он вкл моментально, но сразу же начинает гаснуть поэтапно

DkCat
18.10.2022, 16:21
ой... извините
я ошибся дверью ))
Спасибо за ответ!

Duvall
19.10.2022, 16:31
небольшое видео проблемы https://skr.sh/vGUjQ5IObVm?a

kondor3000
19.10.2022, 18:54
небольшое видео проблемы https://skr.sh/vGUjQ5IObVm?a
А проект где? Выложите в расширенном режиме, добавить файл.

kondor3000
19.10.2022, 20:08
Вы реально будете 400+ квадратиков на простыне изучать, да еще и не по потоку?
снимаю шляпу

Нужен только кусок схемы естественно. Уже воспроизвёл схему сам. Там проблема с управлением, а не с потоком. Хотя конечно надо сделать по потоку.

Duvall , правой кнопкой по холсту, выберите Порядок и В соответствии с потоком данных. Отключите все таймеры и разберитесь как надо управлять блоком. Без этого у вас ничего не получится.
У меня получилось так 63233

Duvall
20.10.2022, 09:22
Нужен только кусок схемы естественно. Уже воспроизвёл схему сам. Там проблема с управлением, а не с потоком. Хотя конечно надо сделать по потоку.

Duvall , правой кнопкой по холсту, выберите Порядок и В соответствии с потоком данных. Отключите все таймеры и разберитесь как надо управлять блоком. Без этого у вас ничего не получится.
У меня получилось так 63233

а у вас на схеме, если включить с датчиков, то in1 его выключает полностью или также, как у меня выкл и сразу начинается включение

kondor3000
20.10.2022, 09:24
а у вас на схеме, если включить с датчиков, то in1 его выключает полностью или также, как у меня, выкл и сразу начинается включение

На скрине даже подписал, In1 только всё включает и всё выключает. Скрин смотрите и подписи у входов.

Вы сделали По потоку? У вас программа работает неправильно.
Не надо лепить по 400 квадратов на один лист, привыкайте разделять программу на блоки, это совет на будущее.

Duvall
20.10.2022, 09:34
я думаю ошибка в том, что rst не выключает окончательно другие входы, вот тут я нажал rst, он выкл на мгновение и сразу опять началось63240 вкл, тк он не выкл вход in3, также и со 2 входом

kondor3000
20.10.2022, 09:41
я думаю ошибка в том, что rst не выключает окончательно другие входы, вот тут я нажал rst, он выкл на мгновение и сразу опять началось63240 вкл, тк он не выкл вход in3, также и со 2 входом

Он и не выключит, пока таймеры не досчитают с датчиков. Если кто то пересёк датчик, то не надо выключать свет. Выключать надо до того, как на лестницу залез.
Скрин ваш не залился, вставляйте как изображение.

Duvall
20.10.2022, 10:22
На скрине даже подписал, In1 только всё включает и всё выключает. Скрин смотрите и подписи у входов.

Вы сделали По потоку? У вас программа работает неправильно.
Не надо лепить по 400 квадратов на один лист, привыкайте разделять программу на блоки, это совет на будущее.

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

Duvall
20.10.2022, 10:31
можно сделать условие, вот работает датчик 25с, но если нажать такую-то кнопку, то он выкл моментально?

kondor3000
20.10.2022, 10:44
Вместо Т#25s, надо вставить переменную Word, нач. значение 25000 с помощью SEL, при сбросе записать туда 0. При подаче переменной в таймер, поставить WORD_TO_TIME.

Duvall
20.10.2022, 11:33
Вместо Т#25s, надо вставить переменную Word, нач. значение 25000 с помощью SEL, при сбросе записать туда 0. При подаче переменной в таймер, поставить WORD_TO_TIME.

можете подсказать, как это будет примерно выглядеть на схеме 63249

kondor3000
20.10.2022, 12:16
можете подсказать, как это будет примерно выглядеть на схеме 63249

WORD это тип данных, переменная например, в объявлениях, T_vrem: WORD;
Переменную T_vrem, ставите перед Word_To_TIME, a выход к таймеру, вход PT.
У SEL внизу ставите 0, выход на переменную T_vrem.
После всего, По потоку данных опять.

Duvall
20.10.2022, 12:38
WORD это тип данных, переменная например, в объявлениях, T_vrem: WORD;
Переменную T_vrem, ставите перед Word_To_TIME, a выход к таймеру, вход PT.
У SEL внизу ставите 0, выход на переменную T_vrem. Управление SEL временно сделайте например In4, как вы сделали, не правильно.
После всего, По потоку данных опять.

Сделал так, но надо держать нижний датчик, чтобы он дальше шел, если отпустить, то он отключается и идет таким образом, сколько успел зажечь. И я так понял, такое же надо проделать и с верхним датчиком.63252

kondor3000
20.10.2022, 12:47
Сделал так, но надо держать нижний датчик, чтобы он дальше шел, если отпустить, то он отключается и идет таким образом, сколько успел зажечь. И я так понял, такое же надо проделать и с верхним датчиком.63252

У SEL внизу ставите 0, выход на переменную T_vrem.
После всего, По потоку данных опять.

Duvall
20.10.2022, 16:17
У SEL внизу ставите 0, выход на переменную T_vrem.
После всего, По потоку данных опять.
Таймеры датчиков надо поменять на TP. Датчики то дают короткий сигнал.

все гуд, но 1 проблема он выкл двойным нажатием, то есть он сначала сбрасывает, вкл и потом ток выкл https://skr.sh/vGVARB8Y4Tm?a

kondor3000
20.10.2022, 22:00
все гуд, но 1 проблема он выкл двойным нажатием, то есть он сначала сбрасывает, вкл и потом ток выкл https://skr.sh/vGVARB8Y4Tm?a

По другому без переделки схемы не получится. Переменная In1 и включает всё и сбрасывать должна всё. 63270
Считайте это такой фишкой, двойное нажатие сброс всего.

petera
21.10.2022, 09:18
все гуд, но 1 проблема он выкл двойным нажатием, то есть он сначала сбрасывает, вкл и потом ток выкл https://skr.sh/vGVARB8Y4Tm?a

Потому, что проигнорировали мое сообщение о том, что входы SET и RST ФБ SHR_11UDE должны управляться импульсными сигналами, а у Вас на SET тупо приходит постоянная единица, которая висит до ворого нажатия in1

А же выкладывал уже
63274
Здесь два AND - селекторы сигналов для SET и RST.
Первое нажатие - импульс на SET, второе нажатие -импульс на RST

kondor3000
21.10.2022, 11:04
Petera, проблема не в этом. Если сработал один из датчиков In2, In3 и лампы горят уже, он хочет выключить одним нажатием In1, а выключается только со второго.
К тому же по вашей схеме, с In1 все лампы включаются, и плавно гаснут. На скрине 63279
А должны загораться при первом и гаснуть при втором нажатии.

Duvall
21.10.2022, 14:32
Потому, что проигнорировали мое сообщение о том, что входы SET и RST ФБ SHR_11UDE должны управляться импульсными сигналами, а у Вас на SET тупо приходит постоянная единица, которая висит до ворого нажатия in1

А же выкладывал уже
63274
Здесь два AND - селекторы сигналов для SET и RST.
Первое нажатие - импульс на SET, второе нажатие -импульс на RST

тогда не будет работать принудительное вкл

Duvall
21.10.2022, 14:43
По другому без переделки схемы не получится. Переменная In1 и включает всё и сбрасывать должна всё. 63270
Считайте это такой фишкой, двойное нажатие сброс всего.

норм фишка). ладно думаю пойдет с 2 пока, потом мб переделывать буду, спасибо за помощь

west
22.10.2022, 15:58
потом мб переделывать буду
Кому как, конечно, но я за нормальное оформление проекта.
P.S. от BLINK давно отказался.

kondor3000
22.10.2022, 21:12
Кому как, конечно, но я за нормальное оформление проекта.
P.S. от BLINK давно отказался.

А чего не так? 63301
Нормальное, это так
t1:=WORD_TO_TIME(SEL(a,25000,0));
t2:=WORD_TO_TIME(SEL(a,33000,0));

igumich
26.10.2022, 07:52
Здравствуйте, нужна помощь.


Speed_slave_procent := Speed_slave * 100 / Speed_master;
Delta_zadanie := 100 - Speed_slave_procent;


IF up_slave > 0 THEN
up_s:= TRUE;

slave_zadanie := slave_zadanie + (master_zadanie * Delta_zadanie / 100);
(*slave_zadanie := slave_zadanie / 3.03;*)


END_IF


master_zadanie, slave_zadanie (первоначальное значение) заведомо известны
Проблема в том что результат slave_zadanie получается в 2 раза больше, чем должен быть. Что я делаю не так?

kondor3000
26.10.2022, 08:26
Здравствуйте, нужна помощь.

master_zadanie, slave_zadanie (первоначальное значение) заведомо известны
Проблема в том что результат slave_zadanie получается в 2 раза больше, чем должен быть. Что я делаю не так?

Зачем его считать, если по вашим словам оно заранее известно?
А больше получается, очевидно считаете неправильно.
Если нужна дельта, то посчитайте разницу.

ASo
26.10.2022, 08:27
Типы переменных какие?
Ну и приведите первоначальные значения, при которых так получается.

1exan
26.10.2022, 08:31
Здравствуйте, нужна помощь.


Speed_slave_procent := Speed_slave * 100 / Speed_master;
Delta_zadanie := 100 - Speed_slave_procent;


IF up_slave > 0 THEN
up_s:= TRUE;

slave_zadanie := slave_zadanie + (master_zadanie * Delta_zadanie / 100);
(*slave_zadanie := slave_zadanie / 3.03;*)


END_IF


master_zadanie, slave_zadanie (первоначальное значение) заведомо известны
Проблема в том что результат slave_zadanie получается в 2 раза больше, чем должен быть. Что я делаю не так?

В 2 раза больше чем что?
Как из этого описания догадаться, что вы хотели рассчитать?

igumich
26.10.2022, 08:55
Изначально:
мастер задание 10
слейв задание 0
Дельта 20% (вычислили)
slave_zadanie := slave_zadanie + (master_zadanie * Delta_zadanie / 100);
слейв = 0 + (10 * 20/100)
слейв должен быть равен 2, а у меня 4

saii
26.10.2022, 09:23
Изначально:
...
Дельта 20% (вычислили)
...
Расчет в студию.

Какие типы и значения у Speed_slave_procent, Speed_slave, Speed_master?

igumich
26.10.2022, 10:06
REAL все типы значений

igumich
26.10.2022, 10:06
Расчет в студию.

Какие типы и значения у Speed_slave_procent, Speed_slave, Speed_master?

Speed_slave_procent := Speed_slave * 100 / Speed_master;
Delta_zadanie := 100 - Speed_slave_procent;

kondor3000
26.10.2022, 10:21
У вас в IF, счёт происходит два раза. Переменная up_slave не сбрасывается, а должна сбросится после одного цикла.
Либо после рассчёта, но до конца IF, поставьте up_slave:=False;

либо через R_Trig

R_TRIG1(CLK:=up_s , Q=>up_slave ); (* Или с триггером *)

IF up_slave > 0 THEN
slave_zadanie := slave_zadanie + (master_zadanie * Delta_zadanie / 100);
(*up_slave:=FALSE; *) (* Или со сбросом *)
END_IF

qweevitch
26.10.2022, 11:08
63370
Что это за библиотеки и где их взять? Ни гугл, ни яндекс не знает. Спросить и разраба проекта тож нет:confused:

Vitorgan
27.10.2022, 13:33
Добрый день, подскажите пожалуйста, как в сodesys 2.3 объявить массив переменных с одинаковым инициализированным значением у всех. В Cosesys 3.5 это работает вот так: ARRAY[0..max_index] OF INT:=[32(100)];

В 2.3 выпадает ошибка "3760".

Vitorgan
27.10.2022, 13:36
Добрый день, подскажите пожалуйста, как в сodesys 2.3 объявить массив переменных с одинаковым инициализированным значением у всех. В Cosesys 3.5 это работает вот так: ARRAY[0..max_index] OF INT:=[32(100)];

В 2.3 выпадает ошибка "3760".

Разобрался, запись без квадратных скобок.

In_Da_Cher_A
27.10.2022, 19:51
как-то не сталкивался ранее, поэтому буду новичком
достался по наследству вот такой конфиг
в обычный RS485 вставлен UMD c ТСР настройками
6342863429
по факту имею нули, хотя мамой клянутся, что всё было настроено и работало
поскольку вещь вторичная, пока за это спроса не было, слейвом пока не занимался и не смотрел.
Но скоро надо что-то будет показать.
Эта штука будет работать в таком виде, когда слейв настрою или надо отдельный Мастер делать?
что-то мне подозрительно такая конфигурация в стиле "фьюжн"
п.с Автора запытать не могу, что хотел этим сказать - не знаю, говорят сидит в бегах то ли в солнечном батуми, то ли в лучших традициях понаехов, колхозом таких же "конфигураторов" снимает комнату у Эрдогана

In_Da_Cher_A
05.11.2022, 09:21
куда-то пропали ответы:confused: а они были

In_Da_Cher_A
05.11.2022, 09:24
вопрос на 5 с плюсом
какой порядок байт во Float у ОВЕНа? где искать в какой документации? кроме невнятной галки в настройках связи с панелью - не нашёл ничего

ASo
05.11.2022, 10:52
Старшим байтом вперёд.
1032...

kondor3000
05.11.2022, 11:02
вопрос на 5 с плюсом
какой порядок байт во Float у ОВЕНа? где искать в какой документации? кроме невнятной галки в настройках связи с панелью - не нашёл ничего

Всё что нужно запомнить, в ПЛК мастере, в UMD достаточно поставить Nativ, а в панели 3хх мастере, галку переставить регистры.

В редких случаях, для определения порядка байт, например можно использовать функцию выложенный Валенком63654
https://owen.ru/forum/showthread.php?t=36596
и ниже описание работы.

In_Da_Cher_A
05.11.2022, 11:57
Что значит у Овена ?
Во всех ПЛК и панелях СПxx интеловский - 1234 (младший байт вперед)
https://owen.ru/forum/showthread.php?t=29168&page=2
пост #17спасибо
ну вот попался занудный заказчик, который на сотом объекте вдруг затребовал "официальный" документ, потому что его персонал, ковыряющий скаду, не может никак "увидеть" мои аналоги

west
05.11.2022, 13:31
А чего не так? 63301
Нормальное, это так
t1:=WORD_TO_TIME(SEL(a,25000,0));
t2:=WORD_TO_TIME(SEL(a,33000,0));

Да, согласен. Забыл, что операторы преобразования можно тоже упростить.
А как насчёт MOVE с EN/ENO? Можно ли как-то упростить? У меня их в проекте вагон...

kondor3000
05.11.2022, 13:45
Да, согласен. Забыл, что операторы преобразования можно тоже упростить.
А как насчёт MOVE с EN/ENO? Можно ли как-то упростить? У меня их в проекте вагон...

Только если перейти на ST
IF a THEN rt1:=rt; END_IF

west
05.11.2022, 15:43
Только если перейти на ST

IF a THEN rt1:=rt; END_IF
Да это понятно, просто надеялся, что это упрощение возможно и на CFC. А так переписывать эту портянку на ST что-то даже боязно...

Колыбельников
08.11.2022, 08:24
Вопрос: Модуль МВ110-32ДН
В программе описываю его через 2 x Register input module. Но используя в программе не могу, выдается ошибка. Как работать с ним? чтобы подавать на вход например AND. (что после названия ставить точку я делаю) я так понимаю у нас бит и его нельзя использовать. Что делать

Колыбельников
08.11.2022, 08:46
4015 Тип данных BOOL не допустим для прямого битового доступа

Колыбельников
08.11.2022, 08:51
Скажем, задача: входы 1 - 32 (МВ110.32ДН) подать через AND на выход 1 ПЛК 100

Колыбельников
08.11.2022, 08:59
32 раза сравнить?

Колыбельников
08.11.2022, 09:20
6369263693

Колыбельников
08.11.2022, 09:20
Я не понял что вы написали. Можно для чайника объяснить
Чат написано ответы для новичков

Колыбельников
08.11.2022, 09:26
Не работает, я и 4 по 8 бит пробовал выхода не видит, программе все хорошо а модуль не работает. Регистры по инструкции прописываю

Колыбельников
08.11.2022, 09:27
Переменная bool. для использования дальше

Колыбельников
08.11.2022, 09:46
вот проект

Колыбельников
08.11.2022, 09:58
вот, owennet стандартная

Колыбельников
08.11.2022, 10:02
Вот на всякий случай

Колыбельников
08.11.2022, 10:05
исходный, единственное in7.0.... соединить с переменными bool. Вот в этом и за пара

Колыбельников
08.11.2022, 10:15
in7.0 по in7.12 и in8.0 по in8.9 соединить с переменными. Ну написал in7.0 много точек

Колыбельников
08.11.2022, 10:16
Ребят ну если это такая простая задача, а вы в чате для ответы новичка помогите без демагогии

1exan
08.11.2022, 10:17
Ребят ну если это такая простая задача, а вы в чате для ответы новичка помогите без демагогии

in7 и in8 у вас объявлены типа BOOL - какой бит у них вы пытаетесь получить?

Колыбельников
08.11.2022, 10:21
6369863700

1exan
08.11.2022, 10:23
6369863700

Уберите их повторное объявление из PLC_PRG

Колыбельников
08.11.2022, 10:31
с этим разобраться легко, удаляем не подключенные блоки и не одной ошибки. Дальше что

Колыбельников
08.11.2022, 10:45
Спасибо. Новичкам помогать нужно. Они учатся. А не ошибается тот кто ни чего не делает

Колыбельников
08.11.2022, 10:46
Все получилось, ошибка была простая. Спасибо

kondor3000
08.11.2022, 11:23
Все получилось, ошибка была простая. Спасибо

Если вы с блока получаете маску битов, то не называйте её IN7, а назовите Mask ( например Mask2_16 или Mask32 ) и извлекайте биты. Путаницы не будет.

1exan
08.11.2022, 12:35
Если вы с блока получаете маску битов, то не называйте её IN7, а назовите Mask ( например Mask2_16 или Mask32 ) и извлекайте биты. Путаницы не будет.

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

west
08.11.2022, 20:37
Спасибо. Новичкам помогать нужно. Они учатся. А не ошибается тот кто ни чего не делает
Согласен.
Просто как вариант (и ничего более!!!) для начала попробуй сократить свою портянку.

kondor3000
08.11.2022, 23:01
Тут уже не сокращать надо, а программу PLC_PRG делить на блоки, 63720
а то вторая половина в эмуляции серым цветом и с вопросами.

xovik
10.11.2022, 14:36
Всем привет, ребят, подскажите, что такое Firs Scan ? В CodeSys для ПЛК

capzap
10.11.2022, 14:39
Всем привет, ребят, подскажите, что такое Firs Scan ? В CodeSys для ПЛК

такого нет, есть First Scan - первый цикл, когда можно пользователю инициализировать свои переменные, чтоб начать работу программы контроллера

xovik
10.11.2022, 14:48
То есть, это нужно для того, чтобы заработал ПЛК ?

capzap
10.11.2022, 14:50
То есть, это нужно для того, чтобы заработал ПЛК ?

нет, если первый цикл случился значит плк работает, программа может работать и без дополнительных инициализаций, всё зависит от фантазии программиста

xovik
10.11.2022, 15:02
Подскажите, пожалуйста, я правильно понимаю, что этот код, он как бы настраивает ip ПЛК ? Просто щас смотрю код другого программиста и не могу понять для чего это вообще нужно...
ETH_ADD1.Add_1 := 000;

ETH_ADD1(
EN:= FirstScan,
FUN:= 2,
Add_4:= 000,
Add_3:= 000,
Add_2:=0 ,
Add_1:= ,
Q=> );

capzap
10.11.2022, 15:12
Подскажите, пожалуйста, я правильно понимаю, что этот код, он как бы настраивает ip ПЛК ? Просто щас смотрю код другого программиста и не могу понять для чего это вообще нужно...
ETH_ADD1.Add_1 := 000;

ETH_ADD1(
EN:= FirstScan,
FUN:= 2,
Add_4:= 000,
Add_3:= 000,
Add_2:=0 ,
Add_1:= ,
Q=> );
для плк ОВЕН это не подойдет, IP задается в файле и применится только после перегрузки, теряется смысл вообще работы программы

VaBo
10.11.2022, 18:10
Коллеги, подскажите, возможно ли как-то сбросить ФБ BLINK, чтобы при следующем вызове он начал отрабытывать тайминги с нуля. ENABLE не помогает.

petera
10.11.2022, 18:30
Коллеги, подскажите, возможно ли как-то сбросить ФБ BLINK, чтобы при следующем вызове он начал отрабытывать тайминги с нуля. ENABLE не помогает.

Сделай свой из двух TON

VaBo
10.11.2022, 20:40
Сделай свой из двух TON
Не понадобилось. После снятия ENABLE добавил еще пустой вызов блока и при следующей подаче ENABLE блок работает "с нуля".
BL_pump ( ENABLE := 0 ); BL_pump ( );

Валенок
11.11.2022, 00:54
Не понадобилось. После снятия ENABLE добавил еще пустой вызов блока и при следующей подаче ENABLE блок работает "с нуля".
BL_pump ( ENABLE := 0 ); BL_pump ( );
Уверены ?
....

VaBo
11.11.2022, 08:00
Уверены ?
....
Да. Хотя переменные экземпляра не смотрел.

1exan
11.11.2022, 08:38
Коллеги, подскажите, возможно ли как-то сбросить ФБ BLINK, чтобы при следующем вызове он начал отрабытывать тайминги с нуля. ENABLE не помогает.

Подрихтуйте BLINK под себя:


CLOCK; (* call Timer *)
IF ENABLE THEN (* time passed or init *)
IF CLOCK.Q=FALSE THEN
CLOCK(IN:=FALSE); (* reset Timer *)
CLOCK(IN:=TRUE); (* restart Timer *)
IF OUT=FALSE THEN
CLOCK.PT:=TIMEHIGH;
ELSE
CLOCK.PT:=TIMELOW;
END_IF;
OUT := NOT OUT; (* invert *)
END_IF
ELSE
CLOCK(IN:=FALSE);
CLOCK.PT:=t#0s;
OUT := FALSE;
END_IF

Валенок
11.11.2022, 09:20
Да. Хотя переменные экземпляра не смотрел.
Ну сделайте периоды по минуте и ручками поопускайте Enable, особенно при поднятом OUT, и посмотрите на OUT.

Валенок
11.11.2022, 23:09
для плк ОВЕН это не подойдет, IP задается в файле и применится только после перегрузки, теряется смысл вообще работы программы
Чегой-то не подойдет ? Может та функция переписывает ip в том файле [а после останется только while true do]

capzap
12.11.2022, 09:17
Чегой-то не подойдет ? Может та функция переписывает ip в том файле [а после останется только while true do]

попытайтесь объяснить что будет после перезагрузки, когда начальные условия программы в первом скане задать IP адрес и по Ващему уйти в перегрузку

Валенок
12.11.2022, 11:22
попытайтесь объяснить что будет после перезагрузки, когда начальные условия программы в первом скане задать IP адрес и по Ващему уйти в перегрузку
Нет проблем. Но нужен весь проект.

Может в том ФБ/PROGRAM FirstScan означает сначала считать текущий ip ? ФБ/PROGRAM-то вызывается каждый цикл фрагмента.
Может это вообще не про ip ?
Может это вообще ничего ? ФБ/PROGRAM-заготовка на будущее в виде ";"
..

capzap
12.11.2022, 11:33
Нет проблем.
Но т.к. я не Герасимов и по фаланге правого мизинца не могу рассказать про форму носа, Вы же предоставите мне мелочь в виде :
1. Код до того фрагмента
2. Код после того фрагмента,
3. Код того ФБ/PROGRAM,
4. Код всех вызываемых ПОУ в п.1..3
5. Если именно ФБ - место расположения экземпляра
6. Место расположения всех данных использованных в п.1...4
7. Описание использованных типов в п.6
...
? ))

Я сказал "Может та функция ...." (под функцией подразумевал код вообще, а не именно FUNCTION)
Продолжу:
Может в том ФБ/PROGRAM FirstScan означает сначала считать текущий ip ? ФБ/PROGRAM-то вызывается каждый цикл фрагмента.
Может это вообще не про ip ?
Может это вообще ничего ? ФБ/PROGRAM-заготовка на будущее в виде ";"

Напомню, что ТС жалуется не на "помогитя, не работает" а

Лично я пока сдела вывод : оно - работает (я верю "другому программисту") Несмотря на "для плк ОВЕН это не подойдет".
У Вас есть дополнительная инфа ? Кроме того что ТС не может понять для чего это вообще ? ))
Я вот тоже не понимаю для чего это вообще. Предложил возможные варианты. Без категорических "это неподойдет".
чтение и запись из/в файл не далется за один цикл плк ни коим образом, поэтому я и говорю: в контексте FirstScan задавать IP бессмысленно, для этого есть PLC Browser

Валенок
12.11.2022, 11:43
чтение и запись из/в файл не далется за один цикл плк ни коим образом,r
С чего это вдруг ? ))


в контексте FirstScan задавать IP бессмысленно..

Бесмысленно передавать константы как в том фрагменте.
А организовать "а коли вошел 0.0.0.0, то ты не пиши, а читай" - легко. См. syslibtime ))


...для этого есть PLC Browser

Ну я вот еще и syslibfile использую )).
Разве ip отличается чем-то от какого-нить коэффициента пида ? Такой же пользовательский параметр.

capzap
12.11.2022, 12:34
С чего это вдруг ? ))


есть доказательства? Чему равен в таком случае первый цикл, а может ли он со временем превысить МаксВрЦикл? Есть защита от рисков что произойдет перегрузка при открытом файле и он не испортится? Не похожа ли вся эта ситуация что программист с многолетним опытом предлагает новичку как получить кирпич

Валенок
12.11.2022, 17:21
есть доказательства? ..
Доказательства чего ?


Чему равен в таком случае первый цикл
В 97..99% случаях 3..4мс. В 1-2% мелькнет 20...25мс. Допускаю что в отдельных случаях до 100мс. И ?


а может ли он со временем превысить МаксВрЦикл?
Да. Если МаксВрЦикл поставить 10мс. Это один из способов производства кирпичей (см. ниже)


Есть защита от рисков что произойдет перегрузка при открытом файле и он не испортится?
Есть защита от рисков в альтернативных случаях ? Например от злой собаки в следующем цикле после открытия файла при разнесении операция по циклам ?


Не похожа ли вся эта ситуация что программист с многолетним опытом..
Я тоже предполагаю что тот неизвестный программист - с многолетним опытом. У Вас есть основания предполагать иное ?


Не похожа ли вся эта ситуация что программист с многолетним опытом предлагает новичку как получить кирпич
Линия по прозводству кирпичей из ПЛК ждет своего часа пока этот новичок при наличии всего проекта

не могу понять для чего это вообще нужно...

Особенно если этому новичку доверили ПНР. Причем сырьем для производства кирпичей может стать всё вокруг. Безотносительно количества циклов ПЛК и их длительности. Это про что было воообще ?

Alex_A
21.11.2022, 10:54
Добрый день.
ПЛК110(М02) , Codesys v2

нужно упаковывать из двух WORD полученных по MODUS в один DWORD (приходят старший - младший биты)

в Codesys v3 есть библиотека CAA Libraries с блоком MEM.PackWordsToDword которая это реализует.

Есть ли аналог в v2 Codesys ? или как-то еще можно реализовать упаковывание ?

Спасибо

melky
21.11.2022, 10:56
Есть сдвиги и ADD если штатные FBD использовать, ну или кодом на ST

GoodLuck
21.11.2022, 11:00
Добрый день.
ПЛК110(М02) , Codesys v2

нужно упаковывать из двух WORD полученных по MODUS в один DWORD (приходят старший - младший биты)

в Codesys v3 есть библиотека CAA Libraries с блоком MEM.PackWordsToDword которая это реализует.

Есть ли аналог в v2 Codesys ? или как-то еще можно реализовать упаковывание ?

Спасибо

FUNCTION_BLOCK wordsToDword
VAR_INPUT
word0: WORD;
word1: WORD;
END_VAR

VAR
p: POINTER TO WORD;
p1: POINTER TO WORD;
END_VAR

VAR_OUTPUT
Out_Data: DWORD;
END_VAR

p1:=ADR(Word0); p:=ADR(Out_Data); p^:=p1^;
p1:=ADR(Word1); p:=p+2; p^:=p1^;

1exan
21.11.2022, 12:33
Добрый день.
ПЛК110(М02) , Codesys v2

нужно упаковывать из двух WORD полученных по MODUS в один DWORD (приходят старший - младший биты)

в Codesys v3 есть библиотека CAA Libraries с блоком MEM.PackWordsToDword которая это реализует.

Есть ли аналог в v2 Codesys ? или как-то еще можно реализовать упаковывание ?

Спасибо

Или так:

FUNCTION PackWordsToDword : DWORD
VAR_INPUT
wHighWord:WORD;
wLowWord:WORD;
END_VAR

PackWordsToDword := SHL(WORD_TO_DWORD(wHighWord),16) OR WORD_TO_DWORD(wLowWord);

kondor3000
21.11.2022, 13:27
Добрый день.
ПЛК110(М02) , Codesys v2

нужно упаковывать из двух WORD полученных по MODUS в один DWORD (приходят старший - младший биты)

в Codesys v3 есть библиотека CAA Libraries с блоком MEM.PackWordsToDword которая это реализует.

Есть ли аналог в v2 Codesys ? или как-то еще можно реализовать упаковывание ?

Спасибо

В Codesys v2.3 можно вообще ничего не упаковывать. Просто назвать переменную состоящую из двух WORD стоящих по порядку, например Dw1 : DWORD;
( или Dw1 AT %QB12.1.0 : DWORD; ) и читать как DWORD.
Здесь обсуждались перестановки байт, регистров в переменной полученной по модбас. Одну и туже переменную из двух WORD, можно прочитать и как DWORD и как REAL https://owen.ru/forum/showthread.php?t=36596
Пример склейки REAL из двух WORD, есть в моём примере https://owen.ru/forum/showthread.php?t=35094#10

kirill_bykov
21.11.2022, 22:36
Добрый день,
ПЛК110(М02), Codesys v2

Самопроизвольно перезагружается в течении 15 минут работы, при удалении/недоступности для опроса slave устройств modbus проблема исчезает
Параметры modbus Master:
com speed: 38400
Parity: No parity
Data bits: 8 bits
Stop len: 1 bit
Interface type: RS485
Frame oriented: RTU
Framing time ms: 100
Visibility: No

Настройки slave устройств:
NetMode: Serial
Address: 5 - 8 (4 устройства)
WorkMode: ByPollTime
PollingTime: 100ms на 2 устройствах 1000ms на других 2 устройствах
AmntRepeat: 3
ByteSequense: Trace_mode

4 устройства: 2х МВ110-8а, Частотный преобразователь ESQ600 , Частотный преобразователь instart LCI, неважно включен движок или нет все равно идет сброс

второй modbus порт работает в режиме slave, подключена панель СП307
настройки те же за исключением:
com speed: 115200
framing time: 200ms

с ней обмен идет на 60 регистров (120 байт)

Пробовал добавлять основную задачу написанную на CFC в конфигурацию задач с циклическим типом и интервалом 200ms и сторожевым таймером 10с восприимчивость 5

Проверки на перекрытие памяти и вообще все проверки которые можно там выставить при комплияции выставил.

Перепробовал все что нашел по этому поводу не помогло поэтому пишу сюда.

Времена циклов менял от меньших к большим в надежде решения проблемы т.к. система не слишком требовательна ко времени.
Первый проект в codesys )

P.S. пожалел что использовал CFC как язык для основной задачи, потому что в процессе разбирательств со всем и вся гораздо больше понравился ST (CFC выбрал потому что до этого много программировал ПР200 в owenlogic и он с виду похож)
Подскажите как правильно выгрузить проект если это нужно

kondor3000
22.11.2022, 08:35
Добрый день,
ПЛК110(М02), Codesys v2
Самопроизвольно перезагружается в течении 15 минут работы, при удалении/недоступности для опроса slave устройств modbus проблема исчезает
Подскажите как правильно выгрузить проект если это нужно
Если работает при отключенных слейвах, то в них и проблема, возможно помехи с ПЧ идут. Какие меры проведены, для помехоустойчивости линии?
Проверяйте подключением слейвов по очереди и смотрите на каком отключается.
Проект можно выложить в расширенном режиме. Вместо лишней писанины, лучше сделать скрины. Пишите конкретно по проблеме, а не всё сразу.
Все сторожевые таймеры свои удалите нафик.
CFC абсолютно не при чём, как вам удобнее так и пишите программу.

IVM
22.11.2022, 15:46
Скорость попробуй снизить до 19200. Подключи к порту RS-485 сначала один МВ110-8а, посмотри результат. Если все нормально, то подключи второй МВ110-8а. Проверь если связь когда на линия только один частотник. Оба частотника сразу не подключай. Резисторы 120 Ом на концах линии связи есть ? Какова топология сети RS-485 ? Должно быть по цепочке.

In_Da_Cher_A
22.11.2022, 16:32
ПЛК110(М02), Codesys v2

Самопроизвольно перезагружается в течении 15 минут работы, при удалении/недоступности для опроса slave устройств modbus проблема исчезает
Параметры modbus Master:
com speed: 38400
.........
4 устройства: 2х МВ110-8а, Частотный преобразователь ESQ600 , Частотный преобразователь instart LCI,
чисто академический интерес - зачем вешать такое тормозное устройство как МВ110-8а да на такой скорости, какая вообще им даже в теории недоступна, да в пару к частотникам?
тем более - что есть ПЛК110 с дыркой под Модбас ТСР, куда можно спокойно повесить панель, а свободный порт RS отдать под аналоги?
чем скорость 38400 принципиально отличается от 9600 для тех же частотников? ничем, смысла ускорять опрос не вижу никакого, быстрого контура регулирования не получишь

зачем так всё усложнять? лезть потом во времена опроса, в конфиг задач и чего-то там разводить....
и причём здесь СFC?

kirill_bykov
22.11.2022, 20:09
зачем так всё усложнять? лезть потом во времена опроса, в конфиг задач и чего-то там разводить....
и причём здесь СFC?

Помехи с ПЧ точно не идут потому что перезапуск идет даже при остановленном ПЧ.

про modbus tcp спасибо, попробую, не использовал по причине привычке к rs-485.
не знал что мв110 тормозное устройство, если несложно предложите альтернативу
скорости уменьшу да и попробую все что написали, но

так и не понятно что может вызывать вообще рестарт, если есть какая то информация о том как modbus логически связан с перезапуском очень хотелось бы узнать)
Может память переполняется срабатывает прерывание на рестарт ( такого плана информация ). Вряд ли их такое множество, что невозможно из данной информации сделать хотя бы один конкретный теоретический вывод.
Хотелось бы решать вопросы не вслепую. Что может вызывать рестарт плк в принципе ?

Про CFC написал чисто свои ощущения, в сравнении с ST показался слабым инструментом, может поменяю свое мнение когда-нибудь :)

Спасибо за коменты, все проверю

In_Da_Cher_A
22.11.2022, 22:46
не знал что мв110 тормозное устройство, если несложно предложите альтернативу
читайте иногда инструкциюю к приборам, там может встретиться что-то типа такого
Время опроса одного входа*:
термоэлектрические преобразователи и унифицированные сигналы постоянного напряжения и тока, с, не более 0,6 с
– *Опрос входов происходит последовательно, т.е. опрос восьми входов займет время, равное сумме опросов входов с 1 по 8.
вот и всё, что вам надо знать о 8А
плюсуйте сюда фичи модбаса и несложная арифметика первого класса поможет вам можете самим узнать, когда вы получите новые данные с модуля.
более подробно вот здесь пацаны всё распедалили как боги
https://owen.ru/forum/showthread.php?t=35094

альтернативу не предложу, альтернативы как таковой - нет, кроме применения 8АС, там декларируют 5 мс на 1 к***** но у меня в проектах аналоги вторичны плюс требовалась универсальность входов, поэтому опыта работы именно с 8АС как источника оперативных данных, у меня нет.

Поэтому привыкайте к ОВЕН и приспосабливайтесь, в большинстве случаев штатного функционала вполне хватает, а если, к примеру, надо обработать 100 аналогов, то наверное просто нужен другой контроллер


Что может вызывать рестарт плк в принципе ?надеюсь это чисто программный затык, уходов в рестарт я не встречал, у меня не настолько сложные программы, чтобы довести контроллер до каки-то пределов\

в сравнении с ST показался слабым инструментомэто просто разные инструменты для разных задач и на любителя. для онлайн наладки ST к примеру просто какой-то каменный век, хотя кому-то это норм.
Поэтому лично проще сделать какую-то многоходовую связку на ST в виде блока и вставить её в CFC

Емельянов Кирилл
23.11.2022, 00:35
Про CFC написал чисто свои ощущения, в сравнении с ST показался слабым инструментом, может поменяю свое мнение когда-нибудь
Не поменяете

In_Da_Cher_A
23.11.2022, 09:24
Ну не смешитек 100 аналогам как правило идёт уже в довесок сотни 3-5 дискретов, и вот вы уже получаете АСУ ТП небольшого размера, в котором совсем уже другие требования к общему функционалу, который ОВЕН не способен обеспечить в принципе.
Да можно засунуть в стринги всё, что засовывается, да можно понаставить всяческие костыли, но потом с этим объёмом данных надо что-то делать, чем просто притащить его в программу, потратив кучу усилий. С данными, их надо обрабатывать и ими надо управлять.
про обмен с другими контроллерами или про резервирование, я уже даже не говорю.
у ОВЕН есть потолок не по "мощности", а по функционалу и удобству реализации, который он не может перепрыгнуть в принципе, даже с костылями

mathway
25.11.2022, 17:23
Привет. Столкнулся с следующим: в SFC диаграмме к шагу привязываю действие (с помощью использования МЭК шагов), но оно выполняется дважды.
Прилагаю скрин, на котором:
- сама тестовая схема, содержащая три шага, Step2 - шаг с привязанным к нему действие test_action с классификатором P ("действие выполняется один раз, если шаг активен")
- окно с содержимым test_action - переменной test я прибавляю единицу (изначально она инициализирована нулём).
64059
По идее единица должна прибавиться к переменной test только один раз (благодаря классификатору P рядом с привязанным действием), но это происходит дважды.

В чём может быть проблема?

YuriBel
25.11.2022, 17:52
Запустите CoDeSys. Откройте справку. В разделе про языки программирования найдите подраздел про SFC. Там есть страничка про МЭК шаги. На ней внимательно прочитайте то, что написано после красненького слова "Замечание"

mathway
25.11.2022, 18:39
Запустите CoDeSys. Откройте справку. В разделе про языки программирования найдите подраздел про SFC. Там есть страничка про МЭК шаги. На ней внимательно прочитайте то, что написано после красненького слова "Замечание"

о, точно. спасибо!

Dandir
26.11.2022, 13:31
Здравствуйте.
Не могли бы подсказать.
сменил целевую платформу с ПЛК110.60-M v2 на ПЛК110.60-L v2.
При компиляции проекта появились 4 ошибки:
ошибка 3728: HMI (19): неверный адрес '%QW6.143.0'
ошибка 3728: HMI (21): неверный адрес '%QW6.161.0'
ошибка 3728: HMI (22): неверный адрес '%QW6.164.0'
ошибка 3728: HMI (24): неверный адрес '%QW6.179.0'
Куда копать?

1exan
26.11.2022, 14:25
Здравствуйте.
Не могли бы подсказать.
сменил целевую платформу с ПЛК110.60-M v2 на ПЛК110.60-L v2.
При компиляции проекта появились 4 ошибки:
ошибка 3728: HMI (19): неверный адрес '%QW6.143.0'
ошибка 3728: HMI (21): неверный адрес '%QW6.161.0'
ошибка 3728: HMI (22): неверный адрес '%QW6.164.0'
ошибка 3728: HMI (24): неверный адрес '%QW6.179.0'
Куда копать?

В сторону "Конфигурации ПЛК"

Dandir
26.11.2022, 15:13
В сторону "Конфигурации ПЛК"

конфигурация скопирована с рабочей программы.
64074

kondor3000
26.11.2022, 16:43
Здравствуйте.
Не могли бы подсказать.
сменил целевую платформу с ПЛК110.60-M v2 на ПЛК110.60-L v2.
При компиляции проекта появились 4 ошибки:
ошибка 3728: HMI (19): неверный адрес '%QW6.143.0'
ошибка 3728: HMI (21): неверный адрес '%QW6.161.0'
ошибка 3728: HMI (22): неверный адрес '%QW6.164.0'
ошибка 3728: HMI (24): неверный адрес '%QW6.179.0'
Куда копать?
С нового ПЛК на новый должно переносится без проблем, возможно вы после смены платформы не нажали Дополнения/Стандартная конфигурация и Вычислять адреса
или не нажали Очистить всё, Компилировать всё.
Надо ещё раз проверить правильность выбранной конфигурации.
Тут прога для переноса https://owen.ru/forum/showthread.php?t=18269
У вас в программе где то прописаны адреса типа '%QW6.143.0' вот они и не совпадают в конфигурации, либо перенесли неправильно.

Dandir
26.11.2022, 17:09
С нового ПЛК на новый должно переносится без проблем, возможно вы после смены платформы не нажали Дополнения/Стандартная конфигурация и Вычислять адреса
или не нажали Очистить всё, Компилировать всё.
Надо ещё раз проверить правильность выбранной конфигурации.
Тут прога для переноса https://owen.ru/forum/showthread.php?t=18269
У вас в программе где то прописаны адреса типа '%QW6.143.0' вот они и не совпадают в конфигурации, либо перенесли неправильно.

Как раз программой перенес конфигурацию.
Дополнения/Стандартная конфигурация и Вычислять адреса - делал.
Очистить всё, Компилировать всё - делал.
рабочая программа была на 110.60-М, а копировал на 110.60-L
Для контроллеров, последняя буква обозначения которых – латинская
буква «L», устанавливается ограничение объема памяти ввода-вывода
размером 360 байт, при этом 122 байта отводятся для памяти ввода (%I),
234 байта отводятся для памяти вывода (%Q) и оставшиеся 4 байта – под
специальную память (%М).
Наверно это ограничение влияет?

kondor3000
26.11.2022, 17:55
234 байта отводятся для памяти вывода (%Q) и оставшиеся 4 байта – под
специальную память (%М).
Наверно это ограничение влияет?
Да, скорее всего тут и есть ограничение памяти. На L влезают около 100-120 регистров в обмене, точнее можно проверить убирая последние, пока ошибки не будет.

One
29.11.2022, 07:59
Добрый день! Подскажите есть ли способ вывести на печать все окно логики в Codesys?
Пока что получает только через PrintScreen кусками вытягивать и склеивать.

1exan
29.11.2022, 08:08
Добрый день! Подскажите есть ли способ вывести на печать все окно логики в Codesys?
Пока что получает только через PrintScreen кусками вытягивать и склеивать.

А почему не используете стандартные средства? (Файл -> Печать [Параметры печати...])

Duvall
30.11.2022, 12:59
здравствуйте,можно как-то настроить плк, чтобы оно запоминало, какие выходы горели, до их выключения 1 кнопкой. Есть 1 "главная кнопка", которая выкл почти все, и нужно, если повторно ее нажать, то вкл те входы, которые были выключены этой кнопкой в последний раз.

melky
30.11.2022, 13:16
Duvall это делается в программе ПЛК а не его настройками.

kondor3000
30.11.2022, 13:24
здравствуйте,можно как-то настроить плк, чтобы оно запоминало, какие выходы горели, до их выключения 1 кнопкой. Есть 1 "главная кнопка", которая выкл почти все, и нужно, если повторно ее нажать, то вкл те входы, которые были выключены этой кнопкой в последний раз.
Всё делается в программе.
Собираете все биты кнопок в маску, например Mask (переменная типа WORD, 16 бит) Mask.0:=Bit 0; Mask.1:=Bit 1; и т. д.
Эту переменную можно сохранить как RETAIN , записать в слейв ( будет энергонезависимая переменная), передать на другое устройство. Когда надо распаковать из маски, например Bit 0 :=Mask.0; Bit 1 :=Mask.1; и т. д. и включить те же биты, которые были.
Включить можно только выходы. Входы включить из программы нельзя.

Cs-Cs
30.11.2022, 14:03
Duvall Это не управление освещением по моим разработкам типа "Длинное нажатие на мастер-кнопку гасит весь свет, а двойное включает как было?"

Duvall
30.11.2022, 14:19
Всё делается в программе.
Собираете все биты кнопок в маску, например Mask (переменная типа WORD, 16 бит) Mask.0:=Bit 0; Mask.1:=Bit 1; и т. д.
Эту переменную можно сохранить как RETAIN , записать в слейв ( будет энергонезависимая переменная), передать на другое устройство. Когда надо распаковать из маски, например Bit 0 :=Mask.0; Bit 1 :=Mask.1; и т. д. и включить те же биты, которые были.
Включить можно только выходы. Входы включить из программы нельзя.

Не подскажете по конкретнее, делаю на cfc, дополнительный элемент получается нужен, саму мастер кнопку еще не добавил https://drive.google.com/file/d/1DH2O7cfMM2MpNf1h9e5nkoCxvIgeWST-/view?usp=share_link вот прога

Duvall
30.11.2022, 14:23
Duvall Это не управление освещением по моим разработкам типа "Длинное нажатие на мастер-кнопку гасит весь свет, а двойное включает как было?"
Нет вашу работу не видел, не поделитесь?)

Cs-Cs
30.11.2022, 14:55
Нет вашу работу не видел, не поделитесь?)
Поделюсь! Пишите на мыло info@cs-cs.net - вышлю крутой FB под такие задачи.

kondor3000
30.11.2022, 15:14
Не подскажете по конкретнее, делаю на cfc, дополнительный элемент получается нужен, саму мастер кнопку еще не добавил https://drive.google.com/file/d/1DH2O7cfMM2MpNf1h9e5nkoCxvIgeWST-/view?usp=share_link вот прога

У меня нет времени разбираться в вашем проекте. Сделайте пример из 1, 2 кнопок и напишите что должно включаться и сохраняться. Пример можно выложить в расширенном режиме, добавить файл.
Обычно начинают с отладки кусков, а потом добавляют сотни выключателей. У вас всё наоборот. Вам всю прогу возможно придётся переписывать.
У вас уже нижняя часть в эмуляции не обрабатывается. Надо разделить программу на куски например на каждый 32 битный вход выход.

Cs-Cs
30.11.2022, 18:22
Присоединяюсь к Kondor3000. Я тоже посмотрел после твоего комментария. Это ЖОСТЬ! Прям все каноны нарушены в хламину!
Там проще замутить косвенную адресацию и массив FB крутить на ST, а не на CFC делать. Мне он так и не написал, а я ему хотел закинуть свой FB CSIRelay - импульсное реле с сохранением и восстановлением состояния.

Duvall
02.12.2022, 11:02
Кому как, конечно, но я за нормальное оформление проекта.
P.S. от BLINK давно отказался.

сделал как у вас, не работает in1, вкл и сразу начинает гаснуть, а должен гаснуть только при повторном нажатии, также не выкл in2 и in3, и не работают совместно in2 и in3, если их вкл в течении 6 сек, лампы должны загореться везде и одновременно, а на той все работает исправно, хоть и "ненормально оформлено"

Duvall
02.12.2022, 11:18
У меня нет времени разбираться в вашем проекте. Сделайте пример из 1, 2 кнопок и напишите что должно включаться и сохраняться. Пример можно выложить в расширенном режиме, добавить файл.
Обычно начинают с отладки кусков, а потом добавляют сотни выключателей. У вас всё наоборот. Вам всю прогу возможно придётся переписывать.
У вас уже нижняя часть в эмуляции не обрабатывается. Надо разделить программу на куски например на каждый 32 битный вход выход.

https://skr.sh/sHCPoedx7tL?a допустим включены in1, in3 и in7, если нажать 1 раз in9, то они все выкл, но если нажать еще раз они включаться

Duvall
02.12.2022, 11:25
Не подскажете кнопку в oscat basic/building, которая при 1 нажатии вкл первый выход, при 2 второй и при 3 третий, и чтобы также выкл, пробовал элемент click, но он почему-то выкл сразу, как отпустить кнопку

Duvall
02.12.2022, 15:09
Не подскажете кнопку в oscat basic/building, которая при 1 нажатии вкл первый выход, при 2 второй и при 3 третий, и чтобы также выкл, пробовал элемент click, но он почему-то выкл сразу, как отпустить кнопку

64237 нашел click_dec, но если отпустить подачу, то он выключает выходы, а надо чтобы они держались, пока их вручную не выкл, и чтобы они не выкл, если вкл один из них, то есть чтобы они могли гореть все вместе. Похоже что click_dec не подойдет

petera
02.12.2022, 15:20
64237 нашел click_dec, но если отпустить подачу, то он выключает выходы, а надо чтобы они держались, пока их вручную не выкл, и чтобы они не выкл, если вкл один из них, то есть чтобы они могли гореть все вместе. Похоже что click_dec не подойдет

Выключать как планируете?

petera
02.12.2022, 16:13
Выключать как планируете?

Ответа нет....

например так
64242

порядок выполнения - ВАЖЕН!

https://owen.ru/forum/attachment.php?attachmentid=64241&d=1669986673

Duvall
02.12.2022, 16:31
Выключать как планируете?

также, первый по одному нажатию, 2 по 2 и так далее, и таймер нужно поставить по которому они будут работать, если допустим хотим выключить 1 и не вкл при этом 2, то нужно подождать секунды 2.

Duvall
02.12.2022, 16:46
Ответа нет....

например так
64242

порядок выполнения - ВАЖЕН!

https://owen.ru/forum/attachment.php?attachmentid=64241&d=1669986673
так не получится, так как если хотим, чтобы горели все 2, то обязательно должен быть вкл 1, и также с 3, поэтому, надо поставить таймер допустимого нажатия.
Вот чтобы вкл 2 и сразу его выкл, нужно нажать быстро 2 раза, подождать 2сек и еще раз нажать 2раза.

kondor3000
03.12.2022, 14:08
Переделал проект на блоки, добавил общий сброс.
Для сохранения масок добавил Глобальные переменные, в том числе RETAIN и Блок сохранения масок Sohranenie. Код пока написан только для входов IN1-In12, и для маски m, для остальных масок надо дописать, скопировать.

IF In_y>0 AND In_y_zap<>In_y THEN (* Запись маски со входов In 1- In 12 *)
In_y_zap1:=In_y ;
In_y_zap:=In_y_zap1 ;
END_IF
IF In18 AND In_y_zap<>In_y THEN (* Включение/ выключение входов In 1- In 12 по кнопке In 18 *)
In_y_zap1:=In_y_zap;
ELSIF In18 AND In_y_zap=In_y THEN
In_y_zap1:=In_y_zap;
ELSE
In_y_zap1:=0;
END_IF

IF In_m>0 AND In_m_zap<>In_m THEN (* Запись маски с парамерром m *)
In_m_zap1:=In_m ;
In_m_zap:=In_m_zap1 ;
END_IF
IF In18 AND In_m_zap<>In_m THEN (* Включение/ выключение маски m по кнопке In 18 *)
In_m_zap1:=In_m_zap;
ELSE
In_m_zap1:=0;
END_IF

Осталось к каждому switch1 добавить OR и два входа, один маска кнопок, второй сохранённая маска, а на выходах добавить присвоение маски, см. скрин. 64251
И по кнопке IN18, можно переключать сохранённую маску или выключить всё.
Допустим включены кнопки IN1-In4, работают выходы Out1-Out4, потом ресетом Res сбрасываем всё.
После этого нажатие IN18 включает записанные выходы, второе нажатие выключает выходы. Скрин 64252

Duvall
05.12.2022, 10:42
Подождите-подождите...
А чтобы включить 23 - нужно нажать быстро 23 раза, подождать 2сек и еще раз нажать 23раза ?

чтобы вкл и выкл да, чтобы выкл 2, нужно подождать 2 сек после вкл, и только после этого нажать быстро 2 раза

Duvall
05.12.2022, 14:23
Переделал проект на блоки, добавил общий сброс.
Для сохранения масок добавил Глобальные переменные, в том числе RETAIN и Блок сохранения масок Sohranenie. Код пока написан только для входов IN1-In12, и для маски m, для остальных масок надо дописать, скопировать.

IF In_y>0 AND In_y_zap<>In_y THEN (* Запись маски со входов In 1- In 12 *)
In_y_zap1:=In_y ;
In_y_zap:=In_y_zap1 ;
END_IF
IF In18 AND In_y_zap<>In_y THEN (* Включение/ выключение входов In 1- In 12 по кнопке In 18 *)
In_y_zap1:=In_y_zap;
ELSIF In18 AND In_y_zap=In_y THEN
In_y_zap1:=In_y_zap;
ELSE
In_y_zap1:=0;
END_IF

IF In_m>0 AND In_m_zap<>In_m THEN (* Запись маски с парамерром m *)
In_m_zap1:=In_m ;
In_m_zap:=In_m_zap1 ;
END_IF
IF In18 AND In_m_zap<>In_m THEN (* Включение/ выключение маски m по кнопке In 18 *)
In_m_zap1:=In_m_zap;
ELSE
In_m_zap1:=0;
END_IF

Осталось к каждому switch1 добавить OR и два входа, один маска кнопок, второй сохранённая маска, а на выходах добавить присвоение маски, см. скрин. 64251
И по кнопке IN18, можно переключать сохранённую маску или выключить всё.
Допустим включены кнопки IN1-In4, работают выходы Out1-Out4, потом ресетом Res сбрасываем всё.
После этого нажатие IN18 включает записанные выходы, второе нажатие выключает выходы. Скрин 64252

А для последующих нужно тоже in_y в выходы добавлять 642956429664297

kondor3000
05.12.2022, 14:34
А для последующих нужно тоже in_y в выходы добавлять 642956429664297

Там же есть образец, in_y выходы нужны только где кнопки на ПЛК, где входы с блоков, там не нужны.

Duvall
05.12.2022, 14:45
Там же есть образец, in_y выходы нужны только где кнопки на ПЛК, где входы с блоков, там не нужны.

понял спасибо, а как добавить кнопку 64298, вместо in18 нужно добавить in_n.3164299 тут все поменял

kondor3000
05.12.2022, 15:51
понял спасибо, а как добавить кнопку 64298, вместо in18 нужно добавить in_n.3164299 тут все поменял
in_n.31 это глобальная переменная, в первом вашем скрине её вообще надо удалить.
А в блоке Sohranenie (2 ваш скрин) все In18, заменить на In_n.31

И самое главное, вы прежде чем менять кнопки, проверили работу всей программы?

Duvall
05.12.2022, 16:55
in_n.31 это глобальная переменная, в первом вашем скрине её вообще надо удалить.
А в блоке Sohranenie (2 ваш скрин) все In18, заменить на In_n.31

И самое главное, вы прежде чем менять кнопки, проверили работу всей программы?

конечно, все проверил, с in_m порядок нарушен, тк начинается с In13, и из-за этого вкл сразу по-несколько выходов64303

kondor3000
06.12.2022, 00:51
конечно, все проверил, с in_m порядок нарушен, тк начинается с In13, и из-за этого вкл сразу по-несколько выходов64303

Естественно, надо сделать по нормальному, а не со смещением, иначе запоминать будет неправильно.
Вот полностью рабочий проект, управление записью опять по IN18

Duvall
06.12.2022, 10:09
так это кнопка отвечает за группу допустим, и если хотим вкл и выкл одной кнопкой разные выходы, нужно разные нажатия, а если хотим выкл нужно ждать 2сек, чтобы не нарушать очередность

Duvall
06.12.2022, 10:10
спасибо, сейчас все проверю

Duvall
06.12.2022, 11:43
Естественно, надо сделать по нормальному, а не со смещением, иначе запоминать будет неправильно.
Вот полностью рабочий проект, управление записью опять по IN18

а вот этот блок для чего нужен64321

kondor3000
06.12.2022, 12:18
а вот этот блок для чего нужен64321

Ну вы даёте, такие вопросы задавать. В программе посмотреть никак?
Шесть экземпляров блока вызвано, для обработки 6 масок от МВВ.
Вместо написания 6 блоков, написал 1 и вызвал его сколько надо раз. 64323
Они пронумерованы от 1 до 6 и в эмуляции тоже будет 6 экземпляров, какой надо посмотреть, такой и открываете. 64324

Duvall
06.12.2022, 12:47
Ну вы даёте, такие вопросы задавать. В программе посмотреть никак?
Шесть экземпляров блока вызвано, для обработки 6 масок от МВВ.
Вместо написания 6 блоков, написал 1 и вызвал его сколько надо раз. 64323
Они пронумерованы от 1 до 6 и в эмуляции тоже будет 6 экземпляров, какой надо посмотреть, такой и открываете. 64324

Нет это я понял, я про то, что их же надо будет заменять, на in_m и тп, а значит он не нужен будет? Все равно несколько включает https://drive.google.com/file/d/1UXDzaPUCT5xla61bpAxb-kqLEuF7PI8I/view?usp=sharing

kondor3000
06.12.2022, 12:51
Нет это я понял, я про то, что их же надо будет заменять, на in_m и тп, а значит он не нужен будет? Все равно несколько включает https://drive.google.com/file/d/1UXDzaPUCT5xla61bpAxb-kqLEuF7PI8I/view?usp=sharing

Как не нужен, это универсальный блок на все маски, сколько вам повторять?
Это in_m ваш не нужен уже, если только вы его не хотите изменить, но тогда запоминать будет криво.
Проще в новый проект, экпортом, импортом добавить другие блоки.

Duvall
06.12.2022, 12:58
Как не нужен, это универсальный блок на все маски, сколько вам повторять?
Это in_m ваш не нужен уже, если только вы его не хотите изменить, но тогда запоминать будет криво.
а почему тогда 5 вкл 3 и 16432564326, в других блоках также по несколько включает

kondor3000
06.12.2022, 13:12
а почему тогда 5 вкл 3 и 16432564326, в других блоках также по несколько включает

Вам теорию надо учить. 0 бит это 1,
1 бит это 2,
2 бит, это 4,
3 бит это 8,
4 бит это 16, далее 32,64,128,256,512 и т. д.
Число 5 это включены биты 0 и 2, ( 1+4=5 )
7 включены биты 0,1,2
8 включён только 3 бит. Тренируйтесь на кнопках в эмуляции или на реальном ПЛК с масками.

Duvall
06.12.2022, 13:16
Вам теорию надо учить. 0 бит это 1,
1 бит это 2,
2 бит, это 4,
3 бит это 8,
4 бит это 16, далее 32,64,128,256,512 и т. д.
Число 5 это включены биты 0 и 2, ( 1+4=5 )
7 включены биты 0,1,2
8 включён только 3 бит. Тренируйтесь на кнопках в эмуляции или на реальном ПЛК с масками.

понял, спасибо

Duvall
06.12.2022, 15:26
Как не нужен, это универсальный блок на все маски, сколько вам повторять?
Это in_m ваш не нужен уже, если только вы его не хотите изменить, но тогда запоминать будет криво.
Проще в новый проект, экпортом, импортом добавить другие блоки.

In13- in18 никак в маску не вставить? Можно же сделать каждый отдельно, а не все в одном, каждый отдельно блок64334
тем более, если будут добавлены разные параметры, где не нужна будет даже эта кнопка, например на той же лестнице.

kondor3000
06.12.2022, 15:30
In13- in18 никак в маску не вставить?

Вставить можно, только зачем? Вам нужны кнопки для управления системой.
Вы пытаетесь использовать например In_m_31, нарушаете логику запоминания масок. А лишние кнопки пытаетесь в маску засунуть, опять запоминания не будет.
Либо уже пожертвуйте какой то маской входов, выходов и не запоминайте её.
Например выходы лестницы вы тоже в маску засунули, часть маски потеряли.

Duvall
06.12.2022, 15:33
Вставить можно, только зачем? Вам нужны кнопки для управления системой.
Вы пытаетесь использовать например In_m_31, нарушаете логику запоминания масок. А лишние кнопки пытаетесь в маску засунуть, опять запоминания не будет.

Тк эти кнопки уже подключены в таком порядке, плюс как добавлять параметры где не нужна будет эта маска, как на лестнице.

Duvall
06.12.2022, 15:36
Вставить можно, только зачем? Вам нужны кнопки для управления системой.
Вы пытаетесь использовать например In_m_31, нарушаете логику запоминания масок. А лишние кнопки пытаетесь в маску засунуть, опять запоминания не будет.
Либо уже пожертвуйте какой то маской входов, выходов и не запоминайте её.

Можно же сделать отдельно их друг от друга, чтобы можно было убирать не нужные, как тут
64335
они находятся на лестнице
64336
чтобы не дублировались

kondor3000
06.12.2022, 15:48
Можно же сделать отдельно их друг от друга, чтобы можно было убирать не нужные, как тут
64335
они находятся на лестнице
64336
чтобы не дублировались

Если уберёте часть выключателей, не будет запоминания. Включите из другого места, маска нарушится.
Я предлагаю например маску лестницы, она уже нарушена использовать для входов, выходов, а запоминание убрать.
Решать вам, конечно, пишу как бы сделай сам. Все полные маски, для запоминания, 1 маску для управления, без запоминания.
Короче, всё надо будет проверять по 100 раз.

Duvall
06.12.2022, 15:51
Если уберёте часть выключателей, не будет запоминания. Включите из другого места, маска нарушится.
Я предлагаю например маску лестницы, она уже нарушена использовать для входов, выходов, а запоминание убрать.
Решать вам, конечно, пишу как бы сделай сам. Все полные маски, для запоминания, 1 маску для управления, без запоминания.
Короче, всё надо будет проверять по 100 раз.

Сложная задачка

Duvall
06.12.2022, 15:55
Если уберёте часть выключателей, не будет запоминания. Включите из другого места, маска нарушится.
Я предлагаю например маску лестницы, она уже нарушена использовать для входов, выходов, а запоминание убрать.
Решать вам, конечно, пишу как бы сделай сам. Все полные маски, для запоминания, 1 маску для управления, без запоминания.
Короче, всё надо будет проверять по 100 раз.

а можно ли заменить switch_in_ на switch_in_m, switch_in_n, switch_in_v, и каждый по отдельности прописать, а switch_in_ удалить.
потому что не только лестница будет, возможно еще какие-то задачи параллельные будут, поэтому хотел бы их отдельно все прописать, и не нужные удалять, как в прошлой версии программы, где вообще запоминания не было64338

kondor3000
06.12.2022, 16:05
а можно ли заменить switch_in_ на switch_in_m, switch_in_n, switch_in_v, и каждый по отдельности прописать, а switch_in_ удалить.
потому что не только лестница будет, возможно еще какие-то задачи параллельные будут, поэтому хотел бы их отдельно все прописать, и не нужные удалять, как в прошлой версии программы, где вообще запоминания не было64338

Пробуйте, я сделал оптимизацию системы. А как вы сделаете, вам решать. Главное делайте блоками, а не всё в PLC_PRG как было.

Duvall
06.12.2022, 16:19
Тогда к каждому добавить y и продолжить очередность с блока In64341

kondor3000
06.12.2022, 16:24
Тогда к каждому добавить y и продолжить очередность с блока In64341

Для кнопок in13 по in18 надо.

Duvall
06.12.2022, 17:20
Для кнопок in13 по in18 надо.

In_n.31 почему-то вкл это 64344
и работает только до in 12

kondor3000
06.12.2022, 18:02
In_n.31 почему-то вкл это 64344
и работает только до in 12

На ваших скринах не видно ничего. Делайте скрины кнопкой PrintScreen, вставляйте в PAINT в формате jpg и добавляйте как Вставить изображение.
Или выкладывайте проект.
А по поводу записи из разных масок, в другие маски уже много раз писал, будут проблемы.
Глобальные переменные работают во всех блоках, если вы забыли её удалить в другом блоке, она может не сработать или наоборот гореть когда не надо.

kondor3000
06.12.2022, 22:34
Вобщем нужны пляски с бубном, в скринах всё нарисовал.
Добавляем выходы, дописываем блок Switch_ In, в нём идёт запоминание 64356
Переменную с выхода отправляем в созданный блок Switch_ In_m,
OR и Switch1 выкидываем, а переменную просто соединяем вместо старой 64357

Duvall
07.12.2022, 09:24
Вобщем нужны пляски с бубном, в скринах всё нарисовал.
Добавляем выходы, дописываем блок Switch_ In, в нём идёт запоминание 64356
Переменную с выхода отправляем в созданный блок Switch_ In_m,
OR и Switch1 выкидываем, а переменную просто соединяем вместо старой 64357

Проблема в том, что выходов в плк всего 12, поэтому in13 выходит на in_m.0.
https://drive.google.com/file/d/19VB1am-hh_ZFNoPYD9FRY_bWRzd4rB-h/view?usp=sharing
64372

kondor3000
07.12.2022, 09:54
Проблема в том, что выходов в плк всего 12, поэтому in13 выходит на in_m.0.
https://drive.google.com/file/d/19VB1am-hh_ZFNoPYD9FRY_bWRzd4rB-h/view?usp=sharing
64372

Написал же как надо сделать в предыдущем посте. Только у меня выходит на Out_.3 (Out_m.3).
Поставьте Out_.0 будет (Out_m.0).
In13- In18 должны заходить в блок, а Out13- Out18 просто для наглядности.
В блоке Sohranenie для кнопок одна запись, для масок другая, для правильной записи. Ваша версия работать правильно не будет.

Duvall
07.12.2022, 10:02
Написал же как надо сделать в предыдущем посте. Только у меня выходит на Out_.3 (Out_m.3).
Поставьте Out_.0 будет (Out_m.0).
Вот только все добавил, но не работает in_n.31
64373 64374 64375
c in1 по in12 выкл, а дальше нет

kondor3000
07.12.2022, 10:14
Вот только все добавил, но не работает in_n.31
c in1 по in12 выкл, а дальше нет

Дописал пост выше, читайте пока не поймёте.

В блоке Sohranenie для кнопок одна запись, для масок другая, для правильной записи. Ваша версия работать правильно не будет. in_n.31 у вас не работает и проект вы выложили уже без блока in_n

Кнопка In_n.31 у вас управляющая, записывать её не надо.
Вот, дописал управление с кнопки In_n.31, в блоке Switch_In_n удалил всё кроме самой переменной, она не будет записываться.
Теперь по In13 записываю в маску Out_m.
Всё сбрасываю Res и кнопкой In_n.31 включаю и выключаю выход Out_m.0 Скрин 64377
Выход Out_n.31 теперь остался свободный, его теперь тоже можно где то использовать.

Duvall
07.12.2022, 11:34
Дописал пост выше, читайте пока не поймёте.

В блоке Sohranenie для кнопок одна запись, для масок другая, для правильной записи. Ваша версия работать правильно не будет. in_n.31 у вас не работает и проект вы выложили уже без блока in_n

Кнопка In_n.31 у вас управляющая, записывать её не надо.
Вот, дописал управление с кнопки In_n.31, в блоке Switch_In_n удалил всё кроме самой переменной, она не будет записываться.
Теперь по In13 записываю в маску Out_m.
Всё сбрасываю Res и кнопкой In_n.31 включаю и выключаю выход Out_m.0 Скрин 64377
Выход Out_n.31 теперь остался свободный, его теперь тоже можно где то использовать.

https://drive.google.com/file/d/1dVOFYa8HcdUnvw3Bcq-S_3yCWyl-gjBp/view?usp=sharing

Сбрасывает сохранение у всех кроме in13 и не выкл in13
64383 64383

kondor3000
07.12.2022, 12:06
https://drive.google.com/file/d/1dVOFYa8HcdUnvw3Bcq-S_3yCWyl-gjBp/view?usp=sharing

Сбрасывает сохранение у всех кроме in13 и не выкл in13

Откройте мои скрины в посте #9226 и сравните со своими. Или даже сравните в своём блоке с верхними.
На входе неправильно, и выход так присваиваться не будет сразу в маску m, потому что в маску вы записываете из блока m.

Duvall
07.12.2022, 15:54
Откройте мои скрины в посте #9226 и сравните со своими. Или даже сравните в своём блоке с верхними.
На входе неправильно, и выход так присваиваться не будет сразу в маску m, потому что в маску вы записываете из блока m.

Добавил in_n, потом перестало работать in_m, удалил in_n, но и in_n не заработал(не работает сохранение и не выкл)
https://drive.google.com/file/d/1GBTLwzVIdRHUB4MVPpdDfb-xzdbX1OkC/view?usp=sharing

ZETs
07.12.2022, 16:21
Здравствуйте!
Ни разу не работал с ПЛК160 [М02], но в проекте предлагают использовать его.
Я правильно понял из мануалов что особой разницы в производительности контроллеров ПЛК110 [М02] и ПЛК160 [М02] нет?
64387
вдруг я ошибаюсь )))
Заранее спасибо.

kondor3000
07.12.2022, 16:33
Добавил in_n, потом перестало работать in_m, удалил in_n, но и in_n не заработал(не работает сохранение и не выкл)
https://drive.google.com/file/d/1GBTLwzVIdRHUB4MVPpdDfb-xzdbX1OkC/view?usp=sharing

Как обычно, даже со скринов переписать не смогли. У меня всё заработало. 64389

kondor3000
07.12.2022, 16:48
Здравствуйте!
Ни разу не работал с ПЛК160 [М02], но в проекте предлагают использовать его.
Я правильно понял из мануалов что особой разницы в производительности контроллеров ПЛК110 [М02] и ПЛК160 [М02] нет?

вдруг я ошибаюсь )))
Заранее спасибо.

В производительности разницы нет. Разница во входах и выходах, на ПЛК160 [М02] есть аналоговые входы и выходы, но меньше дискретных.
ПЛК110 [М02], в зависимости от модификации, разное кол-во дискретных входов, выходов. Аналоговых нет вообще.

Duvall
07.12.2022, 17:00
Как обычно, даже со скринов переписать не смогли. У меня всё заработало. 64389

Спасибо огромное, уже исправил,сразу и не понял в входах и выходах без m и n нужно было, да что-то сразу не заметил. Думал раз в название поменял, то будет работать.

Duvall
08.12.2022, 10:32
Как обычно, даже со скринов переписать не смогли. У меня всё заработало. 64389
Все проверил, in_n.31 не выключает in_n, и in_m выключает последний включенный, но если включить сразу несколько, то выключает все, но если включить по 1, то выключит последний добавленный

kondor3000
08.12.2022, 10:42
Все проверил, in_n.31 не выключает in_n, и in_m выключает последний включенный, но если включить сразу несколько, то выключает все, но по если включить по 1, то выключит последний добавленный

Сколько раз вам повторять, не надо было путать маски и пускать через другие.
1) in_n не выключается, а ничего, что ваш in_n.31, включен сейчас? Он и передаётся на выход. Разъедините выход в блоке n.

2) не выкл несколько in_m(выкл. последний вкл) При задании кнопка должна потом быть выключена, а вы забываете выключать Запоминается последнее состояние, после сбоса RES (всё выключено) оно и включается.

Если вы и дальше будете пускать через другие маски, вы сами в итоге запутаетесь и меня запутаете.

Duvall
08.12.2022, 10:49
Сколько раз вам повторять, не надо было путать маски и пускать через другие.
1) in_n не выключается, а ничего, что ваш in_n.31, включен сейчас? Он и передаётся на выход. Разъедините выход в блоке n.

2) не выкл несколько in_m(выкл. последний вкл) При задании кнопка должна потом быть выключена, а вы забываете выключать Запоминается последнее состояние, после сбоса RES (всё выключено) оно и включается.

Если вы и дальше будете пускать через другие маски, вы сами в итоге запутаетесь и меня запутаете.

Я имел в виду, что он не выключает in_n выходы
https://skr.sh/vHIoTefLoNM?a также попробовал, отдельно каждый выключать, на видео только после 2 добавлений выключил,
https://skr.sh/vHIhH8BJgC4?a если включить сразу 2 входа, то он и выключит 2, но если включить сначала 1, а потом 2, то он выключит последний

kondor3000
08.12.2022, 11:15
Я имел в виду, что он не выключает in_n выходы
https://skr.sh/vHIoTefLoNM?a также попробовал, отдельно каждый выключать, на видео только после 2 добавлений выключил,
https://skr.sh/vHIhH8BJgC4?a если включить сразу 2 входа, то он и выключит 2, но если включить сначала 1, а потом 2, то он выключит последний

А теперь читайте, пока не поймёте!!!


2) не выкл несколько in_m(выкл. последний вкл) При задании кнопка должна потом быть выключена, а вы забываете выключать
Запоминается последнее состояние, после сбоса RES (всё выключено) оно и включается.

.
После введения 1, вы 0 не вводите, поэтому запоминает 64. И Res не делаете. А кноки у вас не выключатели, после нажатия она сразу отпускается.
И ещё похоже вы блок m опять переписали, почему при 1 включается 64 ?

Duvall
08.12.2022, 11:26
так? https://skr.sh/vHIF8EKyC1o?a, если так, то я уже пробовал

kondor3000
08.12.2022, 11:36
так? https://skr.sh/vHIF8EKyC1o?a, если так, то я уже пробовал

И ещё похоже вы блок m опять переписали, почему при 1 включается 64 ? Если с 1 по 6 бит заведены кнопки с 13 по 18 ?

Duvall
08.12.2022, 11:39
И ещё похоже вы блок m опять переписали, почему при 1 включается 64 ? Если с 1 по 6 бит заведены кнопки с 13 по 18 ?

да переписал, тк он не в том порядке запускался 64412, ну это ни на что не влияет https://skr.sh/vHI0hmif6d1?a
они вкл так, но на выходах у них другие значения, поэтому переписал

kondor3000
08.12.2022, 12:19
да переписал, тк он не в том порядке запускался 64412, ну это ни на что не влияет https://skr.sh/vHI0hmif6d1?a
они вкл так, но на выходах у них другие значения, поэтому переписал

Если переписали, то выкладывайте, буду проверять.

Duvall
08.12.2022, 12:19
и еще хотел бы узнать in_.28 эти названия можно поменять на in_m.28, in_n.28, чтобы можно было настроить вход in_m.28 на выход out_n.28

Duvall
08.12.2022, 12:33
Если переписали, то выкладывайте, буду проверять.

https://drive.google.com/file/d/16dzQ3avmqfG-fgR6KiHHmz2xXLTuUes6/view?usp=sharing

kondor3000
08.12.2022, 13:41
https://drive.google.com/file/d/16dzQ3avmqfG-fgR6KiHHmz2xXLTuUes6/view?usp=sharing

Короче, блок m работает не правильно. Нельзя менять порядок бит в этом блоке. In.6 должен писаться в Out.6. Иначе запись будет кривая. Не забывайте, что сюда ещё кнопки с 13 по 18 заходят. Это первое.
Второе, действительно надо чуть подправить блок Sohranenie, поменять запись по выходам, а не по входам как сейчас. Тогда кнопки будут правильно записываться.

Duvall
08.12.2022, 14:03
Короче, блок m работает не правильно. Нельзя менять порядок бит в этом блоке. In.6 должен писаться в Out.6. Иначе запись будет кривая. Не забывайте, что сюда ещё кнопки с 13 по 18 заходят. Это первое.
Второе, действительно надо чуть подправить блок Sohranenie, поменять запись по выходам, а не по входам как сейчас. Тогда кнопки будут правильно записываться.
Прям вообще способа нет, так оставить, просто они уже так подсоединены, что in_m.0 выходит на out_m.7.
И по поводу разделить все, а то некоторые входы in_m могут выходить на out_n, также и c остальными.

kondor3000
08.12.2022, 15:21
Прям вообще способа нет, так оставить, просто они уже так подсоединены, что in_m.0 выходит на out_m.7.
И по поводу разделить все, а то некоторые входы in_m могут выходить на out_n, также и c остальными.

Нет способа, m.0 =1, m.6= 64, как работать будет ?
Введёте 64 (6 бит) выйдет 4096 ( запишется в 12 бит)
Я об этом вам уже 4 день толкую.

И по поводу разделить все, а то некоторые входы in_m могут выходить на out_n,

с этого надо начинать было, тут всю программу переписывать заново надо.

Duvall
08.12.2022, 15:27
Нет способа, m.0 =1, m.7= 64, как работать будет ? Введёте 64 (6 бит) выйдет 4096 ( запишется в 12 бит)

Ну так in18 идет в out_m.5, а in_m.0 уже в out_m.6, просто разные входы и выходы, или лучше вообще добавить в конфигуратор 8бит и каждый отдельно назвать 64420

Duvall
08.12.2022, 15:29
Нет способа, m.0 =1, m.6= 64, как работать будет ?
Введёте 64 (6 бит) выйдет 4096 ( запишется в 12 бит)
Я об этом вам уже 4 день толкую.

так почему, можно же для входа in15 указать выход out10, тогда почему нельзя для входа in_m.0 указать выход out_m.7
входы и выходы же работают, все нормально, или как раз из-за этого не работает запоминание, просто в любом случае порядок будет не точным, так как есть кнопки, которые сразу несколько будут вкл, с задержками и тп, много свойств, и в таком случае порядок все равно изменится рано или поздно, просто я когда добавлял контроллеры, не думал, что этот порядок так сильно влиять будет, что просто 6 входов лишних из плк добавил в 1 контроллер и там же последний 6 убрал.
просто разные значения на входах и выходах, но работает-то в правильном порядке. Нужно только чтобы сохранялись все, они сохраняются только, если их все разом добавить, а если по-одному, то только последний, с in_n и последующими только беда.

Duvall
08.12.2022, 15:48
Просто они идут до 26 64422
а остальные 6 будут кнопками для контроля, датчики и так далее, если бы я знал, что так будет добавил бы их в In13-in18, а получилось что они будут с in_m.26 по in_m.31. Остальные все по порядку идут.

kondor3000
08.12.2022, 18:09
так почему, можно же для входа in15 указать выход out10, тогда почему нельзя для входа in_m.0 указать выход out_m.7
входы и выходы же работают, все нормально, или как раз из-за этого не работает запоминание, просто в любом случае порядок будет не точным, так как есть кнопки, которые сразу несколько будут вкл, с задержками и тп, много свойств, и в таком случае порядок все равно изменится рано или поздно, просто я когда добавлял контроллеры, не думал, что этот порядок так сильно влиять будет, что просто 6 входов лишних из плк добавил в 1 контроллер и там же последний 6 убрал.
просто разные значения на входах и выходах, но работает-то в правильном порядке. Нужно только чтобы сохранялись все, они сохраняются только, если их все разом добавить, а если по-одному, то только последний, с in_n и последующими только беда.

Потому что разные способы записи, с кнопок запоминается в блоке in, а в блоке масок, биты присваиваются на выход. Сохранение идёт по входу кнопок.

С масок, биты приходят числами, записываются числами. При попытке изменить биты, запись нарушается, числа не совпадают. Сохранение с выхода блока.

Единственный вариант, записывать в промежуточные маски, маски раскладывать на биты. И уже биты менять местами, а потом собирать в маски на выход. Но делать надо очень аккуратно, типа n 28 пишем в m 28 и наоборот.

kondor3000
08.12.2022, 18:37
Короче так и сделал, добавил промежуточные маски Out_m1 и Out_n1 (глобальные переменные), в них записываются маски m и n.
Далее идут блоки Out_m_m, в них маски раскладываются на биты и там поменял Out_m1.28 на Out_n.28 и в блоке Out_n_n поменял Out_n1.28 на Out_m.28. 64429

Исправил запись битов, теперь биты можно включать например 6 бит (64), выключить. Потом 7 бит (128), выключить.
Сделать сброс Res.
И кнопкой in_n.31 управлять.
Вот исправленный проект