Вход

Просмотр полной версии : модуль "Счетчик" ПЛК



Евгений Пашигоров
09.11.2011, 10:50
В описании модуля "счетчик" ПЛК1хх сказано, что счетчик обнуляется
каждый цикл ПЛК.
А в моей программе несколько задач (добавленных через task manager),
по циклу какой задачи обнуляется счетчик?

lara197a
09.11.2011, 12:53
По циклу ПЛК. Добавьте модуль "статистик" и увидите время цикла

Евгений Пашигоров
09.11.2011, 13:06
По циклу ПЛК. Добавьте модуль "статистик" и увидите время цикла
Чтобы не потерять значение счетчика, его надо прочитать в какой-то задаче.
Если у нас одна задача (PLC_PRG), то ясно, в какой.
Но у меня несколько задач.
Если я буду читать значение в одной задаче, а сбрасываться он будет по другой,
или вообще по какому-то "своему" общему циклу, то получу неверные данные.

lara197a
09.11.2011, 13:12
копируйте в глобальную переменную

Евгений Пашигоров
09.11.2011, 13:20
копируйте в глобальную переменную
Честно говоря, не понимаю, что вы советуете.
При чем здесь глобальные/локальные?

lara197a
09.11.2011, 15:45
Суммируйте в PLC_PRG, для каждой подпрограммы отдельно значения из счетчика. При вызове определенной подпрограммы, считывайте и обнуляйте значение или как там у Вас задумано, не знаю. Значения в PLC_PRG объявите глобальными, для доступа к ним из подпрограмм.

Евгений Пашигоров
10.11.2011, 07:41
Суммируйте в PLC_PRG, для каждой подпрограммы отдельно значения из счетчика. При вызове определенной подпрограммы, считывайте и обнуляйте значение или как там у Вас задумано, не знаю. Значения в PLC_PRG объявите глобальными, для доступа к ним из подпрограмм.

Вы вообще знаете, как работает модуль "счетчик"? Он считает импульсы за цикл PLC_PRG, а потом обнуляется. Обнуляь его не надо.
А у меня нет PLC_PRG. Есть три разных задачи, запускаются через task manager.

lara197a
10.11.2011, 08:52
Я так-то доходчиво написал. Что там непонятного?

Евгений Пашигоров
10.11.2011, 08:57
Я так-то доходчиво написал. Что там непонятного?
Конечно доходчиво. "Суммируйте в PLC_PRG"!

НЕТ В МОЕМ ПРОЕКТЕ ТАКОЙ ПРОГРАММЫ - PLC_PRG.

capzap
10.11.2011, 09:09
Глобальные переменные видны в любом POU и совсем не обязательно присутствие PLC_PRG, вот на что Вы должны были обратить внимание, а не на архитектуру программы другого пользователя. Не важно через какие периоды крутятся Ваши квазипараллельные проги, в конфигураторе минимальное время цикла разве от этого пропадает?

lara197a
10.11.2011, 09:23
Если у Вас какая-то непереносимость PLC_PRG, заведите любую подпрограмму, которую вызывайте раз в цикл. В ней копируйте значения из счетчика и суммируйте скопированные значения. После вызова Вашего ФБ, в котором используете значения счетчика, считывайте накопленное значение.
С PLC_PRG проще, её добавить легко, а организовывать циклический вызов не нужно. Все уже организовано.
Желаю успехов.

Евгений Пашигоров
10.11.2011, 09:24
Глобальные переменные видны в любом POU и совсем не обязательно присутствие PLC_PRG, вот на что Вы должны были обратить внимание, а не на архитектуру программы другого пользователя. Не важно через какие периоды крутятся Ваши квазипараллельные проги, в конфигураторе минимальное время цикла разве от этого пропадает?

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

Читаем инструкцию по эксплуатации ПЛК110:
------ инструкция -----------
7.3.2.1 Fast Counter (Высокочастотный Счетчик)
Счетчик считает количество импульсов, пришедших на быстрый дискретный
вход за один цикл ПЛК. По завершению каждого цикла ПЛК значение в счетчике об-
нуляется. Подсчет импульсов осуществляется по переднему (возрастающему)
фронту импульса. Таким образом, для использования и обработки значения данного
канала, необходимо считывать его каждый раз в начале цикла пользовательской
программы. Например, ввести в программу дополнительную переменную, и в начале
цикла передавать в эту переменную значение переменной, привязанной к счетчику.
------- конец цитаты --------

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

Филоненко Владислав
10.11.2011, 09:35
Значения счетчика в случае сложной системы задач, в т.ч. и по событиям следует считывать в отдельной задаче, которая имеет наивысший приоритет и вызывается с периодом, заданным в настройках цикла ПЛК. В неё не надо добавлять никаких доп. обработок, кроме работы со счетчиками/тригерами/энкодерами ПЛК

lara197a
10.11.2011, 09:37
см. первую страницу

По циклу ПЛК. Добавьте модуль "статистик" и увидите время цикла

Евгений Пашигоров
10.11.2011, 09:57
Значения счетчика в случае сложной системы задач, в т.ч. и по событиям следует считывать в отдельной задаче, которая имеет наивысший приоритет и вызывается с периодом, заданным в настройках цикла ПЛК. В неё не надо добавлять никаких доп. обработок, кроме работы со счетчиками/тригерами/энкодерами ПЛК
Спасибо.
Значит, мне надо добавить еще одну задачу специально для счетчиков, и с
периодичностью вызова = минимальному времени в конфигурации ПЛК?

Сразу еще вопрос: в настройках цикла - два времени, минимальное
и максимальное. Максимальное я понимаю - если превысится, сработает
сторожевой таймер. А минимальное зачем? Обычно, чем быстрее, тем лучше.

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

Николаев Андрей
10.11.2011, 10:49
Кто сказал, что чем быстрее, тем лучше??? Знаю говорят - лучшее враг хорошего...
Минимальное время - чтобы не грузить процессор "не быстрыми, но ресурсоемкими задачами". Например - ну не надо Вам задачу с ПИД и обработкой датчиков температуры вызывать чаще, чем раз в 200-500 мс...

kazhenek
05.02.2018, 13:36
Если у Вас какая-то непереносимость PLC_PRG, заведите любую подпрограмму, которую вызывайте раз в цикл. В ней копируйте значения из счетчика и суммируйте скопированные значения. После вызова Вашего ФБ, в котором используете значения счетчика, считывайте накопленное значение.
С PLC_PRG проще, её добавить легко, а организовывать циклический вызов не нужно. Все уже организовано.
Желаю успехов.

Спасибо. помогло. А как завести подпрограмму, которую вызвать раз в цикл? И Странно почему то же саммое выражение (сумма) не работает в FB у меня.