PDA

Просмотр полной версии : ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)



Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

drvlas
05.02.2015, 22:33
код на выходе которого будет показывать время в секундах от начала события Меня интересует событие: "Наступил 1970-й год, товарищи!"
То есть, начальное значение этого счетчика нужно установить, зная кол-во секунд от того "события" до момента установления этого счетчика. А если мы умеем узнавать, сколько же секунд прошло, то зачем нам счетчик?

2 petera: в тех функциях для двух месяцев ошибочка. Не зря я не люблю такие хитрые вычисления...
Да, и еще есть ошибочки. Ща буду проверять.

petera
06.02.2015, 04:42
Ну так и фиг с ним.
Попробую изложить, как я понял:
В ПЛК100 (говорю только о нем, ибо понимаю, что все очень разнится) есть реальные часики, тикающие от аккумулятора. Обращения к ним на уровне библиотек я знаю только одни: через ФБ CurTime и CurTimeEx из SysLibTime.lib. При нулевом наборе аргументов время-дата считывается, при ненулевом - записывается.
И всьо... Время в ПЛК таким образом есть. Оно доступно из структуры SystemTimeDate в "человеческом" формате. Для получения "асболютного времени" (в формате POSIX), безусловно более удобном для операций сравнения, вычитания, упорядочения, необходимо что-то предпринимать.
Один способ - реализация RTC, имеющего прямо выход CDT в нужном формате. На ПЛК100 это не работает (или у меня кривые руки). Если ее делать на основе ФБ TON, то это значит - сначала установить время-дату из энергонезависимых часиков, а потом отмерять его на таймере. На мой непросвещенный взгляд это ничем не лучше прямого пересчета из данных структуры SDT из ФБ CurTimeEx.
Доклад окончил :)
16604

Обратите внимание: данные функции работают синхронно. В определенных целевых системах операция чтения часов реального времени может быть достаточно длительной.
Используйте функциональный блок RTC, включенный в стандартную библиотеку CoDeSys. RTC отсчитывает дату и время на основании явно заданного при его инициализации значения.
Значит использование RTC из стандартной библиотеки или самописного разницы нет. Стандартный RTC тоже нужно инициализировать после включения ПЛК. Наверно он тоже не обращается напрямую к системным часам, а использует другой механизм, например, как у функции TIME()

А для получения значения "асболютного времени" нужна библиотека SysLibRtc.lib, а такой для ОВЕНа нет. По этому придется использовать SysLibTime.lib и ручками собирать такое время из структуры SystemTimeDate в "человеческий формат".
ЗЫ.
ФБ CurTimeEx, выполняющий у нас роль RTC, не принимает эту дату. Легко установил, что этот ФБ не принимает дату с годом менее 2000
Есть у этого ФБ ограничения и на максимальный год, не помню точно значение, когда делал ввод времени с панели http://www.owen.ru/forum/showthread.php?t=16298&p=156821&viewfull=1#post156821, то пришлось задать пределы ввода для года 2000-2100

Yegor
06.02.2015, 06:49
Хорош страдать. Вот TimeExp2.lib с функцией DATETIME, которая возвращает текущее время и дату в DT (юних-тайм в случае ПЛК1xx).

petera
06.02.2015, 07:24
Хорош страдать. Вот TimeExp2.lib с функцией DATETIME, которая возвращает текущее время и дату в DT (юних-тайм в случае ПЛК1xx).
И что в ней такого особенного?
Внутри те же функции и ф.блоки, что и в приведенной выше статье http://prolog-plc.ru/docs/TimeExperience.pdf, только коментарии на английском.
Даже fbRTC один в один. А функция DATETIME, которая возвращает текущее время и дату в DT (юних-тайм в случае ПЛК1xx), использует выше приведенные вычисления по упаковке времени из структуры SystemTimeDate в "человеческий формат".
А drvlas, хотел обойтись без оных вычислений и получать системное время сразу в формате DT из аппаратных часов, пологая, что стандартный фб. RTC так и делает.

Yegor
06.02.2015, 07:46
Удачи ему в этом нелёгком деле (http://owen.ru/forum/showthread.php?t=11827&p=74532&viewfull=1#post74532).

drvlas
06.02.2015, 08:26
И что в ней такого особенного?
Внутри те же функции и ф.блоки, что и в приведенной выше статьеНу... Не скажите, коллега.
Во-первых, авторитет Yegor-а заставил меня повнимательнее посмотреть все эти примеры. оказалось, что полезно. Например, полная и сокращенная версии определения високосного года - от меня как-то раньше ускользнуло. Хотя, канешна, меня вполне устраивает и работоспособность с 2000 по 2100 годы :)
Кроме того, посмотрел, что дни в целом количестве месяцев текущего года там считаются именно так, как я хотел - по таблице. Правда, я тупо сделал 2 таблицы, а там вызывается функция IsLeapYear.
А вот функция DaysToYear сделана красивше, чем в той SOCAT (где сплошные подвыверты) и чем сделал я. Ща проверю и возьму на вооружение.
Ну, и код из ссылки Yegor-а мне еще предстоит понять.

И хотя модуль RТC мне таки да не нужен, как говорят в нашей Одессе, но пересчет данных структуры SystemTimeDate в POSIX-time віглядит все лучше и лучше. Так что, спасибо за подсказку и Yegor-у тоже!

drvlas
06.02.2015, 09:14
TimeExp2.lib с функцией DATETIME, которая возвращает текущее время и дату в DTА ка ей на вход чтой-то подать? Не вижу VAR_INPUT

Yegor
06.02.2015, 09:49
А ей не надо ничего на вход подавать. Она только текущее дату-время возвращает.
now := DATETIME(); (* где now: DT *)

petera
06.02.2015, 10:05
Не знаю, почему у drvlas стандартный RTC не работает

http://youtu.be/82zYwVWKC-A
У меня работает, причем как я и предполагал DT на выходе RTC ни как не связано с часами ПЛК.

drvlas
06.02.2015, 11:27
А ей не надо ничего на вход подаватьПодумал об этом, но не успел проверить. Загрузил сначала первую либу, потом накатил вторую, а они конфликтуют...
Ну, в общем да, это оно. Теперь у меня бегут 4 варианта этого "абсолютного времени", и что интересно - все показывают одно и то же. Кстати, об ошибках в оскате я поспешил заявить :( Сам табличку дней в месяцах с ошибкой сделал - кто ж ее смотрел, по памяти...
Осталось сделать выбор. В общем-то, подгрузить либу TomeExp2.lib не так уж и расходно, поэтому метод DATETIME() рулит по простоте использования.
С вами очень весело, коллеги, но пора заняться работой :) У нас сейчас много чего меняется в налоговом поле, народ ошалел от всего этого, юристы впихивают в договора совершенно невпихуемые дурости. Приходится заниматься словоблудием до боли в зубах...

Всего хорошего, успехов всем в мирном труде!

Postoronniy
06.02.2015, 13:10
Postoronniy, Вы так вопрос задали, что невозможно понять что Вы хотите. Сформулируйте так, чтобы всем было понятно.
1. Включили питание. Должны включиться такие-то выходы. Не должны включаться такие-то.
2. Выключили питание. Должны отключиться такие-то выходы и т.д.

1. При включенном питании работают какие-то выходы.
2. Питание пропало-все выключилось
3. Питание появилось-выходы, работавшие до отключения питания начинают сразу работать.
Нужно что бы эти выходы сбрасывались и после включения питания ничего не начинало работать.
PS:
На контроллер ПЛК100 решил это добавлением субэлемента Statistics -> Power Status и по нему сбрасываю конструкции SetReset.
Сейчас пытаюсь найти решение для СПК110.
Подскажите, пожалуйста, если кто знает.

petera
06.02.2015, 13:13
1. При включенном питании работают какие-то выходы.
2. Питание пропало-все выключилось
3. Питание появилось-выходы, работавшие до отключения питания начинают сразу работать.
Нужно что бы эти выходы сбрасывались и после включения питания ничего не начинало работать.
PS:
На контроллер ПЛК100 решил это добавлением субэлемента Statistics -> Power Status и по нему сбрасываю конструкции SetReset.
Сейчас пытаюсь найти решение для СПК110.
Подскажите, пожалуйста, если кто знает.
А что, у СПК110 уже появились выходы:rolleyes:.

Postoronniy
06.02.2015, 15:25
А что, у СПК110 уже появились выходы:rolleyes:.
Спасибо за ответ,это я торможу уже)))

Эдуард_Н
07.02.2015, 12:35
Подскажите, что делать. Есть два проекта на ПЛК160 и 2-ух ПР114, связаны по RS485-38400 скорость. В первом проекте связь между ними нормально работает. Во втором добавлен модем на отправку смс (RS232Debug) и скорость считывания с ПРки заметно упала (примерно на 2-3минуты), запись же в ПРку происходит с той же скоростью как и первом проекте. Как обратно вернуть скорость считывания?

Валенок
07.02.2015, 21:09
Подскажите, что делать. Есть два проекта на ПЛК160 и 2-ух ПР114,... Как обратно вернуть скорость считывания?
Звезды говорят что сначала нужно найти черную кошку и перо вороны. Перо вороны поджечь над кошкой. Кошка должна обязательно побежать на восток. Если не получицца - найти другую кошку. После побега кошки на восток семь раз повернутся через левое плечо. Сделать сальто-мортале. Когда сальто-мортале получицца - выложить проекты. Но если сальто не получицца - повторить всё с начала.

Эдуард_Н
09.02.2015, 11:10
Вопрос снимаю. Всё выяснилось. Время опроса на ПР-ки уменьшил.

DENth
09.02.2015, 16:52
Приветствую! Не смог найти ответа на форуме, поэтому спрошу. Разбираюсь с работой по Modbus через библиотеку. Не могу понять, как реализовать период опроса внешнего устройства по времени, как это было в конфигураторе.

Хочу реализовать проект следующим образом - подпрограмма для обмена по RS485:

CASE master1 OF

0: (* функция 06 - запись параметра типа Int в прибор*)
send1_modbus(
Enable:= enabl, (* разрешение работы блока *)
Mode:=MB_RTU, (*режим передачи*)
DevAddr:= INT_TO_BYTE(Dev), (*адрес*)
RegAddr:= Adrs, (*регистр*)
Value:=Din, (*значение переменной, которое надо передать*)
ComHandle:= Settings.Port, (*номер сом-порта*)
TimeOut:=TimeOut , (*таймаут T#50ms*)
Complete=>cmpl , (* скопировать признак завершения операции *)
Exception=>err ); (* скопировать регистр ошибок *)
(*если установлен признак завершения операции, то *)
IF cmpl THEN
master1:=1; (*переходим к выполнению следующего блока*)

а само обращение из основной программы. Приблизительно так:

RS485(enabl:= enabl, Din:= A , Dev:= Panel1, Adrs:=402);
RS485(enabl:= enabl, Din:= B , Dev:= Panel2, Adrs:=403);

Как сделать, чтобы передача каждого регистра происходила с периодом 100 мс? И, вообще, допустимы ли подобные решения?

RV9WFJ
10.02.2015, 12:07
Все допустимо, только непонятно зачем пауза нужна. Если все таки нужна то добавьте в операторе CASE еще одну цифру и таймер туда, по окончании таймера переход на следующий шаг и обязательно инициализация таймера!
P.S. Код вы привели так, что вообще ничерта не понять. Почему у вас значение Din буквами например? (* функция 06 - запись параметра типа Int в прибор*)

DENth
10.02.2015, 16:57
Спасибо за совет. Разобрался. Таймер помог. Основная моя запутка была в желании последовательного обращения к одному функциональному блоку с разными параметрами, не дожидаясь готовности.

kvr15
11.02.2015, 12:12
Подскажите пожалуйста,можно ли выгрузить проект из контроллера?
Если да, то как?

Василий Кашуба
11.02.2015, 13:30
Подскажите пожалуйста,можно ли выгрузить проект из контроллера?
Если да, то как?
Компилированный, (для редактирования), нельзя, а если сохранялся исходный файл, то можно. В КДС выбираете иконку "Открыть..." и в нижней части открывшегося окна, выбираете из ПЛК.

kvr15
11.02.2015, 14:01
Компилированный, (для редактирования), нельзя, а если сохранялся исходный файл, то можно. В КДС выбираете иконку "Открыть..." и в нижней части открывшегося окна, выбираете из ПЛК.

Никаких файлов нет,есть просто контроллер с уже загруженным в него проектом,есть ли возможность выгрузить оттуда проект?необязательно для редактирования,хотя бы для чтения

amn
11.02.2015, 14:33
Вам же сказали, что для этого программист должен был записать в контроллер исходник. Если его там нет, то текст Вы не увидите.

kvr15
11.02.2015, 14:34
Вам же сказали, что для этого программист должен был записать в контроллер исходник. Если его там нет, то текст Вы не увидите.

я и говорю что нету файлов
а как тогда записать исходник в контроллер?

petera
11.02.2015, 14:53
я и говорю что нету файлов
а как тогда записать исходник в контроллер?
Так бы сразу и спросили:-"Как записать проект в контроллер?", а то - "Как прочитать, как прочитать?".
16695

kvr15
11.02.2015, 15:02
Так бы сразу и спросили:-"Как записать проект в контроллер?", а то - "Как прочитать, как прочитать?".
16695

спасибо большое:D
и это тоже пригодиться знать:D

Insmzk
12.02.2015, 07:51
Здравствуйте! Есть программа в разработке для водоотлива.Проблема в том что когда реле протока не сработало идет сигнал на отключение, а когда реле отработало, то насос качает до нижнего уровня и он должен отключаться, но этого не происходит. А когда я убираю блок мув(для осуществления отключения по протоку) то тогда у меня приходит сигнал на отключение по уровню. Подскажите мб надо какой нибудь другой блок использовать?
16702

Василий Кашуба
12.02.2015, 09:10
Здравствуйте! Есть программа в разработке для водоотлива.Проблема в том что когда реле протока не сработало идет сигнал на отключение, а когда реле отработало, то насос качает до нижнего уровня и он должен отключаться, но этого не происходит. А когда я убираю блок мув(для осуществления отключения по протоку) то тогда у меня приходит сигнал на отключение по уровню. Подскажите мб надо какой нибудь другой блок использовать?
16702
Объедините сигналы на отключение через "или".

Insmzk
12.02.2015, 09:20
Объедините сигналы на отключение через "или".

Спасибо) Сам додумался буквально мин 10 назад, а до этого часа 4 думал, отчаился уже и написал)Приятно видеть, что тут готовы помочь) еще раз спасибо)

Ryzhij
12.02.2015, 11:09
Начал разбираться с чужим проектом, и не пока не понял, что собственно означают синие стрелки у пиктограмм POU в окне Организатора объектов? :confused:
16712
Растолкуйте, plz!

capzap
12.02.2015, 11:52
Начал разбираться с чужим проектом, и не пока не понял, что собственно означают синие стрелки у пиктограмм POU в окне Организатора объектов? :confused:
16712
Растолкуйте, plz!

в этих местах есть отличие от проекта в среде разработки и компилированного файла, который возможно уже был загружен в плк

Ryzhij
12.02.2015, 13:05
Да, спасибо, в документе "Руководство пользователя по программированию ПЛК в CoDeSys 2.3" есть, оказывается, абзац:

В целевых системах, поддерживающих изменения в режиме Онлайн, POU, которые будут загружены в контроллер, после компиляции помечаются синей стрелкой в Организаторе Объектов.
То есть, проект вместе с исходным текстом залили в ПЛК, внесли изменения в режиме Онлайн, а обновлённый исходный текст в ПЛК пока ещё не загрузили. Так?
В ПЛК откомпилированная программа уже новая или нет?

Yegor
12.02.2015, 14:55
внесли изменения в режиме ОнлайнКодесис 2 не даст вам внести изменения в онлайне.
обновлённый исходный текст в ПЛК пока ещё не загрузилиРечь не об исходных текстах. Синей стрелкой помечаются те узлы, после компиляции которых получается код, отличный от кода уже загруженных в ПЛК узлов. Капзап сказап уже.

Ryzhij
12.02.2015, 15:01
Ещё раз - спасибо.

Insmzk
13.02.2015, 09:43
Здравствуйте! Подскажите есть ли похожий блок в CFC? Если значение Тру то сигнал идет по верхнему контакту, если не Тру, то по нижнему?16719

capzap
13.02.2015, 09:45
Здравствуйте! Подскажите есть ли похожий блок в CFC? Если значение Тру то сигнал идет по верхнему контакту, если не Тру, то по нижнему?16719
замену SEL что ли ищите?

Insmzk
13.02.2015, 09:58
замену SEL что ли ищите?
Хм Да скорее всего SEL подойдет по пробую, ну а так как на моем рисунке нет? Пытаюсь реализовать перевод с Автоматического режима на Местный и на оборот.

capzap
13.02.2015, 10:11
так как на рисунке вроде не встречал, для этого просто берется два элемента MOVE с En/Eno, на них подается один и тот жже сигнал, а на вход En управляющий сигнал, только на одном из элементов через инверсию. Если хотите всё это одним квадратиком, создайте функцию

Insmzk
13.02.2015, 10:17
так как на рисунке вроде не встречал, для этого просто берется два элемента MOVE с En/Eno, на них подается один и тот жже сигнал, а на вход En управляющий сигнал, только на одном из элементов через инверсию. Если хотите всё это одним квадратиком, создайте функцию

А можете пояснить по поводу выхода Eno, при каком условии на него сигнал поступает? И под управляющим сигналом Вы имеете ввиду True или False?

petera
13.02.2015, 10:32
А можете пояснить по поводу выхода Eno, при каком условии на него сигнал поступает?
Кнопка "F1"+Указатель в справке помогает в большинстве случаев:rolleyes:

Insmzk
13.02.2015, 10:42
Кнопка "F1"+Указатель в справке помогает в большинстве случаев:rolleyes:

Вот я так и не понял там) Одно ясно если En Tru и на входе Тру тогда на выход приходит сигнал, а Eno свободный..

Insmzk
13.02.2015, 10:55
так как на рисунке вроде не встречал, для этого просто берется два элемента MOVE с En/Eno, на них подается один и тот жже сигнал, а на вход En управляющий сигнал, только на одном из элементов через инверсию. Если хотите всё это одним квадратиком, создайте функцию

Собрал вроде как Вы написали, но есть один вопрос.. при Tumb:True, у нас первый сигнал только должен приходить на DO2 почему горит DI4? Баг программы? при этом я могу поменять значение DI4 На ложь или истину, означая что сигнала там нет, а на DO2 не получается там всегда истина...16720

capzap
13.02.2015, 10:57
Вот я так и не понял там) Одно ясно если En Tru и на входе Тру тогда на выход приходит сигнал, а Eno свободный..
Вам он зачем? Если Вы например хотите, после удачного исполнения элемента выполнить цепочку других элементов, то он может пригодится

Если у блока имеется поток сигнала на входе EN и блок выполняет свою функцию без ошибок, то выход ENO передает поток сигнала (ENO = 1) следующему элементу. Если в исполнении блоковой команды обнаружена ошибка, то поток сигнала прерывается (ENO = 0) у блоковой команды, которая вызвала ошибку.

capzap
13.02.2015, 10:59
Собрал вроде как Вы написали, но есть один вопрос.. при Tumb:True, у нас первый сигнал только должен приходить на DO2 почему горит DI4? Баг программы? при этом я могу поменять значение DI4 На ложь или истину, означая что сигнала там нет, а на DO2 не получается там всегда истина...16720

для булевых значений подойдет обычный элемент & (И) вместо move

Insmzk
13.02.2015, 11:09
для булевых значений подойдет обычный элемент & (И) вместо move

Теперь я маленько опять не понял блок мув) Ведь что бы передать с En сигнал на выход блока, на до что бы на входе ниже En приходило тру, так ?

petera
13.02.2015, 11:16
Собрал вроде как Вы написали, но есть один вопрос.. при Tumb:True, у нас первый сигнал только должен приходить на DO2 почему горит DI4? Баг программы? при этом я могу поменять значение DI4 На ложь или истину, означая что сигнала там нет, а на DO2 не получается там всегда истина...16720
Я не знаю, как Вы читаете
16721
Черным по белому написано, что после того, как условие EN больше не выполняется выходы блока с EN остаются в том состоянии, которое они имели перед этим.

Insmzk
13.02.2015, 11:18
Я не знаю, как Вы читаете
16721
Черным по белому написано, что после того, как условие EN больше не выполняется выходы блока с EN остаются в том состоянии, которое они имели перед этим.

Спасибо, теперь понятно почему так не вдумался..

Micury
16.02.2015, 02:13
Здравствуйте! Помоги с пониманием и объяснением функций Клапана, описанных вот так
http://cs622231.vk.me/v622231021/1cc91/By0m7VAyK04.jpg

kvr15
16.02.2015, 10:35
Подскажите пожалуйста как узнать IP-адрес ПЛК чтобы наладить с ним связь по TCP

Николаев Андрей
16.02.2015, 10:37
Установив соединение по любому из интерфейсов с CODESYS необходимо перейти в ПЛК браузер, и в нем выполнить команду PLCInfo.
Работа с ПЛК браузером описана в руководстве пользователя к ПЛК

kvr15
16.02.2015, 10:53
Установив соединение по любому из интерфейсов с CODESYS необходимо перейти в ПЛК браузер, и в нем выполнить команду PLCInfo.
Работа с ПЛК браузером описана в руководстве пользователя к ПЛК

К сожалению нет возможности по другому интерфейсу установить соединение, есть еще способы?

Вольд
16.02.2015, 11:41
К сожалению нет возможности по другому интерфейсу установить соединение, есть еще способы?
А по Ethernet тоже можно установить соединение с CoDeSys.

Валенок
16.02.2015, 12:29
Клиент хотел соединится чтоб ip узнать )))


А ПЛК из коробки ? 10.0.6.10 - дефолтное

capzap
16.02.2015, 13:18
К сожалению нет возможности по другому интерфейсу установить соединение, есть еще способы?

www.owen.ru/forum/showthread.php?t=17003&p=134392&viewfull=1#post134392 я здесь показал как можно определить потерявшийся адрес, это касается любого устройства не обязательно 304

Insmzk
17.02.2015, 05:18
Здравствуйте, есть блок RTC с помощью него можно узнать системное время и дату.. После преобразования из даты во время он мне показывает "свое" какое то время, как правильно преобразовать его в нормальный вид ?16757

capzap
17.02.2015, 05:24
Здравствуйте, есть блок RTC с помощью него можно узнать системное время и дату.. После преобразования из даты во время он мне показывает "свое" какое то время, как правильно преобразовать его в нормальный вид ?16757

а что такое нормальный вид?

Insmzk
17.02.2015, 05:29
а что такое нормальный вид?

Что бы он преобразовывал в такой к примеру формат 15h25m23s

capzap
17.02.2015, 05:42
Что бы он преобразовывал в такой к примеру формат 15h25m23s

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

Insmzk
17.02.2015, 06:09
согласен что запись в минутах несколько пугает, но на точность определения времени это ни как не влияет, если требуется выводить на визуализацию, то конвертируйте не во время а в udint, затем делите на количество секунд в часе и по модулю на это же число,полученный результат делите на количество секунд в минуте и т.д.
"На это же число" не пойму на какое именно?) Смотрите я получил число t1(DT_TO_UDINT---->t1) потом взял и разделил t1 на 3600 получил t2. И теперь надо разделить t1 на t2?

Yegor
17.02.2015, 06:27
Что бы он преобразовывал в такой к примеру формат 15h25m23sDT_TO_TOD

тупорылый движок форума просит минимум 10 символов

Insmzk
17.02.2015, 06:32
DT_TO_TOD

тупорылый движок форума просит минимум 10 символов

Ооо спасибо большое!)

Insmzk
17.02.2015, 06:46
DT_TO_TOD

тупорылый движок форума просит минимум 10 символов

Подскажите еще, что бы сделать уставку переменой типа TOD, как ей правильно присвоить значение? Например,t1 у нас реальное значение а t2 уставка 12:00:00. как только t1 станет равным t2, у нас произойдет вкл. А то время теперь отображается t1 а отдельно переменной не могу присвоить значение в таком виде 12:00:00

Insmzk
17.02.2015, 06:55
Подскажите еще, что бы сделать уставку переменой типа TOD, как ей правильно присвоить значение? Например,t1 у нас реальное значение а t2 уставка 12:00:00. как только t1 станет равным t2, у нас произойдет вкл. А то время теперь отображается t1 а отдельно переменной не могу присвоить значение в таком виде 12:00:00

Разобрался)

Insmzk
17.02.2015, 07:48
А можно ли складывать переменные типа TOD, не используя преобразования типа TOD_to_Real а на прямую каким нибудь блоком, а то ADD не хочет?

Yegor
17.02.2015, 08:23
Сложение двух TOD или двух DT не имеет смысла. Сколько будет 5 января 1920 + 17 сентября 2149? Внутренние представления дат сложить, конечно, можно, но с семантической точки зрения получается нонсенс. С суточным временем то же самое, но менее очевидно. Суточное время можно складывать с длительностью, но не с другим суточным временем.

Хорошо, что компилятор этого не допускает, хотя сообщение об ошибке могли бы сделать и более понятным. Складывайте TOD и TIME.

Подобные конфликты — верный признак того, что где-то выше по течению программы вы неудачно выбрали или заранее не преобразовали типы своих данных.

Insmzk
17.02.2015, 13:25
Сложение двух TOD или двух DT не имеет смысла. Сколько будет 5 января 1920 + 17 сентября 2149? Внутренние представления дат сложить, конечно, можно, но с семантической точки зрения получается нонсенс. С суточным временем то же самое, но менее очевидно. Суточное время можно складывать с длительностью, но не с другим суточным временем.

Хорошо, что компилятор этого не допускает, хотя сообщение об ошибке могли бы сделать и более понятным. Складывайте TOD и TIME.

Подобные конфликты — верный признак того, что где-то выше по течению программы вы неудачно выбрали или заранее не преобразовали типы своих данных.

Подскажите, как вывести на визуализацию переменную типа TOD что бы можно было ее изменять. Писал в свойствах прямоугольника во вкладке текст =%h не выходит...

petera
17.02.2015, 14:14
Подскажите, как вывести на визуализацию переменную типа TOD что бы можно было ее изменять. Писал в свойствах прямоугольника во вкладке текст =%h не выходит...
А почему не %s ?

Insmzk
18.02.2015, 05:28
А почему не %s ?
Он выводит в таком виде (TOD#22:23 к примеру), а можно как нибудь убрать TOD и просто изменять время?

Yegor
18.02.2015, 06:02
Инсмзк, открывайте справку > Визуализация CoDeSys > Конфигурирование элементов визуализации > Текст.

16763

Insmzk
18.02.2015, 10:06
Подскажите почему при не выполнении условии, когда Tvkl1=00:00 сигнал проходит, а если поставлю другое значение например Tvkl1=01:00, условие тоже не выполняется и сигнал как и ему положено не идет, а при 00:00 он почему то минует равенство и выдает сигнал? Treal системное время.16765

kvr15
18.02.2015, 13:07
Подскажите пожалуйста как лучше связать работу двух ПЛК-100, чтобы один был мастером другой слейвом.Интерфейс,протокол,и какие для этого настройки нужно сделать?
Есть ли инструкции по такой настройке?

Yegor
18.02.2015, 13:13
Подскажите почему при не выполнении условии, когда Tvkl1=00:00 сигнал проходит, а если поставлю другое значение например Tvkl1=01:00, условие тоже не выполняется и сигнал как и ему положено не идет, а при 00:00 он почему то минует равенство и выдает сигнал? Treal системное время.Вероятность того, что Treal окажется равным именно 01:00, а не 01:00:00.0002 или 00:00:00.9987, довольно мала. И форматирование строк в визуализации исходные переменные не округляет. Строгое 0:00 возникает с куда большей вероятностью, т.к. это начальное значение. Если вам нужен единичный импульс в 01:00, то надо сделать, например, триггер типа R_TRIG по условию Treal >= 01:00 и снимать сигнал с его выхода Q.

Vladimir_Chek
18.02.2015, 13:34
1) Подскажите пожалуйста, есть ли возможность счётчик импульсов CTU сбрасывать несколькими входами %IX, маркерами %MX, реализация в релейной логике соответственно.

2) Подскажите пожалуйста, как реализовать одновибратор с регулируемой по времени длинной импульса.

Insmzk
18.02.2015, 13:37
Вероятность того, что Treal окажется равным именно 01:00, а не 01:00:00.0002 или 00:00:00.9987, довольно мала. И форматирование строк в визуализации исходные переменные не округляет. Строгое 0:00 возникает с куда большей вероятностью, т.к. это начальное значение. Если вам нужен единичный импульс в 01:00, то надо сделать, например, триггер типа R_TRIG по условию Treal >= 01:00 и снимать сигнал с его выхода Q.
Я не понимаю почему он выполняет равенство если переменной присвоены нулевые значения(которая является уставкой),а текущее системное время идет и оно ни как не равно 00:00, а программа как будто считает, что системное время = уставке...
16780

Валенок
18.02.2015, 14:01
"Я не понимаю почему он выполняет равенство если переменной присвоены нулевые... "
Или я дебил или дальтоник. На картинке выходящее - черный ?

Валенок
18.02.2015, 14:05
1) Подскажите пожалуйста, есть ли возможность счётчик импульсов CTU сбрасывать несколькими входами %IX, маркерами %MX, реализация в релейной логике соответственно.

2) Подскажите пожалуйста, как реализовать одновибратор с регулируемой по времени длинной импульса.

1. суммируем OR'ом и рез-т на сброс
2. Вроде бы одновибратор не имеет длины импульса (1 цикл). А так - см. TP - standart.lib

Vladimir_Chek
18.02.2015, 14:37
Спасибо большое Валенок, всё получилось.

Vladimir_Chek
18.02.2015, 14:54
Извините за назойливость, теперь получил следующую проблему, Счётчик импульсов CTU необходимо сбрасывать как нормально открытыми так и нормально замкнутыми контактами. Вот что то не соображу как реализовать, сименсовские стереотипы мешают, там вытаскиваешь "картинки" с контактами и подключаешь их к reset счётчика.

Yegor
18.02.2015, 16:03
Правой кнопкой и Negate. Ну или если есть возможность выражение написать, то NOT перед нормально-замкнутыми.

Василий Кашуба
18.02.2015, 17:49
1) Подскажите пожалуйста, есть ли возможность счётчик импульсов CTU сбрасывать несколькими входами %IX, маркерами %MX, реализация в релейной логике соответственно.

2) Подскажите пожалуйста, как реализовать одновибратор с регулируемой по времени длинной импульса.
1.Есть такая возможность.
2.В моём примере правда мультивибратор, но от этого суть не меняется.16790

Votrj1
18.02.2015, 18:10
Если на аналоговом входе 0-10в ПР114 напряжение например 14в и к этому входу подключена сетевая переменная, то что будет читаться? Такое впечатление что передача останавливается висит 11в с копейками и не шевелится. Это нормально? Кто вводил в огран?

Василий Кашуба
18.02.2015, 18:16
Если на аналоговом входе 0-10в ПР114 напряжение например 14в и к этому входу подключена сетевая переменная, то что будет читаться? Такое впечатление что передача останавливается висит 11в с копейками и не шевелится. Это нормально? Кто вводил в огран?
А при чём здесь ПР114? Здесь ветка КоДеСис.

Insmzk
19.02.2015, 05:01
"Я не понимаю почему он выполняет равенство если переменной присвоены нулевые... "
Или я дебил или дальтоник. На картинке выходящее - черный ?
Он на секунду становиться синий, сигнал проходит секунду до выхода и все потом снова черный. И это при нулевых значениях уставки...

Валенок
19.02.2015, 09:28
Он на секунду становиться синий, сигнал проходит секунду до выхода и все потом снова черный. И это при нулевых значениях уставки...
А вы знаете какое значение уставки и переменой с текущим временем в эту секунду ?
Сделайте сейв именно при синем цвете.

Insmzk
19.02.2015, 10:21
А вы знаете какое значение уставки и переменой с текущим временем в эту секунду ?
Сделайте сейв именно при синем цвете.
Значение уставки я сам задаю равной 00:00:00 и она не изменна, а переменная имеет значение текущего времени системы и мы тоже видим какое у нее значение, иногда даже не видно что данный промежуток загорается, а сигнал на выход приходит. Обошел я это дело еще одним условием..

Vladimir_Chek
19.02.2015, 10:33
Правой кнопкой и Negate. Ну или если есть возможность выражение написать, то NOT перед нормально-замкнутыми.

Спасибо большое Yegor, Ваши рекомендации очень помогли, именно команда NOT. Проверил на "железе" -работает.

Валенок
19.02.2015, 12:44
Значение уставки я сам задаю равной 00:00:00 и она не изменна, а переменная имеет значение текущего времени системы и мы тоже видим какое у нее значение, иногда даже не видно что данный промежуток загорается, а сигнал на выход приходит. Обошел я это дело еще одним условием..

Вы хоть поняли зачем я предложил сделать сейв при синем цвете ? Пофигу что Вы там глазами видите.

Эдуард_Н
20.02.2015, 08:41
Почему при проверки КДС пишет по два раза одно и тоже?

Yegor
20.02.2015, 09:32
Патамушта с проверкой побитового доступа у него не айда. Он bug.0 := 0 считает двукратной записью в bug.

Валенок
20.02.2015, 11:21
to Эдуард_Н
блинк_0 щелкает 20тыс раз в сутки - нормуль ?

Эдуард_Н
20.02.2015, 11:52
to Эдуард_Н
блинк_0 щелкает 20тыс раз в сутки - нормуль ?

Ну может немного перебрал. Но эти щёлкания используются только в программе и ни какими выходами не управляют, это для проверки по RS485, зависла или отключена ПР114. Если есть предложения как эту проверку сделать лучше, с удовольствием послушаю.

Dimooon
25.02.2015, 13:26
У меня аналоговый выход 4-20мА с китайскаго ПЧВ подключен к МВ110-8А, а скорость изменяется через МУ110-8И на аналоговый вход ПЧВ. Так вот, на панели сп-270 установилась скорость, например, 530 об/мин, а на панели ПЧВ отображается 573 об/мин. А когда я ставлю "0" - он ниже 345 об/мин не опускается. Можно как-то это исправить? Я закономерности не вижу, а в конфигураторе МУ особо и подкручивать нечего... И не могу въехать, как обороты задавать. Я ему "600" вбиваю - он на 100% раскручивается, "100" введу - 800 об/мин примерно держит... Подскажите, как это можно все согласовать?

жекон
25.02.2015, 15:15
Скорее всего частота в герцах а не обороты

RV9WFJ
26.02.2015, 05:40
Зачем вам два лишних модуля, у каждого своя погрешность? ПЧВ, который к слову не китайский, прекрасно по ModBus задание получает и обороты отдает (в герцах а не оборотах как вы пишите). Цепляйте к СП270 напрямую.

petera
26.02.2015, 09:45
Зачем вам два лишних модуля, у каждого своя погрешность? ПЧВ, который к слову не китайский, прекрасно по ModBus задание получает и обороты отдает (в герцах а не оборотах как вы пишите). Цепляйте к СП270 напрямую.
Как это не китайский? http://en.euradrives.com/contact/index.html
16860
Поглядите на их лица :rolleyes:
Да и адрес
http://en.euradrives.com/images/con_listli01.jpgAddress: NO. Fu 11, HUANGHE ROAD, YANTAI ETDZ, SHANDONG, CHINA, 264006

Dimooon
26.02.2015, 20:23
У меня пчв 14 квт, вообщем, rs-485 только через разъем pg- меньше чем на кабеле кс-1. Наверное pg-9... Или 8... Нестандартный какой-то... Короче- не нашел такой разъем. И конфигуратора нет. А как без него- еще пока ни разу не пробовал. Были свободные входы-выходы на модулях - решил так реализовать. А как к пчв примодбаситься без конфигуратора?

Dimooon
27.02.2015, 08:41
Вот такой у меня частотник. До 15 кВт.

MrNobody
27.02.2015, 18:42
Подскажите, пожалуйста, при попытке считывания по протоколу OWEN(Master) с плк110-60 типа подключенного датчика к МВ 110-8А с адресом 16, hash name выставляю "in-t" (взят из таблицы В-2) выдаёт значение 0, хоть датчик подключен и сконфигурирован как Pt100. не могу понять в чем дело. (остальные настройки типа версия прибора , адрес и т.д. отображаются верно).
http://www.owen.ru/uploads/re_mv110-224_8a_1837.pdf

petera
02.03.2015, 11:33
Вот такой у меня частотник. До 15 кВт.
В этом руководстве на русском языке есть ошибка. В таблице 4-2 неправильно указаны положения переключателя SW1, для переключения входа AI2 в режим 0-20 мА оба DIP переключателя должны быть в положении "ON". Из-за этого и была беда:rolleyes:
Правильное руководство на EuraDrive во вложении.

_Mikhail
03.03.2015, 07:50
Подскажите, пожалуйста, при попытке считывания по протоколу OWEN(Master) с плк110-60 типа подключенного датчика к МВ 110-8А с адресом 16, hash name выставляю "in-t" (взят из таблицы В-2) выдаёт значение 0, хоть датчик подключен и сконфигурирован как Pt100. не могу понять в чем дело. (остальные настройки типа версия прибора , адрес и т.д. отображаются верно).
http://www.owen.ru/uploads/re_mv110-224_8a_1837.pdf
C какого входа Вы пытаетесь получить даные?

Адресация оперативных параметров протокола ОВЕН
Каждый вход прибора имеет собственный сетевой адрес. Таким образом, прибор занимает 8 адресов в адресном пространстве сети RS-485. Адреса прибора должны следовать подряд;
для удобства задания адресов задается только Базовый адрес, который соответствует адресу Входа 1. Для каждого последующего входа адрес увеличивается на 1.

"in-t" - тип датчика
"rEAd" - измеренная величина.

CleanS
04.03.2015, 12:23
Всем привет!

Пишу на CFC программу. "Схема" большая. Скажем так .... упёрся в край окна PLC_PRG.
Как увеличить размер окна в котором "рисую" схему???
Не могу продолжить "рисовать" схему... некуда ... :( :( :(

Валенок
04.03.2015, 12:27
Даже если победите край окна - рекомендую структурировать хотя бы макросами.

CleanS
04.03.2015, 12:36
Пока не могу, мне нужна вся "схема" целиком перед глазами ... ещё не закончено.

Валенок
04.03.2015, 12:42
Структурируют не после, а до. Скриншот бы показали

Вроде масштаб меняется, скролеры есть ..

CleanS
04.03.2015, 12:46
Масштаб меняется, окно делается больше, показывая свободное пространство, но элементы вставить не даёт.
Даже готовую "схему" не даёт передвинуть на свободное пространство. Как будто невидимая стена.
Сдаётся что это косяк ....

Валенок
04.03.2015, 12:48
Двинуть вниз не дает ?

CleanS
04.03.2015, 12:53
Нет ... также упирается в край окна ...

Валенок
04.03.2015, 12:56
Сделайте запуск в эмуляции отключитесь и подвигайте

CleanS
04.03.2015, 13:00
Нет, схема при перемещении возвращается на предыдущую позицию ...

Валенок
04.03.2015, 13:08
Даже на чуток не двигается ?

Калинкин Максим
04.03.2015, 13:09
Продам ПЛК 160-220 А-М срочно, недорого. Прошу прощения, за то что не совсем по теме- но я не нашел более подходящей ветки форума. Если интересно звоните 89276861832

CleanS
04.03.2015, 13:14
Даже на чуток не двигается ?

Ни на миллиметр... :(

Размер окна ограничен ползунками (внизу и справа) ... Всё! .... это всё доступное пространство... Больше ни-ни... :(

CleanS
04.03.2015, 13:22
HELP!!! Что делать??? Где взять место???

приборист
04.03.2015, 13:23
HELP!!! Что делать??? Где взять место???

Ctrl + скролл мышью работают?
Проект выкладывайте, уменьшу вам размер ;)

CleanS
04.03.2015, 13:31
Ctrl + скролл мышью работают?
Проект выкладывайте, уменьшу вам размер ;)

Скроллинг позволяет только масштабировать окно. Да при этом появляется свободное место, но НА НЁМ НЕЛЬЗЯ РАБОТАТЬ...

приборист
04.03.2015, 13:32
Скроллинг позволяет только масштабировать окно. Да при этом появляется свободное место, но НА НЁМ НЕЛЬЗЯ РАБОТАТЬ...
Проект будет?))

CleanS
04.03.2015, 13:39
Извините ... Нет... :(

Валенок
04.03.2015, 14:02
Такой сикретный ?

приборист
04.03.2015, 14:07
Такой сикретный ?

Еще и в CFC ;)

Ну на нет, и суда нет.

P.S.
У меня все нормально работает, и растягивается, и перемещается.

Валенок
04.03.2015, 14:21
... Всё! ....
А может это знак свыше ?
(Для перехода к структурному программированию)

CleanS
04.03.2015, 14:21
Еще и в CFC ;)

Ну на нет, и суда нет.

P.S.
У меня все нормально работает, и растягивается, и перемещается.

Бл..ин все такие юмористы ... прям Задорнов отдыхает...

Валенок
04.03.2015, 14:23
Ну проект/очистить все + компилировать все.. Ни как ?

CleanS
04.03.2015, 14:33
Ну проект/очистить все + компилировать все.. Ни как ?

Без изменений ... :(

amn
04.03.2015, 15:48
Прислушайтесь к Валенку. Он плохого не посоветует (это насчет структурного программирования).

CleanS
04.03.2015, 15:52
Прислушайтесь к Валенку. Он плохого не посоветует...

Да я ж не против!

Валенок
04.03.2015, 15:58
Ну так мой совет - послушать совет прибориста #3835, раз ни в какую структурировать

CleanS
04.03.2015, 16:06
Вопрос не в том, чтоб кто-то за тебя что-то сделал, так "в голове не прибавится", а в том, чтоб разобраться в проблеме. Найти "корень зла" и решить проблему.

Валенок
04.03.2015, 16:10
Так корень может можно увидеть только на исходнике, а Вы как девушка на форуме : чой-то живот растет, чего съесть могла ?

приборист
04.03.2015, 16:11
Вопрос не в том, чтоб кто-то за тебя что-то сделал, так "в голове не прибавится", а в том, чтоб разобраться в проблеме. Найти "корень зла" и решить проблему.

Так думаете для чего проект прошу?

Создайте новый проект, попробуйте в нем.
Если и в нем не получается - выкладывайте на форум, мы попробуем открыть у себя.
Если у нас все нормально - значит проблема в Codesys.
Может нужно попробовать переустановить его.

amn
04.03.2015, 16:17
А мне кажется, что если программа не вмещается на холсте, то это означает, что программисту надо переходить на новый уровень, более совершенный и легкий.

CleanS
04.03.2015, 16:20
Официальный ответ от owen...

"Размер окна никак не увеличить, есть ограничения видимой доступной области для написания программ на языке СFC."

CleanS
04.03.2015, 16:34
А мне кажется, что если программа не вмещается на холсте, то это означает, что программисту надо переходить на новый уровень, более совершенный и легкий.

Извините, но мне кажется ... что если программа не помещается на холст, то это проблема производителя программы. Так не должно быть.

Я в Visio рисую структурную схему ВСЕГО ОБЪЕКТА. Размер области ... миллион на миллион, хоть обрисуйся. Нажал после кнопочку, выровнял по схеме с учётом полей и всё готово.

Я понимаю что нужно переходить на новый уровень, но к сожалению нет времени ... программа пишется на том, что понимаешь. Я не программер, я неплохо знаю микроэлектронику, логику работы тех или иных элементов. Из них и "рисую" схему, именно по этому и использую язык CFC. Он для меня ПОНЯТЕН. Я визуально вижу "схему".

Я рад бы использовать и функциональные блоки и функции и макросы, но ... обучаться приходится на ходу, самостоятельно, так сказать, в процессе, а в документации досконально не прописана их процедура создания, сохранения и использования в сторонних проектах. Написано криво и в сколзь. А метод обучения "научным тыком", к сожалению, в данном случае не работает.

Валенок
04.03.2015, 16:44
Ёшкин..
Два квадратика, соединил, один в верхний левый, другой в нижний правый оттянул до упора.
Видимый размера квадратика - где-то 1мм. (ноут 10')
На горизонте упор - слева 73 мм - линейкой приложил. Если ставить квадратики через два своих размера - 20..25 штук по горизонтали. По вертикали пришлось промежуточный вставлять - иначе не померить. Получилось 105мм. 30..35 квадратов. Итого 700..800 квадратов при весьма неплотной упаковке 10% по площади....


А мне кажется, что если программа не вмещается на холсте, то это означает, что программисту надо переходить на новый уровень, более совершенный и легкий.
Художник может выйти за границы реальности и пишет на асфальте, домах ..

CleanS
04.03.2015, 16:49
Именно по этому реальность границ не имеет и ничем тебя не ограничивает ... далее только полёт твоей фантазии и мысли ...

p.s. Представьте, если инженеру поставят задачу впихнуть функционал карьерного самосвала в объёмы Запорожца ... причём чтоб к каждому узлу был свободный доступ для ремонта и обслуживания ....

Валенок
04.03.2015, 16:50
Я в Visio рисую структурную схему ВСЕГО ОБЪЕКТА. Размер области ... миллион на миллион..
Ужас. Вот к чему приводят такие широкие возможности.
Хорошо что Вас не заставляют чертить полную эл-схему от ГЭС до вашей розетки ))

Валенок
04.03.2015, 16:55
Именно по этому реальность границ не имеет и ничем тебя не ограничивает ... далее только полёт твоей фантазии и мысли ...

p.s. Представьте, если инженеру поставят задачу впихнуть функционал карьерного самосвала в объёмы Запорожца ... причём чтоб к каждому узлу был свободный доступ для ремонта и обслуживания ....

Так инженер может расширить свое сознание не безгранично плоско, а безгранично параллельно :
В одном измерении в объем запора впихнули колеса, в другом измерении - кузов... Так весь самосвал и войдет.

CleanS
04.03.2015, 17:01
Братцы... убегаю.... завтра продолжим диспут ...если не забанят... :)

приборист
04.03.2015, 17:04
Я тоже посмотрел границы, 62 AND поместилось по вертикали ;)
Что там за программа такая, которая не поместилась в эти размеры.

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

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

P.S.
А проект тоже на одном листе печатается и склеивается? Все же нагляднее.

Валенок
04.03.2015, 17:10
Ну если б Гутенберг сдуру не додумался бы до структурирования в виде страниц, то и не нужны были б фабрики по производству изделий в 54м. Время проводить было б интересней.
Обратная сторона прогресса..

Yegor
04.03.2015, 18:52
Я в Visio рисую структурную схему ВСЕГО ОБЪЕКТА. Размер области ... миллион на миллион, хоть обрисуйся.On DATE#2015-03-05 at TOD#13:40:23 Skynet became self-aware.

P.S. ту-ду-тум ту-дум

amn
04.03.2015, 19:14
Я рад бы использовать и функциональные блоки и функции и макросы, но ... обучаться приходится на ходу, самостоятельно, так сказать, в процессе, а в документации досконально не прописана их процедура создания, сохранения и использования в сторонних проектах. Написано криво и вскользь. А метод обучения "научным тыком", к сожалению, в данном случае не работает.
Чтобы создать POU надо в левом окошке среды Кодесис, там где расположена главная программа PLC_PRG нажимаем правую кнопку мыши по пустому месту или по папке (в этом случае POU будет создан в папке) выбираем Add Object, пишем имя, выбираем язык, выбираем тип POU (чаще всего используется функциональный блок). Вот и все.

У функционального блока в разделе объявления по умолчанию три вида переменных:
VAR_INPUT
входы
END_VAR

VAR_OUTPUT
выходы
END_VAR
VAR
локальные переменные
END_VAR

Осталось разбить проект на несколько самостоятельных задач и использовать их точно так же как таймеры, триггеры, счетчики.


Чтобы касается использования своих ФБ в сторонних проектах.
Для удобства свои ФБ в проекте я разбиваю на группы и сохраняю каждую в свою папку. Создается так же как и POU правой кнопкой мыши выбираем New Folder, а дальше переименовываем новую папку также правой кнопкой мыши. Далее можно мышкой нужные ФБ перетащить в папку. Таким образом в каждой папке у меня хранятся ФБ для определенных задач. Далее экспортируем папку в файл. Если мне в новом проекте понадобятся ФБ из этой папки я просто импортирую ее в новый проект. При необходимости можно удалить ненужные блоки, чтобы не забивать без надобности память контроллера. Можно конечно сделать библиотеку, но мне показалось так удобней, тем более есть возможность подкорректировать блоки при необходимости без лишних телодвижений.

Про функции, программы и функциональные блоки можно почитать в документации CoDeSys_V23_RU стр.10.

Если кратко, то функция не имеет памяти и используется в основном для вычислений.

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

Программа это тот же функциональный блок, только в единственном экземпляре и является глобальным и объявлять ее как переменную не нужно.

capzap
04.03.2015, 19:18
On DATE#2015-03-05 at TOD#13:40:23 Skynet became self-aware.

P.S. ту-ду-тум ту-дум

http://www.gigapan.com/gigapans/58857/ на этой фотке, тетка лежит на пляжу, раздвинув ноги :)

приборист
04.03.2015, 19:43
http://www.gigapan.com/gigapans/58857/ на этой фотке, тетка лежит на пляжу, раздвинув ноги :)

Тетку найти легко, там рыбак есть :)

Алексей Александрович
05.03.2015, 06:26
Ну вот и шутки пошли. А человек просто не понимает что если нарисовать схему допустим электрощита управления и в этой же схеме нарисовать схемы внутренностей всех приборов то это будет полный п...... И как раз в этом случае у вас перед глазами будет не полная картина работы схемы а опять же полный п..... Делайте свои POU и вам основного холста хватит на какую угодно программу.

Алексей87
05.03.2015, 07:44
Народ, всем доброго времени суток. Подскажите начинающему юзеру. как на языке CFC обнулить значение переменной типа real, то есть когда переменная достигает определенного значения, предполагается сброс кнопкой данной переменной на ноль.

_Mikhail
05.03.2015, 07:49
Народ, всем доброго времени суток. Подскажите начинающему юзеру. как на языке CFC обнулить значение переменной типа real, то есть когда переменная достигает определенного значения, предполагается сброс кнопкой данной переменной на ноль.
Если эта переменная идет напрямую с датчиков, то ни как. Если это промежуточая переменная то используйте блок MOVE c присвоением по условию EN-ENO

Алексей Александрович
05.03.2015, 08:00
Народ, всем доброго времени суток. Подскажите начинающему юзеру. как на языке CFC обнулить значение переменной типа real, то есть когда переменная достигает определенного значения, предполагается сброс кнопкой данной переменной на ноль.

Кнопка где? И где вы видите значение переменной? Излагайте точнее.

Алексей87
05.03.2015, 10:14
Ситуация такова. Есть связь Мв110.224 1 ТД, плк 100, и панель СП270 (плк мастер), передаю сигнал с тензодатчиков в плк и оттуда уже значение переменной(вес) в панель оператора, на панели хочу сделать кнопку сброс веса на ноль(калибровка).

Алексей Александрович
05.03.2015, 10:37
Как то так
16972

Алексей Александрович
05.03.2015, 10:54
Но скорее всего вам надо не 0 записывать. Вам надо записать корректировочную переменную которая при последующих взвешиваниях будет вычитаться из веса.
Как то так
16979

Алексей87
05.03.2015, 16:00
четкую корректировочную переменную записать не получиться, так как на разных этапах взвешивания она может быть разной, к примеру во взвешиваемой емкости остается продукт от прошлого взвешивания всегда соответственно разный.

приборист
05.03.2015, 16:14
четкую корректировочную переменную записать не получиться, так как на разных этапах взвешивания она может быть разной, к примеру во взвешиваемой емкости остается продукт от прошлого взвешивания всегда соответственно разный.

Вам говорят про то, что необходимо ввести эту переменную.
Каждый раз её необходимо вычитать из веса на весах и выводить на панель.
А при обнулении - приравнивать её к весу на весах.

Ves_Panel:=Ves-Diff;
If Obnul then
Diff:=Ves;
end_if

Где Ves - реальные показания c весов
Diff - временная переменная для обнуления
Ves_Panel - показания на панели
Obnul - кнопка обнуления показаний

Алексей Александрович
05.03.2015, 16:51
Он не может понять алгоритм. Вы чем и как собираетесь засекать остатки????? Следующие весы после сброса? Уточните задачу.

Алексей87
05.03.2015, 17:32
Может я и впрямь чего то не понимаю, но я вижу это как то так. Есть изначальный вес, тоесть вес на пустой емкости, ну или с небольшим количеством продукта, и этот вес мы принимаем за вес тары. И при последующих взвешиваниях, и опустошении емкости, если в ней что то останется, и этот остаток будет отличен от первоначального значения(веса тары) то его и надо обнулить...

Алексей Александрович
05.03.2015, 17:38
Я так понял мы в одной камере сидеть будем? Ну тогда............................................. ...................

CleanS
06.03.2015, 14:19
Всем привет!
Продолжаем самообразование ....
В предыдущих сообщениях мы обсуждали оптимизацию кода проекта. Решил уменьшить "масштаб" своих "схем CFC" заменив повторяющиеся элементы на макросы. Как они создаются внутри POU я разобрался. Тут проблем нет. Вопрос в другом.
Я создаю макрос в отдельном окне редактора CoDeSys v2.
17004
Всё сохраняется под удобным именем, допустим macros*pro. Собственно вопрос .... как его теперь использовать в др. проекте???

Спасибо!

capzap
06.03.2015, 14:22
Всем привет!
Продолжаем самообразование ....
В предыдущих сообщениях мы обсуждали оптимизацию кода проекта. Решил уменьшить "масштаб" своих "схем CFC" заменив повторяющиеся элементы на макросы. Как они создаются внутри POU я разобрался. Тут проблем нет. Вопрос в другом.
Я создаю макрос в отдельном окне редактора CoDeSys v2.
Всё сохраняется под удобным именем, допустим macros*pro. Собственно вопрос .... как его теперь использовать в др. проекте???

Спасибо!
Вы бы лучше изучили вопрос как создавать библиотеки, а вместо макросов функции, всем было бы легче

CleanS
06.03.2015, 14:30
Вы бы лучше изучили вопрос как создавать библиотеки, а вместо макросов функции, всем было бы легче

С удовольствием изучу!!! Но не всё сразу ... начнём с малого .... а дальше дойдём и до функций и до библиотек ...

capzap
06.03.2015, 15:27
С удовольствием изучу!!! Но не всё сразу ... начнём с малого .... а дальше дойдём и до функций и до библиотек ...

почему Вы считаете, что использование макросов и вставка их в другие проекты более низкие ступени, чем изучение создания функций?

CleanS
06.03.2015, 15:32
почему Вы считаете, что использование макросов и вставка их в другие проекты более низкие ступени, чем изучение создания функций?

Я не считаю ...

что использование макросов и вставка их в другие проекты более низкие ступени

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


P.S. По сути заданного вопроса есть что сказать???

