Глупые вопросы новичка

Инженерное программное обеспечение
Михайло
Администратор
Сообщения: 3976
Зарегистрирован: 19 сен 2012, 19:16

Re: Глупые вопросы новичка

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

Секрет Сименса: Катушка DB41.DBX12.1 (и любая другая катушка) в режиме мониторинга (режим "очков") вычисляется как результат логических операций в цепочке. Контакты в цепочке замкнуты и разомкнуты в соответствии с таблицей VAT. В таблице VAT отображается конечное состояние тэгов после окончания цикла программы. Поэтому контакты могут отображаться не совсем верно, т.к. нужно отображать состояние контактов текущее, а не конечное (VAT).
Это может быть причиной логического несоответствия. Попробуйте определить, какая из переменных в цепочке меняет свое состояние по ходу цикла.

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

Аватара пользователя
mr_Frodo
Профессионал
Сообщения: 573
Зарегистрирован: 22 июл 2016, 20:38

Re: Глупые вопросы новичка

Сообщение mr_Frodo »

Просто проверьте настройки триггеров vat. Когда они должны фиксировать и задавать состояние данных-в начале или конце цикла работы ПЛК.
Вот моя подпись...

Drahtor
Дилетант
Сообщения: 17
Зарегистрирован: 01 июл 2013, 13:42

Re: Глупые вопросы новичка

Сообщение Drahtor »

Михайло писал(а):Секрет Сименса: Катушка DB41.DBX12.1 (и любая другая катушка) в режиме мониторинга (режим "очков") вычисляется как результат логических операций в цепочке. Контакты в цепочке замкнуты и разомкнуты в соответствии с таблицей VAT. В таблице VAT отображается конечное состояние тэгов после окончания цикла программы. Поэтому контакты могут отображаться не совсем верно, т.к. нужно отображать состояние контактов текущее, а не конечное (VAT).
Это может быть причиной логического несоответствия.
А какое состояние отображается непосредственно в DB? В самом DB этот бит тоже равен "0".

Михайло
Администратор
Сообщения: 3976
Зарегистрирован: 19 сен 2012, 19:16

Re: Глупые вопросы новичка

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

Чтобы отображать текущее (мгновенное) значение тэга потребовалась бы система мониторинга с высоким быстродействием (быстродейственнее, чем ЦПУ), высокая загрузка ЦПУ и сети Профинет... Это экономически нецелесообразно, здесь все намного проще - везде отображается конечное значение, в VAT, в DB, непосредственно в цепочках LAD и т.д. Приходится мириться тем, что мы не видим реальные/мгновенные значения тэгов. Если программу писать так, как я описал, то проблема не будет возникать.
Еще раз.
Неправильно:
1. Вычислить значение Tag_1, сохранить значение.
2. Использовать значение Tag_1 для вычисления Tag_2.
3. Пересчитать значение Tag_1, сохранить новое значение.
4. Использовать значение Tag_1 для вычисления Tag_3.

Правильно:
1. Вычислить значение Tag_1, сохранить значение.
2. Использовать значение Tag_1 для вычисления Tag_2.
3. Вычислить значение Tag_4, сохранить значение.
4. Использовать значение Tag_4 для вычисления Tag_3.

То есть после использования тэга лучше воздерживаться от перезаписи его значения в пределах цикла ЦПУ. В таком случае мгновенное и конечное значения тэгов будут совпадать и мониторинг тэгов будет удобным.

Ну надо отметить, в частности, что для исполнения требований удобного мониторинга следует катушки --(R) и --(S) держать рядышком, в идеале друг за другом. Или просто следить, чтобы между такими катушками тэг не использовался для вычисления других тэгов.

Drahtor
Дилетант
Сообщения: 17
Зарегистрирован: 01 июл 2013, 13:42

Re: Глупые вопросы новичка

Сообщение Drahtor »

И снова глупые вопросы?
Почему при выполнении операции деления получается столь странное число? А в дальнейшем из этого же DBW загружается уже нормальное?
STL_2.JPG
И можно ли в данном случае как-то сохранить дробную часть, хотя бы как целое, но умноженное, к примеру, на 10? (5.3 как 53)?
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Михайло
Администратор
Сообщения: 3976
Зарегистрирован: 19 сен 2012, 19:16

Re: Глупые вопросы новичка

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

1) Что показывает Степ7 в третьей и четвертой строчке? Результат, хранящийся в 32-битном аккумуляторе? А Ваши вычисления требуют всего 16 бит. Подсказка, вот двоичное представление чисел (32 разряда): 5 = 0000 0000 0000 0000 0000 0000 0000 0101, 174653445 = 0000 1010 0110 1001 0000 0000 0000 0101

