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

Инженерное программное обеспечение
Бардичев Виктор
Любитель
Сообщения: 36
Зарегистрирован: 06 дек 2017, 11:18

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

Сообщение Бардичев Виктор »

А почему бы не избавиться от REAL? Использовать INT или DINT. Считать, что точка расположена в определенном месте целого числа. Например, 1 единица будет равна 0.01 мм., а 1 мм = 100 единиц.

POV
Специалист
Сообщения: 127
Зарегистрирован: 04 авг 2016, 16:28
Откуда: Нижний Новгород

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

Сообщение POV »

Бардичев Виктор писал(а):А почему бы не избавиться от REAL? Использовать INT или DINT. Считать, что точка расположена в определенном месте целого числа. Например, 1 единица будет равна 0.01 мм., а 1 мм = 100 единиц.
Современные ЦПУ быстрые, не так актуально как на первых S7-300 (например). Вынужден предупредить, что при таком варианте можно поиметь проблем при архивировании такого числа в Log-и и отображении его на трендах (особенно на панелях). Где-то придется пересчитывать.

Аватара пользователя
Ka3ax
Специалист
Сообщения: 303
Зарегистрирован: 07 сен 2013, 10:09

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

Сообщение Ka3ax »

Бардичев Виктор писал(а):А почему бы не избавиться от REAL? Использовать INT или DINT. Считать, что точка расположена в определенном месте целого числа. Например, 1 единица будет равна 0.01 мм., а 1 мм = 100 единиц.
вот это сейчас к какой теме?
Supervision of erection

KanS
Профан
Сообщения: 3
Зарегистрирован: 14 окт 2020, 12:47

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

Сообщение KanS »

Здравствуйте!
Подскажите, пожалуйста, в чем моя ошибка при вычислении?

#output := (#Hour * #fCount)/ (#Koef_wf * #fInterval);
Значения переменных:
Hour= 3600000.0 (real)
fCount - это преобразованное с помощью word_to_Dword и dword_to_real число входных импульсов датчика (Real).
Koef_wf - коэффициент 55.466 (real)
finterval - значение времени, преобразованное в real с помощью TIME_TO_DWORD и DWORD_TO_REAL.
output - real.
На мой взгляд, ошибки в согласовании типов данных нет, но результат всегда output = 7FC0 0000.

Для наглядности прикладываю скан выполнения программы. (скрин 1)

Для проверки сделала следующее: расписала по отдельности частные #Hour / #Koef_wf и #fCount/ #fInterval, но результат тот же. (скрин 2)
У вас нет необходимых прав для просмотра вложений в этом сообщении.

POV
Специалист
Сообщения: 127
Зарегистрирован: 04 авг 2016, 16:28
Откуда: Нижний Новгород

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

Сообщение POV »

А если
KanS писал(а):
14 окт 2020, 13:49
#fInterval
равен 0, будет деление на 0?

KanS
Профан
Сообщения: 3
Зарегистрирован: 14 окт 2020, 12:47

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

Сообщение KanS »

POV, FInterval не будет равен 0 в принципе. По условию не может быть менее 40 с

SMax
Любитель
Сообщения: 32
Зарегистрирован: 14 окт 2018, 09:28

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

Сообщение SMax »

Попробуйте использовать:
WORD_TO_DINT
DINT_TO_REAL

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

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

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

Word и DWord - это типы данных для случаев, когда вы в слове и двойном слове размещаете наборы битов (флагов). Эти типы для хранения чисел не следует использовать. Для чисел Int, Uint, Dint, Udint.

SMax
Любитель
Сообщения: 32
Зарегистрирован: 14 окт 2018, 09:28

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

Сообщение SMax »

plcSim2.jpg
С DINT_TO_REAL - все должно работать
У вас нет необходимых прав для просмотра вложений в этом сообщении.

KanS
Профан
Сообщения: 3
Зарегистрирован: 14 окт 2020, 12:47

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

Сообщение KanS »

Спасибо! Михайло, SMax

Svyatozar
Профан
Сообщения: 1
Зарегистрирован: 22 янв 2022, 22:24

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

Сообщение Svyatozar »

Здравствуйте только начал осваивать TIA. Столкнулся с проблемой, что в проекте при наличии сигнала на выходе q0.0
нет сигнала на открытом контакте q0.0
изображение_2022-01-22_212920.png
так же дальше по проекту этот сигнал не приходит, хотя выход активен
скрин 2.jpg
Но потом он появляется.
скрин3й.jpg
Подскажите пожалуйста, в чём может быть проблема.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

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

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

Сообщение mr_Frodo »

начать хотя бы с того, что операция приравнивания выходной переменной, коей является дискретный выход Q
например
А I0.0
= Q0.0
должна использоваться ТОЛЬКО ОДИН РАЗ вов сем тексте программы!!!
Почему? спросите Вы...
Для того, чтобы правильно строить логику вычислений ЦПУ надо научиться "думать" как ЦПУ, а это не так просто, как кажется.
ЦПУ выполняет все операции ПОСЛЕДОВАТЕЛЬНО до конца текста программы, НО...
ЦПУ не выполняет наши команды последовательно, как мы их прописали и не выдаёт нам выходные сигналы так же последовательно по мере их исполнения...
После старта в начале цикла в течении нескольких микросекунд ЦПУ производит сканирование сразу всех входных сигналов и записывает их во входную область памяти. Затем последовательно делает вычисления всех логических и арифметических операций с обновленными входными данными в течении нескольких миллисекунд или микросекунд (в зависимости от быстродействия и сложности программы) от начала до конца и записывает результаты вычислений в выходную область памяти. Происходит обновление выходных сигналов опять ДО МОМЕНТА получения новых значений входов и новых результатов вычислений и выхода опять переписываются.
Это первый момент!
Теперь второе: рассмотрим пример
A I0.0
=Q0.0
A I0.1
= Q0.0
Как происходит исполнение этой программы? Рассмотрим пару циклов. Пока не будем принимать во внимание то, что выдача выходных сигналов происходит сначала цикла работы, чтобы не путаться...
Цикл 1
1. Происходит сканирование входов. Пусть на момент сканирования I0.0 истина, а I0.1 ложь.
2. Программа сначала приравнивает значение входа I0.0 выходу Q0.0 и после второй строчки Q0.0 так же становится истина :ura: , а потом приравнивает ему же значение входа I0.1 и на 4 строчке Q0.0 становится ложь =/ .
3. Выдаёт на выход получившееся значение. Q0.0 в нуле (ложь)

Цикл 2.
1. Происходит сканирование входов. I0.0 ложь, а I0.1 истина.
2. Программа сначала приравнивает значение входа I0.0 выходу Q0.0 и после второй строчки Q0.0 теперь становится ложь, а на 4 строчке Q0.0 становится истина.
3. Выдаёт на выхода получившееся значение. Q0.0 в единице (истина)
Видим, что первые 2 строчки нам ничего не дают... Все равно приравнивание ПЕРЕПИСЫВАЕТ нашу переменную последним значением.
С этой точки зрения Ваш алгоритм с приравниванием 2 раза одного и того же ВЫХОДНОГО бита Q0.2 фактически двум различным логическим цепочкам бессмысленен.
На выход в конце концов пропишется результат только второго таймера.
Не исключено, что в вашей программе между указанными отрывками есть некие промежуточные логические цепочки, которые меняют к необходимым вам точкам программы нужные вам переменные на непонятные значения.
Просмотрите информацию об использовании проблемного тэга в тексте программы.
Просмотрите весь Ваш код и для начала исправьте с описанной точки зрения. Это не придираясь вообще к остальному тексту...

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

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

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

Простое правило для новичка: в программе не должно быть одноименных катушек. Одноименные катушки - это противоречие в программе, ты не смог определиться, чему все-таки равна переменная. И в конечном итоге контроллер пересчитывает все цепочки сверху вниз, а на выход выдает сигнал только когда завершит пересчет всей программы. Какое последнее значение было в переменной, то и выдаст на выход. Об этом mr_Frodo написал подробно.
Ну и зеленая подсветка мониторинга работает просто: она отображает состояние переменных в конце скана программы. Иногда, бывает, видишь не то, что хотелось.

Но если программу писать корректно, то все эти эффекты пропадают.

Катушка ---( ) должна быть один раз, катушки ---(R) и ---(S) сколько угодно раз.

Ответить