amn
06.03.2015, 16:00
Вы читали пост 163867 (http://www.owen.ru/forum/showthread.php?t=10555&p=163867&viewfull=1#post163867)? В результате получите тот же квадратик со входами и выходами как и у макроса. Дело в том, что как это сделать знают все, а вот с макросами надо читать документацию и разбираться...

CleanS
06.03.2015, 16:27
Вы читали пост 163867 (http://www.owen.ru/forum/showthread.php?t=10555&p=163867&viewfull=1#post163867)? В результате получите тот же квадратик со входами и выходами как и у макроса. Дело в том, что как это сделать знают все, а вот с макросами надо читать документацию и разбираться...

Читал я пост и книга эта у меня уже стала настольной. Всё там красиво написано, НО ... не описано с картинками, примерами (примеры есть но не те ...), для чайников (начинающих) .... КАК ...
Понятно, что после запуска редактора ... -> Создать .... Функциональный блок ... язык допустим CFC.
А дальше??? Весь проект сохраняется как ...*pro. Как его дальше использовать в др. проекте??? Вот эта процедура не описана ...

Иногда приходится пользоваться SolidWorks-ом, 3Д рисовать .... там книга .... на ... ООООчень много листов.... на каждый чих мышкой, на любую процедуру ... всё описано, в картинках, с пояснениями, с ссылками и т.д. и т.п. .... разжёвано до состояния слизи ..... а тут сиди и догадывайся :mad:

capzap
06.03.2015, 16:49
P.S. По сути заданного вопроса есть что сказать???
http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf 215 страница, так то я про это уже говорил, кроме библиотек есть еще экспор/импорт, но Вы же сами утверждаете что не потянете более сложные вещи
ЗЫ нет простого решения у Вашего вопроса, либо прислушивайтесь к рекомендациям, либо нанимайте специалиста

amn
06.03.2015, 17:01
Понятно, что после запуска редактора ... -> Создать .... Функциональный блок ... язык допустим CFC.
А дальше???
Дальше как обычно создаем код, точно так же как Вы это делали в PLC_PRG. Там есть входные переменные (VAR_INPUT) и выходные переменные (VAR_OUTPUT).

Весь проект сохраняется как ...*pro. Как его дальше использовать в др. проекте??? Вот эта процедура не описана ...
Открываете Кодесис с готовым проектом и рядом открываете новый проект. В готовом жмем Project ->Export. По умолчанию выделено все. Если надо не все, то выделяем только то, что нужно мышкой, можно использовать клавиши CTRL или SHIFT в сочетании с мышкой, чтобы выделить несколько объектов. Дальше OK и экспорт готов. В новом проекте аналогично делаем Project ->Import.

CleanS
06.03.2015, 17:31
http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf 215 страница, так то я про это уже говорил, кроме библиотек есть еще экспор/импорт, но Вы же сами утверждаете что не потянете более сложные вещи
ЗЫ нет простого решения у Вашего вопроса, либо прислушивайтесь к рекомендациям, либо нанимайте специалиста

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

Алексей Александрович
06.03.2015, 17:36
Поработав полчаса в редакторе LD CoDeSys
Это ключевое слово. Вы еще напишите поработав 15 минут на ассемблере полная ху..... Микроконтроллеров не видел

CleanS
06.03.2015, 17:48
Дальше как обычно создаем код, точно так же как Вы это делали в PLC_PRG. Там есть входные переменные (VAR_INPUT) и выходные переменные (VAR_OUTPUT).

Открываете Кодесис с готовым проектом и рядом открываете новый проект. В готовом жмем Project ->Export. По умолчанию выделено все. Если надо не все, то выделяем только то, что нужно мышкой, можно использовать клавиши CTRL или SHIFT в сочетании с мышкой, чтобы выделить несколько объектов. Дальше OK и экспорт готов. В новом проекте аналогично делаем Project ->Import.

Именно так и делал.... в место "схемы" текущего проекта на экране появляется схема импортируемого проекта. Вопрос. Куда делась текущая? Если так и должно быть, то как мне теперь в CFC организовать связи? Как передать данные из "схемы в "схему"?

capzap
06.03.2015, 17:50
Я не утверждал, что не потяну, я сказал что очень сильно поджимает время и пока нет времени отвлекаться на изучение, пока более сложного, по сравнению с тем, что уже понятно.
Понимаю, что лучше потратить время сейчас и сделать поект и быстрее и качественнее, чем сделать наспех и потом дрючиться с ним ... именно по этому и задаю вопросы. Я не прошу ... "Сделайте" ... я спрашиваю .... подскажите "Как?" ... и пытаюсь двигаться параллельно.
макрос, это встроеный код в ПОУ, хоть библиотекой, хоть экспортом, Вы перенесете ПОУ целиком, как в другом проекте будете пользоваться макросом я не представляю, если простым копипастом, то это будет работать и между двумя открытыми проектами, не обязательно заниматься переносом. Если Вы хотите использовать какие то наработки в последущем, Вам требуется перейти к созданию библиотеки функций и ФБ

CleanS
06.03.2015, 17:50
Это ключевое слово. Вы еще напишите поработав 15 минут на ассемблере полная ху..... Микроконтроллеров не видел

Это я написал? ... чёт не припомну ... это где?

Алексей Александрович
06.03.2015, 18:05
Это я написал? ... чёт не припомну ... это где?
простите не прав

amn
06.03.2015, 18:36
в место "схемы" текущего проекта на экране появляется схема импортируемого проекта. Вопрос. Куда делась текущая?
Забыл сказать: все POU должны быть с разными именами, поэтому переименуйте сначала свой файл PLC_PRG перед экспортом, чтобы в новом проекте при импорте он не перезаписал текущий PLC_PRG.

Как передать данные из "схемы в "схему"?
Для этого есть входные и выходные переменные. Я несколько раз обращал на них Ваше внимание.

CleanS
06.03.2015, 19:15
Забыл сказать: все POU должны быть с разными именами, поэтому переименуйте сначала свой файл PLC_PRG перед экспортом, чтобы в новом проекте при импорте он не перезаписал текущий PLC_PRG.

Для этого есть входные и выходные переменные. Я несколько раз обращал на них Ваше внимание.

Понятно, .... вот они круципы ... а ведь в доках про это ни слова... Вернусь домой попробую ...

Не, ну про переменные это я знаю.... я уж не настолько дремучий ...

capzap
06.03.2015, 19:25
Понятно, .... вот они круципы ... а ведь в доках про это ни слова...
может в доках на винду, где то есть, что сохраняя файл с тем же именем он перезапишет старый файл, но здесь среда разработки для продвинутых пользователей компьютерной грамотности, такие вопросы уже не освещаются

CleanS
06.03.2015, 20:41
может в доках на винду, где то есть, что сохраняя файл с тем же именем он перезапишет старый файл, но здесь среда разработки для продвинутых пользователей компьютерной грамотности, такие вопросы уже не освещаются

Ну, вы меня ниже плинтуса не опускайте то .... :( ..... тот проект что импортировал (в экспериментах) и тот в который импортировал .... имели абсолютно разные имена.

capzap
06.03.2015, 21:15
Ну, вы меня ниже плинтуса не опускайте то .... :( ..... тот проект что импортировал (в экспериментах) и тот в который импортировал .... имели абсолютно разные имена.

при чем тут проект, имена ПОУ совпадали же, насколько я понял это был PLC_PRG

CleanS
06.03.2015, 21:50
при чем тут проект, имена ПОУ совпадали же, насколько я понял это был PLC_PRG

Да, это имя было одинаковым, каюсь .... в документации написано что это имя менять не рекомендуется. Честно говоря мне даже в голову не приходило его менять.

ASo
06.03.2015, 21:51
А тогда что Вы называете ПОУ?

приборист
07.03.2015, 12:21
Да, это имя было одинаковым, каюсь .... в документации написано что это имя менять не рекомендуется. Честно говоря мне даже в голову не приходило его менять.

Если почитать документацию внимательно, то понимаешь почему не рекомендуется менять.
Потому что POU с именем PLC_PRG выполняется всегда по умолчанию, если переименуете - будут вопросы - почему ничего не работает.

CleanS
07.03.2015, 12:31
Продолжаем обучающие эксперименты ....

В отдельном окне редактора, создал функциональный блок D_Triger-а на CFC. Экспортировал его в файл FB_DTriger.exp.
В другом окне в др. проекте импортировал его .... Получилось ...

17016

В папке POU появилась 2-я вкладка со "схемой" функционального блока D_Triger-а.

Вопрос. И как теперь его (D-Triger) можно использовать в проекте? Я попробовал скопировать его (Copy-Paste) в "схему" основного проекта. Копируется в месте со входами и выходами.
Я представлял что после импорта будет "прямоугольник" с входами и выходами. А тут ....

CleanS
07.03.2015, 12:34
Если почитать документацию внимательно, то понимаешь почему не рекомендуется менять.
Потому что POU с именем PLC_PRG выполняется всегда по умолчанию, если переименуете - будут вопросы - почему ничего не работает.

Понятно....

amn
07.03.2015, 12:59
Продолжаем обучающие эксперименты ....

В отдельном окне редактора, создал функциональный блок D_Triger-а на CFC. Экспортировал его в файл FB_DTriger.exp.
В другом окне в др. проекте импортировал его .... Получилось ...

17016

В папке POU появилась 2-я вкладка со "схемой" функционального блока D_Triger-а.

Вопрос. И как теперь его (D-Triger) можно использовать в проекте? Я попробовал скопировать его (Copy-Paste) в "схему" основного проекта. Копируется в месте со входами и выходами.
Я представлял что после импорта будет "прямоугольник" с входами и выходами. А тут ....

Теперь посмотрите в окно объявления переменных. Видите, там входы и выходы у Вас не объявлены. Который раз я обращаю Ваше внимание на них. После того как определились с входами и выходами можно вставлять ваш ФБ в основной проект. Как? Да точно так же как таймеры, счетчики и др. стандартные блоки. Можно через кнопку F2, а можно вручную имя забить.

CleanS
07.03.2015, 13:12
Теперь посмотрите в окно объявления переменных. Видите, там входы и выходы у Вас не объявлены. Который раз я обращаю Ваше внимание на них. После того как определились с входами и выходами можно вставлять ваш ФБ в основной проект. Как? Да точно так же как таймеры, счетчики и др. стандартные блоки. Можно через кнопку F2, а можно вручную имя забить.

Т.е. теперь я с панели беру "элемент" вставляю в основную "схему" внутри него пишу FB_D_Triger (имя функционального блока) и он у меня становится в виде прямоугольника. С обозначенными мною входами и выходами. Я правильно понимаю???

amn
07.03.2015, 13:16
Я думал Вы уже попробовали :)

CleanS
07.03.2015, 13:22
Я думал Вы уже попробовали :)

Не успел... сейчас с ребёнком в поликлинике ...

vano_id
07.03.2015, 17:21
Можно ли в CoDeSys 2 реализовать следующее: что бы при отрытии проекта автоматически происходило подключение к ПЛК?

приборист
07.03.2015, 17:42
Можно ли в CoDeSys 2 реализовать следующее: что бы при отрытии проекта автоматически происходило подключение к ПЛК?
И видимо открывалась визуализация?));)

petera
07.03.2015, 20:01
Можно ли в CoDeSys 2 реализовать следующее: что бы при отрытии проекта автоматически происходило подключение к ПЛК?


И видимо открывалась визуализация?));)
приборист, Вы зря язвите.
Можно из командной строки делать очень многое, а если еще использовать командный файл, то еще больше, включая замену таргета, импорт-экспорт, компиляцию и пр.
Например
"C:\Program Files\3S Software\CoDeSys V2.3" "C:\projects\primer.pro" /online
Кодесис откроет проект primer.pro и выполнит подключение к ПЛК
Читать справку "Командная строка/командный файл"

приборист
07.03.2015, 21:14
приборист, Вы зря язвите.
Можно из командной строки делать очень многое, а если еще использовать командный файл, то еще больше, включая замену таргета, импорт-экспорт, компиляцию и пр.
Например
"C:\Program Files\3S Software\CoDeSys V2.3" "C:\projects\primer.pro" /online
Кодесис откроет проект primer.pro и выполнит подключение к ПЛК
Читать справку "Командная строка/командный файл"

