Дело не в таймере. А в непонятках исполнения кода на ST
Вид для печати
Дело не в таймере. А в непонятках исполнения кода на ST
По моему, не надо усложнять и будет намного проще. Бонусом переключение шагов и таймер шага. Например так. Вложение 70617
Хотя если шагов и значений много, то можно сделать управление временем (задачей), из внешних блоков с CASE, как здесь, в последнем примере
https://owen.ru/forum/showthread.php...39&page=11#105
Тех. поддержка подтвердила ненормальное поведение fb, будут разбираться.
Не знаю, было такое раньше, но сейчас функции и ФБ на SТ размещаются в папке Другие. А в какую-нибудь свою папку их можно записать?
Лоджик 2.5
И, еще, если сделать описание макроса на FBD, то оно отображается в библиотеке. Почему бы такое не сделать для ST?
Добрый день
Можно ли использовать массивы в ST в OL ?
Что будет исполнятся быстрее, макрос из Менеджера компонентов OL или FB на ST, выполняющий аналогичные действия ?
Тут дело не в скорости, а скорее в размере конечной программы.
Мне видится так:
Макрос - это код, который скопируется в тексте программы столько раз, сколько макросов было вставлено в программе. А ФБ на ST имеет одну реализацию, которая вызывается в программе с различными данными (блоками данных каждого из экземпляров)
В справке OL написано как это сделать , там надо специальных тегах прописывать. Вообще с документированностью все плохо из разных мест по чайной ложке. про массивы можно только из форума прочитать в справке про масивы нет . Я так и не понял зачем нужны функции на ST если функциональный блок делает тоже самое и дает больше возможностей
Функцию удобно использовать тогда, когда нужны только расчёты илии обработка данных по одному общему алгоритму. Например:
* Что-то поделить на коэффициент, умножить на переданное значение импульсов и получить расход в литрах;
* Проверить, попадает ли время часов в заданный интервал.
* Обработать какие-нить данные с датчика по алгоритму "Если это не равно 0xFFFF, то подели на 100 и получишь температуру, а если равно - это ошибочное значение"
* Вычислить минимум или максимум из переданных значений
Функции не сохраняют свои внутренние переменные нигде, а все расчёты ведутся на лету. Суть таких функций - чтобы программу писать более компактно.
А каждый нарисованный на проекте FB сохраняет свои переменные и жрёт память.
у кого то был случай нехватки памяти? просто вопрос ради интереса, так то я весьма рад ФБ на ST: писал макрос, куча входов-выходов, логика внутри, задолбался эту паутину строить и печалиться если ее переделывать приходилось. Плюнул и быстренько написал всю логику на ST. Красиво, компактно, понятно. Супер!
Ollema У меня только Retain кончаются, потому что я навыдумывал хранить всякую статистику типа Min-Mix за месяц и год, дата последнй аварии и так далее.
В ПЛК я давно на ST перешёл - это удобнее.
Развитие ST в OwenLogic не может не радовать. А на фоне сворачивания CoDeSys 2.3 ПР-ки представляются неплохой альтернативой младшим моделям ПЛК.
Помогите разобраться новичку , что я делаю не правильно . Необходимо прочитать переменную функционального блока ST из другого функционального блока ST . Обращение в техподержку недало никакго результата , отправляют читать спраку OWEN Logic (естественно читал) . Во вложении файл Owen logic с необходимыми блоками. Помогите!!!!
Я бы тоже посоветовал читать справку. fb в ОЛ и в MF это два разных блока данных. Тут или делать входную переменную в МF для motor1 или вызывать fb в мf со всеми входными параметрами.
Для 1 варианта:Вложение 71455
Входную переменную не проблема сделать , я понимаю как и что делается , но это уже не будет обмен данными между блоками посредством языка ST. В справке русским языком написано , что возможен обмен между разными функциональными блоками посредством вызова одного блока из другого блока.
Но вы должны понимать что fb1(в Ол) и fb в MF это два разных функциональных блока( в Owen logic нет глобальных ФБ). Читаем справку стандарта МЭК 61131-3.
Посмотрите пример, глубина вложения блоков до 3, некоторые переменные передаются снаружи до 3 вложения и даже до 4 (аналог функции TIME(); ),
некоторые наоборот выводятся, так как глобальных переменных тут нет.
Для наглядности тут пример в Лоджике и в среде Codesys 2.3.
Там есть и вызовы таймеров, триггеров, работа с массивами и циклами.
https://owen.ru/forum/showthread.php?t=38453&page=10#93
Привет всем.
Создал "Панель индикации для ПР200", подключил к транзисторным выходам.
https://owen.ru/forum/image/png;base...BJRU5ErkJggg==
Программа на ST, всё мигает как задано:
https://owen.ru/forum/image/png;base...AASUVORK5CYII=
Вложение 71509
(перебрать все варианты)
OutK1:=Sek.0;
OutK2:=Sek.1;
OutK3:=Sek.2;
OutK4:=Sek.3;
Но проскакивает кратковременные вспышки некоторых светодиодов.
Это при переборе.
В статическом включении светит равномерно.
У кого есть возможность глянуть осциллографом на выходы К1-K4?
При управлении, таким способом, нагрузками "иголки" недопустимы...
1. Панель выпускается для своих задач за $15, чтоб не покупать по конским ценам.
2. Отображать наглядно два параметра, которые динамически выводятся в транзисторный порт.
Или управлять доп нагрузками при нужных драйверах.
3. sPlan5 ещё из детства, как раз для таких простеньких проектов.
Привет всем.
Глюк проявился: не хочет создавать переменную с именем STEP.
Код:function_block functionblock1 //имя функционального блока.
// ----------------------------------------------------------------
var_input //объявление входных переменных
InADCa, InADCb, InADCc, InADCd :real; // аналоговые входы
InMAX :real; InMIN :real; // пределы входные
UotMAX :real; UotMIN :real; // пределы выходные
Sek, Min, Hour :udint; // время
end_var
// ----------------------------------------------------------------
var_output //объявление выходных переменных
OutK1, OutK2, OutK3, OutK4 :bool; // выходы тразисторные
SvZf1 :bool; SvKf2 :bool; // светодиоды на панели ПР200
OutADCxA, OutADCxB, OutADCxC :real;
end_var
// ----------------------------------------------------------------
var //объявление локальных переменных
STEP :udint;
end_var
end_function_block
ОШИБКА : Имя переменной STEP содержит недопустимые символы
Несколько раз проверял.
STEP используется в чреве компилятора для своих нужд?
Или это какой оператор или константа?
Из хелпа:
Ключевые слова могуут быть введены в символах верхнего и нижнего регистра. Пробелы и метки табуляции не влияют на синтаксис, они могут использоваться везде.
Структура выражения: [variable] := [value];
Выражения состоят из операндов и операторов. Операндом может быть литерал, переменная, структурированная переменная, компонент структурированной переменной, обращение к функции или прямой адрес.
1. Слово "могуут".
2. "или прямой адрес" - это как?
решение проблемы
Цитата:
Зарезервированные слова и языконезависимая спецификация
Зарезервированные слова представляют определённую проблему при переводе текста с языка на язык (а иногда даже с компилятора на компилятор) и при написании ПО, разные части которого написаны на разных языках — может случиться, что на языке А будет создан идентификатор, который является зарезервированным словом языка Б и поэтому он окажется недоступным. Обычно стараются избегать слов, которые в каком-либо из широко известных языков являются зарезервированными. Впрочем, бывает, что при расширении языка слово из разрешённого переходит в зарезервированное. Вот несколько способов решения этой проблемы.
Венгерская нотация и другие подобные способы именования переменных делают идентификаторы заведомо отличающимися от ключевых слов любого языка.
.NET требует, чтобы все совместимые языки позволяли каким-либо образом задавать идентификатор, совпадающий с ключевым словом. Например, в C# слово this является зарезервированным, а @this — идентификатором.
Похожим образом поступили во встроенном ассемблере Паскаля: eax — зарезервированное слово (название регистра), &eax — идентификатор.
В Си все нестандартные (производителе- и платформозависимые) зарезервированные слова начинаются с двух знаков подчёркивания. Например, в C Builder может быть такая запись:
Да это всё понятно. Мы не о том, а именно о слове step. Человек, мало занимающийся программированием откуда узнаёт о таком? Могли бы в документации указать список зарезервированных слов, которые нельзя применять, и всё.