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

lara197a
22.12.2014, 09:12
Зависит от ПЛК.
Он расчитан на беспрерывную работу.
Обычно единственной причиной выхода ПЛК из строя - вздутие конденсаторов в блоке питания.
Как правило года через 3. Но не обязательно и не у всех.

melky
22.12.2014, 09:27
Чтобы не писался весь блок в Retain можно сделать ему переменную In_out и закольцевав поставить переменную снаружи, объявив ее Retain.

Эдуард_Н
22.12.2014, 13:39
Это ошибочное утверждение.
15826
Любые переменные в модуле Slave, являются реманентными по умолчанию. Объявлять их еще раз реманентными -это масло маслянное:rolleyes:
Любые переменные, объявленные в конфигурации, в том числе и модуле Slave являются глобальными
ЗЫ
Состояние всего ФБ будет записываться в энергонезависимую память только в том случае, если Вы объявите хотя бы одну переменную внутри этого ФБ. Если ретейн переменные подаются на вход ФБ или внутри его используются глобальные RETAIN переменные, то сам ФБ не будет записываться в энергонезависимую память.

А как тогда лучше сделать?

petera
22.12.2014, 14:11
А как тогда лучше сделать?
Не понятный вопрос, в чем собственно у Вас проблема?
У Вас в Slave ПЛК есть две перемнные -UST1 и UST2, в которые значения вводятся с панели. Эти переменные уже являются retain. Ввели с панели, выключили питание, затем включили значения UST1 и UST2 остались теми же, что и до отключения питания. Подключайте эти UST1 и UST2 на входы любых ФБ и все.
PS.
Надо это упорядочить, переходы от панели к ретейн-переменным куда нибудь убрать с виду, что бы в общем окне алгоритма их не было
Не нужно UST1 и UST2 сохранять в других ретейн-переменных

capzap
22.12.2014, 14:14
Эти переменные уже являются retain. Ввели с панели, выключили питание, затем включили значения UST1 и UST2 остались теми же, что и до отключения питания.
тут смотря кто мастер и параллельно этому кто первый включился, может случится так что они обнулятся, для этого люди придумали включать панель от релейного выхода плк

petera
22.12.2014, 14:24
тут смотря кто мастер и параллельно этому кто первый включился, может случится так что они обнулятся, для этого люди придумали включать панель от релейного выхода плк
Мастер панель. И как правило запись в слейв ПЛК панель делает по изменению значения, а это в момент ввода оператором.

ЗЫ. И глядя на программу
15838
Ежели панель при включении обнулит, то использование доп.retain здесь не спасет.

capzap
22.12.2014, 14:37
а в панели точно модбас работает со слейвом по событию,а не регулярно пишет? И когда панель загрузилась неперепишет ли она ноль в слейв, когда он появится,ведь до этого момента по этому адресу в памяти либо ноль либо "мусор"

petera
22.12.2014, 14:46
а в панели точно модбас работает со слейвом по событию,а не регулярно пишет? И когда панель загрузилась неперепишет ли она ноль в слейв, когда он появится,ведь до этого момента по этому адресу в памяти либо ноль либо "мусор"
Если панель ОВЕН и если она мастер, то поле ввода всегда только читает из слейва значение и отображает его, при вводе оператором нового значения выполняется однократная запись в слейв и затем только чтение

Эдуард_Н
22.12.2014, 14:49
У меня панель пишет переменные только по триггеру, а считывает регулярно. Так что должно получиться.

petera
22.12.2014, 15:06
а в панели точно модбас работает со слейвом по событию,а не регулярно пишет? И когда панель загрузилась неперепишет ли она ноль в слейв, когда он появится,ведь до этого момента по этому адресу в памяти либо ноль либо "мусор"

Если панель ОВЕН и если она мастер, то поле ввода всегда только читает из слейва значение и отображает его, при вводе оператором нового значения выполняется однократная запись в слейв и затем только чтение
Мусора не может быть.
Панель включилась, а ПЛК еще нет. В этом случае панель констатирует ошибку связи при чтении, на экране может быть 0.
ПЛК включился, модуль слейв является retain, связь ПЛК-панель появилась и на экране будет значение из переменной слейва.(постоянное чтение)
Если в момент ввода значения однократная запись не прошла из-за ошибок, то и на экране будет отображаться не измененное значение из слейва(постоянное чтение), оператор это увидит и введет значение заново.

capzap
22.12.2014, 15:52
Панель включилась, а ПЛК еще нет. В этом случае панель констатирует ошибку связи при чтении, на экране может быть 0.
ПЛК включился, модуль слейв является retain, связь ПЛК-панель появилась и на экране будет значение из переменной слейва.(постоянное чтение)

я так и не смог найти про какую панель говорит Эдуард, но Вы упор делаете на СП270, а я на ИП320 :) http://www.owen.ru/forum/showthread.php?t=9545&p=77171&viewfull=1#post77171

petera
22.12.2014, 16:10
я так и не смог найти про какую панель говорит Эдуард, но Вы упор делаете на СП270, а я на ИП320 :) http://www.owen.ru/forum/showthread.php?t=9545&p=77171&viewfull=1#post77171
А как же следующий пост http://www.owen.ru/forum/showthread.php?t=9545&p=111384&viewfull=1#post111384
15840
http://www.owen.ru/forum/attachment.php?attachmentid=11962&d=1392751544

capzap
22.12.2014, 16:20
а меня читали, если момент загрузки панели раньше чем плк то возникнут проблемы, если грузится одновременно или позже плк проблем небудет, там об этом хоть слово есть

Валенок
22.12.2014, 18:45
Не имеет значения кто-когда загрузился и/или перезагрузился в процессе. Всего лишь реинициализировать данные для панели в нужный момент и всё. Но тут, конечно, лучше забыть что область слейва - ретайн.
Do на питание панели - жесть.

capzap
22.12.2014, 18:58
Do на питание панели - жесть.
я вобще панель слейвом делаю и мне это не нужно, а вот lara использует правда по другой нужде

Валенок
23.12.2014, 00:21
я вобще панель слейвом делаю и мне это не нужно..
Наш человек ))))
А что за нужда такая у lara - даже непредставляю.

Rey4eel
23.12.2014, 20:35
Ребят нужна помощь , незнаю правда может помочь кто или нет. Написал программу для управления манипулятором и хотел чтобы она поочередно выполняла шаги , застрял в середине процесса , вроде все описал а шаги почему то не переходят . Если залью рабочий файл робота ,может кто помочь?

petera
23.12.2014, 20:55
Ребят нужна помощь , незнаю правда может помочь кто или нет. Написал программу для управления манипулятором и хотел чтобы она поочередно выполняла шаги , застрял в середине процесса , вроде все описал а шаги почему то не переходят . Если залью рабочий файл робота ,может кто помочь?
Нет проекта - нет ответа. На форуме экстрасенсов нет:rolleyes:

Rey4eel
23.12.2014, 20:59
Да опыта с форумами у меня совсем нет) пытался по литературе разбираться но увы не нашел ответа.

xek0
24.12.2014, 10:37
Добрый день. Не подскажите, есть ли подробная инструкция, как осуществить сохранение данных трассировки в файл?

Эдуард_Н
25.12.2014, 04:28
Мастер панель. И как правило запись в слейв ПЛК панель делает по изменению значения, а это в момент ввода оператором.

ЗЫ. И глядя на программу
15838
Ежели панель при включении обнулит, то использование доп.retain здесь не спасет.

Проверить пока не удаётся, нет ПЛК. Но раньше прикомпиляции писалось сколько ретейн памяти занято, а если сделать как у Вас то пишет, что занято ноль памяти. Так должно быть?

petera
25.12.2014, 07:28
Проверить пока не удаётся, нет ПЛК. Но раньше при компиляции писалось сколько ретейн памяти занято, а если сделать как у Вас то пишет, что занято ноль памяти. Так должно быть?
Так и должно быть.
Вы же сами этого хотели-
но тут узнал, что при записи в энергонезависимую память записывается не только то значение, которое было на входе, а и всё состояние блока. Вот и озадачился вопросом уменьшить обьём ими занимаемый
:rolleyes:

Эдуард_Н
25.12.2014, 07:56
Дак мои уставки в таком разе будут сохраняться при выключении ПЛК или нет?

petera
25.12.2014, 08:04
Дак мои уставки в таком разе будут сохраняться при выключении ПЛК или нет?
У меня сохраняются. Использую панель СП270, про ИП320 со 100% уверенностью теперь утверждать не могу, т.к. с ИП320 не работал.

Эдуард_Н
25.12.2014, 16:47
Почему когда меняю число, выделенное стрелкой, с 10 на 15 такая ерунда начинаеться ?

Кто нибудь поможет?

CleanS
25.12.2014, 17:30
Всем привет! С наступающим Новым Годом!!!

Занялся изучением CoDeSys. По работе возникла необходимость автоматизации работы оборудования. Изучать начал недавно, по сему прошу сильно не пинать.
Решил писать программу на CFC. Это мне более понятно. Встал вот такой вопрос. ....
Нужно обработать нажатие 4-х кнопок. Собственно нужно обработать ситуацию, когда нажато более 1-ой кнопки. В работе оборудования это не допустимо. В Standard.lib ничего похожего, что можно сразу использовать, не нашёл. :( Что можете посоветовать??? Как можно обработать эту ситуацию??? Подкиньте мысль - куда каПАть??? Может есть какая подходящая под это дело библиотека с нужным мне элементом???
Спасибо!

amn
25.12.2014, 17:44
Используйте элементы and и not (первая кнопка нажата и остальные не нажаты и т.д.). И определитесь, что должно произойти, если нажата не одна кнопка: игнорировать нажатие, пока не отпустят все кнопки или должна сработать первая нажатая кнопка, а вторая проигнорирована или что-то другое.

capzap
25.12.2014, 17:46
Всем привет! С наступающим Новым Годом!!!

Занялся изучением CoDeSys. По работе возникла необходимость автоматизации работы оборудования. Изучать начал недавно, по сему прошу сильно не пинать.
Решил писать программу на CFC. Это мне более понятно. Встал вот такой вопрос. ....
Нужно обработать нажатие 4-х кнопок. Собственно нужно обработать ситуацию, когда нажато более 1-ой кнопки. В работе оборудования это не допустимо. В Standard.lib ничего похожего, что можно сразу использовать, не нашёл. :( Что можете посоветовать??? Как можно обработать эту ситуацию??? Подкиньте мысль - куда каПАть??? Может есть какая подходящая под это дело библиотека с нужным мне элементом???
Спасибо!
в oscat.lib можно найти готовые элементы, которые подойдут для проектирования нечто подобного, а так документацию не мешает почитать и в школе информатику не прогуливать, представте эти четыре кнопки как разряды байтового числа, если это число не соответствует определенным числам и нулю, значит у Вас двойное нажатие

CleanS
25.12.2014, 17:58
в oscat.lib можно найти готовые элементы, которые подойдут для проектирования нечто подобного, а так документацию не мешает почитать и в школе информатику не прогуливать, представьте эти четыре кнопки как разряды байтового числа, если это число не соответствует определенным числам и нулю, значит у Вас двойное нажатие

В школе мы занимались программированием калькулятора МК52. По нему у меня даже книжечка с программами игр была. А так как это было ооооочень давно и в практике не применялось, то немного под забылось .... извиняйте :)


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

... извиняюсь за наглость ... а есть где пример посмотреть???

CleanS
25.12.2014, 18:04
Используйте элементы and и not (первая кнопка нажата и остальные не нажаты и т.д.). И определитесь, что должно произойти, если нажата не одна кнопка: игнорировать нажатие, пока не отпустят все кнопки или должна сработать первая нажатая кнопка, а вторая проигнорирована или что-то другое.

Здесь есть одна загвоздка .... поочерёдное переключение управления кнопками разрешается. Эту часть я уже реализовал. Т.е. при нажатии очередной кнопки, работа предыдущего агрегата останавливается и включается след. "привязанный" к этой кнопке ....
Хотя ..... надо подумать .... Спасибо!

capzap
25.12.2014, 18:06
ну если у Вас кнопки ко входам плк привязаны, то обычно дискреты собираются в дереве конфигуратора в байт, вот его и смотрите как он меняется от нажатия. Если они расположены с первого выхода, тогда комбинации при нажатой одной кнопке будут [1,2,4,8], ну и ноль соответствует состоянию не нажато

CleanS
25.12.2014, 18:18
ну если у Вас кнопки ко входам плк привязаны, то обычно дискреты собираются в дереве конфигуратора в байт, вот его и смотрите как он меняется от нажатия. Если они расположены с первого выхода, тогда комбинации при нажатой одной кнопке будут [1,2,4,8], ну и ноль соответствует состоянию не нажато

Спасибо .... надо будет это дело обдумать :confused:, завтра ... на свежую голову ... :)

Василий Кашуба
25.12.2014, 20:10
А можно ещё сигналы с кнопок суммировать, если сумма больше единицы, значит нажато несколько кнопок.

CleanS
26.12.2014, 12:28
А можно ещё сигналы с кнопок суммировать, если сумма больше единицы, значит нажато несколько кнопок.

Спасибо! Буду попробовать сделать ... :)

amn
26.12.2014, 14:04
Можно еще анализировать не нажатие, а отпускание кнопки, тогда надо реагировать на последнюю отпущенную кнопку. В этом случае используем F_TRIG. То есть сработал триггер, если ничего не нажато, то реагируем на кнопку.

CleanS
26.12.2014, 16:43
А можно ещё сигналы с кнопок суммировать, если сумма больше единицы, значит нажато несколько кнопок.

Спасибо, за подсказку! Именно так и сделал. Всё достаточно просто и хорошо работает! Спасибо!

CleanS
26.12.2014, 16:52
Ещё вопрос, подскажите пожалуйста. При использовании языка CFC не могу использовать элемент D_TRIG. Чем его можно заменить??? Необходимо разрешить проход импульсу через элемент на его (допустим) первом входе, при отсутствии "1" на втором входе, ну и соответственно на оборот. Что-то я пока ничего подходящего не нашёл. :(

melky
26.12.2014, 16:56
CleanS вы ищите аналог D-TRIG из Owen Logic ?
Если так, то он есть в библиотеке Oscat и называется FF-DRE

CleanS
26.12.2014, 21:08
CleanS вы ищите аналог D-TRIG из Owen Logic ?
Если так, то он есть в библиотеке Oscat и называется FF-DRE

Спасибо большое за наводочку! :)

Есть вопрос. Открыл в справочнике по микросхемам структуру D-тригера. Состоит сей элемент из 4-х элементов "И-НЕТ". Своял проект D_TRIGER. В чём собственно вопрос....
Как сделать из этого проекта отдельный элемент с 2-мя входами и двумя выходами, чтобы не видно было его структуры и можно было использовать где угодно и как угодно.
Макрос для этого подойдёт??? Если да, то как его создать??? Поиском по форуму нашёл только готовые макросы, саму процедуру ... "как его создавать" ... не нашёл. :(
В двух-трёх словах можно это дело описать???? Просветите пожалуйста неразумного!

P.S. .... как файл к сообщению прикрутить??? где прочитать???
попробую по "старинке" .... проект D_TRIGER (https://drive.google.com/file/d/0BzJe5pTi1_soSG1ZS3JlVFF6UGc/view?usp=sharing)

melky
26.12.2014, 21:48
Можно сохранить как библиотеку. Можно просто импортировать как POU в проект.
я кажется выкладывал FF-DRE отдельно, вытащенный из oscat библиотек.
Вот нашел ссылку - http://www.owen.ru/forum/attachment.php?attachmentid=13507&d=1404641624

amn
26.12.2014, 21:52
Как сделать из этого проекта отдельный элемент с 2-мя входами и двумя выходами, чтобы не видно было его структуры и можно было использовать где угодно и как угодно.
Можно посмотреть в файле CoDeSys_V23_RU.pdf со страницы 10 (он есть на диске или скачайте с сайта). Обратите внимание на функциональные блоки.

Чтобы прикрепить файл надо зайти в расширенный режим, там есть кнопочка со скрепочкой. Если не будет получаться, то предварительно файл надо упаковать в архив (файлы с некоторыми расширениями не хотят прикрепляться).

CleanS
26.12.2014, 22:43
Можно сохранить как библиотеку. Можно просто импортировать как POU в проект.
я кажется выкладывал FF-DRE отдельно, вытащенный из oscat библиотек.
Вот нашел ссылку - http://www.owen.ru/forum/attachment.php?attachmentid=13507&d=1404641624

Спасибочки!!! Завтра посмотрю .... уже в люлю пора :)

CleanS
26.12.2014, 22:43
Можно посмотреть в файле CoDeSys_V23_RU.pdf со страницы 10 (он есть на диске или скачайте с сайта). Обратите внимание на функциональные блоки.

Чтобы прикрепить файл надо зайти в расширенный режим, там есть кнопочка со скрепочкой. Если не будет получаться, то предварительно файл надо упаковать в архив (файлы с некоторыми расширениями не хотят прикрепляться).

Спасибо огромадное!!!

Эдуард_Н
30.12.2014, 18:29
Никто незнает как реализовать ФБ "ClockWeek" в КДС2 (установка времени срабатывания с недельной маской)? Желателен пример.

жекон
30.12.2014, 20:22
А откуда этот ФБ?

capzap
30.12.2014, 21:15
Никто незнает как реализовать ФБ "ClockWeek" в КДС2 (установка времени срабатывания с недельной маской)? Желателен пример.

http://www.owen.ru/forum/showthread.php?t=13588 всё что связано с библиотекой SysLibTime изучайте

Эдуард_Н
31.12.2014, 05:20
А откуда этот ФБ?

Из ОЛ(OWEN Logic)

жекон
31.12.2014, 06:19
Посмотрите в Оскатовской биб-ке там много чего есть, может и подобное наидете

Эдуард_Н
31.12.2014, 06:43
Посмотрите в Оскатовской биб-ке там много чего есть, может и подобное наидете

К сожелению, описания там не на русском.

amn
31.12.2014, 10:10
Никто не знает как реализовать ФБ "ClockWeek" в КДС2 (установка времени срабатывания с недельной маской)? Желателен пример.
Выкладываю пример

Эдуард_Н
31.12.2014, 11:28
Спасибо. только непонятно с вот этим: days:BYTE; (*маска разрешения включения в определенные дни недели*). Как эта маска должна выглядеть? Особенно если нужно несколько дней, или в ней указываеться только один день?

melky
31.12.2014, 11:31
Эдуард_Н 0 бит это воскресенье, 1-й бит понедельник и так далее

Эдуард_Н
31.12.2014, 12:48
Эдуард_Н 0 бит это воскресенье, 1-й бит понедельник и так далее

а если ввести 05 или 47, чего будет?

capzap
31.12.2014, 12:49
а если ввести 05 или 47, чего будет?
LIMIT поставте вместо того чтоб задавать такие вопросы

Эдуард_Н
31.12.2014, 13:01
Новый год весилиться надо:o, а вы так серьёзно.

Эдуард_Н
31.12.2014, 13:39
Развейте сомнения, эта штука в эмуляции не работает?

melky
31.12.2014, 14:23
Эдуард_Н не будет работать, библиотека работает с часами ПЛК.

amn
31.12.2014, 17:02
Спасибо. только непонятно с вот этим: days:BYTE; (*маска разрешения включения в определенные дни недели*). Как эта маска должна выглядеть? Особенно если нужно несколько дней, или в ней указываеться только один день?

Это готовая маска, а вводить Вы ее будет с панели? Можно при вводе менять соответствующие биты маски.

Эдуард_Н
31.12.2014, 17:07
Это готовая маска, а вводить Вы ее будет с панели? Можно при вводе менять соответствующие биты маски.

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

energvk
31.12.2014, 20:43
Тогда просто в панели назначаете дни недели относительно переменной byte в плк. Примерно 0.1, 0.2, 0.3 и т.д. (соответственно в конфигурации плк эта byte-переменная стоит первая), зависит от типа панели и каким образом адресация идет.

Валенок
01.01.2015, 02:50
а если ввести 05...
будет работать в воскресенье и вторник

bgn62
02.01.2015, 22:09
ПОДСКАЖИТЕ ГДЕ ГЛЯНУТЬ ПОШАГОВУЮ ИНСТРУКЦИЮ
ПО СОЗДАНИЮ, ЗАПОЛНЕНИЮ и чтению МАССИВА ДАННЫХ С СОХРАНЕНИЕМ В рЕТАЙН, НАПРИМЕР МАТРИЦЦУ (8 НА 5 И НА 50 (8х5х50)), какими библиотеками нужно пользоваться?
ИНФЫ НА ФОРУМЕ МНОГО, НО ВСЯ ОНА РАЗРОЗНЕННА,
НЕ МОГУ ПОНЯТЬ С ЧЕГО НАЧАТЬ:(

можно ли реализовать в сfс?

amn
02.01.2015, 22:38
CoDeSys_V23_RU.pdf стр. 332

bgn62
02.01.2015, 23:20
CoDeSys_V23_RU.pdf стр. 332

СПАСИБО,
РАЗБИРАЮСЬ
:)

жекон
03.01.2015, 06:18
А вот ретайном лучше не пользоваться, сохраняйте в файл надежнее будет

Эдуард_Н
04.01.2015, 12:54
А вот ретайном лучше не пользоваться, сохраняйте в файл надежнее будет

Раскажите, как воспользоваться записью в файл? желателен пример.

Rey4eel
05.01.2015, 23:48
Люди добрые подскажите;(
Суть вопроса такова - как реализовать код в котором нужно просчитывать значение некой переменной зависящей от двух других ( одна из которых будет задаваться с ползунка а другая будет временем )
Пример: V= speed*time
Из этого speed - задается в ручную
Time - увеличивается с частотой 100 ms
Значение V - выводится на график ( динамическая переменная )
возможно что то сказал не очень грамотно с технической точки зрения , прошу сильно не ругать.
Заране спасибо !

petera
06.01.2015, 10:44
Люди добрые подскажите;(
Суть вопроса такова - как реализовать код в котором нужно просчитывать значение некой переменной зависящей от двух других ( одна из которых будет задаваться с ползунка а другая будет временем )
Пример: V= speed*time
Из этого speed - задается в ручную
Time - увеличивается с частотой 100 ms
Значение V - выводится на график ( динамическая переменная )
возможно что то сказал не очень грамотно с технической точки зрения , прошу сильно не ругать.
Заране спасибо !
Если Вы хотите получить переменную скорость изменения(в секундах) V=speed/10,
то например так

VAR
t1: TIME;
t0: TIME;
time_: REAL;
V: REAL;
speed: REAL:=1;
END_VAR

t1:=TIME();
IF TIME_TO_DWORD(t1-t0) >= 100 THEN
t0:=t1;
time_:=time_+0.1;
END_IF

V:=speed*time_;
time_ вместо time, т.к нельзя использовать в имени переменной зарезервированное слово

Rey4eel
06.01.2015, 21:16
Спасибо большое , сейчас буду пробовать. А то я уж хотел ставить генератор импульсов и счетчик и пытаться с них получать аналогичное .

petera
06.01.2015, 21:56
Спасибо большое , сейчас буду пробовать. А то я уж хотел ставить генератор импульсов и счетчик и пытаться с них получать аналогичное .
Только учтите, что в эмуляции время цикла ПЛК около 60 мс, из-за этого будет некоторая девиация изменения переменной time_ относительно заданного значения 100 мс.

Rey4eel
06.01.2015, 22:30
Ага уже увидел это нюанс , вроде удалось подобрать усредненное значение

petera
07.01.2015, 21:11
По просьбе Эдуарда "перевел" на ST проект от amm http://www.owen.ru/forum/showthread.php?t=10555&p=157526&viewfull=1#post157526
16035

petera
07.01.2015, 22:34
По просьбе Эдуарда "перевел" на ST проект от amm http://www.owen.ru/forum/showthread.php?t=10555&p=157526&viewfull=1#post157526
16035
Теперь из этого сделал один ФБ "clock_week".
Пример использования
16036

Эдуард_Н
08.01.2015, 04:27
Спасибо большое!!!

Андрей1961
08.01.2015, 06:35
При открытии нового проекта в закладке КОНФИГУРАЦИЯ КОНТРОЛЛЕРА отсутствуют типы контроллеров. Что делать? Подскажите, пожалуйста, подробно.

petera
08.01.2015, 07:08
При открытии нового проекта в закладке КОНФИГУРАЦИЯ КОНТРОЛЛЕРА отсутствуют типы контроллеров. Что делать? Подскажите, пожалуйста, подробно.
А в настройках целевой платформы не пробовали?
16042

alex55
08.01.2015, 09:11
Может просто таргет файлы забыли установить?:)

Lyohin
08.01.2015, 23:07
Здравствуйте, подскажите, возможно ли настроить связь CoDeSys с виртуальным симулятором ПЛК, например, таким http://www.plcsimulator.org/Home

Андрей1961
09.01.2015, 08:38
Может просто таргет файлы забыли установить?:)

alex55, большое спасибо!!! Скачал таргет файлы, установил, все работает.

RV9WFJ
09.01.2015, 10:42
Теперь из этого сделал один ФБ "clock_week".
Пример использования
16036Я бы еще добавил проверку на то что время включения меньше времени выключения и дополнительный алгоритм если это не так. А то в данном варианте если устройство, допустим, в 5 утра выключается, а в 8 вечера включается, то алгоритм работать не будет.

petera
09.01.2015, 10:49
Я бы еще добавил проверку на то что время включения меньше времени выключения и дополнительный алгоритм если это не так. А то в данном варианте если устройство, допустим, в 5 утра выключается, а в 8 вечера включается, то алгоритм работать не будет.
А почему время включения обязательно должно быть меньше чем время выключения:confused: Земля же круглая, в смысле сутки по кругу идут. Разве не может быть ситуации, что включить нужно в 8 вечера(текущего дня), а выключить в 5 утра завтра?

Валенок
09.01.2015, 19:12
petera, ну так введите on_Hour = 23, of_Hour = 2, текущий час = 1 (все дни разрешены)
RV9WFJ наверное об этом.

Хотя дополнительный алгоритм не нужен. Нужна легкая модификация существующего.
С уменьшением кол-ва строк ессно ))

petera
10.01.2015, 06:24
petera, ну так введите on_Hour = 23, of_Hour = 2, текущий час = 1 (все дни разрешены)
RV9WFJ наверное об этом.

Хотя дополнительный алгоритм не нужен. Нужна легкая модификация существующего.
С уменьшением кол-ва строк ессно ))
Первоначальный код вообще то был не мой.
Поправил
16078

19051

CleanS
13.01.2015, 10:54
Всем Доброго утра! С Новым Годом! С Рождеством!

Есть вопрос. Поиск по форуму результата не дал :(

Мне необходимо с определённой периодичностью (допустим каждую секунду) из одного значения (допустим А), вычитать второе значение (допустим В), пока А не станет равно 0 (ноль). Подкиньте мысль как реализовать???

Спасибо!!!

P.S. .... забыл добавить .... программу "пишу" на CFC

Валенок
13.01.2015, 11:24
Если А и Б не кратны - можно и не реализовать никогда )))

Николаев Андрей
13.01.2015, 11:46
Всем Доброго утра! С Новым Годом! С Рождеством!

Есть вопрос. Поиск по форуму результата не дал :(

Мне необходимо с определённой периодичностью (допустим каждую секунду) из одного значения (допустим А), вычитать второе значение (допустим В), пока А не станет равно 0 (ноль). Подкиньте мысль как реализовать???

Спасибо!!!

P.S. .... забыл добавить .... программу "пишу" на CFC

Есть оператор sub (можно в имени блока просто поставить знак "-").
Для проверки и отчета времени добавляем условие - "таймер отсчитал интервал времени" и "значение меньше или равно нужного", тогда выполнить блок sub.



Если А и Б не кратны - можно и не реализовать никогда )))
Хватит КЭПствовать :)
Но Валенок прав. Лучше проверять не больше или меньше, а больше или равно, или, меньше или равно.

CleanS
13.01.2015, 13:48
Есть оператор sub (можно в имени блока просто поставить знак "-").
Для проверки и отчета времени добавляем условие - "таймер отсчитал интервал времени" и "значение меньше или равно нужного", тогда выполнить блок sub.

Это-то понятно .... как это схемно реализовать??? Всю голову уже сломал .... :confused:

petera
13.01.2015, 14:27
Это-то понятно .... как это схемно реализовать??? Всю голову уже сломал .... :confused:
Как-то так
16138

CleanS
13.01.2015, 14:37
Как-то так
16138

GRAZIE!!!! .... ой :D ..... Спасибо!!!!

amn
13.01.2015, 14:56
А если А и Б не кратны можно так:
16139

CleanS
13.01.2015, 15:50
Братцы.... СПАСИБО БОЛЬШОЕ!!!! Есть теперь с чем поработать!!! :)

artem39_rus
13.01.2015, 17:06
Нужна помощь!
Есть переменная типа REAL, которая изменяется со временем по определенному закону, по происшествии заданного интервала времени сбрасывается в 0 и вновь меняется.
Требуется каждую минуту записывать значение этой переменной так, чтобы после сброса на ноль сохранилась последняя запись.
Как это реализовать?

Гарчев Евгений
13.01.2015, 18:35
Это должна быть одна переменная или массив из переменных после каждого сброса на ноль?
если одна переменная то можно так:
t1(in:=TRUE, pt:=T#60s);

IF t1.Q AND a1<>0 THEN
b1:=a1;
t1(in:=FALSE);
ELSIF a1=0 AND fl THEN
c1:=b1;
fl:=FALSE;
END_IF

где a1 - заданная переменная типа real, b1 - переменная типа real, в которую записывается значения каждую минуту, t1 - таймер TON, с1 - переменная типа real, в которую записывается последнее значение перед сбросом на ноль переменной a1, fl - флаг, по которому происходит запись в переменную c1, используется если необходимо сохранить только первое значение перед сбросом на ноль, при объявлении fl:bool:=true;, если необходимо сохранить последнее значение, то не используйте этот флаг, удалите соответствующие строки.

если нужно записать массив значений, то как-то так:
t1(in:=TRUE, pt:=T#60s);

IF t1.Q AND a1<>0 THEN
b1:=a1;
t1(in:=FALSE);
ELSIF a1=0 THEN
ar[i]:=b1;
i:=i+1;
ELSIF i=11 THEN
i:=0;
END_IF

где a1 - заданная переменная типа real, b1 - переменная типа real, в которую записывается значения каждую минуту, t1 - таймер TON, ar - массив из переменных типа real, в которые записывается последнее значение перед сбросом на ноль переменной a1, i - указатель на элемент массива при записи.

александр 64
13.01.2015, 21:07
при написании программы блоки переименовываются только в ручную хотя должен быть ассистент ввода подскажите как его установить?

Yegor
13.01.2015, 21:48
при написании программы блоки переименовываются только в ручную хотя должен быть ассистент ввода подскажите как его установить?Вы о чём? Вызываемый по F2 ассистент ввода во втором кодесисе позволяет только вводить уже объявленное, а не переименовывать. Возможностей переименования символов я в этой версии не припомню (в третьей вроде есть).

александр 64
13.01.2015, 22:07
спасибо вот то что надо задача была установленный блок переименовать

acs.ufk
14.01.2015, 06:52
Добрый день. Изучаю в свободное время плк110-60 и кодесис естественно.
Купили модули аналогового ввода/вывода му110-8и и мв110-8а.
Согласно РЭ и видео из интернетов подключил и настроил, но работает у меня только AI, на AO не моргает индикатор rs485? обмена нет.
Идея простая, на 1 вход подцеплен пт100, его показания читаются и в программе видны, дальше хочу вывести с 1 выхода на ИТП1 сигнал.

Программу приложил. Прошу помощи, что нет так.

ps в конфигурации плк? где я добавил модбас мастер попеременно моргают оба нужных мне адреса (last adress) 15 и 16. last error 81

melky
14.01.2015, 09:47
acs.ufk - Почему у вас на выходе REAL ?, у 8И по РЭ INT16 от 0 до 1000, единица измерения в % 0,1%, следователь 1000*0,1 = 100%
И не обязательно вбивать регистры в виде 0000, достаточно 0.

artem39_rus
14.01.2015, 10:27
Это должна быть одна переменная или массив из переменных после каждого сброса на ноль?
если одна переменная то можно так:
t1(in:=TRUE, pt:=T#60s);

IF t1.Q AND a1<>0 THEN
b1:=a1;
t1(in:=FALSE);
ELSIF a1=0 AND fl THEN
c1:=b1;
fl:=FALSE;
END_IF

где a1 - заданная переменная типа real, b1 - переменная типа real, в которую записывается значения каждую минуту, t1 - таймер TON, с1 - переменная типа real, в которую записывается последнее значение перед сбросом на ноль переменной a1, fl - флаг, по которому происходит запись в переменную c1, используется если необходимо сохранить только первое значение перед сбросом на ноль, при объявлении fl:bool:=true;, если необходимо сохранить последнее значение, то не используйте этот флаг, удалите соответствующие строки.

если нужно записать массив значений, то как-то так:
t1(in:=TRUE, pt:=T#60s);

IF t1.Q AND a1<>0 THEN
b1:=a1;
t1(in:=FALSE);
ELSIF a1=0 THEN
ar[i]:=b1;
i:=i+1;
ELSIF i=11 THEN
i:=0;
END_IF

где a1 - заданная переменная типа real, b1 - переменная типа real, в которую записывается значения каждую минуту, t1 - таймер TON, ar - массив из переменных типа real, в которые записывается последнее значение перед сбросом на ноль переменной a1, i - указатель на элемент массива при записи.

Это как раз то что нужно,спасибо большое!!!!!
Правда я в CFC делаю эту задачку,но все равно очень помог!

CleanS
14.01.2015, 12:12
Всем привет!
После выполнения арифметических действий результат имеет дробное значение с пятью знаками после запятой. Каким образом убрать дробные значения??? Программирование ведётся на CFC. Спасибо!

petera
14.01.2015, 12:19
Всем привет!
После выполнения арифметических действий результат имеет дробное значение с пятью знаками после запятой. Каким образом убрать дробные значения??? Программирование ведётся на CFC. Спасибо!
А зачем:confused:

CleanS
14.01.2015, 12:22
А зачем:confused:

В последующем планируется отправлять значение на индикатор, но отображать только целую часть числа ....

CleanS
14.01.2015, 12:27
Всё... сам нашёл решение .... вопрос снимается....

petera
14.01.2015, 12:28
В последующем планируется отправлять значение на индикатор, но отображать только целую часть числа ....
Если только целую, то для преобразования Real в INT используйте оператор TRUNC (см. справку) только TRUNC просто отбрасывает дробную часть без округления целой части.
Если нужно в Real уменьшить число знаков после запятой, то В библиотеке OSCAT есть ф-ция ROUND(in,N), выгядит она почти так:

VAR_INPUT in : REAL;
N : INT;
END_VAR
VAR
X: REAL;
DECADES : ARRAY[0..8] OF REAL := 1.0,10.0,100.0,1000.0,10000.0,10000.0,100000.0,100 0000.0,10000000.0;
END_VAR

X :=DECADES[LIMIT(0,N,8)];
ROUND := DINT_TO_REAL(REAL_TO_DINT(in * X)) / X;

CleanS
14.01.2015, 12:32
Спасибо за подсказку.
Я сделал преобразование REAL_TO_WORD.

petera
14.01.2015, 12:37
Я сделал преобразование REAL_TO_WORD.
Ваше преобразование будет работать правильно только для, REAL>=0 Для отрицательных целых чисел нужен тип INT

CleanS
14.01.2015, 12:43
Спасибо!
По работе алгоритма, .... при достижении значения = 0, работа останавливается, по сему отрицательных значений не будет.

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

amn
14.01.2015, 19:23
Файл на диске CoDeSys_V23_RU.pdf или на сайте (http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf)

илья илья илья
14.01.2015, 20:16
нее там прямо в программе

capzap
14.01.2015, 21:07
нее там прямо в программе

так справку прочтите

Lyohin
14.01.2015, 21:42
Подскажите пожалуйста, можно ли так сделать: Начинать разрабатывать программу, но пока неизвестно, какой контроллер будет. Т.е., выбрав в целевой платформе контроллер, создав программу без привязки к входам/выходам, и записав в файл (если так возможно). Затем, после того, как определился тип контроллера, открываем Codesys, выбираем нужную целевую платформу, открываем фал программы и привязываем переменные программы к входам/выходам.

Валенок
15.01.2015, 00:10
Именно так и нужно

илья илья илья
15.01.2015, 06:58
так справку прочтите

стою на асфальте )) и не могу найти не в какую

capzap
15.01.2015, 07:09
стою на асфальте )) и не могу найти не в какую