Цели съязвить не было.
Про запуск с параметрами в курсе, просто люди перестали читать.:(

vano_id
07.03.2015, 23:23
Цели съязвить не было.
Про запуск с параметрами в курсе, просто люди перестали читать.:(

Petera, спасибо большое.
Приборист, не проще ли подсказать, чем язвить, и сообщение короче получится и человек Вам благодарен был бы. Что бы об этом прочитать, надо от куда-то читать, вот вы бы подсказали, я бы прочитал.

CleanS
08.03.2015, 11:43
Я думал Вы уже попробовали :)

Продолжаем ....

Попробовал. Нужный мне элемент появляется, но где входы и выходы???

17030

Снова засада .... :(

приборист
08.03.2015, 11:57
Продолжаем ....

Попробовал. Нужный мне элемент появляется, но где входы и выходы???

17030

Снова засада .... :(

Для их появления необходимо входные и выходные переменные разместить в VAR_INPUT и VAR_OUTPUT.

Делать это нужно внутри FB.

CleanS
08.03.2015, 12:06
Для их появления необходимо входные и выходные переменные разместить в VAR_INPUT и VAR_OUTPUT.

Делать это нужно внутри FB.

A какой правильный синтаксис объявления переменных???

Если делаю так ...
17031
Ругается .... :(

Если делать как описано в документации, вот так ...
17032 17033

Снова ругается .... :(

capzap
08.03.2015, 14:29
Вам конкретно пишется компилятором, что нельзя в окне объявлений создавать одинаковые переменные, это с Вами уже проходили, нельзя записать файл с таким же именем, чтоб в старом файле сохранилась старая информация, последняя картинка как вобще связана с этими переменными, это ошибки PLC_PRG, а не Вашего многострадального блока,там указывается что нехватает имени HP1, ну и ошибки в использовании таймера, которого нет на приведенной картинке

ASo
08.03.2015, 16:23
Процесс обучения бывает разный... один из них называется " Без отрыва от производства". "Самообучение" тоже является одном из способов обучения. Если в документации было всё разложено по полочкам, не пришлось бы здесь общаться с отдельными хамами.
Значит, Вы не понимаете про переменную и имя переменной, раз одним именем объявляете ее и входом ФБ и внутренней переменной ФБ.
Ну вот как в азах - пусть переменная - это ящик. У вас 2 ящика с одним именем, к какому должен обращаться компилятор?

Ещё раз прошу ... либо по существу ... либо ничего ...
По существу... Уж тогда напишите сразу... Ну не сделайте задачу за меня - как пример приведите блок D-триггера.

Валенок
08.03.2015, 17:39
Убедительная просьба, если не по существу ... то лучше не надо ваших комментов ...
По существу:
1. В PLC_PRG неопределён идентификатор HP1
2. В PLC_PRG нужно выражение на входе IN для TP
3. В PLC_PRG нужно выражение на 1-ом входе BOOL_TO_INT


.. если не по существу ...
Самый дельный совет Вам уже дал Приборист (#3835) : что-то не пашет - выкладывайте код. Вы же как девица у гинеколога пальчик показываете. По существу ? Так Вам тогда на форум ясновидцев, вот там Вам, не видя Ваш сикретный PLC_PRG, сразу все расскажут где в PLC_PRG косякнули.

CleanS
08.03.2015, 18:01
По существу:
1. В PLC_PRG неопределён идентификатор HP1
2. В PLC_PRG нужно выражение на входе IN для TP
3. В PLC_PRG нужно выражение на 1-ом входе BOOL_TO_INT


Только предварительно подготовьте на этот вопрос русскоязычный ответ справочной службы. Если в этом ответе будет что непонятно - тогда я задам кокой-нить вопрос.
Я вот могу Вам задать простой житейский вопрос, даже не по- специализации :
Как зовут мою тещу ?


Самый дельный совет Вам уже дал Приборист (#3835) : что-то не пашет - выкладывайте код. Вы же как девица у гинеколога пальчик показываете. По существу ? Так Вам тогда на форум ясновидцев, вот там Вам, не видя Ваш сикретный PLC_PRG, сразу все расскажут где в PLC_PRG косякнули.


PS
Вы, кстати, не из гидрометеоцентра ? Уж очень все сходится.

Спасибо что не послали ....

Я разобрался где была проблема ....

..... с нуля "пересобрал" функциональный блок DTriger-a, при этом перенёс объявление входов и выходов из VAR в VAR_INPUT и VAR_OUTPUT. После этого создал экспорт файл, который импортировал в тут же созданный простенький проект.
17036
Всё отлично работает.
Всем кто откликнулся по делу - спасибо!

Николаев Андрей
08.03.2015, 21:36
Господа, Вы не перестаете меня удивлять.
Детский сад какой-то.
Я понимаю, что для гуру форума уже скучны 95% вопросов. Я тоже это проходил.
Ну не Ваш уровень, ну вспомните себя и спуститесь на уровень новичка. Нет, тогда действительно не стоит. Вы уже имеете огромный авторитет на нашем форуме, чтобы вот так пытаться его поднимать.

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

capzap
09.03.2015, 01:18
Господа, Вы не перестаете меня удивлять.
Детский сад какой-то.
Я понимаю, что для гуру форума уже скучны 95% вопросов. Я тоже это проходил.
Ну не Ваш уровень, ну вспомните себя и спуститесь на уровень новичка. Нет, тогда действительно не стоит. Вы уже имеете огромный авторитет на нашем форуме, чтобы вот так пытаться его поднимать.

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

вот не надо только тут стыдить, совсем не тот случай.

vano_id
09.03.2015, 10:32
Добрый день.
Не ругайтесь, я новичок.
Есть ПЛК-100 и модем ПМ-01.
Соединены по RS-485.
В модеме отключено эхо.

Все делаю по описанию библиотеки и беру программу с примера, но после запуска "cfg_ok" остается "False".
Что я могу делать не так?

ГУРУ!!! Помогите, горит проект, форум перерыл.
Минимальное время цикла ПЛК ставил 10, 20... мс, не помогает
И постоянно висит флаг BUSY=TRUE блока FB_SMS_SR
Приложил скрины:
17055 17056 17057 17058

Подключаясь к модему через Гипертерминал через АС4 все работает, а с ПЛК не отправляет, совсем голову сломал

capzap
09.03.2015, 11:20
Добрый день.
Не ругайтесь, я новичок.
Есть ПЛК-100 и модем ПМ-01.
Соединены по RS-485.
В модеме отключено эхо.

Все делаю по описанию библиотеки и беру программу с примера, но после запуска "cfg_ok" остается "False".
Что я могу делать не так?

ГУРУ!!! Помогите, горит проект, форум перерыл.
Минимальное время цикла ПЛК ставил 10, 20... мс, не помогает
И постоянно висит флаг BUSY=TRUE блока FB_SMS_SR

Подключаясь к модему через Гипертерминал через АС4 все работает, а с ПЛК не отправляет, совсем голову сломал
по картинкам выходит, что зависает на команде отключения эха, которое и так уже выключено, попробуйте через терминал настроить модем, а в проекте не использовать конфигурацию. Я бы предположил,что модем либо слишком долго задумывается как ответить на эту команду, либо формат ответа не соответствует заданному в библиотеке, поэтому и всё виснет

vano_id
09.03.2015, 11:43
по картинкам выходит, что зависает на команде отключения эха, которое и так уже выключено, попробуйте через терминал настроить модем, а в проекте не использовать конфигурацию. Я бы предположил,что модем либо слишком долго задумывается как ответить на эту команду, либо формат ответа не соответствует заданному в библиотеке, поэтому и всё виснет

Спасибо, вроде помогло, буду пробовать внедрять в проект.

Еще такие вопросы:
1. Если к ПЛК по RS-485 подключен модем и блоки ввода/вывода, не будут ли они мешать друг другу?
Модем используется только для отправки аварийных СМС
Чувствую, что так не получится, но хотелось бы услышать ответ опытных.
2. Как можно организовать отправку вызова (звонок) с модема, вроде как перед организацией передачи CSD идет дозвон (ATD), но мне передача данных не нужна, только набор номера, звонок будет "сброшен"

Спасибо.

capzap
09.03.2015, 12:02
1) без дополнительных усилий нельзя работать с модемом и с модулями на одной линии
2) я пример выкладывал, как послать произвольную команду используя функции модема в этой теме http://www.owen.ru/forum/showthread.php?t=13029, можно и дозвон организовать

vano_id
09.03.2015, 16:54
спасибо, буду пробовать

Lancaster
09.03.2015, 22:02
Написал первую программу "СВЕТОФОР", писал с нуля, ни у кого не подсматривал, укажите пожалуйста, правильно ли организован алгоритм, есть ли ошибки?
17065

smk1635
09.03.2015, 22:14
Написал первую программу "СВЕТОФОР", писал с нуля, ни у кого не подсматривал, укажите пожалуйста, правильно ли организован алгоритм, есть ли ошибки?
17065

Ну можно было бы и программу выложить. Так, ради приличия.

И может сперва сам. В КДС есть визуализация. Делаешь кнопки, лампы. Привязываешь к ним переменные. Включаешь режим эмуляции и гоняешь свою программу.

Lancaster
10.03.2015, 12:23
Визуализацию сделал, программу отладил, файл проекта вложил. Хотелось бы узнать правильно ли я организовал алгоритм? Так ли выполняется задача или можно подругому?

Yegor
10.03.2015, 12:24
Lancaster, ужасный код. Состояние автомата надо сохранять и поддерживать, а не выгадывать каскадом условий. Переписывайте конечным автоматом с одним таймером и приходите в эту же тему на пересдачу.

Алексей87
10.03.2015, 16:03
Народ, и снова о помощи взываю, выкладываю "код", вопрос почему в конфигураторе значение переменной faktves не присваивается, тоесть в оболочке самой программы значение изменяется, а если эту переменную присвоить определенному выходу значение не подается...вообщем вот...

petera
10.03.2015, 16:38
Народ, и снова о помощи взываю, выкладываю "код", вопрос почему в конфигураторе значение переменной faktves не присваивается, тоесть в оболочке самой программы значение изменяется, а если эту переменную присвоить определенному выходу значение не подается...вообщем вот...
А что эта "faktves" делает в объявлении переменных PLC_PRG, ведь она уже объявлена в конфигурации Real output module.

_Mikhail
10.03.2015, 16:38
Народ, и снова о помощи взываю, выкладываю "код", вопрос почему в конфигураторе значение переменной faktves не присваивается, тоесть в оболочке самой программы значение изменяется, а если эту переменную присвоить определенному выходу значение не подается...вообщем вот...

Судя по программе вы эту переменную пытаетесь передать в Universal Modbus Device по RS232. Что у Вас там подключено? Настройки верные?

Алексей87
10.03.2015, 17:32
Да настройки то верные, подключено СП270, переменная b в панель передается, сигнал с кнопки на панели (corves) тоже приходит на котроллер нормально, а вот значение этой faktves я даже в конфигураторе не вижу при выполнении программы, она по нулям стоит.

Алексей87
10.03.2015, 17:34
Спасибо Вам))) Сразу понял ошибку))

Lancaster
10.03.2015, 21:38
Lancaster, ужасный код. Состояние автомата надо сохранять и поддерживать, а не выгадывать каскадом условий. Переписывайте конечным автоматом с одним таймером и приходите в эту же тему на пересдачу.

Спасибо за совет. Буду стараться

MrNobody
11.03.2015, 10:16
C какого входа Вы пытаетесь получить даные?

Адресация оперативных параметров протокола ОВЕН
Каждый вход прибора имеет собственный сетевой адрес. Таким образом, прибор занимает 8 адресов в адресном пространстве сети RS-485. Адреса прибора должны следовать подряд;
для удобства задания адресов задается только Базовый адрес, который соответствует адресу Входа 1. Для каждого последующего входа адрес увеличивается на 1.

"in-t" - тип датчика
"rEAd" - измеренная величина.
Спасибо, надо было Use Index поставить - 'Yes'


Остался последний момент, по протоколу "Овен" не получается считать название прибора МВ 110-8А, приходит пустое сообщение. (Я так понимаю , что должен считаться параметр по умолчанию - MV110-8A). Остальные параметры считываются отлично.

MrNobody
12.03.2015, 14:21
Остался последний момент, по протоколу "Овен" не получается считать название прибора МВ 110-8А, приходит пустое сообщение. (Я так понимаю , что должен считаться параметр по умолчанию - MV110-8A). Остальные параметры считываются отлично.

Так реально вообще этот параметр считать корректно? Заказчик требует автонастройку разных модулей ввода-вывода :(:(:(

Lancaster
15.03.2015, 11:36
Lancaster, ужасный код. Состояние автомата надо сохранять и поддерживать, а не выгадывать каскадом условий. Переписывайте конечным автоматом с одним таймером и приходите в эту же тему на пересдачу.

Переписал программу с одним таймером.

Подскажите, есть литература про проектирование конечных автоматов на ПЛК, желательно на ST? Хотя ясно, что для этого SFC подходит лучше.

Yegor
15.03.2015, 22:38
Lancaster, так гораздо лучше. Только это не совсем автомат, т.к. в нём нет условий перехода. Кроме того, это довольно тяжёлый кусок кода в импульсном (событийном) исполнении. Я бы сделал как-то так:
CASE STATE OF SR:
Rtemp:=TRUE;
Ytemp:= FALSE;
Gtemp:= FALSE;
IF timer.ET > Rtime THEN
STATE:= SRY;
END_IF

SRY:
Rtemp:=TRUE;
Ytemp:= TRUE;
Gtemp:= FALSE;
IF timer.ET > Ytime THEN
STATE:= SG;
END_IF
То есть внешнее условие убираем, CASE работает постоянно. Таймер заводим глобально с условно бесконечным (достаточно большим) PT от состояния автомата (timer(IN := STATE <> _STATE), где _STATE — значение STATE с предыдущего скана), то есть таймер сбрасывается за пределами автомата при каждой смене состояния, и появляется возможность делать переходы по его ET. Побочный эффект визуально выделяющихся блоков IF нам только на руку.
Хотя ясно, что для этого SFC подходит лучше.Спорный момент. У SFC проблемы с обратным ветвлением — когда из неопределённого (любого) состояния по одному условию надо перейти в какое-то одно. Это вообще проблема традиционного представления автоматов в виде графов конкретных изолированных состояний. Чтобы поставить в светофор пешеходную кнопку, в SFC вам придётся городить огород (что не обязательно плохо и даже немного хорошо, но всё-таки на любителя). А в том же ST вы это сделаете одним условием за пределами CASE.

Алексей87
16.03.2015, 10:56
Продолжаем "пытать" весовой модуль. Теперь вопрос при подключении тензодатчиков к МВ-110 224. 1ТД как передать реальное значение в килограммах в КДС? Датчик стоит Тензо М М65.

Dimooon
16.03.2015, 12:20
Пользовательской юстировкой в конфигураторе выставлял 0 и эталон, забивая значение эталона. и максимальное значение физической величины надо указать.А также чувствительность датчика. Я его опытным путем нашел, хотя на датчике должна быть написана чувствительность. тогда в КДС будет реальный вес прилетать.
А вот это как могло получиться?

capzap
16.03.2015, 13:16
Пользовательской юстировкой в конфигураторе выставлял 0 и эталон, забивая значение эталона. и максимальное значение физической величины надо указать.А также чувствительность датчика. Я его опытным путем нашел, хотя на датчике должна быть написана чувствительность. тогда в КДС будет реальный вес прилетать.
А вот это как могло получиться?
так подумайте сами, сколько байт занимает переменная типа TIME а так же границы диапазона числа типа WORD, это не глюк таймера, а в Вашей голове что то не так :)

Михаил1981
16.03.2015, 14:55
Подскажите пожалуйста как в ТРМ 212 Р.Р. настроить регулирование задания, я подключил к нему два датчика давления ( с подачи и обратки ), и настроил чтобы вычислитель мерил разницуи управлял КЗРом. По факту на подаче Р1=3,5 на обратке Р2=2,5 разница равна 1,0 , я задаю нижнею и верхнею границу диапазона уставки 1,0 , и зону нечувствительности 0,2. Давление не меняется параметр находится в зоне нечувствительности , но импульсы идут причем то в одну то в другую сторону, как вбить настройки что бы в зоне нечувствительности не было импульсов , и появлялись они только когда за зону выходит и что бы длительность импульса была минимальная а интервал между импульсами секунд 10.

Dimooon
17.03.2015, 04:35
да..... Я сначала паникую на форуме, а потом разбираться начинаю. Но так даже прикольней. Другие таких тупых ашыпаг не сделают

Валенок
17.03.2015, 09:03
..
Мулю вместо 1000 вбей для счастья dword#1000

lara197a
17.03.2015, 11:33
достаточно местами поменять мул и W_TO_T

приборист
17.03.2015, 23:53
Люди добрые, подскажите как $00 передать?
Передаю с помощью UNM через rs232, в середине нужно вставить нулевой байт. Вставляв $00 и уплывают значения байтов за ним.
Пока что 2 посылки шлю, но наверняка есть решение?

Валенок
18.03.2015, 02:12
сислибком такой фигней не страдает

capzap
18.03.2015, 08:17
сислибком такой фигней не страдает

unm тоже не страдает, это человек не правильно ставит задачу контроллеру

приборист
18.03.2015, 08:33
unm тоже не страдает, это человек не правильно ставит задачу контроллеру

Подскажите где я ошибаюсь.
Отсылаем строку вида:

SetByte(0, '$02$03$06$00$C2$82', 6);

Смотрим в терминале - последние 2 байта CRC изменились.

Отсылаем так:

SetByte(0, '$02$03$06', 4);
SetByte(0, '$C2$82', 2);

И все работает.

capzap
18.03.2015, 08:52
foo : array[0..5] of byte := (16#2,16#3,16#6,16#0,16#C2,16#82);
setByte(0,adr(foo),6);
попробуйте так,за точность не ручаюсь,по памяти пишу

приборист
18.03.2015, 09:18
foo : array[0..5] of byte := (16#2,16#3,16#6,16#0,16#C2,16#82);
setByte(0,adr(foo),6);
попробуйте так,за точность не ручаюсь,по памяти пишу

Так он будет ругаться на несоответствие типов (setByte хочет String для отправки).

Я пробовал по другому:
Через указатель заполнял переменную command_string
FOR i:=0 TO command_len-1 DO
p:=ADR(command)+i;
p1:=ADR(command_string)+i;
p1^:=p^;
END_FOR
Но когда доходим до 0 байта - строка дальше не пишется.

В итоге получаем command_string = '$02$03$06'.

capzap
18.03.2015, 09:43
Так он будет ругаться на несоответствие типов (setByte хочет String для отправки).

Я пробовал по другому:
Через указатель заполнял переменную command_string
FOR i:=0 TO command_len-1 DO
p:=ADR(command)+i;
p1:=ADR(command_string)+i;
p1^:=p^;
END_FOR
Но когда доходим до 0 байта - строка дальше не пишется.

В итоге получаем command_string = '$02$03$06'.

не должно там возникать ни каких ошибок, бибку модбас я реализовывал на unm www.owen.ru/forum/showthread.php?t=6805&page=11&p=143448&viewfull=1#post143448

ps я же писал что неточное направление даю, возможно я указатель на строку передаю в функцию, а данные ложу всеравно в массив байт

приборист
18.03.2015, 10:15
не должно там возникать ни каких ошибок, бибку модбас я реализовывал на unm www.owen.ru/forum/showthread.php?t=6805&page=11&p=143448&viewfull=1#post143448 (http://www.owen.ru/forum/showthread.php?t=6805&page=11&p=143448&viewfull=1#post143448)

ps я же писал что неточное направление даю, возможно я указатель на строку передаю в функцию, а данные ложу все равно в массив байт

Я же проверил - ругается. SetByte отправляет строку, а у нас массив Byte.

По ссылке прогу посмотрел, там бибка закрыта, поэтому не знаю как происходит отправка.
Но как я понял там преобразование функцией byte_to_word и далее отправка через FB.

Пойду почитаю про SysLibCom.

Валенок
18.03.2015, 11:39
SetByte(0, '$02$03$06$00$C2$82', 6);
)) А что такое '$02$03$06$00$C2$82' ? Строковая константа. Компилятор на стадии компиляции отрезает то что за рамками строки. И '$C2$82' просто нету в памяти

var
b : array [1..?] of byte =2,3,6,0,16#c2,16#82; //(С) capzap
ps : pointer to string;
---
ps := adr(b);
SetByte(x,ps^,6);


PS
При этом не нужно смотреть что лежит в ps^ как в строке. Физически там лежит полный набор.

приборист
18.03.2015, 13:13
)) А что такое '$02$03$06$00$C2$82' ? Строковая константа. Компилятор на стадии компиляции отрезает то что за рамками строки. И '$C2$82' просто нету в памяти

var
b : array [1..?] of byte =2,3,6,0,16#c2,16#82; //(С) capzap
ps : pointer to string;
---
ps := adr(b);
SetByte(x,ps^,6);


PS
При этом не нужно смотреть что лежит в ps^ как в строке. Физически там лежит полный набор.

Мдааа....Сам себе придумал грабли (Посмотрев в примере от Овена кстати :))
Я то сначала указатель брал на байт, и потом копировал его в строковую константу. Что в итоге и обрезало строку.

http://im3-tub-ru.yandex.net/i?id=82d0c4eb16a2882045fcd99cd67ff838-86-144&n=21

capzap и Валенок - спасибо!

Smith2007
19.03.2015, 22:29
Подскажите как исправить кодировку в Codesys 2.3? Копирую в буфер фрагмент программы (ST) и вывожу в текстовый файл. В место русских букв вижу кракозябры.

energvk
19.03.2015, 22:50
Подскажите как исправить кодировку в Codesys 2.3? Копирую в буфер фрагмент программы (ST) и вывожу в текстовый файл. В место русских букв вижу кракозябры.

http://www.owen.ru/forum/showthread.php?t=14121&p=165424&viewfull=1#post165424

Smith2007
19.03.2015, 23:06
http://www.owen.ru/forum/showthread.php?t=14121&p=165424&viewfull=1#post165424

Не помогло. Да и вариант такой неудобный. Хотелось бы просто копировать (Ctrl-C, Ctrl-V)

приборист
19.03.2015, 23:44
У меня нормально копируется.
Win7 x64 Ultimate

Правда я колдовал с_1251 и c_1252 по стандартной схеме (была проблема с отображением в СП270).

energvk
19.03.2015, 23:57
Не помогло. Да и вариант такой неудобный. Хотелось бы просто копировать (Ctrl-C, Ctrl-V)

Насчёт удобней пока не нашел, а вот почему не помогло, странно. А если выбрать вариант "Сложно" и вручную указать кодировки с ср1252 в ср1251?

Rasselt
22.03.2015, 01:06
Такая проблема, при выполнении, например, такого кода, срабатывает сторожевой таймер.

Код на ST.
WHILE Z_K=0 DO
Z_M:=1;
END_WHILE;
Z_M:=0;

Нужно просто подождать пока сработает датчик, потом поменять значение переменной.
Можно ли как-нибудь реализовать это на ST? Или придется извращаться с другими языками?

Манипуляции с настройками задачи не помогли. Может, они просто не работают для PLC_PRG?
На скриншоте видно. Так вообще можно делать? Или PLC_PRG будет это игнорировать и запускаться в стандартном режиме?

приборист
22.03.2015, 09:01
Такая проблема, при выполнении, например, такого кода, срабатывает сторожевой таймер.

Код на ST.
WHILE Z_K=0 DO
Z_M:=1;
END_WHILE;
Z_M:=0;

Нужно просто подождать пока сработает датчик, потом поменять значение переменной.
Можно ли как-нибудь реализовать это на ST? Или придется извращаться с другими языками?

Манипуляции с настройками задачи не помогли. Может, они просто не работают для PLC_PRG?
На скриншоте видно. Так вообще можно делать? Или PLC_PRG будет это игнорировать и запускаться в стандартном режиме?

Если просто поменять то так:
IF Z_K=0 then
Z_M:=1;
end_if

А While зачем - не понятно.

В задачах ничего не трогайте, сделайте по умолчанию все.

Алексей Александрович
22.03.2015, 11:03
Просьба к модераторам сделайте тему ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков) №2. Здесь поиск уже бессмысленный. Слишком много страниц.

capzap
22.03.2015, 12:08
Просьба к модераторам сделайте тему ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков) №2. Здесь поиск уже бессмысленный. Слишком много страниц.

по Вашему Serge_UA является модератором?

Валенок
22.03.2015, 14:44
Будут давать 2 ссылки.
-Вопрос-ответ
-Вопрос-ответ2
Непонятно как это уменьшит общее кол-во страниц

приборист
22.03.2015, 17:29
Все доброго выходного :)
Подскажите как можно сохранить массив строк в файл?
Делаю в CDS3 сохранение в файл с помощью CAA_File.

Идея такая:
Данные преобразуются в строку и добавляются в массив строк.
Каждые 5 минут (либо по переполнению массива) массив пишется на SD.

При отправке любой одной строки - проблем нет.
При передаче буферу значения adr(Array) - получаем лишние данные к файлу (вида BаиРB¤ §B|Ц) в каждой строке)

С передачей каждый раз новой строки - проблем нет, но хотелось бы по таймеру и скопом.

На форуме находил пример для 2.3 через цикл FOR с SysFileWrite.
C CAA_File так же не работает.

В какую сторону копать?

capzap
22.03.2015, 18:02
Все доброго выходного :)
Подскажите как можно сохранить массив строк в файл?
Делаю в CDS3 сохранение в файл с помощью CAA_File.

Идея такая:
Данные преобразуются в строку и добавляются в массив строк.
Каждые 5 минут (либо по переполнению массива) массив пишется на SD.

При отправке любой одной строки - проблем нет.
При передаче буферу значения adr(Array) - получаем лишние данные к файлу (вида BаиРB¤ §B|Ц) в каждой строке)

С передачей каждый раз новой строки - проблем нет, но хотелось бы по таймеру и скопом.

На форуме находил пример для 2.3 через цикл FOR с SysFileWrite.
C CAA_File так же не работает.

В какую сторону копать?
освоить бибку sysexec, примеров как писать строки я давал предостаточно

приборист
22.03.2015, 18:13
освоить бибку sysexec, примеров как писать строки я давал предостаточно

Так то и с SysFile можно сделать, просто думал что CAA_File лучше работает.
Буду пробовать с SysExec или SysFile

capzap
22.03.2015, 18:19
ну смотрите, с sysfile нужно открыть файл, записать в файл, закрыть файл, а в екзеке просто выпонить функцию и всё

spectrum48k
22.03.2015, 18:20
Изучаю Modbus.lib
В (системном) функциональном блоке чтения/записи MB_UNI_IO есть такие строки (7,8):

WHILE SysComRead(ComHandle, ADR(DataBuf), SIZEOF(DataBuf), 0) <> 0 DO;
END_WHILE

Вопрос к специалистам: Может ли данная конструкция остановить/замедлить выполнение программы, если в буффер поступают данные?

приборист
22.03.2015, 18:33
ну смотрите, с sysfile нужно открыть файл, записать в файл, закрыть файл, а в екзеке просто выпонить функцию и всё

Заметил, но описания не могу найти. Где команды для неё где подсмотреть можно?:rolleyes:
Все, понял что нужен руководство для чайников на Linux :D.
Пойду изучать, спасибо!

Мдааа.....Попробовал sysexec, мегавещь :)
Отправка в файл в одну строку, реально круто.

Правда я так понял можно только что-то отправлять но не получать?
Нельзя например узнать существует ли файл, чтобы дописать в него или же как то можно?