PDA

Просмотр полной версии : ПЛК73 не переключаются светодиоды



RomAl
14.07.2015, 10:45
Вроде бы программа на ПЛК73 работает, но вот почему-то
иногда светодиоды после засылки соответствующего кода
сохраняют своё прежнее свечение.
Чего только не делал, и просто тупо
N_sc:=GetWorkScreen();
Leds:=SHL(BYTE#1,N_sc);

или так
N_sc:=GetWorkScreen();
on_lads:=SHL(BYTE#1,N_sc);
IF(on_lads<>on_lads_old)THEN Leds:=on_lads;END_IF;
on_lads_old:=on_lads;

Причём номер экрана N_sc и переменнаяon_lads исправно меняются, а вот светодиоды
только в процентах 90% случаев
Иногда бывает всё нормально, нормально .. а потом снова барахлит...

lara197a
14.07.2015, 10:54
Мудрите зачем?
Leds:=SHL(BYTE#1,N_sc);

Я не понимаю этого действия.
Почему проще не написать, простым присвоением?
Не вижу типа переменных в объявлениях.
Похоже идет переполнение.

lara197a
14.07.2015, 11:42
Так должно работать:
VAR
qty_screen: DINT;
N_ek: BYTE:=1;
END_VAR

qty_screen:=GetWorkScreen(); (*вывод в светодиоды номера текущего экрана*)
Svit:=SHL(N_ek,qty_screen);

(проверить не могу)

RomAl
14.07.2015, 13:49
Так должно работать:
VAR
qty_screen: DINT;
N_ek: BYTE:=1;
END_VAR

qty_screen:=GetWorkScreen(); (*вывод в светодиоды номера текущего экрана*)
Svit:=SHL(N_ek,qty_screen);

(проверить не могу)

не нашёл никакого отличия от моего кода..
только у вас имя регистра в конфигурации Svit, а у меня Leds
у вас для сдвига переменная= 1, а у меня константа типа байт=1
Но дело-то в том, повторяюсь, что я вижу в отладчике, что значение которое я заношу в регистр правильно,
а вот светодиоды не зажигается в соответствии с этим числом..
но потом при следующем измененим как правило "исправляется" и
сново правильно показывает

lara197a
14.07.2015, 13:56
Ну, так проверь.
Я отличие описал.
Также можно добавить
перед вычислением строки
-перевод DINT в Byte.
-N_ek:=1,
Это не обязательно, но в случае сбоя будет поправлять в каждом цикле.
Самый надежный способ- это через casse прямое присвоение.
но не так красиво и громоздко.

RomAl
14.07.2015, 15:42
Да всё в коде у меня правильно.. это шаманство уже...
Да наверно самого главного не написал:
вся эта фигня появляется когда отключаю online
в кодесис, выключаю_включаю питание. Программа
записана- это я вижу по номеру версии, а ведёт
себя странно..

lara197a
14.07.2015, 15:54
в первой строке программы напишите
N_ek:=1,

RomAl
14.07.2015, 16:54
в первой строке программы напишите
N_ek:=1,
Достаточно, от вас я советов больше не хочу- у меня и своих тараканов полно..

RomAl
14.07.2015, 17:13
Обнаружил новое "чудо"..
После того как сходишь в конфигурацию
и просто посмотришь параметр "Сос.светодиодов"
всё налаживается и ни одной ошибки не наблюдается, жал раз 50 на клавиши..
Но только до следующего отключения контроллера от сети, а там всё снова..

lara197a
14.07.2015, 17:20
у меня ПЛК 73 еще с предпродажной партии работают.
И примеры работы с ними с моих выкладок написаны.
проблемы в вашей программе.
ваше дело. делайте что хотите.
проверил:
http://youtu.be/At46iQZpoHE.
Пожалуйста не нужно потом говорить, что это ПЛК Овен плохой.
Учиться нужно было лучше.

RomAl
15.07.2015, 09:22
Конечно не доработанный ПЛК, как ещё можно объяснить
что в регистр скажем записывается 02, но по-прежнему горит К1
потом записывается 04 и теперь уже всё правильно горит К3 и эта
ситуация то вдруг появляется, то вдруг исчезает.
Возможно перегружена система- много индикации, работают 2 последовательных
порта, но всё равно- так не должно быть...
с другой стороны наверно можно что-то пошаманить и уйти от этой ситуации

lara197a
15.07.2015, 10:50
Если вы всеже прочтете документацию, перед тем как ломать ПЛК,
то обнаружите, что в режиме онлайн время цикла составляет 1500мс,
что и вызывает замедление реакции.
Так же экран обновлять(вызывать) нужно раз в 200мс, у Вас в каждом цикле?
Все в инструкции написано..

RomAl
15.07.2015, 11:43
Я же вас попросил- перестать давать мне советы, ваши советы только отвлекают
и ничего нового не дают.. ну вот откуда вы знаете как у меня обновляется экран?
обновление экрана у меня по таймеру 300мс

lara197a
15.07.2015, 11:47
Ну так если все понятно,
опыт огромный имеете,
то в чем проблема и зачем на форум влезли?
Сказать. что ПЛК плохой?
Уже сказали.
Все услышали.
Видео смотрели?
У меня все работает работает.
У остальных юзеров то же.
Ваша исключительность отмечена.

kolyan
15.07.2015, 11:59
У меня вот так - всё работает превосходно:

LEDS:= PACK(
B0:=SD1,
B1:=SD2,
B2:=SD3,
B3:=SD4,
B4:=SD5,
B5:=SD6,
B6:=0,
B7:=0);

RomAl
15.07.2015, 17:48
Вроде излечил ... хотя ещё не совсем уверен, так как проявлялось и раньше не всегда
Сделал обновление регистра LEDS по таймеру раз в 300мс как и дисплея.
До этого обновлялся раз в 40мс... чудно
Теперь светодиод иногда с задержкой "перепрыгивает", но зато надёжно
ЗЫ Да ещё странность обнаружил: если одновременно с командой включения звука
BeepForTimeUser(1500,1800);
идёт чтение системного времени , то звук не слышен.. не критично конечно,
звук - это прибамбас не обязательный