как в любом виндовом приложении последний пункт меню среды разработки

илья илья илья
15.01.2015, 07:55
как в любом виндовом приложении последний пункт меню среды разработки

Эт я вкурсе , ладно хоть не последняя строка первой вкладки ), так и не нашел уже дочитываю

capzap
15.01.2015, 08:01
в справке точности повторен документ, который предлагалось Вам скачать с сайта или на диске посмотреть, ну или как вариант Вы что то другое спрашиваете

илья илья илья
15.01.2015, 08:09
Вы правы , я только об этом подумал, я имел в виду что описание блоков внутри библиотеки русифицированы , на стадии обучения проще ориентироваться , как в овен логик

илья илья илья
15.01.2015, 11:23
разобрался это была библиотека настройки

илья илья илья
15.01.2015, 13:19
А нет такой волшебной кнопочьки в настройках , что бы не жмакать постоянно в режиме симуляции на Запись значения (ктрл ф7)?

petera
15.01.2015, 13:48
А нет такой волшебной кнопочьки в настройках , что бы не жмакать постоянно в режиме симуляции на Запись значения (ктрл ф7)?
Есть, и не одна, а столько сколько Вам нужно.:rolleyes:
Делайте визуализацию, а на ней море кнопочек.
http://www.owen.ru/forum/attachment.php?attachmentid=12660&d=1397838204
Жмяк на кнопочки и готово:)

илья илья илья
15.01.2015, 14:13
Благодарю , буду пробовать)

Lyohin
15.01.2015, 15:31
Именно так и нужно
Как именно это сделать (записать в файл, а затем открыть в другой целевой платформе). Просьба объяснить.


Напомню вопрос
Подскажите пожалуйста, можно ли так сделать: Начинать разрабатывать программу, но пока неизвестно, какой контроллер будет. Т.е., выбрав в целевой платформе контроллер, создав программу без привязки к входам/выходам, и записав в файл (если так возможно). Затем, после того, как определился тип контроллера, открываем Codesys, выбираем нужную целевую платформу, открываем фал программы и привязываем переменные программы к входам/выходам.

capzap
15.01.2015, 16:31
Как именно это сделать (записать в файл, а затем открыть в другой целевой платформе). Просьба объяснить.


Напомню вопрос
Подскажите пожалуйста, можно ли так сделать: Начинать разрабатывать программу, но пока неизвестно, какой контроллер будет. Т.е., выбрав в целевой платформе контроллер, создав программу без привязки к входам/выходам, и записав в файл (если так возможно). Затем, после того, как определился тип контроллера, открываем Codesys, выбираем нужную целевую платформу, открываем фал программы и привязываем переменные программы к входам/выходам.

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

Валенок
15.01.2015, 17:22
И в дополнение.


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

Цитирую Вас же

1. Создать программу без привязки к входам/выходам,
2. Записать в файл
Затем, после того, как определился тип контроллера,
3. Открываем Codesys,
4. Открываем файл программы
5. Выбираем нужную целевую платформу
6. Привязываем переменные программы к входам/выходам.

Эдуард_Н
17.01.2015, 17:02
Столкнулся с проблемой открытия проекта в win8. Раньше в ней кликаешь по значку проекта и он спокойно открывался. Теперь же проект открывается, но ругается на то, что не может найти мою бибку, мол укажите путь. А если запускаешь КДС exe-ым файлом с указанием, что от администратора то потом при выборе проекта он открывается нормально. Как моим проектам назначить полный доступ?

artem39_rus
20.01.2015, 10:40
Подскажите как поменять количество знаков после запятой для выходной переменной типа REAL.
На выходе получаю 1 знак, а мне требуется хотя бы 3.

Владимир86
20.01.2015, 20:20
Всем привет. Впервые столкнулся с программированием в CoDeSys. Есть несколько простых вопросов, на которые пока не нашел однозначных ответов Программа PID_Regulators.lib работает, визуализацию сделал но не получается организовать Start/Stop в программе. Про BUTTON читал но не понял как реализовать.Планируется управлять программой с DOP paneli. Может поможете ?Имеется PLC 100 K_L. MB 110-224.2A . Установка для нагрева подшипников в масле.

capzap
20.01.2015, 20:25
Подскажите как поменять количество знаков после запятой для выходной переменной типа REAL.
На выходе получаю 1 знак, а мне требуется хотя бы 3.



Всем привет. Впервые столкнулся с программированием в CoDeSys. Есть несколько простых вопросов, на которые пока не нашел однозначных ответов Программа PID_Regulators.lib работает, визуализацию сделал но не получается организовать Start/Stop в программе. Про BUTTON читал но не понял как реализовать.Планируется управлять программой с DOP paneli. Может поможете ?Имеется PLC 100 K_L. MB 110-224.2A . Установка для нагрева подшипников в масле.

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

Владимир86
20.01.2015, 21:25
Вот программа:1628616287 Родную программу с контроллера восстановить не удалось Был сломан . Вот пытаюсь восстановить станцию .опыта с программированием раньше не было .Буду благодарен.

capzap
20.01.2015, 21:40
Вот программа:1628616287 Родную программу с контроллера восстановить не удалось Был сломан . Вот пытаюсь восстановить станцию .опыта с программированием раньше не было .Буду благодарен.

а куда нужно старт/стоп то, так и не объяснили? Для того чтоб регулятор запускать, то блок надо было открывать с функцией EN/Eno и на этот вход подавать сигнал от кнопки

Владимир86
20.01.2015, 22:19
Спасибо сейчас попробую . Старт .стоп нужен для запуска программы с ДОП панели.

Владимир86
20.01.2015, 22:59
Создал переменную PUSK но не могу вникнуть как ее правильно вписать в программу.При нажатии PUSK становится =TRUE и больше ничего не происходит.16288

capzap
20.01.2015, 23:08
а что должно происходить? кстати с чем связано, что минимум стоит 1000, а максимум -с дефолтным значением?

Владимир86
20.01.2015, 23:35
Кнопка Pusk должна запускать контроллер в работу.Кнопка Start на контроллере не подходит ( контроллер в шкафу ) Раньше программа нагрева включалась с DOP panel Delta .Вот я и хочу что-б программа запускалась и останавливалась программно .а не с кнопки старт (на контроллере). минимум стоит 1000, а максимум -с дефолтным значением? Это косяк когда я переменную PUSK создавал немного сдвинулись элементы . 16289

capzap
21.01.2015, 07:40
Кнопка Pusk должна запускать контроллер в работу.Кнопка Start на контроллере не подходит ( контроллер в шкафу ) Раньше программа нагрева включалась с DOP panel Delta .Вот я и хочу что-б программа запускалась и останавливалась программно .а не с кнопки старт (на контроллере). минимум стоит 1000, а максимум -с дефолтным значением? Это косяк когда я переменную PUSK создавал немного сдвинулись элементы . 16289

сдается мне, что Вам впервую очередь надо посоветовать сделать загрузочный проект

CleanS
21.01.2015, 10:02
Всем Доброго утра!
Снова возник вопрос, на который второй день не могу придумать ничего путного ....

Есть две переменные (REAL) "А" и "В". "В" циклически (раз в 1 сек) изменяет своё значение. Во время выполнения программы в произвольные промежутки времени к переменной "В" требуется прибавить переменную "А", с последующим её обнулением. Со сложением проблем нет. А вот с её обнулением как раз и засада. Или она успевает обнулиться раньше чем сложится, либо после сложение не обнуляется и продолжает суммироваться. В общем в тупике я ...
Кто подскажет направление движения???

P.S. Программирование ведётся на CFC.

CleanS
21.01.2015, 11:15
Есть .... есть решение!
Придумал вроде рабочий кусочек схемы. По крайней мере "моделька" работает. Сейчас попробую вставить в общую "схему".
Но всё равно буду рад дельному совету. Возможно чьё-то предложение по решению проблемы будет более оптимальным.

Владимир86
21.01.2015, 11:51
сдается мне, что Вам впервую очередь надо посоветовать сделать загрузочный проект

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

capzap
21.01.2015, 11:53
Проект у меня загружен в контроллер .Все работает ,уставку держит. Мне нужно что-бы контроллер запускался с кнопки pusk в визуализации . а как это записать не пойму Codesys только начинаю изучать. На форуме пока не нашел как это реализовать .А что в проекте не хватает подскажи?

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

а если хочется чтоб все работало только после нажатия кнопки на панели, то первым элементом в поу PLC_PRG на языке ST должно стоять нечто подобное IF NOT PUSK THEN RETURN; END_IF;

Владимир86
21.01.2015, 13:14
задам вопрос подругому, при длительном отключении питания приходится ли Вам загружать проект по новой?

а если хочется чтоб все работало только после нажатия кнопки на панели, то первым элементом в поу PLC_PRG на языке ST должно стоять нечто подобное IF NOT PUSK THEN RETURN; END_IF;

