Просмотр полной версии : Замер времени
Здравствуйте, имеется ПЛК 110-60, есть два дискретных входа (подключены индуктивные датчики), необходимо замереть время прохождения расстояния, расстояние между конечными выключателями 300 см, это необходимо сделать для замера скорости перемещения, по формуле скорость= расстояние/время, я хочу высчитать этот интервал...........при помощи какой функций это можно осуществить??? Спасибо в заранее. При этом таймер необходимо сбрасывать и запускать по команде дискретного входа.
spectrum48k
21.09.2015, 22:59
наваял и себе и людям))
вроде работает.
секундомер Вам в руки)
FUNCTION_BLOCK P1P2MTRS
(*порядок датчиков не имеет значения*)
VAR_INPUT
iDi1 : BOOL; (*Вход датчик 1*)
iDi2 : BOOL; (*Вход датчик 2*)
iRes : BOOL; (*Сброс / запрет работы*)
iMtrsSP : REAL; (*Расстояние датчик1-датчик2, м*)
iErrSP : TIME; (*Время на ожидание второго датчика*)
END_VAR
VAR_OUTPUT
oDone : BOOL; (*Расчет выполнен, =TRUE только 1 цикл*)
oErr : BOOL; (*Ошибка: нет сигнала второго датчика*)
oSpd : REAL; (*Расчетная скорость, м/с*)
END_VAR
VAR
Trig1: BOOL;
Trig2 : BOOL;
Trig :BOOL;
TimeTrig : TIME;
TDelta : TIME;
Init: BOOL;
Di1Old :BOOL;
Di2Old : BOOL;
END_VAR
IF iRes THEN Init := oErr := FALSE; END_IF
IF oErr THEN RETURN; END_IF
(*INIT*)
IF NOT Init THEN
Init := TRUE;
Di1Old := iDi1;
Di2Old := iDi2;
iRes := oDone := Trig1:= Trig2 := Trig := FALSE;
TimeTrig := TDelta := t#0ms;
oSpd := 0;
END_IF
oDone := FALSE;
IF iDi1 > Di1Old THEN Trig1 := TRUE; END_IF
IF iDi2 > Di2Old THEN Trig2 := TRUE; END_IF
Di1Old := iDi1;
Di2Old := iDi2;
IF Trig1 OR Trig2 THEN
IF NOT Trig THEN TimeTrig := TIME(); Trig := TRUE; END_IF
TDelta := TIME() - TimeTrig;
IF TDelta > iErrSP THEN oSpd := 0; oErr := TRUE; RETURN; END_IF
IF Trig1 AND Trig2 THEN
IF TDelta < t#10ms THEN oSpd := 0; oErr := TRUE; RETURN; END_IF
oSpd := iMtrsSP * 1000 / TIME_TO_REAL(TDelta);
oDone := TRUE;
Trig1 := Trig2 := Trig := FALSE;
END_IF
END_IF
spectrum48k
21.09.2015, 23:43
Сергей, не поверите)) Я взял таймер и TIME() Для двух разных целей. А во время отладки случайно заметил, что внутренние переменные таймера совпадают с результатами от TIME() и по сути выполняется дублирование переменных. Поэтому остался один таймер, выполняющий 2 функции сразу.
spectrum48k
21.09.2015, 23:59
Вы и мёртвого убедите) Сарказм засчитан.
Извините за наглость..............но я не знаю этот язык,к сожалению, знаю FBD,LD,CFC............ кто то сможет помочь и показать эту программу на одном из указанных языков???
Извините за наглость..............но я не знаю этот язык,к сожалению, знаю FBD,LD,CFC............ кто то сможет помочь и показать эту программу на одном из указанных языков???
А почему SFC нет в этом перечне?
20088
20087
Специально для Вас действия для шага Spep2 сделал на CFC :rolleyes:
https://www.youtube.com/watch?v=gAGJ_pJA6Yc
Спасибо большое, буду пробовать, SFC не успеваю изучить, работы много.....не получается пока что CODESYS освоить полностью, обычно проекты на базе контроллера DELTA делаю, с ними как то попроще всё)
По просьбе трудящихся тоже самое, но на LD
20093
20094
spectrum48k
22.09.2015, 20:24
Я дал текст для копирования/вставки. Знания языка ST не обязательны. Минимальные знания интерфейса CDS v2.3 - обязательны.
Будет выглядеть в CFC примерно так:
http://i.imgur.com/59rFyY9.png
Вот файл. Разархивируете и просто импортируете его в дерево POU. Появится функциональный блок. Использовать его как на картинке примера, только замените имена тестовых переменных на свои.
вопрос почти по теме - а что делает функция time? при вызове берет текущее время плк?
имеет ли смысл написанное ниже?
var
a:time;
end_var
a:=TIME;
Это время с момента запуска в миллисекундах. Код имеет значение, но функции лучше писать со скобками для читаемости.
Это время с момента запуска в миллисекундах
с момента запуска ПЛК?
а как быть, если это время превысит 50 суток (максимальный размер типа time)? время начнет считаться по новой с нуля?
с момента запуска ПЛК?
а как быть, если это время превысит 50 суток (максимальный размер типа time)? время начнет считаться по новой с нуля?
Да, с нуля. А что Вас смущает?
А что Вас смущает?
ничего. я просто сейчас пишу первую самостоятельную программу да и вообще только начинаю работать с кодесис (до этого было степ7, да и то, только обслуживание, без написания проектов), поэтому мне много чего непонятно. я познаю среду программирования и ПЛК ОВен, поэтому много простых вопросов чтобы ничего не упустить.
спасибо за ответы.
Вас впредь больше будет волновать разность между двумя TIME'ами, нежели отдельные значения, полученные от функции TIME(). И даже после переполнения эта разность будет считаться правильно: 2 суток (TIME) - 49 суток (TIME) = 3 суток (ну или около того). Сами попробуйте. Конечно, если надо месяцы и годы считать, то тогда всё немного сложнее.
Я дал текст для копирования/вставки. Знания языка ST не обязательны. Минимальные знания интерфейса CDS v2.3 - обязательны.
Будет выглядеть в CFC примерно так:
http://i.imgur.com/59rFyY9.png
Вот файл. Разархивируете и просто импортируете его в дерево POU. Появится функциональный блок. Использовать его как на картинке примера, только замените имена тестовых переменных на свои.
Импортировал эти настройки, происходит следующие 20119, т.е. подаю сигналы, и если я все правильно понимаю то на выходе spead я должен увидеть измеренную скорость....но в итоге ничего не получается, что делаю не так??? К тому же вопрос на засыпку, смогу ли я потом через Modbus передать данные значения на панель ИП-320???Спасибо взаранее
Импортировал эти настройки, происходит следующие Новый точечный рисунок.bmp, т.е. подаю сигналы, и если я все правильно понимаю то на выходе spead я должен увидеть измеренную скорость....но в итоге ничего не получается, что делаю не так??? К тому же вопрос на засыпку, смогу ли я потом через Modbus передать данные значения на панель ИП-320???Спасибо взаранее
Вот проект: 20123
В визуализации "speed_conveer" сначала нажать на кнопку "Датчик 1", затем на кнопку "Датчик 2" и появится результат скорости.
spectrum48k
24.09.2015, 13:52
...но в итоге ничего не получается, что делаю не так???
Возможно, Вы не перевели контроллер в режим "RUN"
Блок рабочий, я тестировал.
Возможно, Вы не перевели контроллер в режим "RUN"
Блок рабочий, я тестировал.
Я проверил в режиме эмуляции, проект выложен в посте №19, подтверждаю, блок рабочий.
Я проверил в режиме эмуляции, проект выложен в посте №19, подтверждаю, блок рабочий.
я использую контроллер ПЛК 110-60, а тут в целевой платформе указано 110-32, меняю на плк 110-60 вместо 110-32, конфигурация плк не меняется на плк 110-60 , остается так же 110-32, а в режиме эмуляций все работает, действительно плк не в работе был, теперь помогите понять как его связать с выходами, если не сложно..........
Николаев Андрей
24.09.2015, 18:12
После того как Вы изменили тип ПЛК, как и сказано в инструкции - необходимо выполнить команду - стандартная конфигурация.
я использую контроллер ПЛК 110-60, а тут в целевой платформе указано 110-32, меняю на плк 110-60 вместо 110-32, конфигурация плк не меняется на плк 110-60 , остается так же 110-32, а в режиме эмуляций все работает, действительно плк не в работе был, теперь помогите понять как его связать с выходами, если не сложно..........
Я немного переработал проект для связи с панелью ИП320:
20130
На оборудовании (за неимением такового) не пробовал, в эмуляторе работает.
Учтите, при изменении конфигурации с ПЛК 110-32 на ПЛК 110-60 все настройки конфигурации слетят и придется набивать заново вручную.
Изменил настройки на 110-60(нужно под нее настроить(целевая платформа+конфигурация выходов)) , вылезло куча ошибок , половина исправил , остальную не могу, можно ли использовать 110-60, при этом оставить конфигурацию на 110-32???
Выкладывайте пожалуйста проект, трудно судить об ошибках,не видя их.
Как - то так: 20143
Еще может быть такой вариант: 20152
Я ранее писал, что в конфигурации ПЛК связь с ИП320 по ModbusRTU придется набивать вручную.
Доброго здравия. Имеется полотно бумаги с метками длина которых 9мм, расстояние между фронтами меток 570 мм. Движение полотна 100м/мин. На метку должен реагировать датчик1. Полотно проходит через секцию печати(вал с матрицей) На валу установлен оптический датчик2(один имп/об). При идеальных условиях середина длительности импульса датчика1 должна совпадать с серединой длительности импульса датчика2. Если есть расхождения то мы должны увеличить или уменьшить путь прохождения полотна. Пробовал на основе приведённому ранее проекту осуществить замеры половины длительности импульсов и сравнивать между собой. Но так как минимальная единица времени TIME() 1мс, то обнаружение расхождения сигналов большое по времени. В программировании слаб, но в состоянии хоть немного разобраться в некоторых готовых проектах путём проб и ошибок. Есть ли в codesys работа с временем в микросекундах?
kondor3000
26.01.2022, 18:01
Доброго здравия. Имеется полотно бумаги с метками длина которых 9мм, расстояние между фронтами меток 570 мм. Движение полотна 100м/мин. На метку должен реагировать датчик1. Полотно проходит через секцию печати(вал с матрицей) На валу установлен оптический датчик2(один имп/об). При идеальных условиях середина длительности импульса датчика1 должна совпадать с серединой длительности импульса датчика2. Если есть расхождения то мы должны увеличить или уменьшить путь прохождения полотна. Пробовал на основе приведённому ранее проекту осуществить замеры половины длительности импульсов и сравнивать между собой. Но так как минимальная единица времени TIME() 1мс, то обнаружение расхождения сигналов большое по времени. В программировании слаб, но в состоянии хоть немного разобраться в некоторых готовых проектах путём проб и ошибок. Есть ли в codesys работа с временем в микросекундах?
Советую создать новую тему, работа с мкс возможна, но вам придётся очень попотеть, тут и неделей не отделаться.
И вы пишите в теме по ПЛК1хх, а нужен новый ПЛК, как тут с быстрыми входами типа ПЛК110-30.К-М (М02), ПЛК110-32.К-М (М02), ПЛК110-60.К-М (М02) и по ссылкам в теме начинайте изучать
https://owen.ru/forum/showthread.php?t=35829
Советую создать новую тему, работа с мкс возможна, но вам придётся очень попотеть, тут и неделей не отделаться.
И вы пишите в теме по ПЛК1хх, а нужен новый ПЛК, как тут с быстрыми входами типа ПЛК110-30.К-М (М02), ПЛК110-32.К-М (М02), ПЛК110-60.К-М (М02) и по ссылкам в теме начинайте изучать
https://owen.ru/forum/showthread.php?t=35829
Так у меня частоты сигналов с датчиков не превышают и 50гц. Или дело всё в длительности импульсов?
kondor3000
26.01.2022, 19:31
Так у меня частоты сигналов с датчиков не превышают и 50гц. Или дело всё в длительности импульсов?
Вы написали про микросекунды, я ответил, без быстрых входов не прокатит.
In_Da_Cher_A
26.01.2022, 19:39
слабо понимая в программировании, вы берётесь за решении таких задач? бумага это не условно-нищий жкх, что-то слабо верится, что поймали первого попавшегося киповца, болтающегося без дела и начальник нагрузил его работой, потому как денег нет на автоматизацию
разобраться в готовом проекте - это хорошо, но где взять готовый проект? кто его напишет и выложит?
Допустим два проекта у меня есть, один из которых (с него и начал изучение) работает 4 года в железе. Второй проект испытан в железе, провожу работу над ошибками и доработку.
keysansa
26.01.2022, 20:19
с момента запуска ПЛК?
а как быть, если это время превысит 50 суток (максимальный размер типа time)? время начнет считаться по новой с нуля?
Очень часто приходится быть готовым к переходу счетчика через ноль (любого). Это решается сравнением текущего и предыдущего показаний по модулю, если разница их более половины размерности счетчика - был переход. Но при условии, что предыдущее показание более половины, а следующее - менее. Иначе - вы прикемарили...
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot