Есть ли что-то вроде классов в структурированном тексте?

Я работаю с ПЛК Beckhoff и пытаюсь сделать пару программных модулей, которые абсолютно одинаковы, за исключением ввода-вывода. Я ищу способ, поэтому мне нужно писать код только один, но иметь возможность запускать его больше, чем с разными IO. Например что-то вроде классов, где IO объявлен в конструкторе. Различные POU также должны работать одновременно. Я уже немного изучил последовательную функциональную схему и функциональные блоки с наследованием, но, похоже, это не работает так, как я хочу. Я даже не уверен, что то, что я хочу, возможно.

Любая помощь приветствуется.

Ник


person plclearner    schedule 07.07.2020    source источник


Ответы (3)


Функциональные блоки — это самое близкое к эквиваленту в классах. Наиболее близким к конструктору в мире Beckhoff является FB_Init (https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/63050399827943947.html&id=).

Как конкретно вы хотите, чтобы все работало?

person Jakob    schedule 07.07.2020
comment
Спасибо за Ваш ответ. В частности, мне нужны 6 POU или функциональных блоков, которые выполняют один и тот же код, за исключением их канала ввода-вывода. Они должны работать одновременно. Поскольку у них один и тот же код, я подумал, что было бы лучше создать один класс или функциональный блок, который имеет весь код, а другие FB просто наследуют функциональные возможности этого. Опять же, я не знаю, возможно ли это. - person plclearner; 07.07.2020
comment
Это вполне возможно. Просто создайте 6 экземпляров функционального блока, например fb1 : FB_YourBlock(); fb2 : FB_YourBlock(); ... fb6 : FB_YourBlock();, и создайте ссылки на ввод-вывод в FB_YourBlock. - person Jakob; 13.07.2020

Взгляните на следующую ссылку (особенно ссылки внизу), чтобы получить общее представление о том, как использовать функциональные блоки объектно-ориентированным способом: https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/63050399827943947.html&id=

Когда вы используете %I и %Q внутри функционального блока, вы получаете связываемые переменные для каждого из ваших экземпляров блока. Это имеет место как при использовании FB в качестве объекта в TC3, так и при использовании его просто как функционального блока в TC2. (FB будет содержать IO)

Другое решение состоит в том, чтобы создать объект ввода-вывода, соответствующий вашим требованиям, а затем передать его интерфейсный указатель функциональному блоку, который его обрабатывает. (FB будет работать с IO, объявленным параллельно ему, например, в MAIN)

person pboedker    schedule 07.07.2020

Решение вашей задачи действительно лежит на основе IDE, над которой вы работаете. Некоторые IDE не поддерживают методы или расширения в функциональных блоках. Таким образом, уровень реализованного ООП зависит от IDE.

Но да, как правило, вы можете использовать функциональные блоки как объекты класса. Но вы должны учитывать, что вы не можете динамически изменять количество входных или выходных переменных или их типы. Другими словами, да, вы можете смотреть на FB как на класс, но это не так.

Я думаю, что если вы перейдете на ST с языков, подобных C/C++, вам нужно изменить свое мышление. СТ отличается. Вам лучше подумать о процедурном подходе. Принципы, которые я использую для создания независимой от ПЛК программы или универсальной программы, чаще всего используют указатели. Но опять же, не зная вашей задачи и IDE сложно что-то подсказать.

Проблема с такими вопросами, вы уже решили, что использовать для решения вашей задачи, и вы спрашиваете, как это использовать, когда вам нужно было спросить, как решить такую ​​​​задачу и что использовать и объяснить саму задачу. Потому что возможно, что ваша задача классически решается с использованием совершенно других инструментов, чем ООП в мире ПЛК.

person Sergey Romanov    schedule 08.07.2020