на длительное время не пробовал но через сутки включается .Контролера сейчас нет вечером попробую . Это значит в основном POU добавить дополнительный объект на ST/

capzap
21.01.2015, 13:21
можно это и на cfc реализовать, только я сейчас с телефона выхожу,нет возможности соответствующую картинку создать, главное чтоб условие выполнялось самым первым

artem39_rus
21.01.2015, 15:20
господа, это только в Ваших головах, весь конструктор Лего в сборе, а другим ничего не понятно, выкладывайте наглядное представление Ваших трудностей, в виде проекта
мне нужно чтобы переменная выходная имела три знака после запятой,что тут наглядно показывать?

capzap
21.01.2015, 15:56
мне нужно чтобы переменная выходная имела три знака после запятой,что тут наглядно показывать?

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

artem39_rus
21.01.2015, 16:06
выходная переменная чего, ПОУ, визуализации, модбас-переменной, какой тип переменной на самом деле, о количестве знаков говорят когда нужно отобразить строковую переменную полученную из реала, а сам реал не завистимо ни от чего имеет как минимум семь знаков после запятой

переменная ПОУ

capzap
21.01.2015, 16:12
Тогда ни как, если это нужно для отладки в онлайн режиме, с большой вероятностью могу предположить что поу на холсте cfc, тогда просто добавте параллельно элемент умножения на три или четыре и Ваша дробная часть перенесется до запятой, но там скорее всего будут нули, раз КДС отрисовывает только один знак

artem39_rus
21.01.2015, 16:18
Тогда ни как, если это нужно для отладки в онлайн режиме, с большой вероятностью могу предположить что поу на холсте cfc, тогда просто добавте параллельно элемент умножения на три или четыре и Ваша дробная часть перенесется до запятой, но там скорее всего будут нули, раз КДС отрисовывает только один знак

спасибо за совет, там действительно нули

CleanS
21.01.2015, 17:32
Ещё раз всем привет!!!
В процессе написания "схемы работы" (CFC) контроллера возник вопрос.
Каким образом можно выключить работу части "схемы"???
Поясню.
Есть контроллер, управляющий работой максимально, допустим 8-ю некими агрегатами. Логика управления у всех идентична.
"Схема работы" допустим пишется сразу для 8-ми агрегатов, а уже при монтаже и наладке оборудования, к контроллеру подключается
необходимое количество блоков ввода-вывода и в визуализации включается необходимое число рабочих "схемных модулей".
Просто если программа написана на 8 агрегатов, а подключено допустим 3, то часть "кода" будет обрабатываться контроллером в пустую, тратя машинной время.
... или каждый раз "схему" необходимо будет править под необходимое количество рабочих агрегатов???

Yegor
21.01.2015, 17:55
Сначала нужно (рекомендуется) структурировать программу так, чтобы каждый агрегат на схеме был представлен одним функциональным блоком, даже если все агрегаты разнотипные. Потом любой такой блок можно щёлкнуть правой кнопкой и включить через контекстное меню EN/ENO — появится лишний вход с именем EN, принимающий выражения типа BOOL. При значении FALSE на этом входе блок выполняться не будет.

CleanS
21.01.2015, 18:00
Понятно. Спасибо!

Andrei Z
21.01.2015, 18:17
Здравствуйте, у меня стал вопрос размещения оборудования, прошу совет. Есть СПК 107 (всё ещё в коробочке нераспечатоном) и вот думаю, поставить его на котельную, хотелось бы поближе к комнате оператора чтобы он видел всё на экранчике.. но в то же время не хотелось бы перед столом где кипит чайник... всё таки контролер а не панель оператора. Собсвтенно вопрос, возможно както в будущем подключить СПК к планшетнику например в комнате операторов (мне кажется это дешёвый вариант.) самый лучший конечно просто экран выввести на видео вход телевизора)))))
Мне уже советы дают такие чтобы поставить СПК где удобно в котельной, и перед ним видео глазок с изображением на телевизор))))

Yegor
21.01.2015, 18:31
У СПК нет видеовыходов. Ни аналоговых, ни цифровых, ни железных, ни программных. Планшет можно подключить через какой-нибудь адаптер 485 на Wi-Fi и поднять на нём какую-нибудь визуализацию (в том числе веб, но тут, скорее, понадобится СПК2хх), однако планшет и программа для него обойдутся гораздо дороже дополнительного стола для чайника.

Мне доводилось делать установку с двумя равнозначными постами. Но там схема другая была: ПЛК110 управлял процессом, а к нему подключались два СПК110 чисто в роли интерфейса с совершенно идентичными программами. Естественно, программы для ПЛК и СПК были написаны таким образом, чтобы не дублировать один и тот же код для разных панелей.

mr_andre
22.01.2015, 13:55
Добрый день, извините за глупый вопрос, но плк63 и ип320 еще не добрались до меня, что бы поэкспериментировать.
в мануале написано: При добавлении пользовательских параметров требуется задавать их тип –
«Конфигурационный» либо «Оперативный»
Можете на пальцах разжевать в каких случаях какой нужно использовать, в практических задачах.

Newcomer
23.01.2015, 12:05
Добрый день.

При запуске проекта появляется сообщение (вложение 1). Если нажать кнопку Да, то появляется окно (вложение 2) Что надо указать в этом окне чтобы корректно открыть проект ?

Yegor
23.01.2015, 15:23
Таргеты на тот ПЛК, для которого делался проект.

Newcomer
23.01.2015, 17:52
Таргеты на тот ПЛК, для которого делался проект.
И в какой строке его указать ?

Yegor
23.01.2015, 19:33
Их нужно скачать (http://www.owen.ru/catalog/codesys_v2/opisanie) (из подстраницы для нужного контроллера — «Сервисное ПО для ___») и установить, чтобы они были в вашей системе.

artem39_rus
27.01.2015, 10:41
Помогите разобраться!
Есть датчик давления (вакууметр терморезистивный цифровой) он подключен к ПЛК 100 К-М через RS-485 по протоколу Modbus RTU.
В описании к датчику есть таблица - "команды протокола Modbus RTU".
Подскажите как пользоваться данными командами,через какие ФБ и т.д
Как правильно настроить датчик чтобы он показывал реальное значение.
Либо подскажите что почитать,какую литературу чтобы разобраться с данным протоколом обмена и с его особенностями.16394

Вольд
27.01.2015, 12:13
Их нужно скачать (http://www.owen.ru/catalog/codesys_v2/opisanie) (из подстраницы для нужного контроллера — «Сервисное ПО для ___») и установить, чтобы они были в вашей системе.
Это все имеется. Дальше-то что делать ?

capzap
27.01.2015, 12:28
И в какой строке его указать ?

ни в какой, при таком сообщении надо выбирать НЕТ
а таргеты устанавливаются без открытия среды разработки, есть специально для этого приложение

capzap
27.01.2015, 12:28
Помогите разобраться!
Есть датчик давления (вакууметр терморезистивный цифровой) он подключен к ПЛК 100 К-М через RS-485 по протоколу Modbus RTU.
В описании к датчику есть таблица - "команды протокола Modbus RTU".
Подскажите как пользоваться данными командами,через какие ФБ и т.д
Как правильно настроить датчик чтобы он показывал реальное значение.
Либо подскажите что почитать,какую литературу чтобы разобраться с данным протоколом обмена и с его особенностями.16394
https://ru.wikipedia.org/wiki/Modbus

petera
27.01.2015, 12:29
Помогите разобраться!
Есть датчик давления (вакууметр терморезистивный цифровой) он подключен к ПЛК 100 К-М через RS-485 по протоколу Modbus RTU.
В описании к датчику есть таблица - "команды протокола Modbus RTU".
Подскажите как пользоваться данными командами,через какие ФБ и т.д
Как правильно настроить датчик чтобы он показывал реальное значение.
Либо подскажите что почитать,какую литературу чтобы разобраться с данным протоколом обмена и с его особенностями.16394
Читать нужно PLC_Configuration_OWEN.pdf" http://www.owen.ru/uploads/plc_configuration_owen__.pdf
Вам нужно создать в конфигурации Modbus Мастер, в нем UMD, а в UMD создать Real input module с регистром № 1004 и командой Read input registers (0x04). Обозвать переменную в этом Real input module приемлемым именем и использовать в любом месте программы.

artem39_rus
27.01.2015, 13:15
Читать нужно PLC_Configuration_OWEN.pdf" http://www.owen.ru/uploads/plc_configuration_owen__.pdf
Вам нужно создать в конфигурации Modbus Мастер, в нем UMD, а в UMD создать Real input module с регистром № 1004 и командой Read input registers (0x04). Обозвать переменную в этом Real input module приемлемым именем и использовать в любом месте программы.

Сделал все так, показывает 0.
и пишет код ошибки 81-превышен тайм-аут ожидания ответа.
Не пойму нифига.16396
А почему модбас мастер?у меня ведь датчик не мастер, а слейв.
Я изначально пробовал слейв и у меня получилось вывести переменную и она показывала значение давления.

capzap
27.01.2015, 13:24
на скрине документа указано что изготовителем установлен адрес 118, а не 18

artem39_rus
27.01.2015, 13:28
на скрине документа указано что изготовителем установлен адрес 118, а не 18

это не к этому датчику,у этого на корпусе прописано 18

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

capzap
27.01.2015, 14:29
ну, это проект должен быть для плк150U, устанвите таргет для этого плк, ссылку где найти установщики Вам предоставлялась Егором

Newcomer
27.01.2015, 14:40
ну, это проект должен быть для плк150U, устанвите таргет для этого плк, ссылку где найти установщики Вам предоставлялась Егором
А вам удалось открыть этот проект ? Откуда видно, что проект сделан для ПЛК150U ?

capzap
27.01.2015, 14:52
да открыл, но конфигурация будет потеряна
Я непонимаю одного, что Вы так беспокоитесь о двух переменных в модбас слейве, чем ждать ответов на форуме давно бы у же по новой проект создали

Newcomer
27.01.2015, 14:56
да открыл, но конфигурация будет потеряна
Я непонимаю одного, что Вы так беспокоитесь о двух переменных в модбас слейве, чем ждать ответов на форуме давно бы у же по новой проект
создали
С потерей конфигурации и я открыл. Так что надо сделать что бы конфигурация не была потеряна. В этом собственно и проблема. Вопрос принципиальный. Иной проект может быть очень большим, и что тогда делать ?

capzap
27.01.2015, 15:04
просто так проекты не теряют конфигурацию, значит Вы что то своими руками натворили и потом еще и сохранили
а что делать, периодически делайте экспорт всего проекта

Newcomer
27.01.2015, 15:06
просто так проекты не теряют конфигурацию, значит Вы что то своими руками натворили и потом еще и сохранили
а что делать, периодически делайте экспорт всего проекта
Это не мой проект. Я так понял, что перед сохранением проект был подпорчен.

capzap
27.01.2015, 15:11
проект не возможно подпортить, просто у кое кого не установлены требуемые таргеты, он открывает проект, а потом сохраняет, в результате конфигурация теряется

Newcomer
27.01.2015, 15:29
проект не возможно подпортить, просто у кое кого не установлены требуемые таргеты, он открывает проект, а потом сохраняет, в результате конфигурация теряется
Некорректные действия и привели к порче проекта.

Эдуард_Н
27.01.2015, 16:14
Нужна помощь всю голову сломал. Есть две уставки к примеру 6 и 15 на входе блока, на выходе нужно получить перебор цифр от 6 к 15 и обратно. Желательно с установкой скорости перебора, отдельно на возрастание и уменьшение выходного значения. И с возможностью выбора с чего будет начинаться работа, с верху в низ или с низу в верх. Всё в CFC.
Наверно надо использовать счётчик "CTUD" ?

CleanS
27.01.2015, 18:14
Нужна помощь всю голову сломал. Есть две уставки к примеру 6 и 15 на входе блока, на выходе нужно получить перебор цифр от 6 к 15 и обратно. Желательно с установкой скорости перебора, отдельно на возрастание и уменьшение выходного значения. И с возможностью выбора с чего будет начинаться работа, с верху в низ или с низу в верх. Всё в CFC.
Наверно надо использовать счётчик "CTUD" ?

Посмотри вот в этом сообщении (http://www.owen.ru/forum/showthread.php?t=10555&p=158462&viewfull=1#post158462) и ниже. Мне нужно было вычитание каждую секунду делать. Спасибо ребятам, подсказали.

В твоём случае тебе надо в зависимости от выбора или прибавлять к 6 по 1 со какой-то скоростью (вот тебе и регулировка), пока не будет 15 или отнимать от 15 по 1, пока не станет 6. Как я понимаю нужны операторы сложения, вычитания и сравнения .... + ещё кой-чего в обвязке...

CleanS
27.01.2015, 18:45
Вот, посмотри.
Верхняя схема вычитание, нижняя сложение. Тебе нужно переключатель выбора сделать и обработку параметра импульса для управления скоростью ...

16404

Эдуард_Н
27.01.2015, 19:43
Спасибо, попробую.

Эдуард_Н
27.01.2015, 20:26
У меня вот, что получилось.

Василий Кашуба
27.01.2015, 21:26
У меня вот, что получилось.
А можно один TON, а выход через элементы "И" на STUD.

Эдуард_Н
28.01.2015, 03:25
А можно один TON, а выход через элементы "И" на STUD.

Можно, а если нужно разное время? Переключатель ставить? Этот блок должен управлять скоростью через ПЧВ насосом фонтана. Я даже толком не представляю, что в алгоритме должно быть.
Работы нет, вот и приходится всяким другим заниматься.:p

Валенок
28.01.2015, 10:30
to
Эдуард_Н

если Вам нужные просто переходы с одной точки на другую - посмотрите на ramp_int (util)
var
ramp : ramp_int := (ascend:=1,descend:=1);
..
ramp(timebase:=нужный_период, in:=новая_цель, out=>ваш_out);

Эдуард_Н
28.01.2015, 12:25
to
Эдуард_Н

если Вам нужные просто переходы с одной точки на другую - посмотрите на ramp_int (util)
var
ramp : ramp_int := (ascend:=1,descend:=1);
..
ramp(timebase:=нужный_период, in:=новая_цель, out=>ваш_out);

Спасибо, но это маленько не то. Хотя....Всё может быть.

илья илья илья
28.01.2015, 14:18
всем здрасте, почему у меня так выходит 16411

melky
28.01.2015, 14:30
илья илья илья потому что так работает исключающее ИЛИ, вам надо что-то другое ?

илья илья илья
28.01.2015, 15:04
но ,она вроде как должна активировать выход при одном активном входе , причем когда два входа работает корректно а с тремя уже нет(

melky
28.01.2015, 15:17
илья илья илья не так. расположите по 2 входа с заведением на 1-й вход следующего.
Или найдите таблицы XOR для нескольких входов.

Вот тоже самое.

илья илья илья
28.01.2015, 15:21
( досадно , понятно, не понятно только для чего возможность добавить входы есть, видимо от других простых функций подобное можно ожидать

melky
28.01.2015, 15:27
Неа, говорю же, таблицу xor найдите на большее количество входов, но принцип тот же самый, просто несколько входов проще нарисовать, чем делать гирлянду. А иногда гирлянда удобнее, вот и все.

Прото вы чего ожидали то получить ? описать можете ? может вам And-Not нужен например или еще что.

илья илья илья
28.01.2015, 15:40
с гирляндами я управляюсь), описание блоков пойду читать там думаю найду , пока по названиям не очень ориентируюсь сижу с записками )) кто зачем

Валенок
28.01.2015, 17:06
но ,она вроде как должна активировать выход при одном активном входе
Чушь.
xor дает TRUE когда только один вход отличается от всех других
Знаки входов не имеют значения.

melky
28.01.2015, 17:36
Да ну на ?

Внимание: Допускается расширяемая форма, т.е. XOR имеет более двух входов. В этом случае входы обрабатываются попарно, затем к результатам опять применяется XOR. Такой алгоритм определен стандартом.

Из справки CDS

Валенок
28.01.2015, 17:49
Не ну так есть. Я накосячил. Более точная трактовка. После проверки ессно ))

xor дает TRUE при нечетной сумме единиц на входе.
Разбивка в гирлянду как угодно не имеет -значения.


PS
Мои предыдущие утверждения - рез-т хождения во тьмах )))

melky
28.01.2015, 17:57
Валенок, так ведь указано проверка попарно, а не сразу по всем входам. И какая разница сколько входов ?
На скрине выше четное количество входов, но true там нет на выходе, а 1 четное количество.

Скорее всегда true на выходе, когда нечетное количество 1 при любом количество входов. Изменение любого входа меняет состояние выхода.

Валенок
28.01.2015, 18:26
Видимо пока Вы писали ответ - я свой немного отредактировал.

true на выходе, когда нечетное количество 1 при любом количество входов.
и Вы тоже пришли к этому выводу как я выше.

Теорема Melky-Валенка. Или Валенка-melky. Если, конечно, не подрезали ранее )))

Yegor
28.01.2015, 21:24
Я хз насчёт пар в стандарте. Там есть вот что:

16428

Типичный парсер в случае правоассоциативного синтаксиса строит деревья (https://www.google.ru/search?q=ast+expression+tree&tbm=isch) вот так: q1 XOR (q2 XOR (q3 XOR q4))
Отсюда:
TRUE XOR (TRUE XOR (TRUE XOR FALSE)) =
TRUE XOR (TRUE XOR TRUE) =
TRUE XOR FALSE =
TRUEВ случае левоассоциативного синтаксиса: ((q1 XOR q2) XOR q3) XOR q4. Результат тот же, ибо коммутативность.

Гораздо проще было написать то же самое в документации, нежели пытаться что-то объяснять в попарных терминах.

melky
28.01.2015, 23:31
Yegor так в приведенной табличке и указано, что ксорится каждая пара.
in1 xor in2 xor in3 xor .... inN, так что все правильно, ксор идет сразу значение за значением последовательно.

Yegor
29.01.2015, 02:08
Какая каждая? Выделите мне пары в выражении q1 xor q2 xor q3, пожалуйста, а то я так и не усну.

melky
29.01.2015, 13:57
Yegor q1 и q2, потом результат с q3, потом результат с q4 и так далее.

Dimooon
29.01.2015, 14:10
В программе сравниваю LT (меньше) и надо по отключению командного входа на этом операторе устанавливать булевый выход в фалс. И не получается. Только сбросом плк. Как можно сделать?

Yegor
29.01.2015, 14:42
q1 и q2, потом результат с q3, потом результат с q4 и так далее.Это какая-то очень альтернативная терминология, на мой взгляд. Есть оператор, у него два операнда. Мы их парой называть будем в изоляции от остального? Странно. Вот пары: (q1 XOR q2) XOR (q3 XOR q4). И это можно вычислить попарно. Одну пару попарно нельзя вычислить.
Только сбросом плк. Как можно сделать?Покажите свой код.

capzap
29.01.2015, 14:42
В программе сравниваю LT (меньше) и надо по отключению командного входа на этом операторе устанавливать булевый выход в фалс. И не получается. Только сбросом плк. Как можно сделать?а что, элемент AND для этого не подойдет?

Dimooon
29.01.2015, 15:34
Подошел. Наполовину. Пришлось схему усложнять... Хотя она и без того уже сложная из-за таких вот фишек...

Валенок
29.01.2015, 16:21
В программе сравниваю LT (меньше) и надо по отключению командного входа на этом операторе устанавливать булевый выход в фалс.
Серъёзная формулировка.
В смысле когда EN.LT = false, нужно сделать LT.Выход false ?


. Только сбросом плк.
Серъёзное решение. Универсальное.

capzap
29.01.2015, 16:29
Подошел. Наполовину. Пришлось схему усложнять... Хотя она и без того уже сложная из-за таких вот фишек...
ну если эти фишки одно и тоже только в разных местах, то сделайте из этих елементов функцию и вставлять придется только один элемент

Валенок
29.01.2015, 16:30
Мы их парой называть будем в изоляции от остального? .
Может имеется ввиду что любым операндом может быть результат других операций ?

capzap
29.01.2015, 16:36
Это какая-то очень альтернативная терминология, на мой взгляд. Есть оператор, у него два операнда. Мы их парой называть будем в изоляции от остального? Странно. Вот пары: (q1 XOR q2) XOR (q3 XOR q4). И это можно вычислить попарно. Одну пару попарно нельзя вычислить.Покажите свой код.

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

Dimooon
30.01.2015, 18:37
Уважаемый Капзап,подскажите, где я могу прочитать про функции и как их использовать в практике на CFC. С учетом, что я не программмист, а электрик с пониманием релейной логики, не больше. Иногда туплю в элементарных вещах. Недостаток образования в лихие девяностые сказывается. Обязуюсь исправиться. Кстати, пытался использовать XOR - на мой взглд абсолютно непрактичная хрень. Алгоритм моей задачи- забиваем вес, которого нужно достичь, включаем пуск- открывается клапан- вода пошла. Колебания жидкости в баке и напор струи вызывают погрешности на весах. Поэтому я ввожу процент, сколько недолить. Достигнув этого значения клапан закрывается, включается таймер на успокоение жидкости в баке. Затем, с учетом, что открытый клапан пропускает литр в секунду, таймер TP открывается на тот период, сколько надо долить. Егор, прости, тему твою перебиваю, но не знаю, куда свой вопрос запихать- надо очень. Семья жрать просит.

Dimooon
30.01.2015, 19:47
А проблема в том, что клапан электромеханический, я пошагово прогу смортю- и понимаю, что будет врать.

alex55
30.01.2015, 20:15
У нас в сельском хозяйстве поступают проще--ВОПРОС1:В эту емкость наливается одна и таже жидкость? (плотность и дрожание емкости прочее ха-рки), ели ответ да--то эту коррекцию на высоту падающего столба определяю эксперементально и делаю упреждение. Если нет-- если продуктов несколько для каждого вида определяется эта погрешность и соответсвенно вносится в программу. У нас сыпучие продукты (зерно отруби итд) при работе 3 питателей в одну емкость удается добиться точности+- 0,5кг на тонну смеси, что устраивает заказчика (этот метод весового дозирования используется давно).УЧЕТ ВЕСА ПРИ ЗТОМ ВЕДЕТСЯ С НАРАСТАЮЩИМ ИТОГОМ, тогда и сбрасывать не придется.. Ну а если такая точность не устраивает да и вообще я на жидкости не пробовал.. при подходе к уставке веса 10-15 процентов клапан прикрыть, чтобы погрешность была меньше на тонкой струйке..Вообщем надо использовать девиз не искать спасение в коде программы, а понять структуру и физику работы системы, а потом уже применять посильные познания в прграммировании и пытаться реализовать--совет электрику:) Правда прогу писал на великом и могучем st с помощью 2-3х операторов.

