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

Код на STL, адресация

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)

Модератор: Глоб.модераторы

Ответить
Аватара пользователя

Автор темы
VADR
администратор
администратор
Сообщения: 4903
Зарегистрирован: 25 июл 2008, 07:12
Имя: Диев Александр Васильевич
Страна: Россия
город/регион: г. Сегежа, Карелия
Благодарил (а): 236 раз
Поблагодарили: 425 раз

Код на STL, адресация

Сообщение VADR »

Приветствую, коллеги.

В порядке самообразования ковыряю один подвернувшийся под руку проект (железо - Simatic S7-400). Есть пара вещей, которые не могу понять.
1. Функция, скомпилированная из исходника на SCL (исходник не сохранился), вернее - только начало функции:

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

      SET   
      SAVE  
      =     L      0.1
      UC    FC    70
            P#0.1
            P#M 8.0
      A     BR
      =     DB1036.DBX   42.5
      A     DBX    1.4
      JCN   A7d0
      UC    FC  1144
A7d0: OPN   DB  1002
      CLR   
      A     DBX  404.1
      ...
1.1. Не очень понимаю смысл сохранения "1" в регистр BR, после чего - закидывание её же в бит локальной переменной с адресом 0.1 (к слову, в описании функции в TEMP никаких локальных переменных не объявлено). Это нормально - писать данные в необъявленные адреса? И собственно зачем эта единица в BR?
1.2. В четвёртой строке - вызов функции FC70 командой UC, а две строки после неё - передаваемые параметры? Та самая локальная единица и меркер M8.0? Но ведь вроде как UC вызывает функцию без параметров. Или я тут что-то путаю?
1.3. В 8-й строке идёт прямая запись бита по адресу DB1036.DBX 42.5. Разве тут не надо открывать блок командой OPN, как сделано ниже?

2. В описании оборудования один из узлов выглядит так:
screen000.jpg
Понятно, что устройству выделены адреса 644..651 в областях I и Q. А что за адреса 652..663 ниже них обозначены курсивом и стрелкой? Зачем эти курсив и стрелка?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.

Ibev
здесь недавно
здесь недавно
Сообщения: 40
Зарегистрирован: 11 окт 2016, 08:38
Имя: Владимир
Страна: Россия
город/регион: Новочебоксарск
Благодарил (а): 2 раза
Поблагодарили: 5 раз

Код на STL, адресация

Сообщение Ibev »

А точно изначально на STL написано?
Аватара пользователя

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

Код на STL, адресация

Сообщение aranea »

больше на результат компиляции из CFC похоже
Изображение

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

Код на STL, адресация

Сообщение winb »

VADR писал(а): Не очень понимаю смысл сохранения "1" в регистр BR, после чего - закидывание её же в бит локальной переменной с адресом 0.1 (к слову, в описании функции в TEMP никаких локальных переменных не объявлено). Это нормально - писать данные в необъявленные адреса? И собственно зачем эта единица в BR?
Указано - исходный язык SCL. В настройках компилятора можно указать - сохранять ли состояние BR, думаю, что эта программная конструкция служит как раз для этого. В конце блока должно быть что-то типа "A L0.1 (ret) SAVE", если я не ошибаюсь.
Вообще - разбирать скомпилированный код с другого языка (SCL, CFC) - занятие неблагодарное, так как компиляция кода ведётся без учёта правил редактора программного блока для языка STL: нет ограничения длины кода внутри нетворка, допускаются такие конструкции языка STL, которые редактор программного блока в жизни не разрешит использовать. Хотя, возможно, эти конструкции можно будет отчасти повторить через компиляцию исходного текста на языке STL.
Вообще, если задача стоит в восстановлении исходника SCL из скомпилированного блока, можно воспользоваться определенными приемами, описанными на одном из "соседних" форумов (ссылку дам при разрешении администрации (в лице топикстартера, например :-P ), ибо не этично. А вообще - гугль в помощь)
Последний раз редактировалось winb 22 мар 2017, 12:29, всего редактировалось 1 раз.

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

Код на STL, адресация

Сообщение winb »

winb писал(а): В настройках компилятора можно указать - сохранять ли состояние BR, думаю, что эта программная конструкция служит как раз для этого
Извиняюсь, наврал. Опция зовётся Set OK Flag, и на наличие этой программной конструкции никак не влияет. Ясно, только, что она служит для реализации механизма EN-ENO
Аватара пользователя

Автор темы
VADR
администратор
администратор
Сообщения: 4903
Зарегистрирован: 25 июл 2008, 07:12
Имя: Диев Александр Васильевич
Страна: Россия
город/регион: г. Сегежа, Карелия
Благодарил (а): 236 раз
Поблагодарили: 425 раз

Код на STL, адресация

Сообщение VADR »

Ibev писал(а): А точно изначально на STL написано?
На SCL. По крайней мере, так написано в Simatic Manager, где указан язык функции.

Отправлено спустя 1 минуту 58 секунд:
winb писал(а): Вообще, если задача стоит в восстановлении исходника SCL из скомпилированного блока, можно воспользоваться определенными приемами, описанными на одном из "соседних" форумов (ссылку дам при разрешении администрации (в лице топикстартера, например :-P ), ибо не этично. А вообще - гугль в помощь)
Задача несколько в другом - понять, что эта функция делает :)
Насчёт ссылки на соседний форум - буду не против.

Отправлено спустя 30 секунд:
А как насчёт других вопросов?
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.

POV
авторитет
авторитет
Сообщения: 800
Зарегистрирован: 12 авг 2008, 11:05
Имя: Патрушев Олег Валерьевич
Страна: Россия
город/регион: г. Н.Новгород
Благодарил (а): 110 раз
Поблагодарили: 158 раз

Код на STL, адресация

Сообщение POV »

Старые версии PCS7 компилировали CFC charts через SCL, то есть CFC -> SCL -> STL, там и не такие перлы видел, поддержу рекомендацию смотреть исходный проект.
По второму вопросу - это сложное устройство, вот его описание и надо смотреть, иногда исходный .gsd файл содержит больше информации о назначении этих слов, но бывает и такая картина, или более сложная - еще больше дополнительных строчек. Ищите описание устройства от производителя или хотя бы .gsd от него.
Аватара пользователя

Автор темы
VADR
администратор
администратор
Сообщения: 4903
Зарегистрирован: 25 июл 2008, 07:12
Имя: Диев Александр Васильевич
Страна: Россия
город/регион: г. Сегежа, Карелия
Благодарил (а): 236 раз
Поблагодарили: 425 раз

Код на STL, адресация

Сообщение VADR »

POV писал(а): Старые версии PCS7 компилировали CFC charts через SCL, то есть CFC -> SCL -> STL, там и не такие перлы видел, поддержу рекомендацию смотреть исходный проект.
Увы, как я уже писал в самом начале, исходник не сохранился. Есть в папке "Source Files" файл @SCLFileFromCFC_SFC_1, но он нулевого размера.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.
Аватара пользователя

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

Код на STL, адресация

Сообщение aranea »

при открытии проекта Step7 не ругается на отсутствие компонентов? CFC например? Папки Charts нет в дереве проекта (рядом с Sources и Blocks)?
cfc.png
разгребать код компилятора "В порядке самообразования" смысла нет, много служебных команд, которые в обычной жизни не используются

по поводу курсива, точно не помню, то что обычным шрифтом - адрес IO области для синхронного обмена, можно изловчиться читать и писать с помощью SFC14/SFC15 (DPRD_DAT/DPWR_DAT)
асинхронный обмен вроде по диагностическому адресу, а может и по курсиву (давно не сименсил)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Изображение
Аватара пользователя

CHANt
эксперт
эксперт
Сообщения: 1467
Зарегистрирован: 25 июл 2008, 10:25
Имя: Эдуард Владимирович
Страна: СССР
город/регион: Оренбург
Благодарил (а): 46 раз
Поблагодарили: 105 раз

