PDA

Просмотр полной версии : Codesys2.3 на выходе был ШИМ сигнал



Yerabdi
05.02.2013, 13:05
Codesys2.3 как можно написать программу на языке CFC чтобы на выходе был ШИМ сигнал у меня контроллер ПЛК63 выходы релейные кто что знает подскажите

Yegor
05.02.2013, 13:37
ШИМ на реле — варварство.

http://images.devs-on.net/Image/oDyH2opD3HQEYtgv-CoDeSysUntitled.png

kgsh82
05.02.2013, 14:08
Пример не будет работать, так как все выходы на ПЛК63 - тип REAL.
В свойствах выхода задайте период ШИМ, а значение VALUE (как в примере) необходимо подавать непосредственно на выход.
ЗЫ: Зачем темы плодить? В документации вроде всё написано.

Yerabdi
05.02.2013, 15:24
Как в свойствах задавать период ШИМ какие параметры нужны

kgsh82
05.02.2013, 16:19
Не совсем понятен вопрос.... Вообще в конфигурации, в свойствах соответствующего выхода. Параметр так и называется - Период ШИМ. Задается в миллисекундах.
ЗЫ: Терзает любопытство - зачем всё это? То есть зачем ШИМ через электромеханическое реле?

Yerabdi
07.02.2013, 12:58
потому что у меня все выходы релейные вообще возможно ШИМ сигнал через релейный выход

Terrano1992
07.02.2013, 13:51
вообще возможно ШИМ сигнал через релейный выход
Если период модуляции исчисляется секундами или десятками секунд (такой вот "медленный и печальный" ШИМ), то технически это возможно. Но непрактично - электромеханическое реле довольно быстро исчерпает свой ресурс в 200-400 тысяч срабатываний и сдохнет...

Валенок
07.02.2013, 15:08
Ну пристали к человеку.
200..400т.раз при периоде в секунд 20..30, и с учетом того что сам объект может эксплуатироватся не круглые сутки, и с учетом что выход ШИМа может быть и 0.0 и 1.0 - может означать и год и двадцать.

Михаил Иванович
08.02.2013, 15:07
потому что у меня все выходы релейные вообще возможно ШИМ сигнал через релейный выход

Я сделал на основе блока "BLINK". Работает, проверено на практике. Если бы знал, как прикрепить проект - прикрепил бы. Заодно МЭТРЫ меня бы покритиковали. На словах - там есть два момента, которые следует участь: поскольку входной аналоговый сигнал у меня в формате REAL, то и период задается в нем же. Следовательно, требуется преобразование в TIME. Стандартный оператор преобразования в системе есть, но при отрицательных и при превышающих диапазон значениях ведет себя, на мой взгляд, плохо. (Здесь это обсуждалось, Мне объяснили, почему это так, но я говорю не о том, почему, а о том, что это неправильно). Значит,надо ограничивать сигнал. Стандартный блок ограничения, на мой взгляд, странный. Его описания в документации нет, экспериментально удалось установить, что нижнее значение у него почему-то вверху, а верхнее, наоборот. Доверия не внушает. Лучше использовать комбинацию MIN и MAX. Кроме того, если хотите вывести коэффициент заполнения или скважность, то лучше выводить коэффициент заполнения - нет деления на ноль.
Теперь к вопросу о выходах с ШИМ. На ПЛК 63, если использовать программный блок с ШИМ, то надо просто преобразовать выходную BOOL в REAL стандартным оператором. На ПЛК 150 при его дискретных входах есть их настройка в конфигурации как ШИМ выходов, но единицы измерения там довольно странные, надо привыкнуть. Смотреть надо в документе PLC_configuration п. 2.2.2, стр 27 (Для 150).

Валенок
08.02.2013, 15:47
Если вы от LIMIT - то в хелпе ясно: min, x, max (ST)

min,
x,
max (СFC) Тоже самое - очевидно ж :)

А ШИМ смастерить можно из чего угодно.

Михаил Иванович
08.02.2013, 17:11
Если вы от LIMIT - то в хелпе ясно: min, x, max (ST)

min,
x,
max (СFC) Тоже самое - очевидно ж :)
Если Вы это знаете, то конечно, очевидно. Но человек обычно строит шкалу снизу вверх. Пример - традиционные координатные оси, градусник (термометр). Я навскидку не берусь назвать общепринятые примеры построения положительной оси сверху вниз, а отрицательной снизу вверх.


А ШИМ смастерить можно из чего угодно.
Ну это Вы с высоты своей квалификации. Кроме того, как я уже писал, не все гладко с преобразованием типов, если на вход REAL_TO_TIME попадает отрицательное значение, то на выходе получается предельно возможное для TIME число. Но, скорее всего, Вы это где-то учитываете, только я не понял, где, как Вы уже, наверное, догадались, я не очень хорошо в этом разбираюсь. Я написал, как сам делал. За это могу ручаться, практически проверил работоспособность в разных ситуациях

Валенок
08.02.2013, 19:32
Если Вы это знаете, то конечно, очевидно. Но человек обычно строит шкалу снизу вверх. Пример - традиционные координатные оси, градусник (термометр)..
Ну хэлп же есть. Последовательность есть. Все что слева направо в ST - сверху вниз в квадратиках. Графические поу это не имитаторы чего-либо :)


Кроме того, как я уже писал, не все гладко с преобразованием типов, если на вход REAL_TO_TIME попадает отрицательное значение, то на выходе получается предельно возможное для TIME число...

Причем тут программирование :confused: Это простая алгебра. Класс так 5й

Михаил Иванович
09.02.2013, 14:55
Ну хэлп же есть. Последовательность есть. Все что слева направо в ST - сверху вниз в квадратиках. Графические поу это не имитаторы чего-либо :)



Ну вот пусть замеряем 4-20 на ПЛК63. Сигнал 0-100, по факту может быть ..-3-103.. наверно где-то так. Чтоб не лохануться и вставляем вышеуказанный ограничитель с преобразованием

BLINK.TIMEHIGH := REAL_TO_TIME(TIME_TO_REAL(tmPeriod)*LIMIT(0,X,100)/100);
BLINK(IN:=TRUE,TIMELOW:=tmPeriod-BLINK.TIMEHIGH, Q=>ШИМ);

Пусть вход -100..+100
..(LIMIT(-100,X,100)+100)/200..

LIN_TRAFO есть опять же

LIN(IN:=LIMIT(-100,X,100),IN_MIN:=-100,IN_MAX:=100,OUT_MIN:=0,OUT_MAX:=1);
...LIN.OUT...

Причем тут программирование :confused: Это простая алгебра. Класс так 5й
Так и я ведь не о программировании, а о правильности работы преобразования. Наличие двух разрывов в функции преобразования - это неверно.

Yerabdi
09.02.2013, 15:00
Так значит можно сделать на выходе с реле ШИМ сигнал

Валенок
09.02.2013, 15:54
..Наличие двух разрывов в функции преобразования - это неверно.
А зачем тогда

использовать комбинацию MIN и MAX.
?

Валенок
09.02.2013, 15:57
Так значит можно сделать на выходе с реле ШИМ сигнал
сделать нельзя несделать

Михаил Иванович
09.02.2013, 20:36
Так значит можно сделать на выходе с реле ШИМ сигнал

Можно, конечно. Причем стандартный библиотечный блок "BLINK" почти он и есть. Осталось пережде вычислить необходимую скважность сигнала и длительности импульса и паузы - это из соотношения имеющегося аналогового сигнала и его диапазона. Потом подать значения на входы указанного блока. По пути возникнут трудности с преобразованием типов данных, мы их как раз обсуждали. Суть можно уловить из переписки и необходимость в это вникнуть - тоже.

Михаил Иванович
09.02.2013, 20:54
А зачем тогда

?

Как раз затем, чтобы обойти эту неверность. Понимаете, у меня создается впечатление, что нас постоянно вынуждают выкручиваться из всяких ситуаций, которые являются порождением чьей-то недобросовестности, отсутствием контроля. Когда я вижу такие вещи, я об этом пишу. В ответ мне сразу начинают пояснять, почему так получилось. Вроде бы так и должно быть. А я говорю о том, что такого быть не должно, что это ошибка, не счетная, а идеологическая и хорошо бы было, чтобы ее исправили. Но никто ничего не исправляет. Вы, видимо, уже к этому привыкли, а я еще нет. Вот и кричу: "Льву не додают мяса ... и тд" - думаю, Вы помните - у Хазанова такая интермедия была. Вот и в данном случае, боюсь, мы немного не понимаем друг друга: я говорю о факте наличия этих разрывов по краям диапазонов значений, о том, что в документации об этом ни слова, о том, что именно из-за этого приходится немного усложнять и если вы этого не знаете, то влипаете не по своей вине. А Вы говорите, что ввести ограничение диапазона просто. Так я и не говорю, что сложно, я говорю о том, что наличие разрывов при преобразовании типов данных - это неправильно. Вот что было содержанием моего высказывания.

Валенок
09.02.2013, 22:48
Как раз затем, чтобы обойти эту неверность
Для этого и я LIMIT внедряю, если знаю что он нужен. Только это не неверность. Это нормальное преобразование отрицательного значения в время. Даже иногда использую конструкции типа int_to_time(-1). Время же - кольцеобразно а не линейно.
И что должно быть в документации ? Правила целочисленного исчисления ? :confused:

Михаил Иванович
10.02.2013, 06:18
Для этого и я LIMIT внедряю, если знаю что он нужен. Только это не неверность. Это нормальное преобразование отрицательного значения в время. Даже иногда использую конструкции типа int_to_time(-1). Время же - кольцеобразно а не линейно.
И что должно быть в документации ? Правила целочисленного исчисления ? :confused:

Что же в этом нормального? Смотрите сами - область определения этой функции непрерывна (отвлечемся от дискретности задания, говорим об аналитическом виде). А область значений - разрывна. Ужель Вы считаете это нормальным?
Нормально, на мой взгляд, было бы, если бы разрывов не было. А их сделали. Зачем? Ведь используя ограничение вы как раз и ликвидируете это явление.
А в документации, на мой взгляд, должно было бы быть указание на то, что у этого преобразования есть такое свойство. Уж коль его таким сделали.

Михаил Иванович
10.02.2013, 06:31
Время же - кольцеобразно а не линейно.


Сильное утверждение. Думаю, что неверное. Закольцованность диапазона значений ничего не говорит о времени.

Валенок
10.02.2013, 17:49
Время - в смысле TIME и TIME()
А другое - говорят вообще спираль :)
PS
Самолет через 4 часа. А сейчас 23:30 :confused: А будет ли самолет :eek:

rovki
10.02.2013, 18:09
А другое - говорят вообще спираль :)
т :eek:
А я по наивности думал ,что развитие идет по спирали ,а время течет линейно от прошлого через настоящее в будущее .:)

Михаил Иванович
10.02.2013, 18:39
Я бы не стал смешивать филосовские категории с типами данных, их областями определений и форматами. Да и вообще, начинали совсем с другого, но надо же, куда пришли! Кроме того, строго говоря, речь-то шла не о времени, а об интервале времени. У них даже тип шкалы измерений разный.

Валенок
10.02.2013, 20:15
Я бы не стал смешивать филосовские категории с типами данных, их областями определений и форматами. Да и вообще, начинали совсем с другого, но надо же, куда пришли! Кроме того, строго говоря, речь-то шла не о времени, а об интервале времени. У них даже тип шкалы измерений разный.
От оно ! Жалкое ограниченное подобие Времени - это DATE. А TIME это действительно измеритель интервала на прямой Времени.Поэтому и циклично.


..а время течет линейно от прошлого через настоящее в будущее
А тут я вообще не рискнул бы чего-либо утверждать :) Или, максимум - на данный момент считается что это так

Откатываясь назад. А что нужно-то от REAL_TO_TIME ?

kgsh82
10.02.2013, 20:21
Так значит можно сделать на выходе с реле ШИМ сигнал


Проблема то в чём? Вроде всё разжевали.... Даже от темы начали отклонятся....
Можно сделать используя аппаратные возможности ПЛК63 либо программным методом (считаю аппаратный лучше)
Реле только долго не проживёт и всё - ресурс то не резиновый
Если уж сейчас не понятно - то ШИМ на ПЛК63 сделать действительно нельзя

rovki
10.02.2013, 21:53
Если уж сейчас не понятно - то ШИМ на ПЛК63 сделать действительно нельзя
А может заменим на слово -НЕ целесообразно , при периодах менее 1минуты ,например) :rolleyes:

Михаил Иванович
11.02.2013, 09:55
измеритель интервала на прямой Времени.Поэтому и циклично.
Не вижу логической связи. Сам по себе измеритель - с какой стати? Люди могут закольцевать, это уже вопрос его конструкции, концепции построения.

Откатываясь назад. А что нужно-то от REAL_TO_TIME ?
Логичности работы, а именно отсутствия разрывов на концах диапазона значений. Или информирование о такого рода явлении в документации. Но, понятно, что не от самого преобразования, а от людей, которые его делали. Все-таки это - не явление природы, а рукотоворно.

Михаил Иванович
11.02.2013, 10:00
А может заменим на слово -НЕ целесообразно , при периодах менее 1минуты ,например) :rolleyes:
То, что слово надо заменить - это, думаю, верно. А вот при каких периодах - это уже от человека зависит. Для одного - целсообразно одно, для другого - другое. Кого-то, может и секунда устроит. Может, ему жизненно важно, чтобы неделю проработало, а дальше можно выбросить, жизненная задача решена. Все зависит от того, за какое время человек планирует выработать ресурс и от скоростных особенностей реле. Но если говорить о нормальных ситуациях, то, наверное, надо согласиться.

Валенок
11.02.2013, 11:19
Логичности работы, а именно отсутствия разрывов на концах диапазона значений. Или информирование о такого рода явлении в документации. Но, понятно, что не от самого преобразования, а от людей, которые его делали. Все-таки это - не явление природы, а рукотоворно.

Где разрывы ? На пальцах покажите. Есть, например -3.7, -12.8 ?

Валенок
11.02.2013, 11:26
Не вижу логической связи. Сам по себе измеритель - с какой стати? Люди могут закольцевать, это уже вопрос его конструкции, концепции построения.
Необходимо закольцовывать. Затрудняюсь представить себе средство измерения чего-либо с полным диапазоном этой величины
Бесконечную рулетку для измерения длины даже китайцы не сделают.
PS
Самолет все-таки неприлетит

Михаил Иванович
11.02.2013, 12:35
Где разрывы ? На пальцах покажите. Есть, например -3.7, -12.8 ?
Не понимаю, почему Вы такие значения взяли. И для того и для другого будет максимальное значение области значений тип TIME.
Разрывы происходят в нуле и в максимальном значении. Предположим, на входе этого преобразования есть последовательность положительных значений, снижающихся к нулю. Например, 100, 50, 10, 3, 2, 1, 0. На выходе, Вы соответственно получаете тоже 100, 50, 10, 3, 2, 1, 0. При дробных значениях будет округление. То есть, функция преобразования - прямая, снижается к нулю. Чего логично ждать, если на вход после нуля попадет, предположим, минус 1? Думаю, что логичным будет ноль, поскольку область значений с этой стороны ограничена нулем. Ну и уперлись в него и все. А что имеем на деле? Имеем дикий скачок в максимальное значение. А зачем? Аналогичная вещь происходит при превышении максимального значения. Попробуйте задать какое-нибудь превышающее значение. Только не берите значения в миллисекундах из документации. Похоже, что там очередная ошибка. И что имеем на деле? Почему-то имеем ноль. Только не надо мне объяснять, КАК он получается. Вы попробуйте с позиций обычного человека объяснить, ПОЧЕМУ сделана такая разрывная функция. А если уж сделана, то почему в документации об этом ни слова. И опять мы вернулись к ней, родимой.

Михаил Иванович
11.02.2013, 12:38
Необходимо закольцовывать. Затрудняюсь представить себе средство измерения чего-либо с полным диапазоном этой величины
Бесконечную рулетку для измерения длины даже китайцы не сделают.
PS
Самолет все-таки неприлетит

И не нужно. Вы забываете о том, что количество диапазонов тоже считается. Просто происходит переход в новй разряд. Нет никакого закольцовывания.

capzap
11.02.2013, 12:49
Не понимаю, почему Вы такие значения взяли. И для того и для другого будет максимальное значение области значений тип TIME.
Разрывы происходят в нуле и в максимальном значении. Предположим, на входе этого преобразования есть последовательность положительных значений, снижающихся к нулю. Например, 100, 50, 10, 3, 2, 1, 0. На выходе, Вы соответственно получаете тоже 100, 50, 10, 3, 2, 1, 0. При дробных значениях будет округление. То есть, функция преобразования - прямая, снижается к нулю. Чего логично ждать, если на вход после нуля попадет, предположим, минус 1? Думаю, что логичным будет ноль, поскольку область значений с этой стороны ограничена нулем. Ну и уперлись в него и все. А что имеем на деле? Имеем дикий скачок в максимальное значение. А зачем? Аналогичная вещь происходит при превышении максимального значения. Попробуйте задать какое-нибудь превышающее значение. Только не берите значения в миллисекундах из документации. Похоже, что там очередная ошибка. И что имеем на деле? Почему-то имеем ноль. Только не надо мне объяснять, КАК он получается. Вы попробуйте с позиций обычного человека объяснить, ПОЧЕМУ сделана такая разрывная функция. А если уж сделана, то почему в документации об этом ни слова. И опять мы вернулись к ней, родимой.

Просто интересно, Вас не раздражает что в одном разряде может быть только два значения, единичка или нолик

Yegor
11.02.2013, 13:13
Нормально, на мой взгляд, было бы, если бы разрывов не было. А их сделали. Зачем? Ведь используя ограничение вы как раз и ликвидируете это явление.Никто эти разрывы специально не вводил. Кроме того, в алгоритмах управления чаще нужна дельта времени, нежели его абсолютное значение. Без переполнения считать дельту в «разрывах» гораздо сложнее, чем с ним.
А в документации, на мой взгляд, должно было бы быть указание на то, что у этого преобразования есть такое свойство. Уж коль его таким сделали.Документация на кодесис вызывается нажатием F1. Про диапазоны временных типов там сказано.

Валенок
11.02.2013, 13:49
Чего логично ждать, если на вход после нуля попадет, предположим, минус 1? Думаю, что логичным будет ноль, поскольку область значений с этой стороны ограничена нулем.
A + B - C = A - C + B ?

T#5h + T#3h - T#6h => T#2h
По Вашему T#5h - T#6h + T#3h => T#3h :confused: Новое слово

Михаил Иванович
11.02.2013, 14:23
A + B - C = A - C + B ?

T#5h + T#3h - T#6h => T#2h
По Вашему T#5h - T#6h + T#3h => T#3h :confused: Новое слово

При чем здесь это? Прошу меня извинить, видимо, я утерял способность объяснять.

Михаил Иванович
11.02.2013, 14:28
Просто интересно, Вас не раздражает что в одном разряде может быть только два значения, единичка или нолик

1. Не раздражает.
2. Первая часть высказывания неверна. Именно, что ИЛИ. В одном разряде может быть только одно значение. Что же касается количества возможных состояний, то это зависит от системы счисления.

Валенок
11.02.2013, 14:30
При чем здесь это? Прошу меня извинить, видимо, я утерял способность объяснять.
T#5h-T#6h <> T#5h + T#6h*(-1)
По Вашему

Михаил Иванович
11.02.2013, 14:32
Никто эти разрывы специально не вводил.
Наверное. Но они есть. Думаю, что те кто это делал, просто не проверили, что у них получилось.

Про диапазоны временных типов там сказано.
О диапазонах - да , хотя, как мне кажется, есть ошибки. А об этом явлении - нет.

Валенок
11.02.2013, 14:40
О диапазонах - да , хотя, как мне кажется, есть ошибки
Ну хоть одним глазком ?

capzap
11.02.2013, 14:40
Что же касается количества возможных состояний, то это зависит от системы счисления.

Значит ли это, что Вы не возражаете о наличии до Вас созданных систем исчисления, тогда зачем продолжаете спорить да еще и утверждаете что есть ошибки

Михаил Иванович
11.02.2013, 16:10
Ну хоть одним глазком ?

Попробуйте подставить в преобразование типов TIME_TO_REAL
значение 4194967295 ms, названное в документации максимальным значением для типа TIME. Может это и так, только что Вы получите на выходе? У меня, например, получается совсем не это число. Ограничения в преобразовании не указано, значит что-то не так с реальным диапазоном.
Можете поэкспериментировать с обратными преобразованиями из REAL. Там Вы получите тоже странные, на мой взгляд результаты. Уверен, что Вы этого не пробовали делать.

Михаил Иванович
11.02.2013, 16:18
Значит ли это, что Вы не возражаете о наличии до Вас созданных систем исчисления, тогда зачем продолжаете спорить да еще и утверждаете что есть ошибки

1. Ошибок в документации тьма.
2. Я изложил свои наблюдения. Не был понят. Попытался разъяснить. В процессе дискуссии понял, что у меня это не получится.
Поскольку мы давно отклонилась от первоначального предмета, давайте на этом заканчивать. Будем надеяться, что когда-нибудь мы начнем понимать друг друга.

capzap
11.02.2013, 17:15
тут скорее надо не друг друга понимать, а как работает процессор, ему бы кто объяснил что в шине данных переменная типа тайм и надо округлять так как хочет пользователь

rovki
11.02.2013, 18:37
тут скорее надо не друг друга понимать, а как работает процессор, ему бы кто объяснил что в шине данных переменная типа тайм и надо округлять так как хочет пользователь
Ну это не хорошо ,процессор с типами не работает :cool:(не передергивать) ,он работает с кодом .А уж как там сделали программисты (разработчики) языка ,то это другое дело .Сколько копьев было сломано с обратными связями(споров с разработчиками) ,пока разработчики не ввели явные обратные связи в ОЛ.
Пользователь не обязан вникать в трудности разработчиков ,а разработчик должен думать о пользователе ,причем разной квалификации .Лично мне это напоминает наш спор в теме ПР ,о делении на ноль .Сказать пользователю -Сам дурак- это не от большого ума и неуважение пользователя .
Извините ,что встрял

capzap
11.02.2013, 21:07
Ну это не хорошо ,процессор с типами не работает :cool:(не передергивать) ,он работает с кодом .А уж как там сделали программисты (разработчики) языка ,то это другое дело .Сколько копьев было сломано с обратными связями(споров с разработчиками) ,пока разработчики не ввели явные обратные связи в ОЛ.
Пользователь не обязан вникать в трудности разработчиков ,а разработчик должен думать о пользователе ,причем разной квалификации .Лично мне это напоминает наш спор в теме ПР ,о делении на ноль .Сказать пользователю -Сам дурак- это не от большого ума и неуважение пользователя .
Извините ,что встрял

так вот и я говорю, имеется 32 разряда шины данных, есть набор микрокоманд которые крутятся в процессоре и о типах переменных действительно знают языки высокого уровня, но как бы не компания овен разработчик стандарта МЭК, IEEE754 (другими не интересовался), даже среда разработки в которой мы что то ваяем и то принадлежит немцам, компании пролог.
Спрашивается, зачем здесь разводить эти споры, потому что форум самый активный?

rovki
11.02.2013, 21:18
Так если не чего нельзя изменить ,то нужно описать фичу(инструкцию то не в германии пишут) -об этом и речь ,не все ж с таким опытом работы.Я все сказал ,покидаю тему.

Валенок
11.02.2013, 22:13
Попробуйте подставить в преобразование типов TIME_TO_REAL
значение 4194967295 ms, названное в документации максимальным значением для типа TIME. Может это и так, только что Вы получите на выходе? У меня, например, получается совсем не это число. Ограничения в преобразовании не указано, значит что-то не так с реальным диапазоном.
Можете поэкспериментировать с обратными преобразованиями из REAL. Там Вы получите тоже странные, на мой взгляд результаты. Уверен, что Вы этого не пробовали делать.

T:time R1,R2:real;

R1:=-1;
T:=real_to_time(R1);
R2:=time_to_real(T) => -1 Чего тут не это ?

Михаил Иванович
12.02.2013, 09:43
T:time R1,R2:real;

R1:=-1;
T:=real_to_time(R1);
R2:=time_to_real(T) => -1 Чего тут не это ?

Все не так.
1. Указанное мною в предыдущем сообщении число принадлежит по документации диапазону значений TIME. Следовательно, на выходе должно получиться это же число. Этого не происходит. Но Вы почему-то этого не видите.
2. Вы не поэкспериментировали. Потому что если бы провели такие экспермиенты, то полученные результаты заставили бы Вас задуматься.
3. Я стараюсь как можно более доходчиво разъяснить свою позицию. Вы стараетесь писать как можно непонятнее, небрежно бросая пару строк. Не строя гипотез о причинах этого, могу лишь сказать, что подобный стиль не ведет к решению проблем и, следовательно, неконструктивен.
Вывод:
Продолжать диалог в этой ситуации бессмысленно.

Валенок
12.02.2013, 17:11
1. Указанное мною в предыдущем сообщении число принадлежит по документации диапазону значений TIME. Следовательно, на выходе должно получиться это же число. Этого не происходит. Но Вы почему-то этого не видите.
.
T1:= T#49d17h2m47s295ms (копи пасте прям из хэлпа)
RR:=TIME_TO_REAL(T1);
T2:=REAL_TO_TIME(RR);
Что не вижу ? T1 = T2. Должно быть как-то иначе ?
Ах, вырезали вторую цифирь – а она 4194967295ms
А в голову не приходит- почему первая и вторая цифирь в хелпе разные ?
Что простая опечатка 4194967295ms ? Девочка 1 вместо 2 нажала. Нет же. Всё неправильно. Всё нет так. Катастрофа. Из опечатки сделали вселенскую проблему. Мне такое даже в голову не приходит.
Вы видели какую-то документацию в таком объеме АБСОЛЮТНО без опечаток ?

Знаете за что у меня взгляд зацепился когда копипасте того числа сделал ? За чётность при обратном преобразовании. Мне хватило чтоб найти трабл.
Вы не подумали, почему я даже не пытаюсь вспомнить кол-во дней/часов в максимальном TIME а пишу просто INT_TO_TIME(-1) ?


3…Вы стараетесь писать как можно непонятнее, небрежно бросая пару строк.
Так эти строки – из той же песни. И если взаимосвязь невидна, хотя бы направление, то это нужно основы изучать - но форум вроде не тот.



2. Вы не поэкспериментировали. Потому что если бы провели такие экспермиенты, то полученные результаты заставили бы Вас задуматься.
А зачем мне экспериментировать ?
Выяснять почему-же все таки с тем числом нет отката назад при преобразовании ?
А Вас не удивляет что REAL_TO_WORD(2.7) = 3 ? Примерно отсюда же. Курим по IEEE – если интересно. Направление – представление отрицательных чисел. Оно не аналогично целочисленным. То число в нормализованном виде для мантиссы требует 27 бит. А сколько дают ? А -1 требует 1 бита. (знак – отдельно в обоих случаях) Вот и делайте выводы

И действительно -

Продолжать диалог в этой ситуации бессмысленно.

PAVEL_EKB
12.05.2015, 08:37
Добрый день, подскажите, пожалуйста. Можно ли программно изменять период ШИМ сигнала, ПЛК63? Поясню, один из выходов настроен на выдачу ШИМ сигнала с переменной длительностью( мощностью,управлять очень просто), но мне надо еще менять период, а как до него добраться не знаю. Нужно добраться именно до аппаратной настройки ШИМ, которая, судя по описанию, может изменяться по Modbus (регистр 295), либо по протоколу ОВЕН (thpd индекс 4). Я бы воспользовался каким-нибудь BLINK, но у него большая погрешность (у меня команды от 10мс до 5 с, период от 1с до 60с)

Вольд
12.05.2015, 08:52
Добрый день, подскажите, пожалуйста. Можно ли программно изменять период ШИМ сигнала, ПЛК63? Поясню, один из выходов настроен на выдачу ШИМ сигнала с переменной длительностью( мощностью,управлять очень просто), но мне надо еще менять период, а как до него добраться не знаю. Нужно добраться именно до аппаратной настройки ШИМ, которая, судя по описанию, может изменяться по Modbus (регистр 295), либо по протоколу ОВЕН (thpd индекс 4). Я бы воспользовался каким-нибудь BLINK, но у него большая погрешность (у меня команды от 10мс до 5 с, период от 1с до 60с)
А какие проблемы с BLINK ?

petera
12.05.2015, 10:49
Добрый день, подскажите, пожалуйста. Можно ли программно изменять период ШИМ сигнала, ПЛК63? Поясню, один из выходов настроен на выдачу ШИМ сигнала с переменной длительностью( мощностью,управлять очень просто), но мне надо еще менять период, а как до него добраться не знаю. Нужно добраться именно до аппаратной настройки ШИМ, которая, судя по описанию, может изменяться по Modbus (регистр 295), либо по протоколу ОВЕН (thpd индекс 4). Я бы воспользовался каким-нибудь BLINK, но у него большая погрешность (у меня команды от 10мс до 5 с, период от 1с до 60с)
Вам нужно использовать библиотеку "arm7_specific".
Посмотрите "Save_parameter.pro" из примеров работы с библиотекой arm7_specific - получение/редактирование параметров и их атрибутов здесь http://www.owen.ru/forum/showthread.php?t=13573 или не диске ПЛК.

PAVEL_EKB
12.05.2015, 13:43
А какие проблемы с BLINK ?
С BLINK проблема следующая, при маленькой длительности импульсов (около 15мс) у него большая погрешность 1-3 мс, смотрел на осциллографе.

PAVEL_EKB
12.05.2015, 13:46
Вам нужно использовать библиотеку "arm7_specific".
Посмотрите "Save_parameter.pro" из примеров работы с библиотекой arm7_specific - получение/редактирование параметров и их атрибутов здесь http://www.owen.ru/forum/showthread.php?t=13573 или не диске ПЛК.
Сейчас сажусь изучать данную библиотеку. Еще вопрос, есть ли какая-нибудь карта системных регистров, к которым можно обращаться напрямую из программы?

PAVEL_EKB
13.05.2015, 09:09
C библиотекой "arm7_specific". вроде бы разобрался, спасибо! Теперь возникает второй вопрос, а сколько раз можно перезаписывать один конфигурационный параметр, ведь насколько я понимаю вся конфигурация находится во Flash-памяти, а у нее ограниченное кол-во циклов перезаписи?

Филоненко Владислав
13.05.2015, 13:24
ресурс Flash 10000 перезаписей, однако:
1. Следует учесть, что загрузка программы это тоже перезапись
2. Flash-память разбита на страницы и при записи 1 параметра перезаписывается вся страница, а на ней могут быть десятки разных параметров.
3. Т.о. не рекомендуется записывать более 1000 параметров или программ в год (с учётом срока эксплуатации)

PAVEL_EKB
13.05.2015, 16:42
ресурс Flash 10000 перезаписей, однако:
1. Следует учесть, что загрузка программы это тоже перезапись
2. Flash-память разбита на страницы и при записи 1 параметра перезаписывается вся страница, а на ней могут быть десятки разных параметров.
3. Т.о. не рекомендуется записывать более 1000 параметров или программ в год (с учётом срока эксплуатации)
Спасибо, за ответ. Но он меня мягко говоря расстроил, теперь и не знаю что делать. Может кто-нибудь подскажет.
Задача следующая: Имеется ПЛК63 с транзисторными выходами. Необходимо управлять одним клапаном(клапан дозирования). Длительность команд от 20-1000мс, период от 5-200с. Возможно ли такое сделать на данном контроллере? Я перепробывал: Blink, таймеры, счетчик милисекунд. Они работают, но с большой погрешностью, причем 5-6 импульсов нормальных , а затем 1-2 плохих(большая погрешность).

Василий Кашуба
13.05.2015, 18:48
Спасибо, за ответ. Но он меня мягко говоря расстроил, теперь и не знаю что делать. Может кто-нибудь подскажет.
Задача следующая: Имеется ПЛК63 с транзисторными выходами. Необходимо управлять одним клапаном(клапан дозирования). Длительность команд от 20-1000мс, период от 5-200с. Возможно ли такое сделать на данном контроллере? Я перепробывал: Blink, таймеры, счетчик милисекунд. Они работают, но с большой погрешностью, причем 5-6 импульсов нормальных , а затем 1-2 плохих(большая погрешность).
Вы приложите свою программу, специалисты посмотрят и может, что нибудь подскажут.

aRRma99
13.05.2015, 22:39
Вот мой проект для ПЛК73 для 63 все тоже самое. В программе выводится значение периода ШИМа на экран и с помощью кнопок его можно изменят. Все с пояснениями думаю разберетесь. А более подробно рассказывать как это все работает это долгая история. Ни в одном мануале от ОВЕНа про это ничерта не написасно и про то как работать с библиотекой arm7 тоже. Ключевой момент с 15 по 20 строку кода!!!

Вольд
14.05.2015, 11:50
Спасибо, за ответ. Но он меня мягко говоря расстроил, теперь и не знаю что делать. Может кто-нибудь подскажет.
Задача следующая: Имеется ПЛК63 с транзисторными выходами. Необходимо управлять одним клапаном(клапан дозирования). Длительность команд от 20-1000мс, период от 5-200с. Возможно ли такое сделать на данном контроллере? Я перепробывал: Blink, таймеры, счетчик милисекунд. Они работают, но с большой погрешностью, причем 5-6 импульсов нормальных , а затем 1-2 плохих(большая погрешность).
Дай ссылку на описание клапана. Очень интересно что за клапан такой.

Филоненко Владислав
14.05.2015, 12:07
Спасибо, за ответ. Но он меня мягко говоря расстроил, теперь и не знаю что делать. Может кто-нибудь подскажет.
Задача следующая: Имеется ПЛК63 с транзисторными выходами. Необходимо управлять одним клапаном(клапан дозирования). Длительность команд от 20-1000мс, период от 5-200с. Возможно ли такое сделать на данном контроллере? Я перепробывал: Blink, таймеры, счетчик милисекунд. Они работают, но с большой погрешностью, причем 5-6 импульсов нормальных , а затем 1-2 плохих(большая погрешность).

ПЛК63 для прямого управления с такими требованиями к точности и быстродействию не подходит. А вот если к нему подключить модуль расширения (МХ или ПР) - всё будет работать хорошо.
2-й вариант если модификацияс аналоговыми выходами - либо использовать клапан с управлением аналоговым сигналом, либо простой преобразователь напряжение->скважность на 555 таймере.
3-й - если есть навыки программирования микроконтроллеров - можно сделать плату расширения для управления клапаном. Реализовывал такие устройства для управления ШД.

PAVEL_EKB
14.05.2015, 17:02
Спасибо, всем за ответы, но не один из них мне не подходит. Что касается ответа aRRma99 , то изначально я так и хотел сделать, но оказалось, что нельзя, т.к. параметр "Период ШИМ" находится во флеш-памяти, а у нее ограниченный ресурс перезаписи. Что касается ответа Владислава, тут наверно все работоспособно, но требует дополнительных устройств, чего тоже не хотелось бы. Зато поломав голову еще целый день, у меня кое-что получилось, хотя и с некоторыми ограничениями, которые для меня не критичны. Мой генератор выдает импульсы от 10 мс до 900мс с погрешностью 1мс с любым периодом кратным 1000мс, а импульсы от 900мс с погрешностью в несколько мс( для >900мс использовал Blink), с любым периодом. Если кому-нибудь такой пригодится вот мой генератор. Если с ним еще немного позаниматься, то я думаю можно улучшить характеристики.

PAVEL_EKB
14.05.2015, 17:11
Для своего генератора в предыдущем посте, я физически(проводом) соединял выход ШИМ со одним из входов, а кто подскажет, как это можно сделать программно. Проблема в том, что на выход ШИМ подается дробное число, а когда начинается и заканчивается импульс неизвестно.

aRRma99
15.05.2015, 14:28
Спасибо, всем за ответы, но не один из них мне не подходит. Что касается ответа aRRma99 , то изначально я так и хотел сделать, но оказалось, что нельзя, т.к. параметр "Период ШИМ" находится во флеш-памяти, а у нее ограниченный ресурс перезаписи. Что касается ответа Владислава, тут наверно все работоспособно, но требует дополнительных устройств, чего тоже не хотелось бы. Зато поломав голову еще целый день, у меня кое-что получилось, хотя и с некоторыми ограничениями, которые для меня не критичны. Мой генератор выдает импульсы от 10 мс до 900мс с погрешностью 1мс с любым периодом кратным 1000мс, а импульсы от 900мс с погрешностью в несколько мс( для >900мс использовал Blink), с любым периодом. Если кому-нибудь такой пригодится вот мой генератор. Если с ним еще немного позаниматься, то я думаю можно улучшить характеристики. 18155
А какой у памяти ресурс? Я думаю от перезаписи парочки байт она не помрет у вас за пару месяцев. как к примеру не помирают SSD накопители. В перезаписях какой ресурс у нее?

PAVEL_EKB
15.05.2015, 14:49
А какой у памяти ресурс? Я думаю от перезаписи парочки байт она не помрет у вас за пару месяцев. как к примеру не помирают SSD накопители. В перезаписях какой ресурс у нее?
Посмотрите на предыдущей странице, пост #58.