capzap
30.01.2015, 22:46
Уважаемый Капзап,подскажите, где я могу прочитать про функции и как их использовать в практике на CFC. С учетом, что я не программмист, а электрик с пониманием релейной логики, не больше. Иногда туплю в элементарных вещах. Недостаток образования в лихие девяностые сказывается. Обязуюсь исправиться. Кстати, пытался использовать XOR - на мой взглд абсолютно непрактичная хрень. Алгоритм моей задачи- забиваем вес, которого нужно достичь, включаем пуск- открывается клапан- вода пошла. Колебания жидкости в баке и напор струи вызывают погрешности на весах. Поэтому я ввожу процент, сколько недолить. Достигнув этого значения клапан закрывается, включается таймер на успокоение жидкости в баке. Затем, с учетом, что открытый клапан пропускает литр в секунду, таймер TP открывается на тот период, сколько надо долить. Егор, прости, тему твою перебиваю, но не знаю, куда свой вопрос запихать- надо очень. Семья жрать просит.не совсем представляю схему установки в целом, если это тензо-весы, то на табло всегда должен имется стабильный ноль, по которому судят можно верить показаниям или нет, но никогда не слышал что по весам осуществляют дозирование, для этого надо приобретать счетчик, семен или ендрюс имеют на борту функции дозирования, т.е задали объем/массу и по ней релейный вход управляет клапаном, а программные штучки тут не пройдут, можно и не учиться :)

RV9WFJ
31.01.2015, 07:09
А я вот делал дозирование воды на тензо. Заказчик просто пожопил на нормальный счетчик. Да и на частотник тоже. И то 100 литров дозирует за 5 сек с точностью 100 гр. Надо просто в коде учитывать время измерения значения с тензомодуля и все остальное время не смотреть на старое значение веса, а апроксимировать исходя из предыдущего замера на каждый цикл ПЛК + додозировка и учет веса в полете естественно. Таким образом и воду и сухие дозирую. В зависимости от требовпний ко времени дозирования и качества механики получается до 0.01% точность получить.

capzap
31.01.2015, 07:47
не поверю, у Вас 100гр проходит за 5мс, тут уже с точностью не срастается и второй вопрос еуда струя бьет что весы точные показания выдают

илья илья илья
31.01.2015, 08:23
Господа ! макрос написал , библиотеку макросов завел а как поместить макрос в нее не как не пойму(

Вольд
31.01.2015, 13:45
не совсем представляю схему установки в целом, если это тензо-весы, то на табло всегда должен имется стабильный ноль, по которому судят можно верить показаниям или нет, но никогда не слышал что по весам осуществляют дозирование, для этого надо приобретать счетчик, семен или ендрюс имеют на борту функции дозирования, т.е задали объем/массу и по ней релейный вход управляет клапаном, а программные штучки тут не пройдут, можно и не учиться :)
capzap, что ты такое пишешь ? Мы на не богатом западе живем. Они там с жиру бесятся.


А я вот делал дозирование воды на тензо. Заказчик просто пожопил на нормальный счетчик. Да и на частотник тоже. И то 100 литров дозирует за 5 сек с точностью 100 гр. Надо просто в коде учитывать время измерения значения с тензомодуля и все остальное время не смотреть на старое значение веса, а апроксиммировать исходя из предыдущего замера на каждый цикл ПЛК + додозировка и учет веса в полете естественно. Таким образом и воду и сухие дозирую. В зависимости от требований ко времени дозирования и качества механики получается до 0.01% точность получить.
Вот RV9WFJ дельные советы дает.

petera
31.01.2015, 21:21
Господа ! макрос написал , библиотеку макросов завел а как поместить макрос в нее не как не пойму(
А каких макросах идет речь если о тех, что в CFC, то какая может быть библиотека макросов? Здесь понятие библиотека макросов неуместна, нужно не библиотеку макросов делать, а делать нормальные ФБ.
Если макрос, как подсистема пакетного выполнения команд кодесиса, то читать в справке
16501 16502

илья илья илья
01.02.2015, 09:37
Вы правы работаю в CFC , тогда не понятно как гирлянду свернуть в ФБ если это не макрос ?

ASo
01.02.2015, 09:44
Обычный POU типа функция или функциональный блок.

илья илья илья
01.02.2015, 11:42
рахмат , вроде вышло )

cerceli
02.02.2015, 10:28
Как вытащить данные с панели ИП320?

Валенок
02.02.2015, 10:37
Данные ? По RS. Или, глядючи, на бумажку записать

cerceli
03.02.2015, 11:03
Программу залитую необходимо вытащить,исходник утерян благодаря вирусной активности.

cerceli
03.02.2015, 11:09
Проблемка еще такая с сп270. 04,03 это функции чтения, 06-записи, так вот в конфигураторе сп200 присутствуют лишь память панельки, 03,04. 06-отсутствует.Как выполнить запись с панели на стороннее устройство с адресом 11 регистр 1001. Планирую управлять без плк

petera
03.02.2015, 11:52
Как выполнить запись с панели на стороннее устройство с адресом 11 регистр 1001.Планирую управлять без плк
Тогда причем здесь среда программирования CoDeSys v2? Вопрос нужно задавать, например, здесь "сп270 для чайников" http://www.owen.ru/forum/showthread.php?t=8604

Проблемка еще такая с сп270. 04,03 это функции чтения, 06-записи, так вот в конфигураторе сп200 присутствуют лишь память панельки, 03,04. 06-отсутствует.
Глупости:rolleyes:. Все там есть. Не нужно путать ссылки на области регистров Modbus(3х, 4х) с командами 03, 04, 06.
http://www.owen.ru/forum/attachment.php?attachmentid=12621&d=1397777586
Нужные команды панель выберет сама, в зависимость от ссылки, числа регистров и типа операции(чтение или запись)
16545
Команда будет 06(0х06)
16546
А здесь команда будет 16(0х10)

kvr15
03.02.2015, 12:23
Программу залитую необходимо вытащить,исходник утерян благодаря вирусной активности.

Похоже что никак.:(

kvr15
03.02.2015, 13:14
Объясните поподробней про настройку переменных
какие команды для чего и на простом примере как ими пользоваться
16548
16549
16550

petera
03.02.2015, 14:59
Объясните поподробней про настройку переменных
какие команды для чего и на простом примере как ими пользоваться
16548
16549
16550
Зависит от распределения регистров и бит в адресном пространстве подчиненного устройства(Slave) https://sites.google.com/site/fieldbusbook/seti/modbus/modbuseducation.
Всего предусмотрены четыре области
-Discrete Inputs, биты только чтение
-Coils, биты чтение и запись
-Input Registers, регистры только чтение
-Holding Registers, регистры чтение и запись.
Для каждой области нужны свои команды. Какие команды нужны для этих областей см. на картинке выше.
В общем случае эти четыре области расположены независимо друг от друга, в разных физических областях памяти. Но могут быть и варианты, например все области совпадают, т.е. накладываются на общее адресное пространство, так сделано в ПЛК ОВЕН. В этом случае не имеет значения какую команду выбирать для Register input module 0х04 или 0х03, обе будут правильными. То же относится и к 8 bit input module 0х01 и 0х02 будут правильными.
Так что заранее однозначно сказать нельзя, нужно смотреть карту распределения регистров конкретного устройства и какие команды оно поддерживает. По этому никаких простых примеров привести нельзя.

kvr15
03.02.2015, 16:58
Зависит от распределения регистров и бит в адресном пространстве подчиненного устройства(Slave) https://sites.google.com/site/fieldbusbook/seti/modbus/modbuseducation.
Всего предусмотрены четыре области
-Discrete Inputs, биты только чтение
-Coils, биты чтение и запись
-Input Registers, регистры только чтение
-Holding Registers, регистры чтение и запись.
Для каждой области нужны свои команды. Какие команды нужны для этих областей см. на картинке выше.
В общем случае эти четыре области расположены независимо друг от друга, в разных физических областях памяти. Но могут быть и варианты, например все области совпадают, т.е. накладываются на общее адресное пространство, так сделано в ПЛК ОВЕН. В этом случае не имеет значения какую команду выбирать для Register input module 0х04 или 0х03, обе будут правильными. То же относится и к 8 bit input module 0х01 и 0х02 будут правильными.
Так что заранее однозначно сказать нельзя, нужно смотреть карту распределения регистров конкретного устройства и какие команды оно поддерживает. По этому никаких простых примеров привести нельзя.

т.е. мне чтобы и читать с ПЛК и записывать в ПЛК данную переменную можно выбрать любую команду?

petera
03.02.2015, 19:06
т.е. мне чтобы и читать с ПЛК и записывать в ПЛК данную переменную можно выбрать любую команду?
Если оба ПЛК ОВЕН, то да. Только для Register output module в этом случае нет смысла использовать команду 0х10(Write multiple registers) т.к. модуль-то на один регистр, а не на несколько.

kvr15
04.02.2015, 09:34
Если оба ПЛК ОВЕН, то да. Только для Register output module в этом случае нет смысла использовать команду 0х10(Write multiple registers) т.к. модуль-то на один регистр, а не на несколько.

Спасибо,буду практиковаться)

Insmzk
04.02.2015, 13:14
Здравствуйте, подскажите пожалуйста, пишу программу для водоотлива(Мой первый опыт. Пишу на ST) откачка по уровню. Хочу спросить как можно реализовать проверку реле протока в течении 60 сек. Т.е в течении 60 сек смотреть пришел ли сигнал или нет, если пришел то все хорошо, а если нет то авария.

Василий Кашуба
04.02.2015, 14:00
Здравствуйте, подскажите пожалуйста, пишу программу для водоотлива(Мой первый опыт. Пишу на ST) откачка по уровню. Хочу спросить как можно реализовать проверку реле протока в течении 60 сек. Т.е в течении 60 сек смотреть пришел ли сигнал или нет, если пришел то все хорошо, а если нет то авария.
С ST не дружу, а в CFC как то так. 16573

Postoronniy
04.02.2015, 16:59
Подскажите, пожалуйста, как сделать что бы некоторые биты сбрасывались в случае отключения питания. У меня сейчас получается что некоторые устройства начинают работать сразу после включения питания, если питание было включено при их работе.

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

drvlas
04.02.2015, 23:27
Никак не могу понять, как получить из структуры SystemTimeDate (библиотека SysLibTime.lib) время в формате POSIX (это которое в секундах от 1970-01-01-00:00:00).

У меня работает ФБ CurTimeEx из этой библиотеки. В нем мирно сосуществуют 64-битное системное время (с разрешающей способностью 1 мкс) и структура ГОД-МЕСЯЦ- и т.д.
Эту структуру я инициализирую, она отсчитывает правильное время и дату, когда нужно - я подрихтовую. Все окей. Имею дату и время.
А 64-битное системное время живет своей жизнью, сбрасываясь в ноль по ресету и не изменяясь при моих манипуляциях со структурой ГОД-МЕСЯЦ- и т.д.
Значит использовать 64-битную структуру для получения POSIX-времени я не могу. А должен как-то из нескольких UINT переменных ГОД, МЕСЯЦ и т.д. посчитать, сколько же секунд отделяет данный временной штамп от 1 января 1970 года.
Неужто действительно считать придется? Не верю... Должна быть какая-то функция преобразования.

myPOSIXtime: DWORD;
mySTD: SystemTimeDate;
...
myPOSIXtime := ФУНКЦИЯ(mySTD);

Или?

Дополнено: поигрался с RTC из Standard.Lib. там кагбэ должно было легко получиться

myPOSIXtime := DT_TO_DWORD( myRTC.CDT);

Однако сам ФБ RTC заставить работать у меня не получилось. Инициализируется, на входе EN даю TRUE, а время застыло...

