remotebob
Junior Member / Новичок
Участник № / Member № 9315
отправлено / posted
Писал программу на языке 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.
При проверке программы и написания значения скорости_зад у меня моментально включается индикатор ВЫБЕГ. Если в начале программы я задаю не скорость_зад, а скорость_тек у меня вкл индикатор ПУСК, далее запишу в скорости_зад значение, у меня вкл инд ВЫБЕГ. Индикатор ФИНИШ вообще не работает при тех условиях, которые написаны в программе.
Вопрос: может быть я не правильно поставил типы параметром и типы данных для них, либо в самом коде что-то неверное, либо сам алгоритм ужасен?
Сообщения / Posts 6 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
-внутренние переменные откуда берут свое значение ? -сделайте их аргументами тогда их значение между вызовами будет сохраняться
Сообщения / Posts 921 | Из / From: Россия
| IP / IP: IP адрес / IP address |
remotebob
Junior Member / Новичок
Участник № / Member № 9315
отправлено / posted
а вот насчет присвоения значения времени к аргументу как выполнить? пишу в программе arg := time#20s; или t#20s; у меня компиляция не проходит, если добавлю ; вот так time#20s;; тогда компиляция пройдет, но код будет работать не так как нужно.
Сообщения / Posts 6 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
а вот насчет присвоения значения времени к аргументу как выполнить?
Присвоение метки времени или интервала времени?
arg := t#20s;; - присвоение интервала. Оно приводится к целочисленному (например, lint).
arg_005 = "12.09.2017 16:44:55" - присвоение метки времени.
код будет работать не так как нужно. Код работает так как написано. Если код работает не так как нужно, то так написано.
Рекомендую использовать пошаговую отладку кода. Для этого используйте специальные кнопки (4 кнопки, на которых изображены стрелки с точкой), правее "пуска отладки" (зеленый треугольник)
Сообщения / Posts 17426 | Из / From: Россия
| IP / IP: IP адрес / IP address |