Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: КА и ST программы

  1. #1

    Question КА и ST программы

    Код:
    (****кусочек 1******)
    CASE i OF
    	1: i:=i+1;
    	2: i:=i+1;
    	3: i:=i+1;
    	4: i:=i+1;
    	5: i:=i+1;
    	6: i:=i+1;
    	7: i:=i+1;
    	8: i:=i+1;
    	9: i:=i+1;
    	10: i:=1;
    END_CASE
    (*****кусочек 2****)
    IF i=0 THEN i:=i+1; END_IF
    IF i=1 THEN i:=i+1; END_IF
    IF i=2 THEN i:=i+1; END_IF
    IF i=3 THEN i:=i+1; END_IF
    IF i=4 THEN i:=i+1; END_IF
    IF i=5 THEN i:=i+1; END_IF
    IF i=6 THEN i:=0; END_IF
    (****кусочек 3******)
    //IF udc.reset=TRUE THEN udc.RESET:=FALSE; END_IF 
    
    IF udc.CV =0 THEN udc.CU :=TRUE;END_IF
    IF udc.CV =1 THEN udc.CU :=TRUE;END_IF
    IF udc.CV =2 THEN udc.CU :=TRUE;END_IF
    IF udc.CV =3 THEN udc.CU :=TRUE;END_IF
    IF udc.CV =4 THEN udc.CU :=TRUE;END_IF
    
    IF udc.Q=TRUE THEN udc.RESET:=TRUE;END_IF
    IF udc.CU THEN udc.CU :=FALSE;END_IF
    
    udc (
    pv:=5);
    
    (*****кусочек 4*****)
    WHILE mainLoop DO
    
    IF i=0 THEN i:=i+1; END_IF
    IF i=1 THEN i:=i+1; END_IF
    IF i=2 THEN i:=i+1; END_IF
    IF i=3 THEN i:=i+1; END_IF
    IF i=4 THEN i:=i+1; END_IF
    IF i=5 THEN i:=i+1; END_IF
    IF i=6 THEN i:=0; END_IF
    
    END_WHILE
    
    (*************)
    имеем указанный код^ на ST, скармливаемый CDS v3.5

    а теперь ув. знатоки ВОПРОС ?

    какой кусок из перечисленных будет работать как конечный автомат ?
    начальная переменная инициализируется снаружи (для отладки).

    как реализовать конечный автомат на ST?
    как это сделать корректно?

    просьба не писать "мне нравится так",
    а скомпилить и посмотреть как оно работает,
    а потом написать,
    я думаю что этот вариант лучше потому что...
    будем коллективно обсуждать.

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    скачайте базовую библиотеку OSCAT и посмотрите как работает функция INC1
    А по поводу кусков выше, написан бред, бесполезно занимающий ресурсы процессора

  3. #3
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    как реализовать конечный автомат на ST?
    как это сделать корректно?
    Код:
    (* Избегаем чисел, господа. Избегаем чисел *)
    TYPE PROCESS_STAGE :
    	(InitStage, ProcessingStage, ExposureStage, ProductCoolingStage);
    END_TYPE
    
    CASE state OF
    	InitStage:
    		(* Do stuff *)
    		IF Initialized THEN
    			state := ProcessingStage;
    		END_IF
    	ProcessingStage:
    		(* Do stuff *)
    		IF Processed THEN
    			state := ExposureStage;
    		END_IF
    	ExposureStage:
    		(* Do stuff *)
    		IF ExposureComplete THEN
    			state := ProductCoolingStage;
    		END_IF
    	ProductCoolingStage:
    		(* Do stuff *)
    		IF T < 30 THEN
    			state := InitStage;
    		END_IF
    END_CASE
    Это общепринятый подход. Бонусы использования перечислений вместо числовых констант — легко вставлять и удалять состояния, хорошая чиаемость кода.
    Последний раз редактировалось Yegor; 31.01.2013 в 13:48.

  4. #4

    По умолчанию

    Все верно, пример с CASEом понятен и корректен.
    видимо я не совсем правильно поставил вопрос.

    Правильно так:
    Какие конструкции языка используются для описания КА и почему?

    почему нельзя использовать несколько условных операторов, а можно только case?

    есть ли библиотеки с некой стандартной реализацией КА?
    как например на С?

  5. #5

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    скачайте базовую библиотеку OSCAT и посмотрите как работает функция INC1
    А по поводу кусков выше, написан бред, бесполезно занимающий ресурсы процессора
    линки на библиотеку в студию, будем разбирать
    написанный выше код, естественно не имеет никакого смысла, вопрос
    КАКИЕ ВЫРАЗИТЕЛЬНЫЕ СРЕДСТВА ST ВЫ ИСПОЛЬЗУЕТЕ для реализации КА и почему?

  6. #6
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    Цитата Сообщение от ktyjixy Посмотреть сообщение
    линки на библиотеку в студию, будем разбирать
    написанный выше код, естественно не имеет никакого смысла, вопрос
    КАКИЕ ВЫРАЗИТЕЛЬНЫЕ СРЕДСТВА ST ВЫ ИСПОЛЬЗУЕТЕ для реализации КА и почему?
    http://oscat.de/downloadmanager/view...asic-text.html

    http://oscat.de/downloadmanager/view...u-english.html

  7. #7
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    почему нельзя использовать несколько условных операторов, а можно только case?
    кАнЕШна МожНА ТоЛьк ЧТМСТЬ кода worsening итц мининг becoms cluttered, u know. «CASE state», «switch(step)» и т.п. это вообще своего рода фразеологизмы в программировании — видя эти два слова, сразу понимаешь, что перед тобой с вероятностью 90% автомат; «IF step = » таким свойством похвастать не может. В других ЯП CASE ещё и быстрее, чем простыня ифов.
    есть ли библиотеки с некой стандартной реализацией КА?
    Именно библиотек нет, наверное. Можете заполнить эту нишу, если считаете, что спрос будет. Ништяков там всяких наделать — сохранение состояния при выключении питания, пауза и т.п. С gtfox'ом скооперируйтесь.
    Последний раз редактировалось Yegor; 01.02.2013 в 11:59.

  8. #8

    По умолчанию

    Обязательно на ST?


  9. #9

    По умолчанию

    Цитата Сообщение от Игорь Петров Посмотреть сообщение
    Обязательно на ST?
    да, вопрос именно по ST.

    а что за прилада как на рисунке?
    я не знаком, вроде бы как UML statechart в кодесисе

    там же мэковская версия КА вроде есть, SFC что ли
    чем она не устраивает ?

  10. #10
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,318

    По умолчанию

    Ну Вам же Егор вполне ясно объяснил - КА можно и из IF, просто выразительней и лаконичней CASE в текстовых языках ничего нет

    Код:
    IF i=0 THEN i:=i+1; END_IF
    IF i=1 THEN i:=i+1; END_IF
    ...
    IF i=6 THEN i:=0; END_IF
    А это не КА. Если хотите КА из IF сделать, то
    Код:
    IF i=0 THEN i:=i+1;
    ELSIF i=1 THEN i:=i+1;
    ...
    ELSIF i=6 THEN i:=0; END_IF
    Это КА из IF

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Считывание программы из ПЛК
    от MasterZ в разделе ПЛК1хх
    Ответов: 29
    Последнее сообщение: 30.12.2020, 20:24
  2. Остановка программы в плк-100
    от Сергей Борисович в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 30.09.2011, 13:22
  3. защита программы в плк
    от Юрий_1900 в разделе ПЛК1хх
    Ответов: 14
    Последнее сообщение: 21.06.2010, 21:22
  4. Адаптация программы под ПЛК 154
    от Andrupel в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 04.08.2009, 12:55

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •