This is topic Программа ST in forum TRACE MODE 7 бесплатная базовая версия / TRACE MODE 7 free basic version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/60/t/000132.html

Posted by remotebob (Участник № / Member № 9315) on :
 
Писал программу на языке ST для алгоритма включения индикаторов разных состояний процесса.
Всего 3 состояния (н-р, пуск, протяжка, финиш), создал для них 3 параметра типа out, тип данных bool. Также создал внутренние переменные (также 3 и типа bool).
Алгоритм перехода включения и выключения индикаторов данных состояний зависит от 2-х параметров скоростей (скорость_текущая и скорость_заданная). Скорость_зад задается оператором через ГЭ, а скорость_текущая изменяется с получения сигнала от ПЛК.

Хотел написать сюда код программы, но нет разрешения.

Алгоритм для включения состояния ПУСК: если не был вкл pusk, и скорость_тек не равна скорости_зад, и скорость_тек > 4 (условие чисто для примера) у нас принимает значение 1 пуск_1 и пуск, данное значение должно запомниться.

Алгоритм для вкл состояния ПРОТЯЖКИ: если pusk = 1, и не vibeg = 1, и скорость_тек = скорости_зад, тогда vibeg, vibeg_1 = 1.

Алгоритм для вкл состояния ФИНИШ: если vibeg = 1, и не finish = 1, и скорость_тек < скорости_зад, вкл finish_1, finish = 1.

Если скорость_зад != 0 и скорость_тек 0 тогда все индикаторы выкл => все аргументы состояний и внутр переменные принимают значение 0.

При проверке программы и написания значения скорости_зад у меня моментально включается индикатор ВЫБЕГ. Если в начале программы я задаю не скорость_зад, а скорость_тек у меня вкл индикатор ПУСК, далее запишу в скорости_зад значение, у меня вкл инд ВЫБЕГ. Индикатор ФИНИШ вообще не работает при тех условиях, которые написаны в программе.

Вопрос: может быть я не правильно поставил типы параметром и типы данных для них, либо в самом коде что-то неверное, либо сам алгоритм ужасен?
 
Posted by Nico (Участник № / Member № 5342) on :
 
-внутренние переменные откуда берут свое значение ?
-сделайте их аргументами тогда их значение
между вызовами будет сохраняться
 
Posted by remotebob (Участник № / Member № 9315) on :
 
а вот насчет присвоения значения времени к аргументу как выполнить?
пишу в программе arg := time#20s; или t#20s; у меня компиляция не проходит, если добавлю ; вот так time#20s;; тогда компиляция пройдет, но код будет работать не так как нужно.
 
Posted by Nico (Участник № / Member № 5342) on :
 
ARG:=20
 
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
 
а вот насчет присвоения значения времени к аргументу как выполнить?

Присвоение метки времени или интервала времени?

arg := t#20s;; - присвоение интервала. Оно приводится к целочисленному (например, lint).

arg_005 = "12.09.2017 16:44:55" - присвоение метки времени.

код будет работать не так как нужно.
Код работает так как написано.
Если код работает не так как нужно, то так написано.

Рекомендую использовать пошаговую отладку кода.
Для этого используйте специальные кнопки (4 кнопки, на которых изображены стрелки с точкой), правее "пуска отладки" (зеленый треугольник)
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2