PDA

Просмотр полной версии : массивы array



Rs219
27.03.2026, 23:01
добрый день. сильно не ругайтесь,)
написал в 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:

Валенок
27.03.2026, 23:21
.....
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 каждое нажатие записывает время в массив

Rs219
28.03.2026, 10:56
.....
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

Валенок
28.03.2026, 15:28
Массив кошерней через VAR_IN_OUТ (на мой взгляд)
Изменябельным будет и в верхнем коде и исполнение легче

Rs219
28.03.2026, 16:07
Т. Е. Вы создали
1. функ. Блок, назвали его "zapis-masiv" - записали в него функцию
2 объявили в prg_plc этот блок
3. Привязали ко входу "выход счётчика" И к выходу объявленный массив.

??

Валенок
28.03.2026, 16:16
4. Работаете с массивом

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

Дважды щёлкнув по ФБ в дереве и открыв экземпляр, можно смотреть, что происходит в ФБ.

Rs219
28.03.2026, 17:52
Да работает.
Только в массив заносятся числа последовательно 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ом посте написано, то и шлите. Или у вас и этого нет?

Валенок
28.03.2026, 18:06
Только в массив заносятся числа последовательно 1,2,3,4,5,6
Хотелка:

...значение переменной формируется счетчиком на выходе out1 .... и поэтому нужно сохранять каждое новое значение в список?.
А что ожидается от счетчика?


А пишется вот так: 1,2,3,4,5,6
Было бы странно если бы счетчик делал не так.




Хотелось бы, что бы было именно если 6 сигналов, то записалось 6
Сигналы - синие черточки?
Было А и Б но не было C и D (2 сигнала)
Не стало А и Б, но появились C и D (2 сигнала)
Что должно записаться если было 2 и стало 2?

Пакуйте в маску и её на вход того же блока

Rs219
28.03.2026, 18:09
Хотелка:

А что ожидается от счетчика?


Было бы странно если бы счетчик делал не так.




Сигналы - синие черточки?
Было А и Б но не было C и D (2 сигнала)
Не стало А и Б, но появились C и D (2 сигнала)
Что должно записаться если было 2 и стало 2?

Пакуйте в маску и её на вход того же блока

Прошу прощения, как в маску запаковать? Что такое маска?

МихаилГл
28.03.2026, 18:38
Да вам много чего насоветуют... Только непонятно что вам нужно. Хотите записывать, например, сколько быстрых нажатий кнопки произвели, с интервалом между нажатиями меньше 0.5 секунды... Это одна задача.
Но для неё надо написать соответствующий код, а складывать в массив так как выше или своё придумать.

А сто за задача у вас?

НИПАНЯТНА)

1exan
28.03.2026, 18:46
Прошу прощения, как в маску запаковать? Что такое маска?

Эх, тяжело учить цыхры, когда ещё не выучил бухвы )

Rs219
28.03.2026, 18:47
Да вам много чего насоветуют... Только непонятно что вам нужно. Хотите записывать, например, сколько быстрых нажатий кнопки произвели, с интервалом между нажатиями меньше 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

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

Rs219
28.03.2026, 19:01
Так я вам же пример даже дал, там идёт подсчёт импульсов и когда пауза запись.
Всё написал, только вы не читаете и не смотрите.

Да, только у меня получилось, что подсчет идет всегда.

Rs219
28.03.2026, 19:03
Всё, запускаете эмуляцию и Старт, смотрите так записывается массив при изменении счётчика.

Масив можно в ФБ поместить в VAR_IN_OUT 88643
тогда он будет не только записываться, но и читаться.
а значит поместив его в RETAIN (написать самому) в главной программе, он будет сохраняться при выключении питания
VAR RETAIN
mas1: ARRAY[1..100] OF WORD ;
END_VAR

Дважды щёлкнув по ФБ в дереве и открыв экземпляр, можно смотреть, что происходит в ФБ.

Я помещал в в var in out и retain, в масив заносятся все значения, пока считает счётчик, а не последнее.

1exan
28.03.2026, 19:06
Я помещал в в 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 тут не прокатит, я так думаю)

Rs219
28.03.2026, 19:33
Как я могу применить, объявить значение ET таймера TON из основной программы в функ. блоке?

kondor3000
28.03.2026, 19:34
Есть один нюанс. А если нужно зафиксировать тоже число, то var<>_var тут не прокатит, я так думаю)

Это у Валенка <>, у меня другой блок подсчёта и записи

kondor3000
28.03.2026, 19:36
Как я могу применить, объявить значение ET таймера TON из основной программы в функ. блоке?

Объявляете ET: TIME; , добавляете выход ET на таймер и смотрите в работе.

Rs219
28.03.2026, 20:47
8864688647

Вот что сделал.
Теперь записывает то число, но только в первую строку, а последующие не пишет.

Валенок
28.03.2026, 20:53
Есть один нюанс. А если нужно зафиксировать тоже число, то var<>_var тут не прокатит, я так думаю)
<> предложено четко на первичную хотелку.
А для нюансов делается:


var_input
...
nuance: bool;
------
if var<>_var or nuance then
..
Ну и всего лишь сформулировать ньанс.
Начиналось про изменение счетчиков а потом внезапно стало неясно что вообще нужно.

--
У kondor3000 видимо есть какая-то предыстория к теме.

Rs219
28.03.2026, 20:58
Чтобы считались общее количество группы сигналов.

1,2,3,4,5 сигнал, чтобы записать в таблицу 5
1, 2,3,4 сигнал - записать в таблицу 4
1, 2,3,4,5 сигнал, чтобы записать в таблицу 5

А неправильно формулирую вопросы, потому что неделю как изучаю codesys и программирование. Прошу прощения)

Валенок
28.03.2026, 21:16
Что такое - сигнал? группа сигналов? 1,2,3,4,5?
Из пред-темы кол-во коротких нажатий кнопки пишите в массив?

Причем тут кодесис и програмирование? Вы что хотите сделать словами четко и внятно сформулируйте

Rs219
28.03.2026, 21:54
Есть счётчик - он считает сигналы, сигналы остановились, счётчик насчитал 6 сигналов и записал в таблице 6 .
Сигналы продолжились, счётчик считает сначала, снова сигналы прекратились, счётчик насчитал 5 сигналов и записал в таблице 5
И так дальше.
История срабатывания сигнала.

kondor3000
28.03.2026, 22:00
Есть счётчик - он считает сигналы, сигналы остановились, счётчик насчитал 6 сигналов и записал в таблице 6 .
Сигналы продолжились, счётчик считает сначала, снова сигналы прекратились, счётчик насчитал 5 сигналов и записал в таблице 5
И так дальше.
История срабатывания сигнала.

Что за таблица 6 и таблица 5?
И сколько таблиц вы хотите?
И при чём тут массивы?

Валенок
28.03.2026, 22:05
Есть счётчик - он считает сигналы, сигналы остановились,.
Как видите определение "сигналы остановились"?

Rs219
28.03.2026, 22:05
Одна таблица
В эту таблицу, массив записывать сколько насчитал счётчик сигналов одним числом до остановки счётчика.
Сигнал идет 0.5 сек, потом 0.5 сек сигнала нет - это один сигнал.
Началась серия сигналов - 5 сигналов подряд, , счётчик их посчитал и записал в массив.
Прошло какое то время, снова серия сигналов, счётчик их снова посчитал и записал в этот же массив.

Rs219
28.03.2026, 22:11
Перерыв между в сигналами 3 секунды

kondor3000
28.03.2026, 22:11
Одна таблица
В эту таблицу, массив записывать сколько насчитал счётчик сигналов одним числом до остановки счётчика.
Сигнал идет 0.5 сек, потом 0.5 сек сигнала нет - это один сигнал.
Началась серия сигналов - 5 сигналов подряд, , счётчик их посчитал и записал в массив.
Прошло какое то время, снова серия сигналов, счётчик их снова посчитал и записал в этот же массив.

Ещё раз у меня в примере на ST, до 10 быстрых нажатий (можно изменить) и до 10 записей в массив (можно изменить).
Запись по паузе 2 сек.

Rs219
28.03.2026, 22:11
Как видите определение "сигналы остановились"?

Перерыв между сигналами в 3секунды и больше

Rs219
28.03.2026, 22:13
Ещё раз у меня в примере на ST, до 10 быстрых нажатий и до 100 записей в массив. Запись по паузе 2 сек.

Он у меня считает подряд 1 , 2,3,4,5.
Или я не тот пример смотрю?
Можно ссылку на пример?)

Валенок
28.03.2026, 22:15
Сигнал идет 0.5 сек, потом 0.5 сек сигнала нет - это один сигнал.
Еще более точно можно?
Сигнал идет 0.5 сек, но потом 0.2 сек сигнала нет и внезапно сигнал есть. Это что?
Сигнал идет 0.2 сек, но потом 0.5 сек сигнала нет. Это что?

Причем тут время?

Rs219
28.03.2026, 22:18
Еще более точно можно?
Сигнал идет 0.5 сек, но потом 0.2 сек сигнала нет и внезапно сигнал есть. Это что?

к примеру лампочка 5 сек светится и 5 сек не светится - мигает, как аварийный индикатор

Валенок
28.03.2026, 22:21
к примеру лампочка 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

Rs219
28.03.2026, 22:38
Вот мой пример, до 10 быстрых нажатий на In1 и до 10 записей в Массив2 (можно изменить) на ST.
Запись по паузе 2 секунды. В примере ничего не меняйте.
https://owen.ru/forum/showthread.php?t=42616&p=481683&viewfull=1#post481683

Счет получился. Благодарю за помощь

Валенок
28.03.2026, 22:40
Вообщем чел ищет примеры, но внятно объяснить с чем работает не может. Поэтому и не втыкается.

Rs219
28.03.2026, 22:53
Вообщем чел ищет примеры, но внятно объяснить с чем работает не может. Поэтому и не втыкается.

я только учусь

Валенок
28.03.2026, 23:22
я только учусь
так я вам и предложил - описать как ведется счет на вашей красной лампочке из п#40

kondor3000
28.03.2026, 23:37
Счет получился. Благодарю за помощь

Ну наконец то)))
Вот ещё версия, надо добавить биб-ку Util.Lib 88649
100 сохранений, до 100 импульсов, считает сам пока включён In1, когда выключаете, по паузе 2 сек запись в массив.

Rs219
28.03.2026, 23:46
Ну наконец то)))
Вот ещё версия, надо добавить биб-ку Util.Lib
100 сохранений, до 100 импульсов считает пока включён In1, когда выключаете, по паузе 2 сек запись в массив.

ОК !!!!!!!!!!!!!!!!!!!!!!!!!

МихаилГл
29.03.2026, 05:13
ОК !!!!!!!!!!!!!!!!!!!!!!!!!

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

У нас на предзащите помню один профессор так защищающегося материл, что уши краснели, а после вышел и сказал: это вы ещё на защиту не вышли, вам тут помочь пытаются, терпите, слушайте что вам говорят и не обижайтесь. Это я ещё мягко тут выражался)

Валенок
29.03.2026, 09:48
Если про "издеватся" - это про меня, то отнюдь.
Из чела удалось вытянуть п#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
я только учусь
а причём здесь массивы?