Просмотр полной версии : массивы array
добрый день. сильно не ругайтесь,)
написал в cfc код массива
mas1: ARRAY[1..100] OF WORD;
расскажите как его заполнить значением внутренней переменной (к примеру out1)?
если значение переменной формируется счетчиком на выходе out1 , и постоянно меняется , и поэтому нужно сохранять каждое новое значение в список?.
большое спасибо.
в разделе PLC_PRG (PRG) написал
PROGRAM PLC_PRG
VAR
out1: word;
mas1: ARRAY[1..100] OF WORD;
end_var
что писать дальше? :rolleyes:
.....
init: bool;
out1_: word;
i:word;
end_var
---------------------------------------
if init and out1 <> out1_ then
i := (i mod 100) + 1;
mas1[i] := out1;
end_if
init := true;
out1_ := out1;
kondor3000
28.03.2026, 10:02
В соседней теме выложил ФБ Sohran для сохранения переменной в массиве по кругу, 88639
самое старое значение удаляется, новое пишется,
глобальняя константа N=10, определяет границу массива, можно изменить на 100. Первое значение вседа самое новое. Запись и обработка массива в цикле FOR.
в примере идёт подсчёт кол-ва нажатий на кнопку и запись в массив, но можно сохранять что угодно, например время или расход.
https://owen.ru/forum/showthread.php?t=42616&p=481683&viewfull=1#post481683
На скрине по нажатию кнопки In1 каждое нажатие записывает время в массив
.....
init: bool;
out1_: word;
i:word;
end_var
---------------------------------------
if init and out1 <> out1_ then
i := (i mod 100) + 1;
mas1[i] := out1;
end_if
init := true;
out1_ := out1;
Добрый день
Выдает ошибку
88640
kondor3000
28.03.2026, 11:03
Добрый день
Выдает ошибку
Ещё бы, вы текст программы на ST, поместили в окно объявления переменных. Вот скрин как надо 88642
Смотрите мой пример, как вызывать блоки ФБ на ST, в основной программе на CFC.
Надо поставить таргет старого ПЛК110-60M
Массив кошерней через VAR_IN_OUТ (на мой взгляд)
Изменябельным будет и в верхнем коде и исполнение легче
Т. Е. Вы создали
1. функ. Блок, назвали его "zapis-masiv" - записали в него функцию
2 объявили в prg_plc этот блок
3. Привязали ко входу "выход счётчика" И к выходу объявленный массив.
??
kondor3000
28.03.2026, 16:55
Т. Е. Вы создали
1. функ. Блок, назвали его "zapis-masiv" - записали в него функцию
2 объявили в prg_plc этот блок
3. Привязали ко входу "выход счётчика" И к выходу объявленный массив.
??
Всё, запускаете эмуляцию и Старт, смотрите так записывается массив при изменении счётчика.
Масив можно в ФБ поместить в VAR_IN_OUT 88643
тогда он будет не только записываться, но и читаться.
а значит поместив его в RETAIN (написать самому) в главной программе, он будет сохраняться при выключении питания
VAR RETAIN
mas1: ARRAY[1..100] OF WORD ;
END_VAR
Дважды щёлкнув по ФБ в дереве и открыв экземпляр, можно смотреть, что происходит в ФБ.
Да работает.
Только в массив заносятся числа последовательно 1,2,3,4,5,6
Хотелось бы, что бы было именно если 6 сигналов, то записалось 6
А пишется вот так: 1,2,3,4,5,6
МихаилГл
28.03.2026, 17:59
Да работает.
Только в массив заносятся числа последовательно 1,2,3,4,5,6
Хотелось бы, что бы было именно если 6 сигналов, то записалось 6
А пишется вот так: 1,2,3,4,5,6
Стоп, вам дали механизм, а какое число туда записывать вы сами должны определиться. Как у вас в 1ом посте написано, то и шлите. Или у вас и этого нет?
Только в массив заносятся числа последовательно 1,2,3,4,5,6
Хотелка:
...значение переменной формируется счетчиком на выходе out1 .... и поэтому нужно сохранять каждое новое значение в список?.
А что ожидается от счетчика?
А пишется вот так: 1,2,3,4,5,6
Было бы странно если бы счетчик делал не так.
Хотелось бы, что бы было именно если 6 сигналов, то записалось 6
Сигналы - синие черточки?
Было А и Б но не было C и D (2 сигнала)
Не стало А и Б, но появились C и D (2 сигнала)
Что должно записаться если было 2 и стало 2?
Пакуйте в маску и её на вход того же блока
Хотелка:
А что ожидается от счетчика?
Было бы странно если бы счетчик делал не так.
Сигналы - синие черточки?
Было А и Б но не было C и D (2 сигнала)
Не стало А и Б, но появились C и D (2 сигнала)
Что должно записаться если было 2 и стало 2?
Пакуйте в маску и её на вход того же блока
Прошу прощения, как в маску запаковать? Что такое маска?
МихаилГл
28.03.2026, 18:38
Да вам много чего насоветуют... Только непонятно что вам нужно. Хотите записывать, например, сколько быстрых нажатий кнопки произвели, с интервалом между нажатиями меньше 0.5 секунды... Это одна задача.
Но для неё надо написать соответствующий код, а складывать в массив так как выше или своё придумать.
А сто за задача у вас?
НИПАНЯТНА)
Прошу прощения, как в маску запаковать? Что такое маска?
Эх, тяжело учить цыхры, когда ещё не выучил бухвы )
Да вам много чего насоветуют... Только непонятно что вам нужно. Хотите записывать, например, сколько быстрых нажатий кнопки произвели, с интервалом между нажатиями меньше 0.5 секунды... Это одна задача.
Но для неё надо написать соответствующий код, а складывать в массив так как выше или своё придумать.
А сто за задача у вас?
НИПАНЯТНА)
88644
добрый вечер
записать в таблице не 1 2 3 4 5 6 , а 6
или 1 2 3 , а 3
kondor3000
28.03.2026, 19:00
88644
добрый вечер
записать в таблице не 1 2 3 4 5 6 , а 6
или 1 2 3 , а 3
Так я вам же пример даже дал, там идёт подсчёт быстрых нажатий на кнопку (импульсов со счётчика) и когда пауза запись.
Всё написал, только вы не читаете и не смотрите.
Так я вам же пример даже дал, там идёт подсчёт импульсов и когда пауза запись.
Всё написал, только вы не читаете и не смотрите.
Да, только у меня получилось, что подсчет идет всегда.
Всё, запускаете эмуляцию и Старт, смотрите так записывается массив при изменении счётчика.
Масив можно в ФБ поместить в VAR_IN_OUT 88643
тогда он будет не только записываться, но и читаться.
а значит поместив его в RETAIN (написать самому) в главной программе, он будет сохраняться при выключении питания
VAR RETAIN
mas1: ARRAY[1..100] OF WORD ;
END_VAR
Дважды щёлкнув по ФБ в дереве и открыв экземпляр, можно смотреть, что происходит в ФБ.
Я помещал в в var in out и retain, в масив заносятся все значения, пока считает счётчик, а не последнее.
Я помещал в в var in out и retain, в масив заносятся все значения, пока считает счётчик, а не последнее.
Как вы определяете, что вот это значение последнее?
kondor3000
28.03.2026, 19:15
Да, только у меня получилось, что подсчет идет всегда.
Вы пример откройте и проверьте, там на CFC важна последовательность в программе, 88645
если перенести не думая, конечно работать не будет. Точнее на ST будет работать, если перенести оба ФБ на ST.
На скрине нажал In1 4 и 2 раза, записалось 4 и 2, в обоих массивах.
https://owen.ru/forum/showthread.php?t=42616&p=481683&viewfull=1#post481683
МихаилГл
28.03.2026, 19:20
Вы пример откройте и проверьте, там важна последовательность в программе, 88645
если перенести не думая, конечно работать не будет.
На скрине нажал 4 и 2 раза, залисалось 4 и 2
Есть один нюанс. А если нужно зафиксировать тоже число, то var<>_var тут не прокатит, я так думаю)
Как я могу применить, объявить значение ET таймера TON из основной программы в функ. блоке?
kondor3000
28.03.2026, 19:34
Есть один нюанс. А если нужно зафиксировать тоже число, то var<>_var тут не прокатит, я так думаю)
Это у Валенка <>, у меня другой блок подсчёта и записи
kondor3000
28.03.2026, 19:36
Как я могу применить, объявить значение ET таймера TON из основной программы в функ. блоке?
Объявляете ET: TIME; , добавляете выход ET на таймер и смотрите в работе.
8864688647
Вот что сделал.
Теперь записывает то число, но только в первую строку, а последующие не пишет.
Есть один нюанс. А если нужно зафиксировать тоже число, то var<>_var тут не прокатит, я так думаю)
<> предложено четко на первичную хотелку.
А для нюансов делается:
var_input
...
nuance: bool;
------
if var<>_var or nuance then
..
Ну и всего лишь сформулировать ньанс.
Начиналось про изменение счетчиков а потом внезапно стало неясно что вообще нужно.
--
У kondor3000 видимо есть какая-то предыстория к теме.
Чтобы считались общее количество группы сигналов.
1,2,3,4,5 сигнал, чтобы записать в таблицу 5
1, 2,3,4 сигнал - записать в таблицу 4
1, 2,3,4,5 сигнал, чтобы записать в таблицу 5
А неправильно формулирую вопросы, потому что неделю как изучаю codesys и программирование. Прошу прощения)
Что такое - сигнал? группа сигналов? 1,2,3,4,5?
Из пред-темы кол-во коротких нажатий кнопки пишите в массив?
Причем тут кодесис и програмирование? Вы что хотите сделать словами четко и внятно сформулируйте
Есть счётчик - он считает сигналы, сигналы остановились, счётчик насчитал 6 сигналов и записал в таблице 6 .
Сигналы продолжились, счётчик считает сначала, снова сигналы прекратились, счётчик насчитал 5 сигналов и записал в таблице 5
И так дальше.
История срабатывания сигнала.
kondor3000
28.03.2026, 22:00
Есть счётчик - он считает сигналы, сигналы остановились, счётчик насчитал 6 сигналов и записал в таблице 6 .
Сигналы продолжились, счётчик считает сначала, снова сигналы прекратились, счётчик насчитал 5 сигналов и записал в таблице 5
И так дальше.
История срабатывания сигнала.
Что за таблица 6 и таблица 5?
И сколько таблиц вы хотите?
И при чём тут массивы?
Есть счётчик - он считает сигналы, сигналы остановились,.
Как видите определение "сигналы остановились"?
Одна таблица
В эту таблицу, массив записывать сколько насчитал счётчик сигналов одним числом до остановки счётчика.
Сигнал идет 0.5 сек, потом 0.5 сек сигнала нет - это один сигнал.
Началась серия сигналов - 5 сигналов подряд, , счётчик их посчитал и записал в массив.
Прошло какое то время, снова серия сигналов, счётчик их снова посчитал и записал в этот же массив.
Перерыв между в сигналами 3 секунды
kondor3000
28.03.2026, 22:11
Одна таблица
В эту таблицу, массив записывать сколько насчитал счётчик сигналов одним числом до остановки счётчика.
Сигнал идет 0.5 сек, потом 0.5 сек сигнала нет - это один сигнал.
Началась серия сигналов - 5 сигналов подряд, , счётчик их посчитал и записал в массив.
Прошло какое то время, снова серия сигналов, счётчик их снова посчитал и записал в этот же массив.
Ещё раз у меня в примере на ST, до 10 быстрых нажатий (можно изменить) и до 10 записей в массив (можно изменить).
Запись по паузе 2 сек.
Как видите определение "сигналы остановились"?
Перерыв между сигналами в 3секунды и больше
Ещё раз у меня в примере на ST, до 10 быстрых нажатий и до 100 записей в массив. Запись по паузе 2 сек.
Он у меня считает подряд 1 , 2,3,4,5.
Или я не тот пример смотрю?
Можно ссылку на пример?)
Сигнал идет 0.5 сек, потом 0.5 сек сигнала нет - это один сигнал.
Еще более точно можно?
Сигнал идет 0.5 сек, но потом 0.2 сек сигнала нет и внезапно сигнал есть. Это что?
Сигнал идет 0.2 сек, но потом 0.5 сек сигнала нет. Это что?
Причем тут время?
Еще более точно можно?
Сигнал идет 0.5 сек, но потом 0.2 сек сигнала нет и внезапно сигнал есть. Это что?
к примеру лампочка 5 сек светится и 5 сек не светится - мигает, как аварийный индикатор
к примеру лампочка 5 сек светится и 5 сек не светится - мигает, как аварийный индикатор
Ну мигает - и что? Как считаете кол-во миганий?
kondor3000
28.03.2026, 22:21
Он у меня считает подряд 1 , 2,3,4,5.
Или я не тот пример смотрю?
Можно ссылку на пример?)
Вот мой пример, до 10 быстрых нажатий на In1 и до 10 записей в Массив2 (можно изменить) на ST.
Запись по паузе 2 секунды. В примере ничего не меняйте.
https://owen.ru/forum/showthread.php?t=42616&p=481683&viewfull=1#post481683
Вот мой пример, до 10 быстрых нажатий на In1 и до 10 записей в Массив2 (можно изменить) на ST.
Запись по паузе 2 секунды. В примере ничего не меняйте.
https://owen.ru/forum/showthread.php?t=42616&p=481683&viewfull=1#post481683
Счет получился. Благодарю за помощь
Вообщем чел ищет примеры, но внятно объяснить с чем работает не может. Поэтому и не втыкается.
Вообщем чел ищет примеры, но внятно объяснить с чем работает не может. Поэтому и не втыкается.
я только учусь
я только учусь
так я вам и предложил - описать как ведется счет на вашей красной лампочке из п#40
kondor3000
28.03.2026, 23:37
Счет получился. Благодарю за помощь
Ну наконец то)))
Вот ещё версия, надо добавить биб-ку Util.Lib 88649
100 сохранений, до 100 импульсов, считает сам пока включён In1, когда выключаете, по паузе 2 сек запись в массив.
Ну наконец то)))
Вот ещё версия, надо добавить биб-ку Util.Lib
100 сохранений, до 100 импульсов считает пока включён In1, когда выключаете, по паузе 2 сек запись в массив.
ОК !!!!!!!!!!!!!!!!!!!!!!!!!
МихаилГл
29.03.2026, 05:13
ОК !!!!!!!!!!!!!!!!!!!!!!!!!
Это хорошо, что вы сразу предупредили, что новичек. Люди сквозь маты своего внутреннего голоса хоть и высказывали некоторое недовольство, но пытались помочь. Не думайте, что все тут злые и любят поиздеваться.
У нас на предзащите помню один профессор так защищающегося материл, что уши краснели, а после вышел и сказал: это вы ещё на защиту не вышли, вам тут помочь пытаются, терпите, слушайте что вам говорят и не обижайтесь. Это я ещё мягко тут выражался)
Если про "издеватся" - это про меня, то отнюдь.
Из чела удалось вытянуть п#30. Если убрать там лишнее и немного определится с понятиями, то это и есть готовая рабочая программа. Которую напишет он сам и осознанно. Дальше только перевод типа "если" на "if"
МихаилГл
29.03.2026, 09:58
Если про "издеватся" - это про меня, то отнюдь.
Из чела удалось вытянуть п#30. Если убрать там лишнее и немного определится с понятиями, то это и есть готовая рабочая программа. Которую напишет он сам и осознанно. Дальше только перевод типа "если" на "if"
Я не имел ввиду вас. Просто обобщил и расшифровал. А то ТС подумает что тут какой то неправильный форум. Всё форумы такие, а есть и похлеще.
In_Da_Cher_A
29.03.2026, 15:08
И при чём тут массивы?чота прям ржу
In_Da_Cher_A
29.03.2026, 15:10
я только учусь
а причём здесь массивы?
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot