1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Разбор кода STL Step 7

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)
Ответить

Автор темы
Dron_Tat
здесь недавно
здесь недавно
Сообщения: 82
Зарегистрирован: 07 янв 2017, 09:12
Имя: Андрей
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Разбор кода STL Step 7

Сообщение Dron_Tat »

Разбираю код итальянцев, проект без комментариев, написан на языке STL и применена косвенная адресация.

Код: Выделить всё

      CALL  FC   303
       IN0  :=#TEMP11
       IN1  :=FALSE
       IN2  :=TRUE
       IN3  :=FALSE
       IN4  :=M1017.1
       IN5  :=TRUE
       IN6  :=TRUE
       IN7  :=M2600.1
       IN8  :=8
       IN9  :=0
       IN10 :=5
       IN11 :=MW96
       IN12 :=M90.1
       IO13 :=P#DB111.DBX 10000.0
       IO107:=M2007.5
       IO108:=M30.0
       IO109:=M30.1
       IO110:=M30.2
И сама FC 303(часть кода):

Код: Выделить всё

 AN    #IN0
      AN    #IO13.IO35
      =     #IO13.IO26
      A     #IN1
      AN    #IO13.IO35
      =     #IO13.IO27
      AN    #IN2
      AN    #IO13.IO35
      =     #IO13.IO28
      O     #IO13.IO26
      O     #IO13.IO27
      O     #IO13.IO28
      O     #IO13.IO29
      O     #IO13.IO48
      O     #IO13.IO51
      =     #IO13.IO79
      O     #IO13.IO26
      O     #IO13.IO27
      O     #IO13.IO28
      O     #IO13.IO29
Что это такое #IO13.IOХХ. Я поняимаю что это входные/выходные данные, но не понимаю после "точки"
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Разбор кода STL Step 7

Сообщение aranea »

хардкор!
какой тип у IO13 в FC303?
IO13 :=P#DB111.DBX 10000.0 - это указатель на начальный адрес при вызове функции
а #IO13.IO35 - обращение к 35 биту, начиная с этого адреса, наверное =)

решеткой (#) обозначаются локальные переменные, чтобы не путать с глобальными в случае совпадения имени
Изображение

Автор темы
Dron_Tat
здесь недавно
здесь недавно
Сообщения: 82
Зарегистрирован: 07 янв 2017, 09:12
Имя: Андрей
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Разбор кода STL Step 7

Сообщение Dron_Tat »

Это еще тот хардкор :crazy0to: я у них только 15% разобрал код, но основное еще не совсем понял. IO13 имеет структурный тип. У меня тоже была такая догадка. Спасибо за помощь, буду разбираться дальше
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Разбор кода STL Step 7

Сообщение aranea »

Dron_Tat писал(а): IO13 имеет структурный тип
тогда #IO13.IO35 - это элемент структуры =) там ведь есть IO35?
больше похоже на программу выгруженную из ПЛК без исходников (нет символьных имен и комментариев)
Изображение

Автор темы
Dron_Tat
здесь недавно
здесь недавно
Сообщения: 82
Зарегистрирован: 07 янв 2017, 09:12
Имя: Андрей
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Разбор кода STL Step 7

Сообщение Dron_Tat »

Да, так и есть, из ПЛК. Исходников нет. IO35 и все остальные в структуре присутствуют, они булевые. Но мысли правильные, то что все эти IO привязываются к данной DB с "точкой входа"?
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1617
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 70 раз
Поблагодарили: 189 раз

Разбор кода STL Step 7

Сообщение petr2off »

Извиняюсь за крамольную мысль - а может быть проще будет самим написать ? Берете STEP - 7 и пишете - как минимум у Вас исходный текст проекта появится.

Автор темы
Dron_Tat
здесь недавно
здесь недавно
Сообщения: 82
Зарегистрирован: 07 янв 2017, 09:12
Имя: Андрей
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Разбор кода STL Step 7

Сообщение Dron_Tat »

Писать много надо, да еще цех взрывоопасный. Я еще сам хотел в ихнем коде разобраться, понять как они пишут, может что то интересное найду для себя :ges_hmm:

45678
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 18 авг 2016, 11:56
Имя: Семен Петрович Иванов
Благодарил (а): 1 раз

Разбор кода STL Step 7

Сообщение 45678 »

Подскажите пожлста, как определить, где в программе используется переменная блока данных?
может быть есть простой способ, чтобы не просматривать кажый OB, FB, FC. И по аналогии, как определить с каких мест программы происходит запись в переменную DB.

winb
освоился
освоился
Сообщения: 248
Зарегистрирован: 31 янв 2017, 08:44
Имя: Маркушин Андрей Геннадьевич
Страна: Россия
город/регион: Нижегородская обл., Выкса
Благодарил (а): 19 раз
Поблагодарили: 64 раза

Разбор кода STL Step 7

Сообщение winb »

Используйте Cross Reference. Установите фильтр на блок данных, либо на саму переменную. Замечание: проект должен быть актуальным!

45678
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 18 авг 2016, 11:56
Имя: Семен Петрович Иванов
Благодарил (а): 1 раз

Разбор кода STL Step 7

Сообщение 45678 »

Извиняюсь, а какой смысл вложен в слово "актуальный"? Имеется ввиду онлайн на плк?
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1617
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 70 раз
Поблагодарили: 189 раз

Разбор кода STL Step 7

Сообщение petr2off »

По поводу нотации с точками наверно смогу ответить. При условии, что следующие посылы верны:
1) Проект писался на языке высокого уровня, т.е. тезис о косвенной адресации бессмысленный. Нет в IECовских языках абсолютной адресации. Там фигурируют локальные и глобальные переменные.
2) Нет в IECовских языках никаких структур, они весьма простые. Бэйсик по сравнению с ними монстр
3) Надо учесть разницу между вызовом функции и вызовом функционального блока. Долго распространятся не буду, это все можно в документации прочитать - но каждый экземпляр функционального блока имеет свой блок данных (в отличии от функции). Точечная нотация используется для доступа к переменным этого блока.

