PDA

Просмотр полной версии : Линия весового дозирования. Как обновить переменную в режиме эмуляции?



Salvage
01.11.2021, 13:44
Здравствуйте, нужна помощь: я делаю Линию весового дозирования сыпучих материалов. И у меня проблема с весами, я не знаю как обновлять переменную. То есть есть вес бака (А1) и дозатор (А2). Если в баке 5000 кг (А1) и с помощью дозатора я высыпал с бака 1000 кг (А2) смеси. И если я хочу второй, третий, четвертый раз использовать дозатор, как мне обновить переменную А1?
Всё это делаю в режиме Codesys Control Win V3 ( можно сказать в режиме эмуляции). А программа CFC

Евгений Кислов
01.11.2021, 13:53
Добрый день.


как мне обновить переменную А1?


Если вы нигде не записываете ее в программе - то это можно сделать в режиме онлайн мониторинга.
В верхней части каждого POU отображается таблица его переменных. В ней есть столбце Подготовленное значения.
Введите там значения для ваших переменных и используйте команду Отладка - Записать значения (или нажмите Ctrl+F7).
Таким образом, вы однократно запишете новые значения в ваши переменные.

57780

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

Salvage
01.11.2021, 14:22
Это лишь один раз, и то вручную. Но мне это надо автоматически, не вручную перезаписывать значение. Если смотреть по картинке, то значение а3 должно перезаписать значение а1
57782

Евгений Кислов
01.11.2021, 14:25
Это лишь один раз

Это не так.


Но мне это надо автоматически
57782

Что значит "автоматически"? За счет чего формируются новые значения для A1?

Опишите подробно, какой алгоритм вы хотите реализовать.

Sergey666
01.11.2021, 15:30
Здравствуйте, нужна помощь: я делаю Линию весового дозирования сыпучих материалов. И у меня проблема с весами, я не знаю как обновлять переменную. То есть есть вес бака (А1) и дозатор (А2). Если в баке 5000 кг (А1) и с помощью дозатора я высыпал с бака 1000 кг (А2) смеси. И если я хочу второй, третий, четвертый раз использовать дозатор, как мне обновить переменную А1?

Слишком много не нужной информации. Бак- расходный? Если да, то вес его не важен для дозирования, важно то, что упало и лежит в дозаторе.
Что конкретно хотите? Обнулить вес в дозаторе для загрузки очередной порции чего-то? Для этого вводится переменная "временная тара" и при условии "Если что-то там случилося, то Temp_tara:=Ves_A2; и тогда Ves_А2:=Ves_A2-Temp_tara; , потом временная тара обнуляется и получаем на выходе "полный вес дозатора" и не забываем контролировать при загрузке Переполнение(НПД дозатора).


Всё это делаю в режиме Codesys Control Win V3 ( можно сказать в режиме эмуляции). А программа CFC
Это не важно, математика везде одинаковая.

keysansa
01.11.2021, 15:33
По окончанию загрузки дозатора формируете строб, например IsBatchingDone.
Далее, берете массу дозатора на момент этого строба (CurrentBatcherMass) и изменяете массу бункера (CurrentBunkerMass)
IF IsBatchingDone THEN
CurrentBunkerMass:= CurrentBunkerMass - CurrentBatcherMass;
END_IF

ЗЫ. У вас возникнут проблемы со сходимостью расхода/прихода бункера, но это уже другая история )))

keysansa
01.11.2021, 15:36
Слишком много не нужной информации. Бак- расходный? Если да, то вес его не важен для дозирования, важно то, что упало и лежит в дозаторе.
Бак всегда приходно/расходный. Иначе он достаточно быстро станет бестолковым.



Что конкретно хотите? Обнулить вес в дозаторе для загрузки очередной порции чего-то?

ТС же переменные указал. A1, A2.

Salvage
01.11.2021, 15:39
Изначальный вес смеси в баке допустим 10 000кг. С помощью дозатор я высыпаю смесь из бака 1 000кг, в баке после этого остается 9 000. Потом я второй раз высыпаю смесь с помощью дозатора 3 000 кг. ( 9 000кг - 3 000кг). И в этом же баке теперь остается 6 000кг. и т.д. и так я могу высыпать из этого бака 30 раз, а может и больше. Мне нужно сделать цикл, так чтобы я видел изменённый вес после дозирование, после первого раз, после второго раз и т.д.

keysansa
01.11.2021, 16:05
Изначальный вес смеси в баке допустим 10 000кг. С помощью дозатор я высыпаю смесь из бака 1 000кг, в баке после этого остается 9 000. Потом я второй раз высыпаю смесь с помощью дозатора 3 000 кг. ( 9 000кг - 3 000кг). И в этом же баке теперь остается 6 000кг. и т.д. и так я могу высыпать из этого бака 30 раз, а может и больше. Мне нужно сделать цикл, так чтобы я видел изменённый вес после дозирование, после первого раз, после второго раз и т.д.

Цикл я вам уже написал. Определитесь, что вы будете делать, если после очередного такта в бункере останется минус )

Salvage
01.11.2021, 17:02
Это код не работает - он багается
IF IsBatchingDone THEN
CurrentBunkerMass:= CurrentBunkerMass - CurrentBatcherMass;
END_IF
57783

keysansa
01.11.2021, 17:09
Это код не работает - он багается
IF IsBatchingDone THEN
CurrentBunkerMass:= CurrentBunkerMass - CurrentBatcherMass;
END_IF

Оооо...
Если вы не можете повторить данный код, то вам нужно научится читать. Я же писал, IsBatchingDone - это строб. Вы использовали функцию строба к сигналу? )

ЗЫ. Фиг с ним стробом, вы из -6000 отгружаете, вас ничего не напрягает? ))))

Salvage
01.11.2021, 18:38
Оооо...
Если вы не можете повторить данный код, то вам нужно научится читать. Я же писал, IsBatchingDone - это строб. Вы использовали функцию строба к сигналу? )

ЗЫ. Фиг с ним стробом, вы из -6000 отгружаете, вас ничего не напрягает? ))))

Он циклично начинает отнимать значение( баг). Но это ладно уже не важно, я уже нашел решение. 1 способ на картинке, второй способ можно через счетчик.57786

keysansa
02.11.2021, 23:06
Он циклично начинает отнимать значение( баг).
Вы, чутка. немножко, совсем чуть-чуть, читать не умеете. Слово "строб" я два раза написал, но вы не увидели... Беда.