2) Дробную часть можно сохранить, увеличив делимое в 10 раз.

Drahtor
Дилетант
Сообщения: 17
Зарегистрирован: 01 июл 2013, 13:42

Re: Глупые вопросы новичка

Сообщение Drahtor »

Михайло писал(а):2) Дробную часть можно сохранить, увеличив делимое в 10 раз.
Если я число "20000" умножу на 10, то получится число, большее чем может вместить в себя WORD. Или я опять что-то путаю?

Михайло
Администратор
Сообщения: 3976
Зарегистрирован: 19 сен 2012, 19:16

Re: Глупые вопросы новичка

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

Да, WORD вмещает только до 65535. Может DWORD и операция /D?

Drahtor
Дилетант
Сообщения: 17
Зарегистрирован: 01 июл 2013, 13:42

Re: Глупые вопросы новичка

Сообщение Drahtor »

Продолжим!
Контроллер ушел в STOP. Диагностический буфер:
STL_3.JPG
Далее при нажатии на GO TO отсылает на этот блок и на эту строку:
STL_2.JPG
То есть ему чем-то не понравился вызов этого таймера.
Вопросы: 1) чем именно (сразу уточню, что в другом месте этот таймер не используется)?
2) что будет если в программу добавить ОВ121? Загорится SF, контроллер останется в RUNе, программа продолжит выполнение этого FC. Или как-то иначе?
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Михайло
Администратор
Сообщения: 3976
Зарегистрирован: 19 сен 2012, 19:16

Re: Глупые вопросы новичка

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

Почему порядок инструкций нарушен? Сначала нужно время загрузить, потом инструкция SD.

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

FR T1 //Enable timer T1.
A I 2.1
L S5T#10s //Preset 10 seconds into ACCU 1.
SD T1 //Start timer T1 as an on-delay timer.

Drahtor
Дилетант
Сообщения: 17
Зарегистрирован: 01 июл 2013, 13:42

Re: Глупые вопросы новичка

Сообщение Drahtor »

Как узнать, какие именно блоки (FB) и функции (FC) вызываются в программе контроллера? Не загружены, а именно вызываются. Функции Compare Online/Ofline не подходит, вбивать номер каждого блока в Go to... как-то лень... И даже если и использовать Go to, корректно ли данная функции выдаст результаты (не будет как с переменными, которые используются при косвенной адресации: Go to location показывает, что они не используются, а по факту совсем другое..)?

Аватара пользователя
mr_Frodo
Профессионал
Сообщения: 573
Зарегистрирован: 22 июл 2016, 20:38

Re: Глупые вопросы новичка

Сообщение mr_Frodo »

Просмотреть структуру программы в инструменте просмотра перекрестных ссылок.
Вот моя подпись...

Marrenoloth
Дилетант
Сообщения: 7
Зарегистрирован: 26 июл 2016, 23:12

Re: Глупые вопросы новичка

Сообщение Marrenoloth »

