SIEMENS, DF&PD

Предыдущее посещение: Пн фев 01, 2016 22:50 Текущее время: Пн фев 01, 2016 22:50

Часовой пояс: UTC + 3 часа




 [ Сообщений: 26 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Определение фронта в SCL
СообщениеДобавлено: Ср июл 23, 2008 12:16 
Не в сети
Новый писатель

Зарегистрирован: Вт апр 01, 2008 10:37
Сообщения: 30
Вопрос возможно для многих простой (а я новичек пока), но все таки...
Подскажите пожалста, есть ли в SCL функция для определения положительного/отрицательного фронта импульса??? если есть то как до нее добраться? или может кто уже писал что то подобное? поделитесь пожалуйста


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июл 23, 2008 14:10 
Не в сети
Известный Писатель

Зарегистрирован: Пт июн 20, 2008 15:42
Сообщения: 105
Откуда: Россия
в сцл-е не пишу, но путем генерации сорса из стл-я получился вот такенный код:
Код:
BEGIN
NETWORK
TITLE =

      A     M      1.1;
      FP    M      1.2;
      =     M      1.3;

END_FUNCTION

отличается присутствием ";"
то есть все операторы в общем-то те же самые, а Вам нужен именно "FP <бит памяти для определения фронта>"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 24, 2008 3:03 
Не в сети
Известный Писатель

Зарегистрирован: Пт ноя 02, 2007 6:19
Сообщения: 458
Откуда: irk
команда fp - это уже фичи,
в старые добрые времена обработка фронта делалась так
(fp это суть тоже самое)
Код:
a  m 1.1
an m 1.2
= m 1.3

a m 1.1
= m 1.2

т.е. на scl (сам на нем тож не пишу)
будет что то вроде - если на нём нету аналога fp
Код:
if m1.1 AND NOT m1.2
THEN m 1.3:= true;
END_IF;
m1.2:=m1.1


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 24, 2008 8:05 
Не в сети
Известный Писатель

Зарегистрирован: Пт июн 20, 2008 15:42
Сообщения: 105
Откуда: Россия
Цитата:
если на нём нету аналога fp

Ну как же нет, если есть :)
Другое дело, что в SCL при выделении любого оператора + F1 в отличии от классической троицы представителей МЭК 61-131/3 выдалась какая-то ничего незначащая страница "Window for STL Source Files" вместо описания этого оператора. Что тут можно изучить?

2 il: а тебе самому какой кусок кода больше нравится ;)??


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 24, 2008 8:17 
Не в сети
Известный Писатель

Зарегистрирован: Пт ноя 02, 2007 6:19
Сообщения: 458
Откуда: irk
хотелось бы отметить что STL-source и SCL-source - разные вещи


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 24, 2008 8:52 
Не в сети
Известный Писатель

Зарегистрирован: Пт ноя 02, 2007 6:19
Сообщения: 458
Откуда: irk
Код:
m1.3:=m1.1 AND NOT m1.2;
m1.2:=m1.1;


во как на SCL лучче

Цитата:
2 il: а тебе самому какой кусок кода больше нравится ;)??

да по сути все одинаково, без FP - для меня чуть нагляднее, и чаще удобнее когда к одному фронту много чего привязывать приходиться.
а в MC7 имхо все равно все одинаково выглядеть будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 24, 2008 9:37 
Не в сети
Известный Писатель

Зарегистрирован: Пт июн 20, 2008 15:42
Сообщения: 105
Откуда: Россия
был не прав - это действительно разные редакторы и все у них разное :).
Единственное, к чему есть вопрос - это размер функции с этим кодом на SCL 64 байт а на STL - 46, без кода соотв 48 и 38 байт, итого приращение соответственно 16 и 8 байт на трех строчках..., ровно в 2 раза. Есть сомнение на счет одинаковости МС7


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 24, 2008 10:06 
Не в сети
Новый писатель

Зарегистрирован: Вт апр 01, 2008 10:37
Сообщения: 30
Мож я канеш дурачек но я особо ниче не понял %(
как все таки определить фронт импульса? ну хотя бы положительный...

Код:
if m1.1 AND NOT m1.2
THEN m 1.3:= true;
END_IF;
m1.2:=m1.1


объясните где какой маркер что означает пожалста


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 24, 2008 10:09 
Не в сети
Писатель со стажем

Зарегистрирован: Ср май 16, 2007 10:17
Сообщения: 743
Откуда: Austria, Bruck
2Nickname
SCL = Pascal
STL = Ассемблер


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 24, 2008 10:49 
Не в сети
Писатель со стажем

Зарегистрирован: Вт янв 11, 2005 8:43
Сообщения: 527
Откуда: Россия, г.Самара, ООО НВФ "СМС"
SCL конечно не оптимизирует код. Точнее оптимизирует, но не полностью.

По поводу фронта - обычно делаю так:

new_value := i0.0;
.....
if new_value and not old_value then
сдеать что то по фронту.
.....
old_value:= new_value;

new_value и old_value у меня как правило лежат в ДБ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 24, 2008 11:03 
Не в сети
Известный Писатель

Зарегистрирован: Пт ноя 02, 2007 6:19
Сообщения: 458
Откуда: irk
Цитата:
объясните где какой маркер что означает пожалста

код с IF - это глубокая бета ;)))
юзай этот
Код:
m1.3:=m1.1 AND NOT m1.2;
m1.2:=m1.1;

