Программирование на Step7

Инженерное программное обеспечение

Программирование на Step7

Сообщение Автоматизатор » 30 янв 2013, 17:02

"Плохо, когда не знаешь, да еще и забудешь" (с)

Хочу использовать несколько SFB4 "TON", данные хранить компактно: в одном блоке данных или DB функционального блока. Вроде раньше получалось использовать в качестве типа данных SFB. А сейчас не получается.

КОД.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 894
Зарегистрирован: 09 окт 2012, 05:18

Re: Программирование на Step7

Сообщение Автоматизатор » 30 янв 2013, 17:17

Затупил, надо то было всего!!

CALL #WDtimer
IN:=
PT:=
Q :=
ET:=
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 894
Зарегистрирован: 09 окт 2012, 05:18

Re: Программирование на Step7

Сообщение Михайло » 30 янв 2013, 17:19

:) Теперь на всю жизнь запомнишь!
Михайло
Администратор
 
Сообщения: 3403
Зарегистрирован: 19 сен 2012, 19:16

Re: Программирование на Step7

Сообщение Михайло » 30 янв 2013, 17:21

Программируй в LD, там код как бы автоматически прописывается... Скопировал блок SFB из дерева на рабочее поле и функция CALL сама создается...
Михайло
Администратор
 
Сообщения: 3403
Зарегистрирован: 19 сен 2012, 19:16

Re: Программирование на Step7

Сообщение Автоматизатор » 30 янв 2013, 17:40

"call" написать не проблема, просто я неправильно вызывал (масло масленное получалось).

Думаю вообще на st написать. Вот, например, как просто организуется переход к текущему состоянию:

L "MemoryDB".STATE
JL S_0
JU S_00
JU S_01
JU S_02
JU S_03
JU S_04
JU S_05
JU S_06
JU S_07
JU S_08
JU S_09
JU S_10
JU S_11
JU S_12
JU S_13
JU S_14
JU S_15
JU S_16
S_0: NOP 0
S_00: NOP 0

А вот действие в 3 состоянии:

S_03: AN "S11"
= "Auto_Q".FU1_K6
= "Auto_Q".FU1_K13
AN "S12"
= "Auto_Q".FU1_K8
= "Auto_Q".FU1_K14
AN "S31"
= "Auto_Q".FU2_K6
= "Auto_Q".FU2_K13
AN "S32"
= "Auto_Q".FU2_K8
= "Auto_Q".FU2_K14
AN "S3"
= "Auto_Q".FU2_K2
= "Auto_Q".FU2_K5
AN "S4"
= "Auto_Q".FU2_K3
= "Auto_Q".FU2_K6
AN "S17"
= "Auto_Q".FU1_K10
AN "S19"
= "Auto_Q".FU2_K12
AN "S37"
= "Auto_Q".FU2_K10
AN "S39"
= "Auto_Q".FU2_K12

Если написать на LAD, то будет ОЧЕНЬ ГРОМОЗКО!
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 894
Зарегистрирован: 09 окт 2012, 05:18

Re: Программирование на Step7

Сообщение CHANt » 30 янв 2013, 17:54

Ага, не забудь только что по метке S_0 надо обработать - что если в "MemoryDB".STATE больше числа 17 то обнулить все к чертям и выйти из функции))

А вообще, шаблон для STL я приводил вот здесь - http://asutpforum.ru/viewtopic.php?f=35&t=1450
Аватара пользователя
CHANt
Профессионал
 
Сообщения: 531
Зарегистрирован: 13 окт 2012, 15:24
Откуда: Orenburg

Re: Программирование на Step7

Сообщение ward » 31 янв 2013, 08:16

JL: Распределенный переход
Формат
JL <метка>

Адрес Описание

<метка > Символьное имя метки перехода.


Описание
Инструкция JL <метка> (переход по списку) представляет собой распределитель переходов.
За ней следует ряд безусловных переходов на метки (максимум 255 ) и заканчивается этот список перед меткой , указанной в самой инструкции JL<метка>.
Все инструкции списка : JU инструкции.
Номер выполняемого перехода (от 0 до 255) берется из ACCU 1-L-L.
Инструкция JL передает управление одной из JU инструкций, если значение в аккумуляторе меньше общего количества безусловных переходов между инструкцией JL и меткой этой инструкции.

Первая в списке инструкция JU будет выполнена при ACCU 1-L-L=0.
Вторая в списке инструкция JU будет выполнена при ACCU 1-L-L=1, и так далее. Инструкция JL передает управление на метку за последней инструкцией JU в списке если число в аккумуляторе, определяющее номер перехода, больше или равно общему числу переходов в списке .
Список инструкций распределенного перехода не должен содержать других инструкций кроме JU.

Код:

Пример