На языке высокого уровня это может выглядеть так:
ST_PNO1(NDC01EC001ZU14); - вызов экземпляра ST_PNO1
S_ON := ST_PNO1.f_ON; - получение 1-го выходного параметра ...
S_STOP := ST_PNO1.f_STOP;
S_UP := ST_PNO1.f_UP;
S_DOWN := ST_PNO1.f_DOWN;
S_ERR := ST_PNO1.f_ERR;
Если бы это был вызов функции это выглядело бы как CALL ST_PNO1(NDC01EC001ZU14,S_ON,S_STOP,S_UP,S_DOWN,S_ERR)

Ну и напоследок - вообще то вы имеете дело не с исходным кодом программы, а скомпилированным для некоторой машины, который потом ее интерпретируется. Под машиной я естественно не грузовик имею в виду. И зря Вы считаете задачу реинжиниринга кода проще написания нового, я в этом не уверен.

winb
освоился
освоился
Сообщения: 248
Зарегистрирован: 31 янв 2017, 08:44
Имя: Маркушин Андрей Геннадьевич
Страна: Россия
город/регион: Нижегородская обл., Выкса
Благодарил (а): 19 раз
Поблагодарили: 64 раза

Разбор кода STL Step 7

Сообщение winb »

45678 писал(а): Извиняюсь, а какой смысл вложен в слово "актуальный"? Имеется ввиду онлайн на плк?
Программные блоки, содержащиеся в проекте, должны совпадать с программными блоками, находящимися в ПЛК ("онлайн").

Отправлено спустя 3 минуты 4 секунды:
petr2off писал(а): Нет в IECовских языках абсолютной адресации. Там фигурируют локальные и глобальные переменные.
2) Нет в IECовских языках никаких структур, они весьма простые. Бэйсик по сравнению с ними монстр
Небольшое замечание - LAD, FBD, ST - так же являются "IECовскими языками"
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1617
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 70 раз
Поблагодарили: 189 раз

Разбор кода STL Step 7

Сообщение petr2off »

Ну да, еще SFC добавить и будет почти полный комплект. Я к тому, что STL - сейчас имеет очень ограниченную область применения. По своему смыслу это IECовский ассемблер, именно той engine в которую транслируют и LAD,FDB,ST. Т.е. результатом их компиляции в целевую машину будет загружено все абсолютно тоже,что и после STL. Отсутствие абсолютной адресации на это намекает. Скажем в том же Graidex - 2 гига озу, и крутится там Isagrafские программулички и ST и FDB и SFC. 8 ядер грузят машинку процентов на 10. Я необходимости в STL сейчас не вижу, разве что встроенные системки. Где нужно килобайты считать - и то, последние чипы - практически полноценные машины. Не верю я, что итальянцы на STL писали. Но это конечно чисто мое мнение.

