компилятор GX IEC Mitsubishi Electric, оператор IF съедает системные метки |
Здравствуйте, гость ( Вход | Регистрация )
компилятор GX IEC Mitsubishi Electric, оператор IF съедает системные метки |
4.06.2009 - 16:19
Сообщение
#1
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
GX IEC v7.01
Пример. проверка w1 [INT] на 0 и установка переменной [b1] BOOL в состояние TRUE. На языке LD: LD= w1 k0 SET b1 На языке ST: IF w1=0 THEN b1:=TRUE; END_IF; компилируется как LD<> w1 k0 CJ P30 LD b1 OUT b1 P30 Как написать код для данного примера на ST, что-бы при компиляции не использовалась системная метка? Или как заставить компилятор не использовать в Данном случае системную метку? Желательно не нарушать стандарт IEC, т.е. не использовать макрокод. |
|
|
5.06.2009 - 01:40
Сообщение
#2
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Приведенный откомпилированный код не соответствует вышеприведенным LD и ST фрагментам.
А вообще, непонятно, в чем проблема? Меток не хватает? Что код из компилятора неоптимален, и так понятно. -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
5.06.2009 - 09:34
Сообщение
#3
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
LD фрагмент, в силу отсутствия графического построителя, не привожу, а только откомпилированый код.
ST фрагмент, у меня, откомпилировался именно так как. LD фрагмент - принимаю за эталон, к которому должен стремиться после компиляции код из ST фрагмента. Меток хватает (необходимо 60 - 70), но это в GX Developer, а обилие условных рассчётов, которые проще и нагляднее на ST, съедают оставшиеся метки и требуют ещё ... По поводу неоптимального кода - для FX3U вполне приемлимо, а вот для FX2N - действительно беда. |
|
|
5.06.2009 - 20:20
Сообщение
#4
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Приведенный откомпилированный код:
LD<> w1 k0 CJ P30 LD b1 OUT b1 P30 соответствует ST коду: IF w1=0 THEN b1:=b1; END_IF; Если так компилируется ST код: IF w1=0 THEN b1:=TRUE; END_IF; я бы поостерегся пользоваться таким компилятором. P.S. А на кой Вам этот ST? Ladder необходим и достаточен для работы с любым PLC. P.P.S. А попробуйте b1:=(b1 OR (w1=0)), если такая конструкция допустима в IEC. Сообщение отредактировал Sergei Troizky - 5.06.2009 - 20:34 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
8.06.2009 - 10:44
Сообщение
#5
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
IF w1=0 THEN b1:=TRUE; END_IF; именно так и компилируется ... увы
Вычисления в Ladder на IEC ... - не могу привыкнуть, совершенно не наглядно, другое дело на ST а решение для строки выглядит как set_m((w1=0),b1); - что корректно компилируется или out_m((w1=0),b1); Для блока вычислений придётся использовать системные метки, но это уже приемлимо. Тему можно закрывать. Сообщение отредактировал m_by - 8.06.2009 - 10:54 |
|
|
27.10.2009 - 19:00
Сообщение
#6
|
|
Читатель Группа: Пользователи Сообщений: 18 Регистрация: 21.10.2009 Пользователь №: 9181 |
Да засада с этими метками,пишу код жму компиляцию,а он выдает,не хватает меток...
Конечно можно использовать конструкцию set_m(x,y),но думать надо совсем по другому,да и после привычной then сколько хочешь операторов используй,а с set_m только один остальные надо присвоением устанавливать,или есть более оригинальное решение? попробую поставить вопрос - есть вход х1,и пять выходов Y1...Y5,используя set_m делаю так set_m(x1,y1); y2:=y1;y3:=y1;y4:=y1;y5:=y1; - как то некрасиво это,как можно сделать оригинальней? |
|
|
28.10.2009 - 10:43
Сообщение
#7
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
например (для данного частного случая) ... :-)
wand_3_m(X1,K2Y0,31,K2Y0); |
|
|
28.10.2009 - 16:24
Сообщение
#8
|
|
Читатель Группа: Пользователи Сообщений: 18 Регистрация: 21.10.2009 Пользователь №: 9181 |
Ух ты! Здорово!
Конструкцию вида K2Y0 нигде не встречал кроме как в Mitsubishi, действительно получается оригинально,но в Online в "теле кода" будет не явно видно,какой выход сработал... и к сожалению это "частный случай",но в нескольких местах можно применить... m_by не перестаю удивляться Вашей изощренности в написании кода на ST... я уже стал сомневаться,что до конца смогу весь проект на ST сделать... |
|
|
29.10.2009 - 10:24
Сообщение
#9
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
... только немного поспешил ... wand - ет для моего решения другой задачи ...
вам нужен wor_3_m(X1,K2Y0,62,K2Y0); , иначе Y5...y7 сбросятся 31d=00011111b 62d=00111110b использую обе конструкции: wor - для установки произвольного бита wand - для сброса произвольного бита |
|
|
Текстовая версия | Сейчас: 24.04.2024 - 04:20 |