В описании модуля "счетчик" ПЛК1хх сказано, что счетчик обнуляется
каждый цикл ПЛК.
А в моей программе несколько задач (добавленных через task manager),
по циклу какой задачи обнуляется счетчик?
Вид для печати
В описании модуля "счетчик" ПЛК1хх сказано, что счетчик обнуляется
каждый цикл ПЛК.
А в моей программе несколько задач (добавленных через task manager),
по циклу какой задачи обнуляется счетчик?
По циклу ПЛК. Добавьте модуль "статистик" и увидите время цикла
Чтобы не потерять значение счетчика, его надо прочитать в какой-то задаче.
Если у нас одна задача (PLC_PRG), то ясно, в какой.
Но у меня несколько задач.
Если я буду читать значение в одной задаче, а сбрасываться он будет по другой,
или вообще по какому-то "своему" общему циклу, то получу неверные данные.
копируйте в глобальную переменную
Суммируйте в PLC_PRG, для каждой подпрограммы отдельно значения из счетчика. При вызове определенной подпрограммы, считывайте и обнуляйте значение или как там у Вас задумано, не знаю. Значения в PLC_PRG объявите глобальными, для доступа к ним из подпрограмм.
Я так-то доходчиво написал. Что там непонятного?
Глобальные переменные видны в любом POU и совсем не обязательно присутствие PLC_PRG, вот на что Вы должны были обратить внимание, а не на архитектуру программы другого пользователя. Не важно через какие периоды крутятся Ваши квазипараллельные проги, в конфигураторе минимальное время цикла разве от этого пропадает?
Если у Вас какая-то непереносимость PLC_PRG, заведите любую подпрограмму, которую вызывайте раз в цикл. В ней копируйте значения из счетчика и суммируйте скопированные значения. После вызова Вашего ФБ, в котором используете значения счетчика, считывайте накопленное значение.
С PLC_PRG проще, её добавить легко, а организовывать циклический вызов не нужно. Все уже организовано.
Желаю успехов.
Видимо, я совершенно не умею излагать проблемы. Вопрос вовсе не в переменных.
Читаем инструкцию по эксплуатации ПЛК110:
------ инструкция -----------
7.3.2.1 Fast Counter (Высокочастотный Счетчик)
Счетчик считает количество импульсов, пришедших на быстрый дискретный
вход за один цикл ПЛК. По завершению каждого цикла ПЛК значение в счетчике об-
нуляется. Подсчет импульсов осуществляется по переднему (возрастающему)
фронту импульса. Таким образом, для использования и обработки значения данного
канала, необходимо считывать его каждый раз в начале цикла пользовательской
программы. Например, ввести в программу дополнительную переменную, и в начале
цикла передавать в эту переменную значение переменной, привязанной к счетчику.
------- конец цитаты --------
В моей программе одновременно выполняются три задачи, каждая со своим
циклом. Есть цикл и по событиям, так что общее время цикла непредсказуемо.
Вопрос: по циклу какой задачи надо читать счетчик, и когда обнуляется счетчик?
Значения счетчика в случае сложной системы задач, в т.ч. и по событиям следует считывать в отдельной задаче, которая имеет наивысший приоритет и вызывается с периодом, заданным в настройках цикла ПЛК. В неё не надо добавлять никаких доп. обработок, кроме работы со счетчиками/тригерами/энкодерами ПЛК
Спасибо.
Значит, мне надо добавить еще одну задачу специально для счетчиков, и с
периодичностью вызова = минимальному времени в конфигурации ПЛК?
Сразу еще вопрос: в настройках цикла - два времени, минимальное
и максимальное. Максимальное я понимаю - если превысится, сработает
сторожевой таймер. А минимальное зачем? Обычно, чем быстрее, тем лучше.
И еще. Если не одна задача, а несколько, работают в разнобой, то периодичности
нет, а тогда время какого цикла имеется в виду?
Кто сказал, что чем быстрее, тем лучше??? Знаю говорят - лучшее враг хорошего...
Минимальное время - чтобы не грузить процессор "не быстрыми, но ресурсоемкими задачами". Например - ну не надо Вам задачу с ПИД и обработкой датчиков температуры вызывать чаще, чем раз в 200-500 мс...