Просмотр полной версии : механизм тележка, ошибка в программе
alexval2006
14.03.2012, 09:47
механизм тележка, ошибка в программе разобраться есть механизм тележка если задать адрес и нажать пуск то он должен доехать до датчика нужного адреса и остановиться но у меня получается что он доезжает и вместо остановки дергает пускатели реверса туда сюда проект прилагаю.
FUNCTION_BLOCK TELEGA
VAR_INPUT
start, stop : BOOL; (* Экранные кнопки СТАРТ и СТОП *)
sens_reidi_a : BOOL; (* Включение обратная связь *)
sens_reidi_b : BOOL; (* Включение обратная связь *)
reset : BOOL; (* Сигнал сброса аварии *)
reset_buton : BOOL; (* Сигнал сброса аварии *)
adres : DWORD; (* Адрес необходимого положения механизма *)
pologenie : DWORD; (* Текущее положение механизма *)
TR_reidi : BOOL; (* Транспортёр тележки контроль работы*)
alarm_stop_a : BOOL; (* Аварийный датчик конец транспортёра сторона А *)
alarm_stop_b : BOOL; (* Аварийный датчик конец транспортёра сторона В *)
END_VAR
VAR_OUTPUT
OUT_A: BOOL;
OUT_B: BOOL; (* Выходы движения на пускатель*)
alarm : BOOL;
END_VAR
VAR
timer_reidi: TON; (* Контроль включения *)
start_Q: BOOL;
pologenie_a: BOOL;
pologenie_b: BOOL;
END_VAR
(************************************************* *****)
FUNCTION_BLOCK TELEGA
VAR_INPUT
start, stop : BOOL; (* Экранные кнопки СТАРТ и СТОП *)
sens_reidi_a : BOOL; (* Включение обратная связь *)
sens_reidi_b : BOOL; (* Включение обратная связь *)
reset : BOOL; (* Сигнал сброса аварии *)
reset_buton : BOOL; (* Сигнал сброса аварии *)
adres : DWORD; (* Адрес необходимого положения механизма *)
pologenie : DWORD; (* Текущее положение механизма *)
TR_reidi : BOOL; (* Транспортёр тележки контроль работы*)
alarm_stop_a : BOOL; (* Аварийный датчик конец транспортёра сторона А *)
alarm_stop_b : BOOL; (* Аварийный датчик конец транспортёра сторона В *)
END_VAR
VAR_OUTPUT
OUT_A: BOOL;
OUT_B: BOOL; (* Выходы движения на пускатель*)
alarm : BOOL;
END_VAR
VAR
timer_reidi: TON; (* Контроль включения *)
start_Q: BOOL;
pologenie_a: BOOL;
pologenie_b: BOOL;
END_VAR
механизм тележка, ошибка в программе разобраться есть механизм тележка если задать адрес и нажать пуск то он должен доехать до датчика нужного адреса и остановиться но у меня получается что он доезжает и вместо остановки дергает пускатели реверса туда сюда проект прилагаю.
FUNCTION_BLOCK TELEGA
VAR_INPUT
start, stop : BOOL; (* Экранные кнопки СТАРТ и СТОП *)
sens_reidi_a : BOOL; (* Включение обратная связь *)
sens_reidi_b : BOOL; (* Включение обратная связь *)
reset : BOOL; (* Сигнал сброса аварии *)
reset_buton : BOOL; (* Сигнал сброса аварии *)
adres : DWORD; (* Адрес необходимого положения механизма *)
pologenie : DWORD; (* Текущее положение механизма *)
TR_reidi : BOOL; (* Транспортёр тележки контроль работы*)
alarm_stop_a : BOOL; (* Аварийный датчик конец транспортёра сторона А *)
alarm_stop_b : BOOL; (* Аварийный датчик конец транспортёра сторона В *)
END_VAR
VAR_OUTPUT
OUT_A: BOOL;
OUT_B: BOOL; (* Выходы движения на пускатель*)
alarm : BOOL;
END_VAR
VAR
timer_reidi: TON; (* Контроль включения *)
start_Q: BOOL;
pologenie_a: BOOL;
pologenie_b: BOOL;
END_VAR
(************************************************* *****)
FUNCTION_BLOCK TELEGA
VAR_INPUT
start, stop : BOOL; (* Экранные кнопки СТАРТ и СТОП *)
sens_reidi_a : BOOL; (* Включение обратная связь *)
sens_reidi_b : BOOL; (* Включение обратная связь *)
reset : BOOL; (* Сигнал сброса аварии *)
reset_buton : BOOL; (* Сигнал сброса аварии *)
adres : DWORD; (* Адрес необходимого положения механизма *)
pologenie : DWORD; (* Текущее положение механизма *)
TR_reidi : BOOL; (* Транспортёр тележки контроль работы*)
alarm_stop_a : BOOL; (* Аварийный датчик конец транспортёра сторона А *)
alarm_stop_b : BOOL; (* Аварийный датчик конец транспортёра сторона В *)
END_VAR
VAR_OUTPUT
OUT_A: BOOL;
OUT_B: BOOL; (* Выходы движения на пускатель*)
alarm : BOOL;
END_VAR
VAR
timer_reidi: TON; (* Контроль включения *)
start_Q: BOOL;
pologenie_a: BOOL;
pologenie_b: BOOL;
END_VAR
Класс ! Как в первом классе - "Мама, помоги решить задачу". Надо сидеть и спокойно, самостоятельно разбираться, а иначе Вам удачи не видать.
alexval2006
14.03.2012, 10:16
ну извиняйте киповцы мы где то что можем и непонять а руководсво затрещины раздает и слюной брызжит выстрей мол
EngineerPP
14.03.2012, 10:28
вам лучше написать новую программу на языке LD.
это обычная релейно-контакторная схема схема вперед-назад с концевиками.
alexval2006
14.03.2012, 10:35
ну там еще определение в какую сторону ехать если положение меньше адреса то едем в сторону увелечения адресов до нужного и останавливаем механизм если наоборот то в сторону уменьшения адресов
EngineerPP
14.03.2012, 10:42
адрес - это что? набор дискретных входов? аналоговый сигнал?
ну извиняйте киповцы мы где то что можем и непонять а руководсво затрещины раздает и слюной брызжит выстрей мол
Непонятно, Вы вроде как на форуме с 2008г, ветеран можно сказать. Обычно к-а-р-а-у-л !!! кричат "зеленые" пацаны с "квадратными" глазами. Киповцы народ серьезный, среди них всегда есть смышленые, толковые люди, кулибины одним словом. Надо собрать таких, посидеть, подумать, аккуратно поэкспериментировать и вопрос решится. А начальство, за редким исключением, - дерьмо. Не зря поговорка есть - "Ума нет, иди в начальники".
alexval2006
14.03.2012, 11:38
у нас я один самаучка остальные либо пенсионеры либо совсем молодеж с пту потому иногда приходитса покричать караул срок сдачи 16 число а эта хрень весь остальной проэкт тормозит, сейчас после обеда соберу стенд и буду эксперементировать на обекте недают механизмы работают на ручном
alexval2006
14.03.2012, 13:04
Исправил при помощи крепкого кофе с шоколадкой и одного умного пожилого киповца вместе обсудили логику и решили проблему решилось довольно легко просто сделал противо включение как на пускателях при реверсе если едим в сторону А то условии стороны Б чтоб не мешалось и наоборот ну и попутно еще несколько ошибочек и недоработок нашли и устранили.
FUNCTION_BLOCK TELEGA
VAR_INPUT
start, stop : BOOL; (* Экранные кнопки СТАРТ и СТОП *)
sens_reidi_a : BOOL; (* Включение обратная связь *)
sens_reidi_b : BOOL; (* Включение обратная связь *)
reset : BOOL; (* Сигнал сброса аварии *)
reset_buton : BOOL; (* Сигнал сброса аварии *)
adres : DWORD; (* Адрес необходимого положения механизма *)
pologenie : DWORD; (* Текущее положение механизма *)
TR_reidi : BOOL; (* Транспортёр тележки контроль работы*)
alarm_stop_a : BOOL; (* Аварийный датчик конец транспортёра сторона А *)
alarm_stop_b : BOOL; (* Аварийный датчик конец транспортёра сторона В *)
END_VAR
VAR_OUTPUT
OUT_A: BOOL;
OUT_B: BOOL; (* Выходы движения на пускатель*)
alarm : BOOL;
END_VAR
VAR
timer_reidi: TON; (* Контроль включения *)
start_Q: BOOL;
pologenie_a: BOOL;
pologenie_b: BOOL;
END_VAR
(************************************************* *****)
(*Обработка кнопки СТАРТ*)
IF start =TRUE AND NOT TR_reidi THEN (* Транспортёр тележки должен быть выключен во время движения, контроль *)
start_Q:=TRUE;
END_IF(*END Обработка кнопки СТАРТ*)
(*Обработка кнопки СТОП*)
IF stop =TRUE THEN
start_Q:=FALSE;
out_a:=FALSE;
out_b:=FALSE;
pologenie_a:=FALSE;
pologenie_b:=FALSE;
END_IF(*END Обработка кнопки СТОП*)
IF start_Q =TRUE THEN (**Обработка кнопки СТАРТ**)
timer_reidi(in:=FALSE); (* Обнуляем таймер *)
IF adres > pologenie AND NOT pologenie_b THEN (**Выбор направления движения тележки и запуск движения pologenie_a**)
pologenie_a:=TRUE;
out_a:=TRUE;
out_b:=FALSE;
timer_reidi(in:= NOT sens_reidi_a, pt:=T#5s, Q=>alarm);
IF timer_reidi.Q =TRUE THEN
start_Q:=FALSE;
END_IF
END_IF(**END Выбор направления движения тележки и запуск движения pologenie_a**)
IF pologenie_a AND adres = pologenie THEN (**Остановка тележки на выбраном силосе pologenie_a**)
out_a:=FALSE;
pologenie_a:=FALSE;
start_Q:=FALSE;
END_IF (**END Остановка тележки на выбраном силосе pologenie_a**)
IF adres < pologenie AND NOT pologenie_a THEN (**Выбор направления движения тележки и запуск движения pologenie_b**)
pologenie_b:=TRUE;
out_b:=TRUE;
out_a:=FALSE;
timer_reidi(in:= NOT sens_reidi_b, pt:=T#5s, Q=>alarm);
IF timer_reidi.Q =TRUE THEN
start_Q:=FALSE;
END_IF
END_IF(**END Выбор направления движения тележки и запуск движения pologenie_b**)
IF pologenie_b AND adres = pologenie THEN (**Остановка тележки на выбраном силосе pologenie_b**)
out_b:=FALSE;
pologenie_b:=FALSE;
start_Q:=FALSE;
END_IF(**END Остановка тележки на выбраном силосе pologenie_b**)
IF out_b=TRUE AND alarm_stop_a=TRUE THEN (**Обработка сигналов Аварийных концевиков alarm_stop_a**)
out_b:=FALSE;
start_Q:=FALSE;
alarm:=TRUE;
END_IF
IF out_a=TRUE AND alarm_stop_b=TRUE THEN (**Обработка сигналов Аварийных концевиков alarm_stop_b**)
out_a:=FALSE;
start_Q:=FALSE;
alarm:=TRUE;
END_IF
IF alarm =TRUE THEN (**Обработка Аварии**)
start_Q:=FALSE;
out_a:=FALSE;
out_b:=FALSE;
END_IF
END_IF (**END Обработка кнопки СТАРТ**)
IF reset OR reset_buton =TRUE THEN (**Обработка сигналов сброса Аварии**)
alarm:=FALSE;
END_IF
EngineerPP
14.03.2012, 13:34
но в дальнейшем лучше делайте релейно-контакторную схему + ФБ по определению расстояния на ST.
alexval2006
14.03.2012, 15:19
ну хочетса освоить st как самый функциональный язык
ну хочетса освоить st как самый функциональный язык
Если есть желание, то все получится. Успехов.
ну хочетса освоить st как самый функциональный язык
И коли лд не юзали - и не начинайте.
С ходу : Сбрасывая таймер в ифе с Start_Q, дальнейшее его использование не имеет смысла.
Совет : попробуйте автомат - вам будет понятнее.
alexval2006
17.03.2012, 23:43
Уважаемый товарищ Валенок большое вам спасибо за участие, ваши решения всегда практичны и лаконичны а главное работают надежно :)
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot