[? RUS]: Анализ чужой программы

Промышленные Логические Контроллеры SIMATIC S7-200/300/400
Post Reply
Sirajudin
Posts: 25
Joined: Wed Nov 14, 2007 8:12 pm
Location: Russia

[? RUS]: Анализ чужой программы

Post by Sirajudin » Sun Mar 09, 2008 7:00 pm

Среда разработки-Step7
PLC-Vipa 300
Имеется готовый проект.
Начало (OB1):

Code: Select all

        O     M    501.0
       ON    M    501.0
        S     M    500.1
        A     M    500.1
        R     M    500.0-деблокировка входа(EN) аналогового блока      для измерения давления
 UC    FC     0
 UC    FC     1
 UC    FC     2
и т.д
Для чего в данном случае деблокируют вход?

Dfcz
Posts: 875
Joined: Tue Dec 26, 2006 5:21 am
Location: Russia

Post by Dfcz » Tue Mar 11, 2008 7:17 am

Кто ж тебе так сразу ответит?
Надо всю программу смотреть.
Это ты написал, что меркер для деблокировки, а на самом деле все может быть.
Иногда просто остаются ненужные меркеры или даже куски программы, которые некогда подчищать.

Судя по этому бреду, что уже есть, нужно просто в начале цикла (или в начале работы) сбросить меркер. Вообще ни о чем - надо дальше смотреть.

Sirajudin
Posts: 25
Joined: Wed Nov 14, 2007 8:12 pm
Location: Russia

Post by Sirajudin » Tue Mar 11, 2008 9:59 am

Я немного ошибся.

Код:
O M 501.0
ON M 501.0
S M 500.1
A M 500.1 -деблокировка входа(EN) аналогового блока для измерения давления
R M 500.0
UC FC 0
UC FC 1
UC FC 2
А вот куда подключается меркер

A M 500.0
= L 20.0
BLD 103
A M 500.1
JNB _001 // Как я понимаю переход не произойдет т.к М 500.1-"1", тогда зачем использовать этот меркер?
CALL "Write Analog Value 1"
IN0 :=PIW320
IN1 :=2.500000e+002
IN2 :=0.000000e+000
IN3 :=L20.0
RET_VAL:=DB13.DBW4
OUT4 :=DB12.DBD16
_001: NOP 0

komatic
Posts: 79
Joined: Thu Mar 15, 2007 12:59 pm
Location: Ukraine
Contact:

Post by komatic » Tue Mar 11, 2008 11:44 am

Этот меркер будет 1 только после выполнения OB1
В OB100 это не факт
скорее всего это немного запутанный код для инициализации при переходе в RUN :)

Dfcz
Posts: 875
Joined: Tue Dec 26, 2006 5:21 am
Location: Russia

Post by Dfcz » Wed Mar 12, 2008 10:45 am

Этот меркер всегда будет равным 1.
Вообще-то это делается через SET, а не через вышеукзананный выкрутас.
Так что надо задать вопрос: на кой хрен меркер М500.1 и М501.0?
Надо посмотреть, где они еще используется (через crossreference) и может в панели оператора задаются?

Sirajudin
Posts: 25
Joined: Wed Nov 14, 2007 8:12 pm
Location: Russia

Post by Sirajudin » Wed Mar 12, 2008 12:17 pm

Да просматривал я панель оператора и crossreference, нет их нигде.

Umencho
Posts: 508
Joined: Mon Jul 16, 2007 12:28 pm
Location: Europe

Post by Umencho » Wed Mar 12, 2008 1:38 pm

Sirajudin wrote:Да просматривал я панель оператора и crossreference, нет их нигде.
Hi

This topic is going to long without any result. If you want use easier way and upload somewhere whole program. Then I believe, that you receive the right answer. :wink:

Sorry for english language! :oops:

Best regards
umencho

sania
Site Admin
Posts: 1371
Joined: Sat Aug 13, 2005 6:15 am
Contact:

Post by sania » Thu Mar 13, 2008 6:36 am

Dfcz wrote:Надо всю программу смотреть.
Umencho wrote:upload somewhere whole program
это уже двое тебе написали......сколько ещё должны написать чтоб ты понял?

Sirajudin
Posts: 25
Joined: Wed Nov 14, 2007 8:12 pm
Location: Russia

Post by Sirajudin » Thu Mar 13, 2008 11:31 am

Вот проект------http://stavrogin13.narod.ru/sir.rar

indian
Posts: 122
Joined: Fri Aug 11, 2006 6:16 pm
Location: Russia, Komi

Post by indian » Thu Mar 13, 2008 1:00 pm

M500.1 имеет смысл "всегда 1"
M500.0 имеет смысл "всегда 0"

--------------------------------

ну подумаешь при наладке что-то отключили, или отключено в вашей версии станка тк какая-то опция не была заказана. Очень часто такое встречаю. Значительно труднее разбираться когда прога писалась по электрической схеме. То есть подход был исключительно формальным при написании ПО контроллера. Сутуация при этом получается как если бы книгу разделили на листочки, перетасовали и склеили снова. А тебе приходится это читать и пересказывать смысл. А кроме того вместо тригеров закрутки сзаду на перёд. Не секрет что не всё можно перенести один к одному из релейной логики в PLC. Поэтому в коде присутствуют всякие примочки "устраняющие" глюки, но на самом деле одни глюки заменяются другими...

Я в таких случаюх применяю подход в несколько этапов:

1 этап формальный - все "самоподхваты" меняю на RS
2 анализ сути всех таймеров - в релейной схеме в виду инерционности реле наверняка присутствовали реле для компенсации этого - в PLC этим таймерам делать нечего, но при формальном подходе они благополучно перекочевали в программу. Выкидываем их нах.
3 этап формальный - перестановки строк, то есть складываем книгу по порядку листов. (для этого лучше распечаталь листинг и разрезать, сложить руками - меньше шансов допустить ошибку)
4 на третьем этапе снова обнаруживаются самоподхваты - меняем
5 формальная задача - упростить логические выражения ипользуя фишки типа not(AB)=not(A)+not(B), A+not(A)=1 и тд
6 и только на этом этапе я пытаюсь понять суть

иногда поступаю по другому - выделяю интерфейс узла и пишу для него прогу заново не глядя на то что было. Тут есть тоже особенность - не всегда очевидны внешние связи, особенно при быстропротекающих процессах - подсаживаю шпиона к имеющейся проге для их выявления. Для S7 шпиона сделать нетрудно, а вот со шпионом для S5 немного пришлось повозиться. Кстати кому нибудь нужен шпион для S5? Могу зашарить.

---------------------------
PS прежде чем напрягаться убедитесь в необходимости вашего труда. Очень возможно что вам скажут вместо спасибо, что-то типа "зачем ты исправил эту х$ню?" или "ну вот теперь придется доплатить недоплаченные 10% за поставленное оборудование ввиду того что оно теперь работает хорошо и если они узнают то будет хуже"

Serge_n
Posts: 131
Joined: Tue Feb 27, 2007 7:57 pm
Location: South Ukraine

Post by Serge_n » Tue Mar 18, 2008 1:20 pm

indian wrote:Кстати кому нибудь нужен шпион для S5? Могу зашарить.
Кстати, было бы кстати. Если несложно, зашарь. Будем премного благодарны.

indian
Posts: 122
Joined: Fri Aug 11, 2006 6:16 pm
Location: Russia, Komi

S5 SPY

Post by indian » Wed Mar 19, 2008 10:01 am

Шпион писался давно, в сентябре 2006-го, а последний раз пользовался год назад, поэтому уже кое-что подзабылось. Но будем вспоминать...

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

Минимально возможное время это, естественно, время цикла контроллера. Но, ввиду ограничений накладываемых каналом связи и операционной системой верхнего уровня, запись сразу в PC негодится для поставленной задачи. Следовательно писать надо в память самого же PLC, а потом всё что записано извлекать оптом в PC. Что и было сделано.

Запись данных в PLC.
Каждый цикл PLC пишется одно слово, в зависимости от конкретной задачи формируемое. Я его формировал из IO представляющих интерес. Но была небольшая трудность - каждая запись должна иметь хотя бы относительную метку времени. В S5 с его скромными ресурсами и возможностями запись метки времени реализовать с необходимым разрешением не представляется возможным. Поэтому я применил такую фишку - пишем сначала в одну DB, когда изменяется значение секунд меняем DB. Такой способ вполне применим если время цикла контролера не меньше 1/256 секунды. Для сравления, время цикла практически пустого 103-го, если загружен только минимум необходимый для измерения времени цикла, 1/410 секунды. В дальнейшем, по извлечении данных наверх относительная метка времени восстанавливается исходя из среднего количества записей в полносекундных DB. Первая DB не полносекундная, у меня, так как я привязал смену DB к часам реального времени контроллера. Но для простоты, при повторении, можно применить просто таймеры тогда и первая DB будет полносекундной. (кстати это расширит область применения на 90, 101 и 102 CPU у которых нет часов реального времени и практически без ухудшения точности).
Что касается камментариев к собственно шпиону это всё.

Извлечение данных из PLC в PC.
Извлечение большого количества данных из PLC, в пригодном для дальнейшей машинной обработки виде, всегда представляет некоторую труднось, так, например, при помощи широко известной в узких кругах WinCC сделать это вообще невозможно. (кто будет утверждать обратное пусть зашарит проект) Я сделал это при помощи Fastrak ControlShop. Немного изменив пример поставляемый вместе с этим софтом. Тут хочу выразить огромное спасибо ppp (это никнэйм такой) за проделанную работу по популяризации качественных программных продуктов.
В последствии для S7 я, для аналогичной цели, применил Indusoft60, тоже вообщем-то неплохо получилось.

В архиве есть S5 файл, файл символов к нему и xls-файл с макросом.

Дерзайте!

andreygod
Posts: 6
Joined: Thu Apr 22, 2010 9:25 am

Re: [? RUS]: Анализ чужой программы

Post by andreygod » Wed Oct 27, 2010 10:32 am

архив потерся на webfile.

indian
Posts: 122
Joined: Fri Aug 11, 2006 6:16 pm
Location: Russia, Komi

Re: [? RUS]: Анализ чужой программы

Post by indian » Wed Oct 27, 2010 4:51 pm

перезалил

проект и excel-евский файл

Link_is_Dead :(/S ... ogging.rar

а тут ControlShop

Link_is_Dead :(/controlshop.rar

Успехов!

Post Reply