Код на STL, адресация

Сообщение CHANt »

VADR писал(а): Понятно, что устройству выделены адреса 644..651 в областях I и Q. А что за адреса 652..663 ниже них обозначены курсивом и стрелкой? Зачем эти курсив и стрелка?
Там на картинке видно что, PPO - параметры данных объекта, это содержательная часть посылки (телеграммы0) профибас. Телеграмма профибаса, помимо заголовка и контрольной суммы, состоит из двух частей
PKW - асинронный обмен данными типа - запрос-ответ.
PZD - синхронный обмен данными, жестко заданным кол-во слов в телеграмме
В программе выбран PPO2: 4PKW/6PZD
Слот 0 с PKW - надо самому формировать запрос и помещать его в эти адреса, максимум 4 слова.
Слот 1 с PZD, то что выделено курсивом - 6 жестко заданных слов, коммуникационник гоняет туда сюда.
--------------------------------------------------------------------------------------------

POV
авторитет
авторитет
Сообщения: 800
Зарегистрирован: 12 авг 2008, 11:05
Имя: Патрушев Олег Валерьевич
Страна: Россия
город/регион: г. Н.Новгород
Благодарил (а): 110 раз
Поблагодарили: 158 раз

Код на STL, адресация

Сообщение POV »

Если CFC не установлен, то контейнера Charts, наверное, не будет. А вот сообщение об отсутствующем компоненте должно быть. На счет «самообразования» полностью согласен с aranea.
SCLFileFromCFC_SFC_1 как раз след о работе компилятора cfc->scl. Но даже будь он ненулевой длины, чтение его на scl тот еще мазохизм. Очень редко надо как раз для понимания как работает компилятор.
Коллега неплохо декомпилирует библиотечные блоки сименса из stl в scl, очень интересно, в этой ветке его уже вспоминали. Чтобы исправить библиотечный блок под свои нужды вообще класс.
Но вы хотите восстановить cfc Chart. Как минимум нужно иметь сам CFC. Или чарты на бумажке рисовать придется. Это конечно можно сделать в ручную для нескольких чартов, но проект даже среднего размера декомпилировать до чартов-титанический труд.
Аватара пользователя

Автор темы
VADR
администратор
администратор
Сообщения: 4903
Зарегистрирован: 25 июл 2008, 07:12
Имя: Диев Александр Васильевич
Страна: Россия
город/регион: г. Сегежа, Карелия
Благодарил (а): 236 раз
Поблагодарили: 425 раз

Код на STL, адресация

Сообщение VADR »

aranea писал(а): при открытии проекта Step7 не ругается на отсутствие компонентов? CFC например? Папки Charts нет в дереве проекта (рядом с Sources и Blocks)?
Нет, не ругается. CFC есть, папка Charts есть, в ней куча модулей на CFC... Стоп, это те самые модули CFC, которые компилятся в SCL, а далее - в STL? И получается, что никакие исходники не утрачены :)
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.
Аватара пользователя

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

Код на STL, адресация

Сообщение aranea »

если есть рабочий ПЛК с этой программой, то можно в чартах подключиться в онлайн и проверить актуальность программы
при работе с CFC в папку Blocks заглядывать не нужно (дабы не пугаться), все делается в чартах

интереса для можно найти вызов какого-нибудь FB в чарте и найти его же вызов в какой-то из FC
Изображение
Аватара пользователя

Автор темы
VADR
администратор
администратор
Сообщения: 4903
Зарегистрирован: 25 июл 2008, 07:12
Имя: Диев Александр Васильевич
Страна: Россия
город/регион: г. Сегежа, Карелия
Благодарил (а): 236 раз
Поблагодарили: 425 раз

Код на STL, адресация

Сообщение VADR »

Нет, рабочего ПЛК нет, но основное, я думаю, прояснил: почти всё там есть в чартах, а это намного проще, чем ковырять STL или SCL. Есть также часть модулей, сделанных на FBD, но с ними там более-менее всё понятно.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.
Ответить

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