Страница 2 из 4

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

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

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

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

Добавлено: 18 авг 2016, 06:48
mr_Frodo
Просто проверьте настройки триггеров vat. Когда они должны фиксировать и задавать состояние данных-в начале или конце цикла работы ПЛК.

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

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

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

Добавлено: 18 авг 2016, 09:05
Михайло
Чтобы отображать текущее (мгновенное) значение тэга потребовалась бы система мониторинга с высоким быстродействием (быстродейственнее, чем ЦПУ), высокая загрузка ЦПУ и сети Профинет... Это экономически нецелесообразно, здесь все намного проще - везде отображается конечное значение, в 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) держать рядышком, в идеале друг за другом. Или просто следить, чтобы между такими катушками тэг не использовался для вычисления других тэгов.

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

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

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

Добавлено: 27 сен 2016, 10:22
Михайло
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 раз.

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

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

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

Добавлено: 27 сен 2016, 12:23
Михайло
Да, WORD вмещает только до 65535. Может DWORD и операция /D?

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

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

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

Добавлено: 28 сен 2016, 15:59
Михайло
Почему порядок инструкций нарушен? Сначала нужно время загрузить, потом инструкция 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.

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

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

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

Добавлено: 12 дек 2016, 22:07
mr_Frodo
Просмотреть структуру программы в инструменте просмотра перекрестных ссылок.

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

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

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

Добавлено: 20 янв 2017, 13:46
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. Что будет, если назначить значение больше/меньше максимального/минимального?
(нужно узнать теоретически, практически проверить пока нет возможности)

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

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

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

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

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

Добавлено: 20 янв 2017, 16:26
Михайло
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у. Ну раз есть пожелания к объединению тем, то я просто ничего не буду делать, пусть будет все как есть. Ладно? :)

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

Добавлено: 20 янв 2017, 22:56
mr_Frodo
просто для меня лично название темы: "Глупые вопросы новичка" уже кажется глупостью... ну не нельзя быть настолько оскорбительно неуверенным в себе... :[

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

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

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

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

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

Добавлено: 22 фев 2017, 08:57
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 каждый раз?