petera
05.02.2015, 04:25
Никак не могу понять, как получить из структуры SystemTimeDate (библиотека SysLibTime.lib) время в формате POSIX (это которое в секундах от 1970-01-01-00:00:00).

У меня работает ФБ CurTimeEx из этой библиотеки. В нем мирно сосуществуют 64-битное системное время (с разрешающей способностью 1 мкс) и структура ГОД-МЕСЯЦ- и т.д.
Эту структуру я инициализирую, она отсчитывает правильное время и дату, когда нужно - я подрихтовую. Все окей. Имею дату и время.
А 64-битное системное время живет своей жизнью, сбрасываясь в ноль по ресету и не изменяясь при моих манипуляциях со структурой ГОД-МЕСЯЦ- и т.д.
Значит использовать 64-битную структуру для получения POSIX-времени я не могу. А должен как-то из нескольких UINT переменных ГОД, МЕСЯЦ и т.д. посчитать, сколько же секунд отделяет данный временной штамп от 1 января 1970 года.
Неужто действительно считать придется? Не верю... Должна быть какая-то функция преобразования.

myPOSIXtime: DWORD;
mySTD: SystemTimeDate;
...
myPOSIXtime := ФУНКЦИЯ(mySTD);

Или?

Дополнено: поигрался с RTC из Standard.Lib. там кагбэ должно было легко получиться

myPOSIXtime := DT_TO_DWORD( myRTC.CDT);

Однако сам ФБ RTC заставить работать у меня не получилось. Инициализируется, на входе EN даю TRUE, а время застыло...
Есть хорошая статья Игоря Петрова «Программируем временные сложности» (http://prolog-plc.ru/docs/TimeExperience.pdf)

Если функциональный блок RTC не реализован в вашей системе программирования, его не сложно построить самостоятельно

FUNCTION_BLOCK fbRTC
VAR_INPUT
EN:BOOL;
PDT:DT;
END_VAR
VAR_OUTPUT
Q:BOOL;
CDT:DT;
POSIX:DWORD; (*добавил в оригинальный ФБ*)
END_VAR
VAR
DiffTime:TON:=(PT:=t#20h);
ResDT:DT;
RunTrig:R_TRIG;
END_VAR

RunTrig(CLK:=EN);
IF EN THEN
IF RunTrig.Q THEN (*рестарт часов*)
ResDT:=PDT; (*начало отсчета*)
DiffTime(IN:=FALSE);(*рестарт таймера*)
DiffTime(IN:=TRUE);
ELSE (*норм.режим CDT=DT рестарт+таймер*)
DiffTime;
CDT:=DWORD_TO_DT(DT_TO_DWORD(ResDT)
+TIME_TO_DWORD(DiffTime.ET)/1000);
IF DiffTime.ET>t#1h THEN
(*рестарт таймера каждый час для предотвращения его переполнения*)
ResDT:=CDT; (*начало отсчета*)
DiffTime(IN:=FALSE);(*рестарт таймера*)
DiffTime(IN:=TRUE);
END_IF
END_IF
END_IF
Q:=EN;

POSIX:=DT_TO_DWORD(CDT);(*добавил в оригинальный ФБ*)
Добавил нужный Вам дополнительный выход.
Это RTC работает и в эмуляции.

К стати И. Петров

В живых ПЛК могут быть /могут не быть/ аппаратные часы реального времени. Читаются они обычно через би-бку SysLibTime или подобную. См. мануал на ПЛК. Часто сама операция чтения аппаратных часов довольно медленная. Поэтому рекомендуется считать их 1 раз. Полученным значением проинициализировать RTC и далее с ним работать.
В любом случае RTC нужно инициализировать при включении ПЛК, по этому, я думаю, что в первом цикле ПЛК нужно только один раз вызывать SystemTimeDate и там же, полученными значениями, инициализировать RTC.

ЗЫ. Я думаю, что Вам понадобится функция для преобразования текущей даты и времени из структуры SystemTimeDate в формат DT. На этот случай функция из OSCAT

FUNCTION SET_DT : DT
VAR_INPUT
year : INT;
month : INT;
day : INT;
hour : INT;
minute : INT;
second : INT;
END_VAR

SET_DT := DWORD_TO_DT(DATE_TO_DWORD(SET_DATE(YEAR, MONTH, day))
+ INT_TO_DWORD(SECOND) + INT_TO_DWORD(MINUTE) * 60
+ INT_TO_DWORD(HOUR) * 3600);
И используемая здесь SET_DATE()

FUNCTION SET_DATE : DATE
VAR_INPUT
YEAR : INT;
MONTH : INT;
DAY : INT;
END_VAR
VAR
count : INT;
END_VAR


IF month > 2 THEN
count := (month - 1) * 30;
IF month > 7 THEN count := count + SHR(month - 3,1);
ELSE count := count + SHR(month - 4,1); END_IF;
(* chech for leap year and add one day if true *)
IF SHL(year,14) = 0 THEN count := count + 1; END_IF;
ELSE
count := (month - 1) * 31;
END_IF;


SET_DATE := DWORD_TO_DATE((INT_TO_DWORD(count + day - 1)
+ SHR(INT_TO_DWORD(year) * 1461 - 2878169, 2)) * 86400);

Insmzk
05.02.2015, 05:49
С ST не дружу, а в CFC как то так. 16573

Спасибо, попробую.

drvlas
05.02.2015, 16:46
Есть хорошая статья Игоря Петрова
Кто ж не знает Петрова :)
Статью читал. Но думал - раз есть штатная функция RTC в стандартной либе, то чего уж тут выдумывать (я и так склонен изобретать лисапед). Вопрос был лишь в том, что почему-то у меня в этом ФБ не течет время...
Ну, попробую самописный ФБ. Не вижу причины ему не работать. Хотя остается вопрос: что же я не так делаю со штатным...


В любом случае RTC нужно инициализировать при включении ПЛК, по этому, я думаю, что в первом цикле ПЛК нужно только один раз вызывать SystemTimeDate и там же, полученными значениями, инициализировать RTC.Ну да, так и думалось, если реально текущее время в SystemTimeDate не получится прямо преобразовывать во время POSIX.
А вот это:

Я думаю, что Вам понадобится функция для преобразования текущей даты и времени из структуры SystemTimeDate в формат DT...как раз те вычисления, которых я хотел избежать. За пример спасибо, я бы сделал иначе (думал создать таблицу месяцев с нарастающим итогом дней от начала года), но... блин... неужто никому из создателей и пользователей КДС не было нужно получить POSIX time? Я что, первоснегопроходимец? :)

petera
05.02.2015, 19:07
Кто ж не знает Петрова :)
Статью читал. Но думал - раз есть штатная функция RTC в стандартной либе, то чего уж тут выдумывать (я и так склонен изобретать лисапед). Вопрос был лишь в том, что почему-то у меня в этом ФБ не течет время...
Ну, попробую самописный ФБ. Не вижу причины ему не работать. Хотя остается вопрос: что же я не так делаю со штатным...
Глядя на это
16596
Могу предположить, что поддержка этой функции должна быть реализована в прошивке ПЛК, т.к. в место кода есть только интерфейс функции. Значит в ПЛК ОВЕН такой функции нет.

drvlas
05.02.2015, 19:15
Значит в ПЛК ОВЕН такой функции нет.Не понимаю, но верю.
По сути, Вы дали мне 2 варианта. Первый - организовать свой ФБ RTC, второй - вытащить таки из системных часиков (а они таки есть и хорошо себя чувствуют) POSIX-время из года, месяца и проч.
По варианту 1. Я не знаю, какими аппаратными средствами обеспечивается точность хода генераторов импульсов ФБ TON. Поэтому не очень хочу лепить свой RTC.
Поэтому попробую сначала вариант 2 - пересчет.
Спасибо!

capzap
05.02.2015, 19:32
Не понимаю, но верю.
По сути, Вы дали мне 2 варианта. Первый - организовать свой ФБ RTC, второй - вытащить таки из системных часиков (а они таки есть и хорошо себя чувствуют) POSIX-время из года, месяца и проч.
По варианту 1. Я не знаю, какими аппаратными средствами обеспечивается точность хода генераторов импульсов ФБ TON. Поэтому не очень хочу лепить свой RTC.
Поэтому попробую сначала вариант 2 - пересчет.
Спасибо!это Вы под действием "розовых" очков, снимите их, внутренние часы не отличаются приемлимой точностью, Вас скоро начнет заботить больше как их синхронизировать, а не как из них что то вытащить

drvlas
05.02.2015, 19:58
внутренние часы не отличаются приемлимой точностью, Вас скоро начнет заботить больше как их синхронизировать, а не как из них что то вытащитьДа ну, коллега, это ж зависит от задачи. Совершенно нестабилизированный кварц дает точность, достаточную для меня (журналирование работы ПЛК, как Вы уже догадались). Кроме того, у меня всегда была возможность через ИП320 скорректировать уход, если оператор уже видит слишком большие разбежки.
А вот как вытащить - как раз и расспрашиваю. В данной ветке, потому что думал: есть совершенно элементарная функция, которую не знают только новички.

Другое дело: а Вы в курсе, как отмеряется время в TON? Он опирается на системные часики?

drvlas
05.02.2015, 20:28
Поэтому попробую сначала вариант 2 - пересчетФигасе... Интересная штука получается.
С одной стороны, вариант с пересчетом по той ОСКАТовской функции - работает. Я пока что даже не стал писать свой код, главное проверить принцип.
Ну, проверил. Получаю время в формате POSIX, т.е. в секундах от 1970 года. И вродь правильно (ну, порядок то, я прикидывал, скокак должно быть). А дай-ка, думаю, взгляну на "сотворение света"! Интересно жа...
Задаю в инициализации 1970 год, время - ясно какое, когда кто шампань пьет, кто уже и под столом лежит, да... И что? ФБ CurTimeEx, выполняющий у нас роль RTC, не принимает эту дату. Легко установил, что этот ФБ не принимает дату с годом менее 2000.
Я понимаю, Y2K problem и все такое... Но странно.

Ладно, для меня это несущественно. Вопрос закрыт.

rovki
05.02.2015, 20:28
Навряд ли ,скорее по прерыванию от внутреннего таймера (про ТОН)

capzap
05.02.2015, 20:51
А вот как вытащить - как раз и расспрашиваю.

http://www.owen.ru/forum/showthread.php?t=20449&p=160991&viewfull=1#post160991 эта бибка тоже работает с часами

drvlas
05.02.2015, 20:56
эта бибка тоже работает с часамиЕсли ты о SysLibTime, то я ее и использую. В ней есть структура, в которой развернуто представлены и дата, и время. Преобразование их в POSIX time - это и есть суть моего вопроса.
Тот пример я не понял как найти. У меня его не видно.

capzap
05.02.2015, 21:00
Если ты о SysLibTime, то я ее и использую. В ней есть структура, в которой развернуто представлены и дата, и время. Преобразование их в POSIX time - это и есть суть моего вопроса.
Тот пример я не понял как найти. У меня его не видно.пример это с диска Навигатор дивидишный

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

rovki
05.02.2015, 22:25
А можно секундные импульсы генератора подать на счетчик ....код на выходе которого будет показывать время в секундах от начала события ...(генератор включать через триггерок)

capzap
05.02.2015, 22:29
А можно секундные импульсы генератора подать на счетчик ....код на выходе которого будет показывать время в секундах от начала события ...(генератор включать через триггерок)в плк это не обязательно, для ето есть функция TIME()