Комментарий
L MB0 // Загрузка номера перехода в ACCU 1-L-L.
JL LSTX // Переход выполняется при ACCU 1-L-L > 3.
JU SEG0 // Переход выполняется при ACCU 1-L-L = 0.
JU SEG1 // Переход выполняется при ACCU 1-L-L = 1.
JU COMM // Переход выполняется при ACCU 1-L-L = 2.
JU SEG3 // Переход выполняется при ACCU 1-L-L = 3.
LSTX: JU COMM // Конец списка переходов
SEG0: L 0 // Исполняемая инструкция
T MB1
JU COMM
SEG1: L 1 // Исполняемая инструкция
T MB1
JU COMM
SEG3: L 2 // Исполняемая инструкция
T MB1
JU COMM
COMM: L 3
T MB1



В этом примере переменная MB0 содержит число, загружаемое в аккумулятор accumulator 1. Вслед за операцией загрузки следует распределитель переходов JL с меткой LSTX, указывающей на конец списка функций перехода JU.
Номер перехода, который должен быть выполнен, содержится в правом байте аккумулятора accumulator 1. Если этот аккумулятор содержит 0, то выполняется первая функция перехода. Если этот аккумулятор содержит 1, то выполняется вторая функция перехода и так далее.

Если число в аккумуляторе превышает размер списка операторов перехода, то происходит переход на конец списка (на первую инструкцию, следующую за набором функций перехода JU).
JL не зависит ни от каких условий и не изменяет битов состояния.
При этом только выражения с оператором JU, располагающиеся без пробелов, допускаются в списке операторов перехода функции JL.
Назначая произвольные метки для этих операторов перехода, Вы должны придерживаться общих правил для меток.
ward
Специалист
 
Сообщения: 411
Зарегистрирован: 12 ноя 2012, 08:44

Re: Программирование на Step7

Сообщение CHANt » 31 янв 2013, 08:21

В этом примере ошибка!
Перед инструкцией JL используется байт MB0, а по телу программы используется MB1, тогда как должен быть везде один и тот же байт.
ЗЫ: к справке, переведенной на русский язык, надо относится вдумчиво :D Кстати, вместо байта можно использовать INT (целое), но ограничения останутся прежние - 255 переходов максимум.
Аватара пользователя
CHANt
Профессионал
 
Сообщения: 531
Зарегистрирован: 13 окт 2012, 15:24
Откуда: Orenburg

Re: Программирование на Step7

Сообщение ward » 31 янв 2013, 10:05

может в этом примере в MB1 записывается номер перехода, которые в MB0, не?? И никаким образом в программой и JL не связан?

А что в русской справке много ошибок?
ward
Специалист
 
Сообщения: 411
Зарегистрирован: 12 ноя 2012, 08:44

Re: Программирование на Step7

Сообщение CHANt » 31 янв 2013, 10:49

ward писал(а):может в этом примере в MB1 записывается номер перехода, которые в MB0, не?? И никаким образом в программой и JL не связан?

Ну может афтор где нибудь и сделал типа:
Код: Выделить всё
L MB1
T MB0

Но тогда надо об этом указывать :D А так как в примере - работать не будет

ward писал(а):А что в русской справке много ошибок?

Люди же переводят. Я не подсчитывал, но попадались.
Аватара пользователя
CHANt
Профессионал
 
Сообщения: 531
Зарегистрирован: 13 окт 2012, 15:24
Откуда: Orenburg

Re: Программирование на Step7

Сообщение Михайло » 31 янв 2013, 11:12

ward писал(а):А что в русской справке много ошибок?

Справка по контроллерам не такая уж ущербная как, например, по приводам. Я к своему ужасу у Сименса видел даже что-то типа машинного перевода...
Михайло
Администратор
 
Сообщения: 3403
Зарегистрирован: 19 сен 2012, 19:16

Re: Программирование на Step7

Сообщение CHANt » 31 янв 2013, 11:36

В примере еще вроде ошибки есть.
В общем, как я понимаю, цель программы перебирать все переходы 0-1-2-3 бесконечно, то листинг будет такой:
Код: Выделить всё
L MB0           // загружаем номер перехода
JL LSTX         // если больше трех, то переход на метку LSTX
JU SEG0
JU SEG1
JU COMM
JU SEG3
LSTX: L 0                  //в случае если в MB0 попало левое число которое больше 3 или больше 255, то обнулить MB0
T MB0
JU End

SEG0: L 1 // Исполняемая инструкция
T MB0
JU End

SEG1: L 2 // Исполняемая инструкция
T MB0
JU End

COMM: L 3 // Исполняемая инструкция
T MB1
JU End

SEG3: L 0 // Завершить перебор
T MB0
JU End

End: NOP 0 //конец подпрограммы (просто выход, можно через BE)



Вот при таком листинге, каждый скан контроллера будет выполняться один переход.
Аватара пользователя
CHANt
Профессионал
 
Сообщения: 531
Зарегистрирован: 13 окт 2012, 15:24
Откуда: Orenburg


Вернуться в Simatic TIA Portal / Step7

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0