plcforum.uz.ua

International PLC Forum
It is currently Thu May 25, 2017 11:10 pm

All times are UTC + 3 hours


Forum rules


Please click here to view the forum rules



Post new topic Reply to topic  [ 10 posts ] 
Author Message
PostPosted: Thu Feb 16, 2017 9:35 am 

Joined: Sun Oct 02, 2011 3:13 am
Posts: 32
Здравствуйте.
Пытаюсь изучать STL и на простом примере не могу воссоздать на LAD небольшой фрагмент из STL.



Code:
CLR   
      O(   
      A     #In_1
      FN    #In_1_fn
      )     
      O(   
      A     #In_2
      FN    #In_2_fn
      )     
      O(   
      A     #In_3
      FN    #In_3_fn
      )     
      A(   
      O     #In_4             
      O     #In_5               
      )     
      =     #Out_1


Top
 Profile  
 
PostPosted: Thu Feb 16, 2017 10:29 am 

Joined: Wed Oct 13, 2010 11:44 am
Posts: 136
Location: Russian Federation
Как-то так... http://imgur.com/a/FgSfh


Top
 Profile  
 
PostPosted: Thu Feb 16, 2017 10:58 am 

Joined: Sun Oct 02, 2011 3:13 am
Posts: 32
Я тоже так подумал, но это не правильно.Вот что получилось из вашего примера :

Code:
     A(   
      A     #Forward_key
      FN    #Forward_key_fn
      O(   
      A     #Backward_key
      FN    #Backward_key_fn
      )     
      O(   
      A     #Totman_move
      FN    #Totman_key_fn
      )     
      )     
      A(   
      O     #Start_mode_key
      O     #Man_mode_key
      )     
      =     #Temp_1


И работают эти коды тоже по разному.


Top
 Profile  
 
PostPosted: Thu Feb 16, 2017 12:23 pm 
Site Admin

Joined: Mon Aug 15, 2011 5:27 pm
Posts: 121
Mzman wrote:
Я тоже так подумал, но это не правильно.Вот что получилось из вашего примера :
Mzman wrote:
Code:
CLR   
      O(     
..............
      )     
      =     #Temp_1

Code:
      A(   
..............
      )     
      =     #Temp_1

Кто написал первый код ?
Mzman wrote:
И работают эти коды тоже по разному.
Как именно по разному - неправильно и правильно ?
Логика на ЛАДе выглядит логичнее,
Image
а вот приведённый фрагмент похож на ручную правку кода из ЛАДа - поэтому впереди появился CLR (заменили А (верхняя ветка) ?) и за ним ИЛИ... что явно нелогично (boom)


Top
 Profile  
 
PostPosted: Thu Feb 16, 2017 12:58 pm 

Joined: Sun Oct 02, 2011 3:13 am
Posts: 32
Первый код писал сторонний программист.
Это не весь код,а только лишь его часть.
Вопрос не стоит о том,правильно ли он работает или нет.
Задача: воссоздать его на LAD.
И воссозданный LAD перевести в STL (STEP7 View->STL).
Коды исходного кода и воссозданного должны быть идентичными.
Значит и логика их работы тоже будет идентична.


Top
 Profile  
 
PostPosted: Thu Feb 16, 2017 1:56 pm 
Site Admin

Joined: Mon Aug 15, 2011 5:27 pm
Posts: 121
в ЛАДе нет команды CLR и её назначение в приведённом фрагменте не ясно, также как неясно назначение О(...) после неё
поэтому перевести всё написанное вручную не всегда возможно.
Логика писания постороннего писателя не ясна... приведи копию экрана этой функции с самого начала... даже по её виду можно будет сделать некоторые выводы.
Rex2701 привёл правильный вариант для данного фрагмента - CLR в данном случае не нужна, так как в начале ветки NETWORK это и так автоматом происходит в ЛАДе.


Top
 Profile  
 
PostPosted: Thu Feb 16, 2017 2:30 pm 

Joined: Sun Oct 02, 2011 3:13 am
Posts: 32
Это FB и он очень большой.В качестве примера привожу первый Network

Code:
BEGIN
NETWORK
TITLE =
//Формирование сигнала готовности джойстика. Этот сигнал обеспечивает блокировку
//самопроизвольного включения привода передвижения и тормоза при:
//   - выходе из строя связанного с передвижением оборудования,
//   - срабатывании защитных устройств.
//А также запуск передвижения возможен при остановленных барабанах, иначе
//возможно
//перенатяжение или переослабление кабеля при повторных последовательных
//запусках.
      L     DINO;
      T     #DINO;

      CLR   ;
// в момент перевода джойстика из положения "вперёд" или "назад" сбрасываем сигнал Ready_for_control, чтобы
// дальшейшие действия по передвижению были возможны только после установки джойстика в нулевое положение.
      O(    ;
      A     #Forward_key;
      FN    #Forward_key_fn;
      )     ;
      O(    ;
      A     #Backward_key;
      FN    #Backward_key_fn;
      )     ;
      O(    ;
      A     #Totman_move;
      FN    #Totman_key_fn;
      )     ;
      A(    ;
      O     #Start_mode_key; // в наладочном или
      O     #Man_mode_key; // ручном режиме
      )     ;
      =     #Temp_1;

// собираем по "и" всевозможные условия разрешения передвижения.
// есть всевозможные напряжения питания
      AN    #Temp_1; // если нет выключения передвижения "вперёд" или "назад",
      A     #Control_supply;
      A     #Sound_supply;
      A     #Motor_qf;
      AN    #Main_qs_fail;
      A     #Brake_supply;

      AN    #Hardware_fail;
      A(    ; // не в наладочном режиме нет сбоя в работе кабельных барабанов.
      O     #Start_mode_key; // пока уберём.
      ON    #Drum_fail;
      )     ;

// органы управления в нужном состоянии
      A     #Switch_on;

      AN    #Inch_finish; // и не завершено передвижение "толчками"

// рельсовые захваты разжаты
      AN    #Rail_clamp_1_on;
      AN    #Rail_clamp_2_on;
      A     #Rail_clamp_1_off;
      A     #Rail_clamp_2_off;

      A(    ; // в ручном режиме при укладке работает стреловой конвейер.
//      O     #Boom_conveyor_on
      O     #Start_mode_key; //       
//      O     #Auto_mode_key         // в автоматическом режиме стреловой тоже должен работать
      O     #Capture_mode;
      )     ;

//   A(                                // и в ручном режиме при заборе работает роторное колесо
//  O     #Rotor_wheel_on
//  O     #Start_mode_key             //       
//  O     #Auto_mode_key
//  O     #Packing_mode
//  )     

      AN    #Brake_R_overheat;
      AN    #Wind;

// температура масла в редукторах в норме.
      AN    #T_03_LF_M1_ah;
      AN    #T_03_RF_M2_ah;
      AN    #T_03_RF_M3_ah;
      AN    #T_03_LF_M1_al;
      AN    #T_03_RF_M2_al;
      AN    #T_03_RF_M3_al;

// нет столкновения со штабалем и защитные тросы целостны.
      AN    #Hit_left;
      AN    #Hit_right;
      AN    #Protect_rope_left;
      AN    #Protect_rope_right;

      AN    #Mode_change; // и режим работы неизменен в процессе работы в одном из режимов,

// добавляем блокировку включения не из нейтрального положения джойстика.
      A(    ;

      O(    ; // джойстик в нейтральном положении
      O     #Start_mode_key; // в наладочном или
      O     #Man_mode_key; // ручном режиме
      A     #Stop_key;
      AN    #Forward_key;
      AN    #Backward_key;
//      AN    #Brake_drum_on_state        // чтобы следующее передвижение было возможно только после останова барабанов,

// иначе возможно перенатяжение (переослабление) кабеля при запуске.
      )     ;

      O(    ;
      AN    #Forward_auto; // нет сигнала запуска в автоматическом режиме работы
      AN    #Backward_auto;
      A     #Auto_mode_key;
      )     ;

      O     #Ready_for_control;
      )     ;

      SAVE  ;
// не достигнуты пределы передвижения
      AN(   ;
      O     #Start_mode_key; // в наладочном или
      O     #Man_mode_key; // ручном режиме
      A     #Forward_limit;
      A     #Forward_req; // при движении вперёд
      )     ;

      AN(   ;
      O     #Start_mode_key; // в наладочном или
      O     #Man_mode_key; // ручном режиме
      A(    ;
      O     #Backward_limit;
      O     #Backward_lim_switch_freq;
      )     ;
      A     #Backward_req; // при движении назад.
      )     ;

      AN(   ; // при этом стрела по повороту
// не выполняется следующее
      O(    ;
      O     #Sklad_zone_turn; // в зоне складского конвейера
      O     #Left_shtabel; // или в зоне левого штабеля
      A     #Forward_limit_1; // когда машина в зоне узла пересыпки
      =     #Block_turn_left;
      )     ;
      O     #Forward_lim_switch_freq;
      A     #Forward; // и идёт передвижение вперёд
      )     ;

      =     #Ready_for_control;

// --------- Формируем сигналы готовности к передвижению вперёд и назад для ОР.
      A     BR;
      AN    #Forward_limit;
      AN(   ;
      O     #Sklad_zone_turn; // в зоне складского конвейера
      O     #Left_shtabel; // или в зоне левого штабеля
      A     #Forward_limit_1; // когда машина в зоне узла пересыпки
      )     ;
      AN    #Forward_lim_switch_freq;
      =     #Ready_for_forward_OP;

      A     BR;
      AN    #Backward_limit;
      AN    #Backward_lim_switch_freq;
      =     #Ready_for_backward_OP;
// ---------


Top
 Profile  
 
PostPosted: Thu Feb 16, 2017 3:15 pm 
Site Admin

Joined: Thu Feb 16, 2006 6:25 pm
Posts: 2960
Location: Russia
Весь блок можно переписать в несколько веток LAD.
Предложенный Rex2701 вариант для данного фрагмента правильный.
При применении оператора А в начале он становится визуализированным во всех языках = результат будет идентичным - можешь проверить в симуляторе.


Top
 Profile  
 
PostPosted: Thu Feb 16, 2017 7:05 pm 

Joined: Wed Oct 13, 2010 11:44 am
Posts: 136
Location: Russian Federation
Mzman wrote:
Я тоже так подумал, но это не правильно.Вот что получилось из вашего примера :

...

И работают эти коды тоже по разному.

Я переводил свой LAD в STL, и да, заметил разницу. Но эта разница абсолютно непринципиальна, и вот почему:
1. Для нормального выполнения кода необходимо, чтобы флаг RLO = 1. Именно его проверяет первый оператор "А": (RLO AND BR) = (1 AND 1) = 1.
2. В вашем случае, зачем-то RLO сбрасывается, но следующему оператору "O" на это наплевать и в итоге разницы не будет: (RLO OR BR) = (0 OR 1) = 1.

Если вы считаете, что разница между CLR-O и просто A принципиальна - приведите бОльший кусок кода, где будет видна необходимость такой конструкции.
И соглашусь с выше отписавшимися - подобные конструкции LAD-редактором никогда не генерируются, это явное вмешательство человека.


Top
 Profile  
 
PostPosted: Tue Feb 21, 2017 11:00 am 

Joined: Sun Oct 02, 2011 3:13 am
Posts: 32
Я писал,что коды исходного STL и восстановленного LAD работают по разному. На самом деле это так,если из этих кодов делать FC. При FB все работает одинаково.
Всем спасибо.
Хотя мне и не понятно почему на FC коды отрабатывают по разному.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 10 posts ] 

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
Powered by International PLCforum® Forum Software © PLCforum
Mobile version