Если есть вызовы косвенной адресации, то только полностью раскурив всю программу. :(

D=C
Профан
Сообщения: 2
Зарегистрирован: 10 сен 2014, 15:48

Re: Глупые вопросы новичка

Сообщение D=C »

Подскажите, пожалуйста!
Нужно управлять задвижкой аналоговым сигналом 4-20.
S7-1500. TIA v13. Делаем все в LAD.
Как я понял управление можно реализовать с помощью оператора MOVE.
На вход IN записываю значение.
Т.к. в default tag table у каналов модуля AO data type - Int (адрес %QW6)
а диапазон значений у Int от -32768 до 32767
то чтобы полностью закрыть задвижку нужно отправить значение -32768, чтобы полностью открыть отправялем 32767
1. Верно?
2. Что будет, если назначить значение больше/меньше максимального/минимального?
(нужно узнать теоретически, практически проверить пока нет возможности)
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 972
Зарегистрирован: 09 окт 2012, 05:18

Re: Глупые вопросы новичка

Сообщение Автоматизатор »

1 Надо в руководстве на контроллер прочитать про аналоговый выход. Там написано: как, что и куда надо отправить, чтобы получить на выходе требуемые мА.
2 Надо в руководстве на задвижку почитать: что надо ей задать, чтобы открыть или закрыть.

Аватара пользователя
mr_Frodo
Профессионал
Сообщения: 573
Зарегистрирован: 22 июл 2016, 20:38

Re: Глупые вопросы новичка

Сообщение mr_Frodo »

Предложение админу: Михаил, может стоит объединить эту тему с темой "Вопросы новичка"?
Вот моя подпись...

Михайло
Администратор
Сообщения: 3976
Зарегистрирован: 19 сен 2012, 19:16

Re: Глупые вопросы новичка

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

1. Неверно. Для сигнала 4-20 мА определены два уровня перегрузки: легкий (overload) и сильный (overshoot), т.е. допускается чуть более широкий диапазон сигнала, чем просто от 4 до 20 мА. В реальности можно передавать значения где-то от 3,7 мА до 23 мА. Зачем? Да элементарно: допустим имеется датчик давления 4-20 мА, где 4 мА = 0 МПа. Допустим давление отсутствует, датчик выдает что-то близкое к 4 мА, реальный измеритель токового сигнала с некоторой погрешностью измеряет и получает что-то от 3,9 до 4,1 мА. Ну 4,1 мА - это еще нормально, но вот 3,9 мА - это уже обрыв кабеля?.. Нет, не обрыв, это отрицательное значение давления. То же самое и со стороны 20 мА, только на практике тут измерения не часто "ошиваются".
На самом деле у Сименса сигнал от 4 до 20 мА соответствует обычно числам от 0 до 27648, а значение 32767 соответствует идентифицированному обрыву. Про предельные значения перегрузки можно посмотреть в мануале на контроллер.

2. Возможно неправильно понял вопрос. Тэг типа Int не позволит ввести число меньше/больше, чем -32768/32767, будет гореть красным еще при попытке ввести. Но скорее Вас интересует ответ на такой вопрос: "А что, если я попытаюсь сломать задвижку, задав некоторое запредельное значение?". Ответ: конечно об этом инженеры уже подумали, ничего не сломается, задвижка просто останется в крайнем положении. :)

P.S. По поводу объединения тем. Я наоборот до этого занимался противоположным - разъединением тем. Вот например эта тема принадлежала вроде как Drahtorу. Ну раз есть пожелания к объединению тем, то я просто ничего не буду делать, пусть будет все как есть. Ладно? :)

Аватара пользователя
mr_Frodo
Профессионал
Сообщения: 573
Зарегистрирован: 22 июл 2016, 20:38

Re: Глупые вопросы новичка

Сообщение mr_Frodo »

просто для меня лично название темы: "Глупые вопросы новичка" уже кажется глупостью... ну не нельзя быть настолько оскорбительно неуверенным в себе... :[
Вот моя подпись...

D=C
Профан
Сообщения: 2
Зарегистрирован: 10 сен 2014, 15:48

Re: Глупые вопросы новичка

Сообщение D=C »

1. Да, действительно, правда только во второй скаченной документации на модуль все четко расписано
В первой (которая имелась) описана была только разрядность сигнала
спасибо!
Про 3,7 мА - 23 мА понял, спасибо за ликбез :)

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

p.s. по поводу темы, мы же понимаем тривиальность и простоту вопроса для специалистов, и уж точно никто не самооскорбляется, и, главное надеюсь, отсутствует пренебрежение от профессионалов :)
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Drahtor
Дилетант
Сообщения: 17
Зарегистрирован: 01 июл 2013, 13:42

Re: Глупые вопросы новичка

Сообщение Drahtor »

Имеется CPU-315-2DP, несколько интерфейсных модулей и такое же количество приводов (предположим, и тех и тех по 10 штук, итого 20 ведомых станций). Связь по ProfiBus. Опрос организован просто:
L PIW xxx
T DBW yyy
Т.е без никаких SFC14/15.
Давайте не будем рассуждать о правильности или неправильности данного способа, есть как есть.
Обработка ошибки связи сделана в ОВ122, т.е. если OB122_SW_FLT возвращает значение 42 и 43 формируется ошибка связи по ProfiBus. Проблема в том, что понять с каким именно узлом нет связи можно либо только визуально по морганию красных лампочек, либо через HW. На панель оператора же выводится только общая ошибка потери связи.
Так вот, как в данном случае программно понять, какой именно узел в ошибке? Конечно, при потере связи, возникают и другие ошибки, по которым косвенно можно понять, какой именно слейв отказал ( к примеру, бит ошибки в слове состояния привода и т.д.), но все же.
Другой момент: иногда возникает необходимость вывести какой-либо узел в ремонт и отключить его, в результате чего опять-таки возникает ошибка ProfiBus на всей линии. Ну не удалять же его из HW каждый раз?

Ответить