Parliament74
авторитет
авторитет
Сообщения: 812
Зарегистрирован: 16 ноя 2016, 11:33
Имя: Максим Владимирович
Страна: Россия
город/регион: Магнитогорск
Благодарил (а): 16 раз
Поблагодарили: 209 раз

Разбор кода STL Step 7

Сообщение Parliament74 »

petr2off писал(а): Не верю я, что итальянцы на STL писали.
Они и не писали на STL - просто когда у них систему покупали, то покупали по-принципу "подешевле-подешевле", а теперь поменять что-то в программе - это надо их сюда звать и $$$ им платить за работу, а при отечественном эффективном менеджменте такие вопросы решаются просто: "тыжинженер - вот иди и меняй".

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3575
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 271 раз

Разбор кода STL Step 7

Сообщение Михайло »

В классическом Step7 очень много программ написано в STL (IL), этот язык был всегда более популярен, чем SCL (ST). Сейчас во времена ТИА Портала альтернативы SCL (ST) нет - только в нем можно циклы писать, коммуникационные функции. Раньше писали в STL (IL), по привычке и не только циклы, но и простую логику.

45678
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 18 авг 2016, 11:56
Имя: Семен Петрович Иванов
Благодарил (а): 1 раз

Разбор кода STL Step 7

Сообщение 45678 »

Подскажите как посмотреть откуда пишется значение в блок данных?
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1617
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 70 раз
Поблагодарили: 189 раз

Разбор кода STL Step 7

Сообщение petr2off »

Причины былой популярности STL понятны. В прошлом возможности PLC были существенно более скромными. И по памяти и по производительности процессора. Я тут недавно смотрел сименсовый проект, 5-и летней давности. У контроллера 128 мб озу в базовой комплектации + модуль расширения памяти - 8 мбайт !! Понятно, что в условиях ограниченности ресурса есть ниша для инструмента, который позволяет эти ресурсы экономить. Но с точки зрения сопровождения - все значительно сложнее. По факту - STL - 'это ассемблер абстрактной машины с 1 аккумулятором. Все операции на него завязаны. Через операции чтения и записи. В отладчике, увидеть цепочку прохождения сигнала в runtime для STL - не тривиальная задача.

Автор темы
Dron_Tat
здесь недавно
здесь недавно
Сообщения: 82
Зарегистрирован: 07 янв 2017, 09:12
Имя: Андрей
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Разбор кода STL Step 7

Сообщение Dron_Tat »

Возможно вы правы что проект был написан на другом языке, пользуюсь чем что досталось мне, т.е. ничего. Лично у итальянцев мне понравилась SCADA. Там было все, лишний раз нет необходимости лезть в ПЛК. Возможно у всех так, опыт у меня не большой. И кстати, они написали небольшой блок в ПЛК, который запрашивает пароль каждый месяц :ges_up:
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1617
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 70 раз
Поблагодарили: 189 раз

Разбор кода STL Step 7

Сообщение petr2off »

Остается только посочувствовать. Дело даже не в сложности задачи - а в подходе. В принципе возможны 2 варианта:
1 - внешнее сопровождение (очень модно на западе, они ему даже слово придумали - аутсосрсинг, в этом случае у тебя только одна головная боль - где взять денег, потому как ломят не хило.
2 - внутреннее сопровождение, но тут нужно что бы проект был с исходным кодом, обязательно овладение технологией. Схема утром купили пианино, а веером придет чувак и покажет как на нем играть не прокатит. Т.е. меньшие деньги но больше времени нужно.
Но у нас практикуется другой, тут наши манагеры немного обгадились - а вы парни теперь должны как то выкрутится.

Автор темы
Dron_Tat
здесь недавно
здесь недавно
Сообщения: 82
Зарегистрирован: 07 янв 2017, 09:12
Имя: Андрей
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Разбор кода STL Step 7

Сообщение Dron_Tat »

Что как работает у меня уже есть образ в голове, пароль этот успешно исключен из программы. Просто есть сложность в поисках ответов при поступлении проблем. Кстати, вопрос, если программу написать на SCL и загрузить IM151-8 PN/DP CPU, то обратная выгрузка невозможна? это на всех 300?
Ответить

Вернуться в «Simatic Step7»