где m1.1 - это бит фронт которого мы ловим
m1.2 - вспомогательный бит
m1.3 - сигнальный бит - становиться равным 1 при переходе m1.1 из "0" в "1" (положительный фронт)
и будет = 1 до тех пор пока в следующем цикле программа не дойдет до этого места.

легко и просто модуфицируем в поимку отрицательного фронта

m1.3:=m1.2 AND NOT m1.1;
m1.2:=m1.1;

Цитата:
это размер функции с этим кодом на SCL 64 байт а на STL - 46, без кода соотв 48 и 38 байт, итого приращение соответственно 16 и 8 байт на трех строчках..., ровно в 2 раза. Есть сомнение на счет одинаковости МС7

если не пользовать FP - разницы в размере скомпиленного кода SCL и STL - у меня нет. все один в один.
если на STL сравнить два варианта с FP и без - разница 2 байта в пользу FP.
;)) наверно одна сэкономленная команда mc7,
за счет оптимизации транслятором кода копирования состояния контролируемого бита в бит вспомогательный ;)))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 24, 2008 11:26 
Не в сети
Известный Писатель

Зарегистрирован: Пт июл 04, 2008 10:21
Сообщения: 292
Откуда: Санкт-Петербург
Очень просто: введи СТАТИЧЕСКУЮ переменную, напр, count_bit и вперед:
IF count = True AND count_bit = False THEN
....
count_bit:= True;
ELSIF count= False AND count_bit= True THEN
count_bit:= False;
END_IF;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 26, 2008 8:38 
meister1024 писал(а):
Мож я канеш дурачек но я особо ниче не понял %(
как все таки определить фронт импульса? ну хотя бы положительный...



FP - это положительный: набери FP M 100.0 и нажми F1, там на диаграммах конкретно указано с привязкой к циклу.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 26, 2008 22:56 
Не в сети
Известный Писатель

Зарегистрирован: Вт янв 11, 2005 8:50
Сообщения: 460
Откуда: ОАО "Северсталь" ПХП
Общий принцип следующий.
1. Нужно иметь образ(копию) значения контролируемого бита.
Допустим нужно поймать отрицательный фронт входного сигнала I10.0
Для образа определяем свободный в системе меркер ,например ,M 12.0
2. Образ бита записывается в конце цикла или после проверки появления положительного или отрицательного фронта.
Для нашего случая
Код:
m12.0:=i10.0;

3. Проверка появления фронта. Анализируем состояние контролируемого бита и копии бита. Т.е. при появлении положительного фронта состояние контролиремого бита (I10.0) ="1", а копии(M12.0) = "0". При появлении отрицательного фронта, наоборот состояние контролиремого бита(I10.0) = "0", копии(M12.0) = "1"
впрограмме это может выглядеть так:
Код:
IF I10.0 AND NOT M12.0 THEN
    //действие для положительного фронта;
END_IF;

IF NOT I10.0 AND M12.0 THEN
    //действие для отрицательного фронта;
END_IF;

4. Ну и вобщем виде программа может выглядеть так
Код:
IF I10.0 AND NOT M12.0 THEN
    //действие для положительного фронта;
END_IF;

IF NOT I10.0 AND M12.0 THEN
    //действие для отрицательного фронта;
END_IF;
//делаем копию контролиремеого бита
m12.0:=i10.0;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июл 27, 2008 10:06 
Не в сети
Начинающий писатель

Зарегистрирован: Вт окт 02, 2007 14:55
Сообщения: 60
Dfcz писал(а):
FP - это положительный: набери FP M 100.0 и нажми F1, там на диаграммах конкретно указано с привязкой к циклу.
Специально для тех кто тормозит в бронепоезде:
hothing писал(а):
SCL = Pascal
STL = Ассемблер


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июл 27, 2008 11:08 
Не в сети
Известный Писатель

Зарегистрирован: Ср мар 19, 2008 6:36
Сообщения: 219
Asker писал(а):
Специально для тех кто тормозит в бронепоезде:
hothing писал(а):
SCL = Pascal
STL = Ассемблер

STL всегда был списком комманд. При чем тут ассемблер?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июл 27, 2008 15:19 
Не в сети
Известный Писатель

Зарегистрирован: Пт ноя 02, 2007 6:19
Сообщения: 458
Откуда: irk
Цитата:
STL всегда был списком комманд. При чем тут ассемблер?

то что он - "список команд" - не мешает ему быть ассемблероподобным языком.
Вы в курсе чем принципиально отличается ассемблер от любого языка высокого уровня? Вот точно этим же STL отличается от SCL, который является паскалеподобным языком.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июл 27, 2008 18:22 
Не в сети
Возможно это нечеловек

Зарегистрирован: Ср апр 19, 2006 20:58
Сообщения: 2390
Не надо подхватывать чужие дилетантско-пустословные бредовые лозунги у пытающихся встать на пути бронепоезда - бронепоезд их всё равно раздавит без торможения.

У используемых внутри изделий Сименса микропроцессоров абсоллютно различные архитектуры, наборы регистров и системы команд - поэтому у них свои ассемблеры и компиляторы с языков разного уровня.
Вот так выглядит настоящий ассемблер для одного из используемых Сименсом 16-ти разрядных микропроцессоров семейства Infineon C166 в контроллере S7-3152DP 0AF03
Изображение
Он неприменим для 32-х разрядного микропроцессора Infineon TriCore в S7-317
и наоборот
Код:
mov d0,#1
addih d0,d0,#0x1234



Ассемблеры являются аппаратно-зависимыми языками, то есть используемая в них система команд и типы адресации жёстко привязаны к конкретной аппаратной реализации микропроцессора
и в этом их основное отличие от языков высокого уровня, где аппаратные особенности микропроцессоров учитываются на уровне компилятора/интерпретатора команд языка высокого уровня.

STL ближе по уровню к первым Бейсикам и поддерживает систему команд виртуального процессора.

Никто не может вас заставить писать программу только на одном каком то языке - вы вправе писать процедуры (и иногда вынуждены из-за малого размера доступной памяти) на любом из доступных языков.
Что то удобнее на STL, что-то на LAD, что-то на SCL, но надо ещё учитывать удобство отладки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 28, 2008 4:47 
Не в сети
Известный Писатель

Зарегистрирован: Пт ноя 02, 2007 6:19
Сообщения: 458
Откуда: irk
март 2001 Ганс Бергер писал(а):
Для программирования блоков STEP 7 предназначены языки
программирования, соответствующие международному стандарту DIN EN
6.1131-3: STL ("statement list" - список мнемоник, Assembler-подобный язык)

не Бергер писал(а):
Команды языка ассемблера один в один соответствуют командам процессора и, фактически, представляют собой удобную символьную форму записи (мнемокод) команд и их аргументов

поэтому в stl и возможен полноценный онлайн-мониторинг
и изучение программы в stl из любого не твоего плк (читай дизассемблирование).
Я конечно все понимаю, но что же имел в виду преподобный Бергер если не это?
И смутно помнится вроде где то читалось что перегон в mc7 происходит чуть ли не во время заливки в конкретный плк.
"Язык ассемблера" - один, "ассемблер" (компилятор типа) - разный под конкретное железо. что не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 28, 2008 8:03 
Не в сети
Известный Писатель

Зарегистрирован: Пт июн 20, 2008 15:42
Сообщения: 105
Откуда: Россия
в чем спор? прочти Бергера - и можно смело утверждать что здесь Паскаль, а что асемблер; докопайся до команд микропроцессора и большинство вообще затихнут (? а разве можно из Степа это увидеть:). Ну и что?
Просмотрел примеры на SCL, из которых один оказался рабочим и вполне приличным по виду (тот что выдал il) для себя сделал вывод, что смысла использовать этот неэффективный инструментарий нет.

Как правило постановка задачи требует 2 подхода: тщательное и безупречное вылизывание кода волшебных функций (движок, AI, регулятор и в таком духе) и доступное для понимания электротехническому персоналу написание т.н. "пользовательских" функций управления агрегатами. Первый отлично обеспечивается STL, для второго к сожалению часто настаивают на квадратиках и полосочках (FDB и LAD :))))
SCL в этом ансамбле следует рассматривать именно как пилюля для привыкших к программированию на языках ВУ и имеющих возможность не отступать от этой привычки. Когда на этой теме предложили реализовать фронт в N строк (см выше)
Код:
IF count = True AND count_bit = False THEN
....
count_bit:= True;
ELSIF count= False AND count_bit= True THEN
count_bit:= False;
END_IF;

я удивился. Фронт - это элементарный кирпич; таких могут быть сотни и тысячи. Сравнить можно разве что с ездой на велосипеде под рамой - вроде едет, но не очень удобно.
А спорить о матчасти (является ли STL асемблером) не конструктивно, ибо при любом результате от этого мало что изменится кроме самооценки


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 [ Сообщений: 26 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


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

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


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

Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group