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

lecsa
23.02.2017, 11:55
Спасибо. С праздничком! :)

lecsa
23.02.2017, 15:57
lecsa для начала открыть документацию на ПЛК, а то может на выход надо подавать не 4-20 а 0-1.....

Наверное так?

Аналоговое управление осуществляется по прямо-пропорциональному закону (т.е. 4 мА или 0 В соответствует входному сигналу, равному 0, а 20 мА или 10 В соответствует входному сигналу, равному 1).

lecsa
28.02.2017, 12:43
Приветствую. Это опять я со своими тупыми вопросами :)

Все тот же ПЛК73м. Не могу понять как реализовать следующее, вернее реализовано все кроме 3го абзаца.
Кратко: Уставка (sp1) температуры в ПИД. Изменение уставки с панели (Sub_menu - Float - sp1 - тип "конфигурационный") По умолчанию "0". При вводе кнопками уставки, ПЛК запоминает ее значение при выключении питания. Тут все нормально. И как я понимаю, в этом случае sp1 является глобальной,так как обьявлена в sub_menu, правильно?

Далее, для познания не опознанного, сделал визуализацию, для более комфортного настраивания ПИД. Визуализация записывает переменные в плк в он-лайн режиме, допустим ту же уставку sp1, все отлично, но плк не запоминает ее при выключении.

Проба обьявить sp1 VAR_GLOBAL_RETAIN_PERSISTENT увенчалась конфликтом с глобальной sp1 .
Как правильно сделать. Я еще не силен чтоб самому додуматься. Если можно строчку кода или ссылку на пример или просто немного разжевать.

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

Файлик с проектом прилагаю.

lecsa
01.03.2017, 11:24
Все вопрос снимается. В конфигурацию через кодесис записать значение переменной НЕЛЬЗЯ.

Конфигурационные пользовательские параметры – значение этих парамет-ров считывается из EEPROM при запуске контроллера. Конфигурационные пользова-тельские параметры доступны для редактирования с передней панели и для чте-ния / записи по сети (при условии установленных атрибутов).
Введенные в ПО CoDeSys (в окне режима «Конфигурация ПЛК (PLC Configuration)») новые значения этих параметров не сохраняются в EEPROM и не до-ступны по сети RS.
Введенные с передней панели ПЛК или по сети значения конфигурационных па-раметров сохраняются в EEPROM, и при выключении питания будут сохранены.

melky
01.03.2017, 12:53
lecsa запишите по сети

petera
01.03.2017, 13:47
Все вопрос снимается. В конфигурацию через кодесис записать значение переменной НЕЛЬЗЯ.

Конфигурационные пользовательские параметры – значение этих парамет-ров считывается из EEPROM при запуске контроллера. Конфигурационные пользова-тельские параметры доступны для редактирования с передней панели и для чте-ния / записи по сети (при условии установленных атрибутов).
Введенные в ПО CoDeSys (в окне режима «Конфигурация ПЛК (PLC Configuration)») новые значения этих параметров не сохраняются в EEPROM и не до-ступны по сети RS.
Введенные с передней панели ПЛК или по сети значения конфигурационных па-раметров сохраняются в EEPROM, и при выключении питания будут сохранены.

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

ЗЫ
Пример есть на диске ПЛК
Применение данной функции показано на примере ее вызова в составе
программы, которая при отпускании нажатых кнопок Альт+стрелка вверх записывает
значение параметра «Уставка 1», увеличенное на 1.
29798

PROGRAM PLC_PRG
VAR
tm:TON;
fm:F_TRIG;
starting:BOOL:=FALSE;
param_ptr:POINTER TO parameter_descriptor;
param_adr: POINTER TO REAL;
param_adr2: POINTER TO ARRAY[0..15] OF BYTE;
temp: REAL;
temp2: ARRAY [0..15] OF BYTE;
END_VAR
VAR CONSTANT
key:BYTE:=136;
END_VAR
IF NOT starting THEN (*То что делается при начальной загрузке контроллера*)
SetWorkScreenCount(1); (*Установим количество экранов = 1 *)
ClearScreen(0); (*Очистим экран*)
starting:=TRUE; (*Установим аттрибут, чтобы больше не входить в этот цикл*)
END_IF

fm(clk:=kbrd=key); (*Если пользователь нажал Альт+стрелка вверх*)
IF fm.Q THEN (*и отпустил, то будет выполнен этот цикл*)
param_ptr:=READ_BY_HASH(16#37B7,0); (*чтение дескриптора параметра*)
temp:=sp1+1.0; (*в переменную temp занесём значение уставки + 1*)
param_adr:=ADR(temp); (*в param_adr -- адрес temp*)
param_adr2:=param_adr; (*Сделаем так, чтобы переменные param_adr и param_adr2 ссылались на одно и то же место в памяти*)
temp2:=param_adr2^; (*в temp2 занесём результат, считанный по адресу param_adr2, то есть фактически в temp2 попадает значение из temp с учётом преобразования типов*)
param_ptr^.value:=temp2; (*значение переменной в param_ptr занесём temp2*)
SAVE_PARAMETER(param_ptr); (*запись параметра в память контроллера*)
END_IF
tm(in:=NOT tm.Q, pt:=t#200ms); (*цикл индикации -- 200 мс*)
IF tm.Q THEN (*цикл будет запущен каждые 200 мс*)
ShowReal(0,0,0,'%2.1f',sp1); (*отображаем значение уставки*)
END_IF

lecsa
01.03.2017, 13:58
О, petera благодарю! Попробую вникнуть!

petera
01.03.2017, 14:05
О, petera благодарю! Попробую вникнуть!

Смысл в том, что в окне визуализации нужно будет вводить значения не в конфигурационную переменную, а в промежуточную. Затем промежуточную переменную с помощью функции "SAVE_PARAMETER" записывать в конфигурационную переменную.

sosna
01.03.2017, 20:40
Добрый вечер. Есть проблема. Нужно поднять ТРМ в кодесис на СFC. C cамим ТРМ проблем не возникло, но с гистерезисом никак не справлюсь. Подскажите как лучше это сделать.

Andrew_Stranger
01.03.2017, 21:02
Примеры смотрели на сайте?

sosna
01.03.2017, 21:24
Если можно дайте ссылку. В примерах я ничего не нашел. Возможно не там смотрел.

Василий Кашуба
01.03.2017, 21:58
Если можно дайте ссылку. В примерах я ничего не нашел. Возможно не там смотрел.

На СФС можно сделать так.
29803

sosna
01.03.2017, 22:07
Спасибо Василий

Sulfur
03.03.2017, 11:33
Правильно ли я понимаю, что все переменные обмена по ModBus по умолчанию являются RETAIN и не теряются при выключении питания?
29828

Интересует то, что "подключено" к ModBus (slave).

sosna
03.03.2017, 14:17
Добрый день. Проблема следующая. Читаю из панели оператора СП307 значение в формате INT.
Не понятно как мне его получить в глобальной переменной ПЛК?
Там есть только WORD и REAL.

YuriBel
03.03.2017, 14:33
Получите его в WORD, а затем через WORD_TO_INT получите INT, если он вам реально нужен.

sosna
03.03.2017, 14:55
Получается, что INT из панели получаю в WORD в ПЛК и далее опять перевожу в INT?

YuriBel
03.03.2017, 15:53
Протокол модбас не знает ничего про типы данных, которые через него передают. Если два устройства обмениваются данныме по протоколу Модбас, то задача того, кто этот обмен программирует, обеспечить соответствие типов. То есть, если вы знаете, что панель вим передает INT, имеющий размерность WORD, то получив этот самый WORD, вы его будете интерпретировать как INT путем преобразования WORD_TO_INT. С величинами типа FLOAT нужно еще смотреть за порядком следования байт, который на разных сторонах может отличаться.

sosna
03.03.2017, 16:42
Да, спасибо Вам, все понял

sosna
05.03.2017, 10:15
Всем добрый день. Подскажите, если не сложно. Как созданный на CFC макрос засунуть в библиотеку?

Василий Кашуба
05.03.2017, 10:51
Всем добрый день. Подскажите, если не сложно. Как созданный на CFC макрос засунуть в библиотеку?
Когда сделали свой ФБ, сохраните (экспортируйте) его как библиотеку. С помощью меню Сохранить как.

sosna
05.03.2017, 11:53
Спасибо, попробую

sosna
05.03.2017, 17:36
Подскажите пожалуйста есть ли ФБ для CFC наподобие элемента ИЛИ для переменных типа WORD?

sosna
05.03.2017, 17:46
Если быть точнее наподобие элемента MOVE только с несколькими входами.

Василий Кашуба
05.03.2017, 17:54
Если быть точнее наподобие элемента MOVE только с несколькими входами.
Добавляйте новый вход к нужному элементу, наведя курсор на вход и нажав на ПКМ.

lecsa
06.03.2017, 17:38
Приветствую.
Пытаюсь прикрутить ОПС к плк 73м. Смотрел по видеоурокам, там нужно "создание загрузочного проекта" - у меня эти пункты неактивны. Как быть (или он создается автоматом?) так же неактивно в "настройки целевой программы - общие - загружать символьный файл"
Как я понимаю то из этого файла опсос читает адреса переменных. ШО делать О_0?

Еще вопрос. Не можете прояснить это подключение к ОПС этого плк (rs1) Я раньше прикручивал разные ОПСы к семёну s5 через мастерОПС, кепсервер и т.д, балвался разными скадами. Но тут что то в затуп попал. Руководства читал.

Если можно шаги настройки через дефис.

Прошло время...

По RS1 вроде мастерОПС соединился с ПЛК (мой косяк, перепутал А В на преобразователе 485).
Теперь как определить адреса переменных (глобальных и локальных) для записи в ОПС? должна быть какая то таблица типа (%I0.0 - адрес 0 и тд)?


Тут нашел ответ по "созданию загрузочного проекта"

загрузочный проект создается автоматически т.к. в плк63 программа исполняется из флеш а не из озу. соответсвенно проект автоматически заливается во флешь и автоматически становится загрузочным.


Так кто нибудь подскажет как определить адреса переменных (глобальных и локальных) для записи в ОПС, сторонних опс?



Почитал этот топик http://www.owen.ru/forum/showthread.php?t=21035 и ужаснулся , как криво все сделано, почему у старинного S5 семена такого нет?

mrpmn
14.03.2017, 16:48
Всем добрый день. Пытаюсь писать файл на usb-flash контроллер ПЛК 110-60 М02. При использовании библиотеки SysLibFile минимальный цикл записи получаю 5 с, но со всеми вытекающими минусами данной библиотеки. А при использовании библиотеки OwenLibFileAsync минимальный цикл записи 30 сек. Запись инициирую вызовом функционального блока из основной программы. Никаких таймеров не использую. Собственно вопрос, кто-то замечал такие тайминги?

Павел В.
22.03.2017, 11:36
Такой вопрос по CDS 2.3 - в редакторе CFC к выходу логического элемента AND подключено несколько переменных VAR типа BOOL, но при активации выхода этого элемента, из всех подключенных переменных становится "TRUE" только одна, хотя линии связи меняют свой цвет с чёрного на синий ко всем переменным.

petera
22.03.2017, 12:30
Такой вопрос по CDS 2.3 - в редакторе CFC к выходу логического элемента AND подключено несколько переменных VAR типа BOOL, но при активации выхода этого элемента, из всех подключенных переменных становится "TRUE" только одна, хотя линии связи меняют свой цвет с чёрного на синий ко всем переменным.
30177
А если быть более внимательным, то окажется, что где-то ниже этим переменным присваеваются совсем другие значения.
30178
А отображаются всегда значения, которые встречаются самыми последними в схеме

ЗЫ.
Множественная запись (в разных местах программы) в переменные ни к чему хорошему не приводит. Никогда так не делайте, а то концов найти не сможете.

AnSm
22.03.2017, 14:23
День добрый! Столкнулся с ситуацией которую никак не могу понять.
Простой детектор фронта и спада. (Я привык так на си писать)
MinD1O Выход релюшка или любая другая переменная. Релюшка щелкает-переключается.

Код...

Это условие выполняется нормально при фронте MinD1O.
IF (MinD1O=TRUE AND OldMinD1O=FALSE) THEN
i:=1;
END_IF;


Это условие не выполняется никогда как бы ни записывал. Со скобками в любом сочетании и без скобок.
IF (OldMinD1O=TRUE AND MinD1O=FALSE) THEN
i:=0;
END_IF;

OldMinD1O:=MinD1O;

Куда порыть можно??? Более в тексте подпрограммы ничего нет. Всю голову сломал.
К MinD1O больше нигде нет обращения. OldMinD1O локальная переменная. Она изменяется.
Как правильно писать сложные условия в CodeSys? В доках ничего кроме простейшего примера не нашел.

capzap
22.03.2017, 14:39
можно и так написать

IF MinD1O AND NOT OldMinD1O THEN
i:=1;
ELSIF NOT MinD1O AND OldMinD1O THEN
i:=0;
END_IF;
OldMinD1O:=MinD1O;

AnSm
22.03.2017, 14:43
Сам спростил, сам ответил. Решение нашел, не нашел ответа.
Строку OldMinD1O:=MinD1O; не выполнялась совсем. OldMinD1O всегда в false. Почему такое?
Переставил строку OldMinD1O:=MinD1O; в начало программы, заработало. OldMinD1O при присвоении MinD1O=true, тоже стала становиться true.
Затем переставил строку OldMinD1O:=MinD1O; промеж двух IFов. Тоже заработало. Затем вернул строку OldMinD1O:=MinD1O; на место где она не работала. И о чудо!!! Все стало работать!!
Это что? глюки компилятора CodeSys? И часто это бывает с ним такое? Когда абсолютно правильно написанный код просто не работает? А мне предстоит написать еще тысячи строк кода! И если это повторится как тогда вообще отлаживать сложные программы, когда простейшее условие и не работает по совершенно непонятной причине? Я в честно говоря шокирован.

AnSm
22.03.2017, 14:46
можно и так написать

IF MinD1O AND NOT OldMinD1O THEN
i:=1;
ELSIF NOT MinD1O AND OldMinD1O THEN
i:=0;
END_IF;
OldMinD1O:=MinD1O;


Сначала так и писал. Ближе к си. Затем уже явно все прописал пока искал глюк.

AnSm
22.03.2017, 14:49
Хочешь ответа - приводи весь проект. Тута экстрасенсов нэма. Может старт не сделал, может еще где наиндусил

Сам так решил ?

Это весь проект и есть. Абсолютно чистый контроллер ресетнутый на заводские установки. Я же писал, что переменная MinD1O меняется, релюшка щелкает. Контроллер работает, программа крутится. Не экстрасенсы весь текст не читают?:)
А что неправильного в тех строчках, что я привел?

capzap
22.03.2017, 14:52
Сначала так и писал. Ближе к си. Затем уже явно все прописал пока искал глюк.

Вы считаете это единственный вариант? Например через RS-триггер, можно было бы вобще не писать эту конструкцию

AnSm
22.03.2017, 14:59
Глюк в 99.9999% - в голове.
Онлайн ?Если ответить по существу нечего, промолчи и пройди мимо, за умного сойдешь.


Вы считаете это единственный вариант? Например через RS-триггер, можно было бы вобще не писать эту конструкциюНет конечно, не единственный. До этого дошел пытаясь понять почему не работает. Есть и детектор фронта. Я в основном пишу на си и мне быстрее намного написать так, чем использовать библиотечные функции. Даже число в степень возвести лучше ручками, чем использовать EXPT(x,y). Ручками даже вещественные возводятся в 2 раза быстрее чем эта функция.

capzap
22.03.2017, 15:00
)) Если задача в получении i - даже тригеры не нужны. Вообще ничего не нужно.
Пусть свое исходное прогонит в эмуляции и не компостирует мозг какими-то глюками

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

capzap
22.03.2017, 15:02
Я в основном пишу на си и мне быстрее намного написать так, чем использовать библиотечные функции. Даже число в степень возвести лучше ручками, чем использовать EXPT(x,y). Ручками даже вещественные возводятся в 2 раза быстрее чем эта функция.

я читал как вы пишите на Си, мое мнение не там вы ищите проблемы, это больше похоже на плохого танцора

AnSm
22.03.2017, 15:06
Мдя. Думал тут люди серьезные, а оказалось пара троллей ничего не могущих ответить и порекомендовать, но зато разбирающихся в балете. Адью.

capzap
22.03.2017, 15:11
Мдя. Думал тут люди серьезные, а оказалось пара троллей ничего не могущих ответить и порекомендовать, но зато разбирающихся в балете. Адью.
Чего изволите Вам порекомендовать, снять на видео как я наделаю кучу глупостей и восстановлю картину, что обычный код не будет работать, в этом случае уменя всё равно не получится обвинить в этом КДС

Павел В.
22.03.2017, 15:18
Вопрос - где почитать описание библиотеки UNM.lib? И вообще есть ли где описание овеновских библиотек? Не программировал ОВЕН уже лет 5 поэтому надо всё вспоминать практически с 0.

capzap
22.03.2017, 15:21
Вопрос - где почитать описание библиотеки UNM.lib? И вообще есть ли где описание овеновских библиотек? Не программировал ОВЕН уже лет 5 поэтому надо всё вспоминать практически с 0.
http://www.owen.ru/uploads/txtlic.php?url=http:/kipshop.ru/CoDeSys/bibl/Lib_OWEN_PLC1xx_v8.12.zip

Explorerrr
24.03.2017, 18:06
доброго времени суток. Такая проблема. Опрашиваю ТРМ-133 прибором ПЛК-150 по протоколу овен, все запросы на ок за исключением уставки (sp.lu).
Не пойму в чём она приходит? Вижу число - 4367 (или около того), уставка при этом 25. Вроде бы WORD, командой WORD_TO_REAL не вычисляется - помогите разобраться пожалуйста. Как её привести в человеческий вид? Желательно на CFC. Спасибо.

Павел В.
28.03.2017, 16:47
Вопрос по связи ПЛК160 с CoDeSys через Ethernet - пока порт Ethernet использовался для программирования ПЛК со связью было нормально, как только добавил в конфигурацию ПЛК160 Modbus TCP с чтением нескольких переменных из стороннего ПЛК через этот же Ethernet (Modbus TCP) начали постоянные ошибки связи (номер вроде всегда #0) между ПК и ПЛК160. Т.е. теперь через 20-30 с стабильно ПЛК160 отваливается от CoDeSys.

GTS
29.03.2017, 07:52
Добрый день! С некоторых пор при сохранении или когда просто закрываеш проект, выскакивает сообщение. На работу вроде не влияет, но как его убрать?30300

GTS
31.03.2017, 07:48
Спасибо тебе Валенок, всегда выручаеш!

Ден123456
03.04.2017, 13:58
Здравствуйте. Можно подключится к контроллеру Wago 750-881 программой Codesys без проекта? Бывает плк зависает, бывает нужно проверить дискретные выхода. Или без проекта это не возможно. Плк установила организация но ПО не дала частые простои оборудования.

krollcbas
03.04.2017, 14:23
Ден123456, можно. Прога есть io pro. Можно проверить входа/выхода. Если подцепитесь codesys, то сотрете рабочий проект.
Если вам попалась такая организация, переписывайте код. Плк ваш и код должен быть ваш, иначе вы становитесь кормовой базой таких интеграторов

Ден123456
03.04.2017, 14:51
krollcbas, спасибо. Еще вопрос io pro caa чем отличается от io pro?
У меня 750 - 881 при нажатии login у списку контроллеров нету максимум 842. Нужно искать таргет файл?

krollcbas
03.04.2017, 16:26
Понятно. Вы используете что-то левое. Свяжитесь со мной, помогу с этим бесплатно.
Относительно вашего вопроса:
CAA это комплект болванка codesys + сервисный кабель
Проще купить кабель и запросить софт
Болванка стоит порядка 30 тыс р

Руслпн
04.04.2017, 19:10
Всем привет.
Подскажите пожалуйста, где почитать или как правильно работать и создавать объекты в дереве POU?

petera
05.04.2017, 13:23
Всем привет.
Подскажите пожалуйста, где почитать или как правильно работать и создавать объекты в дереве POU?

Кроме правой кнопки мыши ничего больше не требуется

sosna
09.04.2017, 17:13
Всем добрый день. Проблема такая. Нарисовал схему включения и отключения выхода одной кнопкой.
30473
Включение происходит, а выключение нет.

sosna
09.04.2017, 17:15
Проверка работы схемы в эмуляторе

Бинкевич Игорь
09.04.2017, 17:20
R_TRIG должны иметь разные объявления (имена), у Вас один блок.

sosna
09.04.2017, 17:23
С разными тоже не работает

melky
09.04.2017, 17:41
а кнопку старт еще раз отпустить и нажать ? R_Trig только передний фронт ловит.

ASo
09.04.2017, 18:17
Всем добрый день. Проблема такая. Нарисовал схему включения и отключения выхода одной кнопкой.
30473
Включение происходит, а выключение нет.
Месье понимает толк в сложности.
30474

petera
09.04.2017, 20:06
Пять лет назад http://www.owen.ru/forum/showthread.php?t=13655&p=94449&viewfull=1#post94449
30478

sosna
10.04.2017, 09:58
Всем спасибо.

nensist
10.04.2017, 12:19
Добрый день!
как реализовать алгоритм сброса в FALSE значимых переменных при старте программы?
ПЛК 150 И.М

petera
10.04.2017, 13:14
Добрый день!
как реализовать алгоритм сброса в FALSE значимых переменных при старте программы?
ПЛК 150 И.М

Если эти "значимые" переменные не находятся в слейве ПЛК(они будут retain и сохраняют значения при выключении ПЛК), то ничего делать не надо.
При старте программы ВСЕ переменные инициализируются начальными значениями, =0 для чисел или FALSE для BOOL. Если конечно Вы принудительно не задали начальные значения отличные от нулевых при объявлении переменных.
30490

nensist
10.04.2017, 13:49
Конфигурация оборудования - ПЛК150 (master) - СП310 (slave) - ПЧВ (slave)
Система построена для насосной станции опресовки. Суть в том что когда с панели нажимаем кнопку старт (используется регистр PSW) происходит старт системы.
Если не перевести систему в режим стоп и выключить/включить питание происходит авто запуск (это не нужно)
Как реализовать функционал сброса переменной "СТАРТ" при выключении/включении питания.
Пробовал использовать функциональную область - все равно происходит кратковременный старт системы

sialiv
10.04.2017, 14:35
Рекомендую при нажатии включать бит старт при отпускании сбрасывать бит старт и все будет хорошо.

nensist
10.04.2017, 14:53
Рекомендую при нажатии включать бит старт при отпускании сбрасывать бит старт и все будет хорошо.

??? Поподробнее можно?

sialiv
10.04.2017, 15:14
Когда нажали кнопку в панели, контроллер ее увидел и зафиксировал старт у себя.
Когда отпустили панель сбросила старт.
Теперь если выключить контроллер , а потом включить - старта с панели не будет, потому что его нет, а автоматический режим в контроллере не сформируется пока не будет дан старт.

nensist
10.04.2017, 15:31
Когда нажали кнопку в панели, контроллер ее увидел и зафиксировал старт у себя.
Когда отпустили панель сбросила старт.
Теперь если выключить контроллер , а потом включить - старта с панели не будет, потому что его нет, а автоматический режим в контроллере не сформируется пока не будет дан старт.

Так и реализовано! на панели 2 кнопки "СТАРТ" и "СТОП" (функция "включена пока нажата")
В ПЛК переменная типа BOOL "start_system" c функцией SET/RESET
Сответственно:
При кратковременном нажатии на кнопку "СТАРТ" на панели переменная "start_system" фиксируется в TRUE
При кратковременном нажатии на кнопку "СТОП" на панели переменная "start_system" фиксируется в FALSE
когда переменная "start_system" находится в TRUE если отключить/включить питание плк и панели, переменная "start_system" по прежнему будет находится в положении TRUE
Как сделать чтоб при востанавлении питания плк и панели, данная переменная сразу же находилась в FALSE

sialiv
10.04.2017, 15:48
Ваша ошибка в том что вы используете одну переменную, а нужно для старта одна, для останова другая.
У контроллера переменные "не retain" сбрасываются при включении питания, посмотрите тип вашей переменной.

nensist
10.04.2017, 16:29
Ваша ошибка в том что вы используете одну переменную, а нужно для старта одна, для останова другая.
У контроллера переменные "не retain" сбрасываются при включении питания, посмотрите тип вашей переменной.

В переменной "start_system" отсутствует галочка "RETAIN"
30495
ПАНЕЛЬ
30496
30497

sialiv
10.04.2017, 16:45
В панеле правильно.
В контроллере "Нач.значение" укажите значение "0" и если не поможет сделайте принудительное обнуление при первом скане программы.
Еще посмотрите раздел в этом-же форуме "Инициализация переменных при запуске ПЛК 150"

nensist
10.04.2017, 16:50
В панеле правильно.
В контроллере "Нач.значение" укажите значение "0" и если не поможет сделайте принудительное обнуление при первом скане программы.
Еще посмотрите раздел в этом-же форуме "Инициализация переменных при запуске ПЛК 150"
Спасибо! Будем пробовать!

Василий Кашуба
10.04.2017, 17:35
Добрый день!
как реализовать алгоритм сброса в FALSE значимых переменных при старте программы?
ПЛК 150 И.М
Попробуйте сделать так.
30498

melky
10.04.2017, 17:39
в CDS нет явных обратных связей, может заработать, а может не заработать...

Василий Кашуба
10.04.2017, 17:41
в CDS нет явных обратных связей, может заработать, а может не заработать...
Эта точно заработает.:)

nensist
11.04.2017, 11:19
Проблема решилась только при использования модуля "Statistic" в конфигурации ПЛК. Всем спасибо за помощь!

Uniqum
11.04.2017, 15:51
Вопрос по связи ПЛК160 с CoDeSys через Ethernet - пока порт Ethernet использовался для программирования ПЛК со связью было нормально, как только добавил в конфигурацию ПЛК160 Modbus TCP с чтением нескольких переменных из стороннего ПЛК через этот же Ethernet (Modbus TCP) начали постоянные ошибки связи (номер вроде всегда #0) между ПК и ПЛК160. Т.е. теперь через 20-30 с стабильно ПЛК160 отваливается от CoDeSys.

как то странно, вроде для программирования по умолчанию 1200, а для modbus 502

snezer
15.04.2017, 10:28
Добрый день, работаю в CoDeSys на языке LD (мне так проще - я привык к релейным обозначениям), работаю в CoDeSys очень редко - по мере необходимости, иначе давно бы уже этот вопрос для себя решил. И вопрос следующий - Возможно ли на LD работать с аналоговыми величинами, выставлять уставки срабатывания и заводить их на катушку реле? Например для ПЛК100+МВ110-8А или ПЛК150? Подскажите пожалуйста, что почитать? Или примеры где посмотреть простенькой программы?
За ранее, спс

krollcbas
15.04.2017, 10:40
Да можно конечно и на LD, блоки поддерживает, например компаратор (сравнение)
LE,GE и т.п

snezer
16.04.2017, 08:41
Да можно конечно и на LD, блоки поддерживает, например компаратор (сравнение)
LE,GE и т.п

Я так и думал, что можно. Но пример дал бы лучшее понимание))))

petera
16.04.2017, 09:57
Я так и думал, что можно. Но пример дал бы лучшее понимание))))
Если сможете что-либо рассмотреть, то вот пример

https://www.youtube.com/watch?v=XOI72PK-gGY
Если сможете что-либо рассмотреть, то вот пример

sosna
17.04.2017, 15:04
Всем добрый день. Подскажите возможно ли организовать счет от 0 до 100 в одну сторону и от 0 до -100 в другую сторону на счетчике CTUD?

sosna
18.04.2017, 18:07
Спасибо Валенок.

Руслпн
21.04.2017, 13:58
Всем привет. Помогите разобраться в ST, залип на преобразовании переменных из bool_to_word. Заранее спасибо
30746

capzap
21.04.2017, 14:19
Всем привет. Помогите разобраться в ST, залип на преобразовании переменных из bool_to_word. Заранее спасибо
30746

http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf стр.312 пример на ST

Руслпн
21.04.2017, 14:20
Разобрался. Вопрос закрыт

petera
21.04.2017, 14:30
Всем привет. Помогите разобраться в ST, залип на преобразовании переменных из bool_to_word. Заранее спасибо
30746

Кто так пишет?
Тогда уже надо так

IF BOOL_TO_WORD(Alarm_M1) = 1 THEN
Хотя на нафига здесь BOOL_TO_WORD?
Вообще-то нужно так

IF Alarm_M1 THEN
out_Alarm_M1:=1;
END_IF
А если еще окажется, что out_Alarm_M1 имеет тип BOOL, то нафига здесь вообще IF...THEN ?


out_Alarm_M1:=Alarm_M1;

C IF...THEN только если нужно "защелкнуть" состояние Alarm_M1=TRUE
Я думаю, что это касается и 55 строки

petera
22.04.2017, 02:08
Разве для защелкивания обязательно нужен IF ? )

Нет, конечно

out_Alarm_M1:=Alarm_M1 OR out_Alarm_M1;
Но в контексте исходного кода только "защелкивание" - единственное оправдание использования IF

alextopaz
22.04.2017, 17:17
Добрый день. Прошу помощи знатоков. Стоит задача модернизация 10 объектов (ЦТП) в плане телеметрии. Для ознакомления с программированием приобрел ПЛК-150. Задача с точки зрения программирования простая, опросить все датчики, счетчики и передать результат на верхний уровень. С нижнем уровнем проблем нет, создал простенький проект в Simpl Scada по Ethernet и RS-232 Debug с штатный кабелем который идет в комплекте через OPC сервер Codesys все работает. Проблема собственно в чем, связь с объектами будет производится по радио каналу и скорость обмена по RS-232 Debug необходима 9600 бит/сек. В конфигурации ПЛК создаю Modbas slave произвожу его настройку согласно инструкции соответствующие настройки вношу в настройки COM порта ПК прописываю переменную запускаю скаду она обращается к виртуальному COM порту (загорается светодиод преобразователя), а на ПЛК светодиод связь не загорается. Пробовал и кабелем КС1 и делал такой же только без перемычки и в ответ тишина. Что делаю не так?? Какой кабель нужен или может порт RS-232 Debug может использоваться только для программирования и отладки в Codesys?? В качестве скады планируется TRACE Mode т.к. она используется в данный момент и обращаться к ПЛК нужно будет не через ОРС а напрямую к регистрам.

KickOff
23.04.2017, 22:24
Уважаемые форумчане, помогите пожалуйста написать программу на языке LD.
На вход подается один аналоговый сигнал, далее преобразуется(любым путем), и на выходе получается другой аналоговый сигнал.

krollcbas
23.04.2017, 22:33
Дипломная работа? Слишком мало вводных

KickOff
23.04.2017, 23:18
Дипломная работа? Слишком мало вводных

Курсовая... А с одним нельзя сделать никак ? =( Хотя бы чего-нибудь...:( Пожаалуйста

Grampus
25.04.2017, 13:00
Добрый день господа , подскажите пожалуйста как работать с библиотекой Work_mode.lib

Нужно значение анал. сигнала показать на экране
попробывал так ShowReal(1, 1, 1, '%2.1f', Value)
но все равно на экране нету цифры. помогите!

Irgy
02.05.2017, 16:23
скорость обмена по RS-232 Debug необходима 9600 бит/сек.


Если не ошибаюсь, порт Debug работает только на скорости 115200

Irgy
02.05.2017, 16:25
Курсовая... А с одним нельзя сделать никак ? =( Хотя бы чего-нибудь...:( Пожаалуйста

Тебе намекнули, что задачу надо бы подробнее описывать :)

PavelG2010
04.05.2017, 07:55
Добрый день!
Не могу настроить «Конфигуратор виртуальных портов на (Windows 7 профессиональная) Программа устанавливается без ошибок, находит ЕКОН134 но тут же вылетает. Ест видео — вот ссылка (https://drive.google.com/open?id=0B9bvDr9X9PSORDVJYktUZTdmT3M)

Минеев Антон
12.05.2017, 15:15
Народ, добрый день... Никак не пойму: Как считать системное время с контроллера ПЛК110(М02)-60. Задача: нужно каждые 10 минут выводить количество деталей с указанием времени этого события.

petera
12.05.2017, 17:28
Народ, добрый день... Никак не пойму: Как считать системное время с контроллера ПЛК110(М02)-60. Задача: нужно каждые 10 минут выводить количество деталей с указанием времени этого события.

С помощью библиотеки SysLibTime.lib
Например

FUNCTION_BLOCK REAL_TIME
VAR_INPUT
END_VAR
VAR_OUTPUT
current_time: TOD; (*Текущее время*)
current_date:DATE; (*Текущая дата*)
current_day: INT; (*Номер дня в году*)
END_VAR
VAR
CurTimeExInst: CurTimeEx;
CurSystemTimeDate: SystemTimeDate;
CurSysTime64: SysTime64;
year: INT;
second: INT;
day: INT;
hour: INT;
minute: INT;
month: INT;
count: INT;
END_VAR
VAR CONSTANT
nulldt: SystemTimeDate;
END_VAR

(*Получить текущее время и дату*)
CurSystemTimeDate:=nulldt;
CurTimeExInst(TimeDate := CurSystemTimeDate, SystemTime := CurSysTime64);
year :=CurSystemTimeDate.Year;
month :=CurSystemTimeDate.Month;
day :=CurSystemTimeDate.Day;
hour :=CurSystemTimeDate.Hour;
minute :=CurSystemTimeDate.Minute;
second :=CurSystemTimeDate.Second;
IF year =0 THEN
year :=1970;
month :=1;
day :=1;
END_IF
(*собираем часы, минуты и секунды в одну кучу - в миллисекунды*)
current_time:=DWORD_TO_TOD((INT_TO_DWORD(Hour) * 3600
+ INT_TO_DWORD(Minute * 60)
+ INT_TO_DWORD(Second))*1000);
(*Вычислить дату с учетом високосных лет*)
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;
(* проверить на високосный год и добавить один день если год високосный *)
IF SHL(year,14) = 0 THEN count := count + 1; END_IF;
ELSE
count := (month - 1) * 31;
END_IF;
current_date:=DWORD_TO_DATE((INT_TO_DWORD(count + day - 1)
+ SHR(INT_TO_DWORD(year) * 1461 - 2878169, 2)) * 86400);
current_day:= DAY_OF_YEAR(current_date);
31117
Для вычисления номера дня в году здесь нужна такая функция

FUNCTION DAY_OF_YEAR : INT
VAR_INPUT
IDATE : DATE;
END_VAR

DAY_OF_YEAR := UDINT_TO_INT((DATE_TO_UDINT(idate) / UDINT#86400) MOD UDINT#1461);
IF DAY_OF_YEAR > 729 THEN
IF DAY_OF_YEAR > 1095 THEN DAY_OF_YEAR := DAY_OF_YEAR - 1095; ELSE DAY_OF_YEAR := DAY_OF_YEAR - 729; END_IF;
ELSIF DAY_OF_YEAR > 364 THEN
DAY_OF_YEAR := DAY_OF_YEAR - 364;
ELSE
DAY_OF_YEAR := DAY_OF_YEAR + 1;
END_IF;

Rednaxel
16.05.2017, 18:12
Впал в ступор от простейшей задачи управления светом. После полдня мучений создал вот такую конструкцию:
31176
Она работает только благодаря "костылю" в виде посторонней переменной, которая синхронизируется со светом в другом месте программы.
Дело в том, что этот переключатель нужно оформить в виде ФБ чтобы использовать многократно и эта переменная там ни к чему.

Подскажите пожалуйста: как на CFC сделать без костыля?
Видимо на языке типа ST это проще и правильнее, но я его пока не освоил.

Василий Кашуба
16.05.2017, 18:57
Впал в ступор от простейшей задачи управления светом. После полдня мучений создал вот такую конструкцию:
31176
Она работает только благодаря "костылю" в виде посторонней переменной, которая синхронизируется со светом в другом месте программы.
Дело в том, что этот переключатель нужно оформить в виде ФБ чтобы использовать многократно и эта переменная там ни к чему.

Подскажите пожалуйста: как на CFC сделать без костыля?
Видимо на языке типа ST это проще и правильнее, но я его пока не освоил.
Для меня проще на CFC, сделайте так.
31178

Rednaxel
18.05.2017, 15:24
Спасибо за ответ!
Но честно говоря просветления не наступило :(
При чем здесь ИЛИ - не понимаю?

Мне представляется, что для моей задачи нужна бы конструкция типа If ... Then ... Else.
Если свет горит - переменную Light установить в TRUE, если нет - сбросить в FALSHE.
Моя беда в том, что я не понимаю какой блок на CFC применить для этого?
Или все не так совсем: растолкуйте пожалуйста.

Upd:
Голова сообразила наконец, что если добавить задержку во вторую часть блока, чтобы прошел цикл, блок начинает работать.
31220
Только это тоже костыль. Поэтому вопрос остается открытым: "какая конструкция на CFC соответствует логике If ... Then ... Else?

Grampus
18.05.2017, 15:36
Добрый день господа, подскажите пожалуйста как увеличить частоту опроса аналогового входа на ПЛК 73 ????
сигнал меняется очень быстро а результат я вижу спустя 2 секунды. Буду признателен

Василий Кашуба
18.05.2017, 20:27
Спасибо за ответ!
Но честно говоря просветления не наступило :(
При чем здесь ИЛИ - не понимаю?

Мне представляется, что для моей задачи нужна бы конструкция типа If ... Then ... Else.
Если свет горит - переменную Light установить в TRUE, если нет - сбросить в FALSHE.
Моя беда в том, что я не понимаю какой блок на CFC применить для этого?
Или все не так совсем: растолкуйте пожалуйста.

Upd:
Голова сообразила наконец, что если добавить задержку во вторую часть блока, чтобы прошел цикл, блок начинает работать.
31220
Только это тоже костыль. Поэтому вопрос остается открытым: "какая конструкция на CFC соответствует логике If ... Then ... Else?
Вот вам без всяких костылей.
31223312243122531226и это не ИЛИ, а ИСКЛЮЧАЮЩЕЕ ИЛИ.

RV9WFJ
19.05.2017, 07:04
Берем паспорт и смотрим характеристики, время опроса аналоговых входов. И получаем что у вас вполне нормальный результат если вы все входы задействовали. Ускорить можно только путем уменьшения опрашиваемых входов.

Dimensy
19.05.2017, 09:17
"какая конструкция на CFC соответствует логике If ... Then ... Else?
Теперь я попробую объяснить. Логическая операция исключающее ИЛИ (XOR)
31239
Применение в такой виде будет означать:
если А=1 и В=1, то В=0
если А=1 и В=0, то В=1
если А=0, то В не меняется

Sulfur
19.05.2017, 09:59
Вопрос:
Подскажите пожалуйста, есть ли в КДС какой-либо ФБ, который выполняет функции измерителя скорости. Т. е. задача состоит в том, что на одном из входов нужно считать импульсы за определенный интервал времени. Контрольный интервал - 1 минута, частота импульсов - до 300 имп\мин. Да, я могу написать это с помощью стандартных ФБ, но не хотелось бы изобретать велосипед.

capzap
19.05.2017, 10:03
Вопрос:
Подскажите пожалуйста, есть ли в КДС какой-либо ФБ, который выполняет функции измерителя скорости. Т. е. задача состоит в том, что на одном из входов нужно считать импульсы за определенный интервал времени. Контрольный интервал - 1 минута, частота импульсов - до 300 имп\мин. Да, я могу написать это с помощью стандартных ФБ, но не хотелось бы изобретать велосипед.
на оскат есть аллергия?

kirya93
20.05.2017, 18:44
Добрый день всем!

Поставил Codesys с сайта ОВЕН, но в нем не запускается ни один пример с того же сайта. Точнее, примеры загружаются и открываются, но программа пустая. Таргеты все поставил, библиотеки тоже, русский язык настроил. В чем может быть причина?

Спасибо!

alex55
20.05.2017, 19:47
Codesys с сайта ОВЕН какая версия 2.3?

kirya93
20.05.2017, 19:54
Прошу прощения, да, 2.3.

alex55
20.05.2017, 20:25
Попробовать перезагрузить ПК, если нет переустановить кдс, ОС какая?

kirya93
20.05.2017, 20:30
Win 7 x64. Странно, ни одной ошибки не выдавал, перезагрузить пробовал, не помогло.

alex55
20.05.2017, 21:09
Попробовать создать новый проект, при выборе плк обратть внимание таргеты плк установились?

kirya93
21.05.2017, 10:55
Доброе утро!

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

alex55
21.05.2017, 11:42
А может они не пустые, а там ; стоит? Можно их вручную с Рабочего стола поместить в папку Проекты CoDeSys, туда где находятся рабочие проекты, тогда наверняка откроются..

Grampus
22.05.2017, 08:14
Берем паспорт и смотрим характеристики, время опроса аналоговых входов. И получаем что у вас вполне нормальный результат если вы все входы задействовали. Ускорить можно только путем уменьшения опрашиваемых входов.

а где есть описание отключения входов. И еще была версия что можно с помощью МВ110 модуль ввода аналоговых сигналов ускорить!
Подскажите если есть информация по этим вариантам!
Заранее спасибо!

harlylorn
22.05.2017, 21:59
Есть генератор случайных чисел. Подскажите пожалуйста, можно ли сделать так чтобы число генерировалось 1 раз при запуске программы и больше не генерировалось.
FUNCTION_BLOCK RNG (* Генератор случайных чисел *)

VAR_INPUT
LOAD: BOOL;
X0: USINT := 1;
END_VAR

VAR_OUTPUT
X: USINT := 1; (* Случайное число *)
END_VAR

VAR
RESET: R_TRIG; (* Экземпляр ФБ R_TRIG *)
END_VAR

===================================

RESET(CLK := LOAD);
IF RESET.Q THEN X := X0; END_IF
X := X *10 - 11 * (X * 10/11);

harlylorn
22.05.2017, 22:02
Есть генератор случайных чисел. Подскажите пожалуйста, можно ли сделать так чтобы число генерировалось 1 раз при запуске программы и больше не генерировалось.
FUNCTION_BLOCK RNG (* Генератор случайных чисел *)

VAR_INPUT
LOAD: BOOL;
X0: USINT := 1;
END_VAR

VAR_OUTPUT
X: USINT := 1; (* Случайное число *)
END_VAR

VAR
RESET: R_TRIG; (* Экземпляр ФБ R_TRIG *)
END_VAR

===================================

RESET(CLK := LOAD);
IF RESET.Q THEN X := X0; END_IF
X := X *10 - 11 * (X * 10/11);

capzap
22.05.2017, 22:45
Есть генератор случайных чисел. Подскажите пожалуйста, можно ли сделать так чтобы число генерировалось 1 раз при запуске программы и больше не генерировалось.
FUNCTION_BLOCK RNG (* Генератор случайных чисел *)

VAR_INPUT
LOAD: BOOL;
X0: USINT := 1;
END_VAR

VAR_OUTPUT
X: USINT := 1; (* Случайное число *)
END_VAR

VAR
RESET: R_TRIG; (* Экземпляр ФБ R_TRIG *)
END_VAR

===================================

RESET(CLK := LOAD);
IF RESET.Q THEN X := X0; END_IF
X := X *10 - 11 * (X * 10/11);

:) бу-га-га, готовтесь
по существу, можно считывать дату создания/модификации файла проекта и из него генерировать уникальный ключ, таким образом если проект не менялся при каждой загрузке будет свое рандомное число

RV9WFJ
23.05.2017, 07:53
а где есть описание отключения входов.
http://www.picshare.ru/uploads/170523/bm9SVyHOQN_thumb.jpg (http://www.picshare.ru/view/8103034/)

И еще была версия что можно с помощью МВ110 модуль ввода аналоговых сигналов ускорить!
Подскажите если есть информация по этим вариантам!
Заранее спасибо!Ускорить можно, если часть входов перенести на МВ110-8А и скорость опроса хорошую задать при опросе, и опрос групповой сделать. Но подключать через ModBus.lib придется.

zendo057
23.05.2017, 13:32
Впал в ступор от простейшей задачи управления светом. После полдня мучений создал вот такую конструкцию:
31176
Она работает только благодаря "костылю" в виде посторонней переменной, которая синхронизируется со светом в другом месте программы.
Дело в том, что этот переключатель нужно оформить в виде ФБ чтобы использовать многократно и эта переменная там ни к чему.

Подскажите пожалуйста: как на CFC сделать без костыля?
Видимо на языке типа ST это проще и правильнее, но я его пока не освоил.

Т_тригер ни кто не отменял

Rednaxel
23.05.2017, 15:49
Т_тригер ни кто не отменял

Вещица безусловно полезная, спасибо! Скажите, это ваша разработка?

К сожалению, для моей задачи не годится, т.к. переменная на выходе получается "привязана" к выходу out. А мне нужно чтобы ее можно было изменить в любом другом месте программы. Отсюда и мои извращения с Set/Reset.
XOR, который посоветовали Василий и Дмитрий, как нельзя лучше подходит в данном случае.

Еще раз спасибо всем откликнувшимся!

Rednaxel
23.05.2017, 16:05
Есть генератор случайных чисел. Подскажите пожалуйста, можно ли сделать так чтобы число генерировалось 1 раз при запуске программы и больше не генерировалось.


Я бы посоветовал использовать для этого Power status из модуля статистики. Он меняется при подаче питания.
31315

zendo057
24.05.2017, 14:10
Вещица безусловно полезная, спасибо! Скажите, это ваша разработка?

Да я сам ее сваял.

mf_
26.05.2017, 10:36
Добрый день. Есть необходимость запилить пид-регулятор для электропривода шарового крана для плавной регулировки уровня в накопительной емкости по сигналу датчика уровня (или давления) 4..20 мА.
Хочу разобраться в применении пид из стандартной библиотеки util.lib.
На данный момент пока не понял назначение некоторых переменных.
Y_OFFSET - правильно ли я понимаю, что это смещение будет суммировано с вычисленным значением?
Y_MIN, Y_MAX - эти значения должны быть как то коррелировать с предельным рассогласованием, как их правильно высчитать?
Допустим, у меня уровень изменяется от 0 до 4 м.в.ст., тогда минимальное и максимальное воздействие будет +-4? Хотя, вряд ли такие значения можно получить с коэффициентами... тогда как?
Спасибо за участие.

PS. Жутко не хватает нормального описания функций, по типу описания API для операционных систем.

krollcbas
26.05.2017, 10:46
Y_OFFSET - правильно ли я понимаю, что это смещение будет суммировано с вычисленным значением?
Да, вы правильно понимаете
Y_MIN, Y_MAX - эти значения должны быть как то коррелировать с предельным рассогласованием, как их правильно высчитать?
Это пределы управления устройством. Например от 0 до 100%. Эти величины потом необходимо масштабировать в аналоговый выход

mf_
26.05.2017, 12:54
Это пределы управления устройством. Например от 0 до 100%. Эти величины потом необходимо масштабировать в аналоговый выход
Спасибо за быстрый ответ. Я думал, что значения ACTUAL, SET_POINT, Y должны быть одной размерности, но судя по вашему ответу я ошибался. Получается, что именно Y_MIN, Y_MAX задают размерность величине Y?
Если на вход пида мы подадим ACTUAL:=400 (kPa), SET_POINT:= 200 (kPa) и Y_MIN, Y_MAX соответственно 0 и 100%, то на выходе мы получим какое-то значение в % от 0 до 100?

krollcbas
26.05.2017, 13:06
Будет 0, если пропорциональный коэффициент = 1(положительный), интегральный поставьте 10. Для начала

mf_
26.05.2017, 13:10
Будет 0, если пропорциональный коэффициент = 1(положительный), интегральный поставьте 10. Для начала
Это вы уже прикинули какое значение будет на выходе при определенных коэффициентах, но мне было важно понять верен ли мой вывод о разных размерностях вышеуказанных переменных и то, что на выходе значение будет в % (условно).

Sulfur
29.05.2017, 08:43
Подскажите пожалуйста, верно ли я расписал порт Modbus?
Задача состоит в том, что читать со слейва нужно постоянно, а писать в него только по изменению значений.
ПЛК110М2, слейв - Delta C2000.
31451
31452

Rednaxel
02.06.2017, 15:19
Задача состоит в том, что читать со слейва нужно постоянно, а писать в него только по изменению значений.
Не могу посмотреть картинку, нет доступа, но общий принцип такой:
в модуле Universal Modbus device вы указываете время опроса Polling time в ms - это и будет частота, с которой функции чтения (InputModule) опрашивают ваш Slave.
С другой стороны, функции записи (output module) записывают значение переменной в указанный регистр только после его изменения, на то они и функции записи.

Эдуард_Н
08.06.2017, 07:34
Какой элемент в КДС может заменить "DC32" из ОЛ?

energvk
08.06.2017, 17:15
Добрый день.

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



(* фронты включения насосов *)
rtrPumpOn1(CLK:= inNA1, Q=> );
rtrPumpOn2(CLK:= inNA2, Q=> );
rtrPumpOn3(CLK:= inNA3, Q=> );
rtrPumpOn4(CLK:= inNA4, Q=> );
rtrPumpOn5(CLK:= inNA5, Q=> );
rtrPumpOn6(CLK:= inNA6, Q=> );

(* фронты выключения насосов *)
ftrPumpOn1(CLK:= inNA1, Q=> );
ftrPumpOn2(CLK:= inNA2, Q=> );
ftrPumpOn3(CLK:= inNA3, Q=> );
ftrPumpOn4(CLK:= inNA4, Q=> );
ftrPumpOn5(CLK:= inNA5, Q=> );
ftrPumpOn6(CLK:= inNA6, Q=> );

(* считаем количество работающих насосов *)
pumpsCount := pumpsCount + BOOL_TO_INT(rtrPumpOn1.Q) + BOOL_TO_INT(rtrPumpOn2.Q) + BOOL_TO_INT(rtrPumpOn3.Q) + BOOL_TO_INT(rtrPumpOn4.Q) + BOOL_TO_INT(rtrPumpOn5.Q) + BOOL_TO_INT(rtrPumpOn6.Q) -
BOOL_TO_INT(ftrPumpOn1.Q) - BOOL_TO_INT(ftrPumpOn2.Q) - BOOL_TO_INT(ftrPumpOn3.Q) - BOOL_TO_INT(ftrPumpOn4.Q) - BOOL_TO_INT(ftrPumpOn5.Q) - BOOL_TO_INT(ftrPumpOn6.Q);

(* запоминаем максимальное количество работающих насосов *)
IF maxPumpsCount < pumpsCount THEN
maxPumpsCount := pumpsCount;
END_IF;

IF rtrHour.Q THEN
dataFlow.maxPumpsOn[tmTimeNow.Hour] := INT_TO_STRING(maxPumpsCount); (* сохраняем значение в структуру *)
maxPumpsCount := 0; (* обнуляем значение *)
oldHour := tmTimeNow.Hour; (* обнуляем разницу времени *)
END_IF;


И эти данные, соответственно, раз в час сохраняются в файл.

Что непонятно, так это то, что в некоторые часы я получаю нулевые значения, хотя на 100% уверен, что в эти часы не было такого, что ни один насос не работал. После этого блока уже вызывается программа записи в файл, которая пишет значения структуры "dataFlow", также раз в час по фронту "rtrHour.Q". Как то можно это объяснить?

Crusash
08.06.2017, 18:49
Добрый день.

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


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

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

energvk
08.06.2017, 23:26
потому что в эти часы у вас ничего не включалось и не выключалось, потому счетчик и не рос...
хотя да, странно что счетчик обнуляется..

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

Ну мне нужно знать сколько максимум насосов работало в этом часу, а не сколько работает в текущий момент сохранения.
После обнуления:


IF rtrHour.Q THEN
maxPumpsCount := 0; (* обнуляем значение *)
END_IF;

maxPumpsCount все равно становится равным количеству работающих насосов в этот момент, согласно

(* запоминаем максимальное количество работающих насосов *)
IF maxPumpsCount < pumpsCount THEN
maxPumpsCount := pumpsCount;
END_IF;
И всё работает как задумано, но в некоторые часы (процентов 5% случаев может, не считал точно) maxPumpsCount оказывается равным 0, хотя это не так. вот и пытаюсь понять в чем косяк

petera
09.06.2017, 10:30
Ну мне нужно знать сколько максимум насосов работало в этом часу, а не сколько работает в текущий момент сохранения.
После обнуления:


IF rtrHour.Q THEN
maxPumpsCount := 0; (* обнуляем значение *)
END_IF;

maxPumpsCount все равно становится равным количеству работающих насосов в этот момент, согласно

(* запоминаем максимальное количество работающих насосов *)
IF maxPumpsCount < pumpsCount THEN
maxPumpsCount := pumpsCount;
END_IF;
И всё работает как задумано, но в некоторые часы (процентов 5% случаев может, не считал точно) maxPumpsCount оказывается равным 0, хотя это не так. вот и пытаюсь понять в чем косяк
Чтобы знать сколько максимум насосов работало в этом часу, а не сколько работает в текущий момент сохранения совсем не обязательно подсчитывать фронты включения и фронты выключения.
Для этого есть стандартный оператор MAX() и как было верно сказано, нужно просто посчитать количество включенных насосов
Никаких промежуточных счетчиков не нужно!!
Как в прочем и r_trigg, f_trigg


maxPumpsCount := MAX (maxPumpsCount , (BOOL_TO_INT(inNA1) +BOOL_TO_INT( inNA2) + BOOL_TO_INT(inNA3) +
BOOL_TO_INT(inNA4) +BOOL_TO_INT( inNA5) +BOOL_TO_INT( inNA6) ) );

IF rtrHour.Q THEN
dataFlow.maxPumpsOn[tmTimeNow.Hour] := INT_TO_STRING(maxPumpsCount); (* сохраняем значение в структуру *)
oldHour := tmTimeNow.Hour;

(* А теперь, подсчитать количество ВКЛЮЧЕННЫХ. насосов на начало следующего часа *)
maxPumpsCount := BOOL_TO_INT(inNA1) +BOOL_TO_INT( inNA2) + BOOL_TO_INT(inNA3) +
BOOL_TO_INT(inNA4) +BOOL_TO_INT( inNA5) +BOOL_TO_INT( inNA6);
END_IF;

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

diams
09.06.2017, 20:01
Имеется ПЛК110, являющийся в системе устройством ввода вывода. Передача по modbus. Сам ПЛК является slave устройством. Необходимо выставлять регистры состояния входов, записывать значения выходов и получать из сети промежуточные переменные. Все бы ничего, но мастер при опросе ищет устройство, регистры которого начинаются с адреса 0ХА400. В конфигураторе ПЛК для слэйва задание адреса не подразумевается, они поочередно идут, начиная с нулевого. Каким образом можно обозвать переменную и присвоить ей конкретный адрес регистра? И еще: можно ли знать, что переменная прочитана (пришел запрос на чтение данного регистра соответсвующей функцией)? Хотел через modbus.lib но он работает только с мастером.

energvk
09.06.2017, 20:05
Да, действительно,что то я забыл про МАХ(). Думаю ваш вариант будет правильнее работать. Спасибо.

shymok90
10.06.2017, 23:03
Здравствуйте, нужна помощь. Некорректно работает тайм аут мастера: Панель СПК110 (мастер), подключение по modbus через 485; 2 слейва из 3 отключены; Тайм аут мастера стоит 200 мс; Время между фреймами 20 мс; Реальное время, которое уходит на эти 2 отключенных слейва 20 с! Как исправить? Спасибо за помощь

sanatolich
14.06.2017, 11:43
Добрый день! ПЛК пока не приобретен. Ориентируясь на ПЛК73, дописываю программу управления системой отопления и горячей водой под 2 существующих источника тепла (твердотопливный и электро) + в перспективе третий (газ) на CFC. Много чего удалось победить: управление одной кнопкой двумя-тремя разными *родственными* режимами, управление одной кнопкой взаимоисключающими режимами, управление задвижкой двустороннего действия. Много времени ушло на проработку *защиты от дурака*, когда например начинают нажимать лихорадочно на все подряд кнопки, нажимают и удерживают, и так далее. Но споткнулся о задачу реализации режима работы электронагревом в ночное время суток - с 23час5мин до 5час55мин. Интуитивно понимаю, что решение крутится вокруг таймера RTC. Но у него какой -то странный (обрезанный) функционал. Не понятно, зачем этот таймер вообще есть в стандарт.либ. Вопрос у меня разветвленный. Как сделать автоматическое считывание времени из ЦП персонального компьютера (для режима эмуляции) или ПЛК, и записи на вход блока PDT? Второй вариант вопроса. Как написать суточный (не недельный) таймер вручную с нуля? И в догонку еще вопрос. Извините, я еще только учусь, но есть ли в ПЛК функция автостарта программы на случай отключения электричества?

Вольд
14.06.2017, 12:11
есть ли в ПЛК функция автостарта программы на случай отключения электричества?

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

sanatolich
14.06.2017, 12:44
Пропало электричество - ПЛК перестал работать, появилось электричество - запустилась с нуля программа ПЛК. Что еще надо ?

Еще раз повторюсь, я новичок. Но тогда зачем кнопки на плк ПУСК и СТОП?

den_ger
14.06.2017, 13:17
Еще раз повторюсь, я новичок. Но тогда зачем кнопки на плк ПУСК и СТОП?

что бы программировать их под свои задачи, а так же заходить в стандартное меню ПЛК

sanatolich
14.06.2017, 13:26
Спасибо. С автостартом понял. Как быть с суточным таймером? Кто поможет?

petera
14.06.2017, 14:30
... споткнулся о задачу реализации режима работы электронагревом в ночное время суток - с 23час5мин до 5час55мин. Интуитивно понимаю, что решение крутится вокруг таймера RTC. Но у него какой -то странный (обрезанный) функционал. Не понятно, зачем этот таймер вообще есть в стандарт.либ. Вопрос у меня разветвленный. Как сделать автоматическое считывание времени из ЦП персонального компьютера (для режима эмуляции) или ПЛК, и записи на вход блока PDT? Второй вариант вопроса. Как написать суточный (не недельный) таймер вручную с нуля? ..
Все значительно проще, чем Вы думали. Никаких таймеров RTC ненужно :rolleyes:
31675

А что такое "блок PDT"? И зачем он Вам нужен?

sanatolich
14.06.2017, 14:53
Спасибо за решение! Попробую разобраться. Про PDT я не верно выразился. Вход PDT блока RTC))
И все таки вопрос про считывание программой времени из памяти ПК остался. Как-то это можно реализовать?

sanatolich
14.06.2017, 14:57
Все. Понял)) Объявляем переменную реального времени в плк. И она в программе показывает реальное время) Предыдущий вопрос снимается. Спасибо.

petera
14.06.2017, 15:12
Спасибо за решение! Попробую разобраться. Про PDT я не верно выразился. Вход PDT блока RTC))
И все таки вопрос про считывание программой времени из памяти ПК остался. Как-то это можно реализовать?
Никак.
Для режима эмуляции проста записывайте "ручками" значения времени суток в секундах прямо в конфигурации, в переменную "часы контроллера" (у меня в примере это CurDT). Т.е. значение - (Час х 3600)+(Мин х 60)+ сек.

ggenn
17.06.2017, 19:48
Кто знает, как прописать ТРМ1 датчик температуры NTC 10kOm?

ParuSnow
20.06.2017, 17:58
уважаемые разработчики OBEN!

зделайте 3-ёх контактные кнопки,
с помощью которых можно будет собирать кнопочные матрицы, такие как на Фото.

Для ПР110 получается
16-36 кнопочная станция.

Dimooon
23.06.2017, 12:06
Здравствуйте. использую библиотечный блок Пид регулятор,для управления нагревателем 3 кВт (очень инертное изменение температуры) с выводом данных на панель СП-270. Недавно выдал глюк, которого в реальности быть не может. Сделал сброс ПЛК, глюк исчез, но Пид регулирование теперь отличается от того, что было раньше в худшую сторону. Температура прыгает вокруг уставки, хотя никаких значений я не изменял. Подскажите - где копать?

Dimooon
24.06.2017, 14:11
Сам отвечу - замкнул тэн, и ТТР с управлением 4-20 мА сгорела и залипла в 100% открытом состоянии, все грелось на полную, а сигнал управления был на 0, так как реальная температура превышала уставку. А эти иглы в графике - замыкания тена на землю. Всем спасибо

dorofeevms
27.06.2017, 07:15
Добрый день!
Начинаю вникать в процесс программирования owen. Как просто "программист" состоялся ))
Возможно, странный вопрос, но все же.
А можно в операторах непосредственно использовать ВХОДЫ (глобальные переменные, связанные с входами) ?
Вот такой фрагмент, скажем, допустим ?

В теле функции -
...
If diP then
... do something
end_if

diP - дискретный вход, если он в состоянии "1" - чего то сделать.
Какие особенности и/или подвохи ?
Или надо сначала в локальную переменную считать вход fsysP := diP, а затем уже использовать fsysP в операторах ?

capzap
27.06.2017, 07:26
Добрый день!
Начинаю вникать в процесс программирования owen. Как просто "программист" состоялся ))
Возможно, странный вопрос, но все же.
А можно в операторах непосредственно использовать ВХОДЫ (глобальные переменные, связанные с входами) ?
Вот такой фрагмент, скажем, допустим ?

В теле функции -
...
If diP then
... do something
end_if

diP - дискретный вход, если он в состоянии "1" - чего то сделать.
Какие особенности и/или подвохи ?
Или надо сначала в локальную переменную считать вход fsysP := diP, а затем уже использовать fsysP в операторах ?

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

dorofeevms
27.06.2017, 08:10
Видимо неправильно вопрос задал ) по области видимости как бы вопросов нет.
Сам способ использования в конструкции IF (while, и аналогичных) переменной-входа - допустим ? Тонкостей и нюансов никаких нет ?

capzap
27.06.2017, 08:32
упрощенно, сперва в глобальные переменные записываются сигналы с физ.входов, далее выполняется пользовательский код, далее из соответствующих переменных записываются в физ.выхода. Поэтому проблем, программных, быть не должно, антидребезг решается фильтрацией или программно через TON. С while(и другими циклами) могут быть проблемы, приводящие к перегрузке плк, выполнение такого кода по времени должно быть не более ограничений в конфигурации на максимальное выполнение цикла контроллера, поэтому неадекватная задержка на while может сбросить выполнение программы

КБА
27.06.2017, 08:49
Видимо неправильно вопрос задал ) по области видимости как бы вопросов нет.
Сам способ использования в конструкции IF (while, и аналогичных) переменной-входа - допустим ? Тонкостей и нюансов никаких нет ?
Из встроенной в CoDeSys 2.3 справки:

Что такое глобальные переменные?
Объявленные как глобальные, "нормальные" переменные, реманентные переменные и константы имеют область видимости, включающую весь проект.
Обратите внимание: Если в некотором программном компоненте проекта объявлена локальная переменная, имя которой совпадает с именем глобальной переменной, то в данном компоненте будет работать локальная переменная!

Использование прямых адресов в функциональных блоках противоречит идеологии независимости данных разных экземпляров функционального блока. Конфигурационные, или "шаблонные", переменные решают эту проблему.


Прочитайте про использование конфигурационных переменных (VAR_CONFIG) в той же справке, там есть примеры использования.

dorofeevms
27.06.2017, 08:50
Предельно понятно, спасибо!
Ограничение по времени учту, while не использую сам почти (редко), процесс достаточно инерционный, поэтому цикл задавать очень короткий смысла нет.
Учту обязательно. Пока, видимо, вопросы в раздел "для новичков" буду писать )

Юрий27
27.06.2017, 15:40
Помогите, не пойму что надо. Написал функциональный блок (первый в жизни), поставил в проект (тоже первый), при компиляции ошибка 3781.
Что он хочет?
31843
31844

Юрий27
27.06.2017, 15:56
Имена начинаются с букв или _

Благодарю все получилось:rolleyes:

Sulfur
30.06.2017, 11:22
Для чтения используется режим By poll time, для записи By value change.
Меня смущало то, что чтение и запись разнесены на разные экземпляры UMD, но оба экземпляра работают на один адрес слейва. Воплотил в железе, проверил, вроде работает.

energvk
05.07.2017, 13:29
Добрый день!
Не совсем понятно как работает блок RAMP_INT(REAL). Читал, что при подаче TRUE на вход RESET вход IN транслируется на OUT, а в хелпе пишут: "Установка двоичного входа RESET в TRUE вызывает сброс RAMP_INT в начальное состояние". Но по факту получается не так.
При работе блока при подаче true на вход reset, происходит просто остановка работы на текущем значении. При изменении in на out ничего не меняется, он остается на последнем значении. Соответственно, вопрос: как сбросить out блока, или установить нужное значение, с которого нужно начинать работу?

Kresh74
05.07.2017, 14:25
На вход In подается значение, к которому будет стремиться значение на выходе.
на вход ASCEND и DESCEND, подаются числа, которые влияют на скорость изменения значения на выходе.
на вход TIMEBASE задается время за которое изменится значение на выходе, до у ставки.

Если на входах ASCEND и DESCEND значение будет равно 100, то время TIMEBASE будет идти 1 к 1,
а если на входах ASCEND и DESCEND к примеру подать значение 50, то время TIMEBASE будет идти в 2 раза дольше.

energvk
05.07.2017, 14:59
На вход In подается значение, к которому будет стремиться значение на выходе.
на вход ASCEND и DESCEND, подаются числа, которые влияют на скорость изменения значения на выходе.
на вход TIMEBASE задается время за которое изменится значение на выходе, до у ставки.

Если на входах ASCEND и DESCEND значение будет равно 100, то время TIMEBASE будет идти 1 к 1,
а если на входах ASCEND и DESCEND к примеру подать значение 50, то время TIMEBASE будет идти в 2 раза дольше.

В этом то понятно, кроме

Если на входах ASCEND и DESCEND значение будет равно 100, то время TIMEBASE будет идти 1 к 1,
а если на входах ASCEND и DESCEND к примеру подать значение 50, то время TIMEBASE будет идти в 2 раза дольше.
Мне казалось ASCEND и DESCEND это значения, на которые происходит прирост/уменьшение out за время TIMEBASE.

Непонятно, как можно сбросить/присвоить OUT, так как он после паузы в работе сохраняет последнее значение.

capzap
05.07.2017, 15:13
В этом то понятно, кроме

Мне казалось ASCEND и DESCEND это значения, на которые происходит прирост/уменьшение out за время TIMEBASE.

Непонятно, как можно сбросить/присвоить OUT, так как он после паузы в работе сохраняет последнее значение.

ну так тут делов то, просто взять и открыть библиотеку как проект в КДС и посмотреть исходный код этого ПОУ. Как такового сброса выхода нет, в идеале он равен входу, от этого и надо "плясать"

energvk
05.07.2017, 15:54
Понял,спасибо, придётся так и сделать


в идеале он равен входу


К сожалению это не так

P.S. Ага, посмотрел исходник - разобрался. Чтобы получить OUT:=IN нужно TIMEBASE приравнять к нулю

Dimooon
07.07.2017, 15:46
Здравствуйте . ПЛК 100 отлично работал год, потом был простой 7 месяцев. Когда запустил, после перерыва, программа стала работать некорректно. Появились какие - то "инвалиды" в таймерах. Грешу на железную часть ПЛК. Датчики в норме. ПРограмму перезаливал - глюки остаются. Подскажите пжс - что это может быть, и как это возможно устранить?



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

Юрий27
11.07.2017, 10:27
Добрый день. Подскажите, как лучше поступить с программой.
Состоит из 9 подпрограмм. Они незначительно отличаются, но в базе содержат 4 функциональных блока (которые сам написал)
1. Гистерезис с 5 уставками, и управляющими входами.
2. Таймер с 5 уставками и упр. входами
3. блок управления частотником, тоже с управлением, и уставками.
4. объединенный блок блинка и счетчика импульсов.

в общем, размер каждой программы солидный, попробовал все разместить в плк_прг заняло в таком виде почти все пространство отведенное codesis на написание программы, и комп начал глючить, не хватает мощности работать с такой программой.
Рассматриваю 2 варианта:
1. Каждую программу засунуть в функциональный блок (это уже освоил, но есть подозрения, что значительно увеличится размер программы)
2. Создать дерево программ (останавливает то, что вообще не понял как настраивать конфигурацию задач)

Егор_Егор
11.07.2017, 15:41
Здравствуйте. Подскажите, пожалуйста, почему не работает выход ФБ. При этом, если ту же программу написать в PLC_PRG всё работает. ПЛК160-24.А-М
32024
32025
32026

petera
11.07.2017, 16:20
Здравствуйте. Подскажите, пожалуйста, почему не работает выход ФБ. При этом, если ту же программу написать в PLC_PRG всё работает. ПЛК160-24.А-М
32024
32025
32026

У Вас в ФБ одной и той же переменной присваиваются значения в разных местах. Актуальным будет то значение у которого номер будет максимальным, в частности №31 (на выходе OR №30). И не важно, что было присвоено переменной AVAR_TEMP_SENSOR раннее.
Необходимо собирать условия вкл. переменной в одном месте, например, вместо трех OR использовать один с шестью входами.
Аналогично и в PLC_PRG. У Вас A13_OUT.11 присваивается в двух местах, работать тоже не будет, актуальным всегда будет значение с выхода OR №53.

Егор_Егор
11.07.2017, 16:39
Спасибо, понял)

RV9WFJ
12.07.2017, 08:21
Добрый день. Подскажите, как лучше поступить с программой.
Состоит из 9 подпрограмм. Они незначительно отличаются, но в базе содержат 4 функциональных блока (которые сам написал)
1. Гистерезис с 5 уставками, и управляющими входами.
2. Таймер с 5 уставками и упр. входами
3. блок управления частотником, тоже с управлением, и уставками.
4. объединенный блок блинка и счетчика импульсов.

в общем, размер каждой программы солидный, попробовал все разместить в плк_прг заняло в таком виде почти все пространство отведенное codesis на написание программы, и комп начал глючить, не хватает мощности работать с такой программой.
Рассматриваю 2 варианта:
1. Каждую программу засунуть в функциональный блок (это уже освоил, но есть подозрения, что значительно увеличится размер программы)
2. Создать дерево программ (останавливает то, что вообще не понял как настраивать конфигурацию задач)
Что-то я сильно сомневаюсь в том что вы написали столько, что не влезает. Скорее всего библиотек нацепляли много. Один только OSCAT, если целиком, выносит все ресурсы. Смотрите в эту сторону.

Юрий27
12.07.2017, 11:18
Здравствуйте. Подскажите, пожалуйста, почему не работает выход ФБ. При этом, если ту же программу написать в PLC_PRG всё работает. ПЛК160-24.А-М
32024
32025
32026
Добрый день, вот такая же беда, как у Егора, ток как справится с ней даже не знаю, есть ли возможность как то правило выбора блока выставить, например при нажатии пуска1 работать только от блока1, а на остальные не обращать внимания.
А то у меня больше 150 входов, и только 6 выходов, а хотел в виде 9 программ сделать.
например так:32030
а внутри каждый такой:
32032
и каждый блок внутри блока такой:32033
И если описывать всю программу в ST, то вообще для меня будет жесть. Есть какие нибудь способы упростить, я хотел сделать 9 разных подпрограмм, как в примере, но все они выходят на одни 6 выходов.

capzap
12.07.2017, 11:46
Добрый день, вот такая же беда, как у Егора, ток как справится с ней даже не знаю, есть ли возможность как то правило выбора блока выставить, например при нажатии пуска1 работать только от блока1, а на остальные не обращать внимания.
А то у меня больше 150 входов, и только 6 выходов, а хотел в виде 9 программ сделать.
например так:32030
а внутри каждый такой:
32032
и каждый блок внутри блока такой:32033
И если описывать всю программу в ST, то вообще для меня будет жесть. Есть какие нибудь способы упростить, я хотел сделать 9 разных подпрограмм, как в примере, но все они выходят на одни 6 выходов.

а в чем различие производства кефира от ряженки, что для них нужно обязательно отдельную программу написать, по сути на вход блока надо подать соответствующую рецептуру, дополнительно еще параметр, отвечающий за выполнение или исключение тех или иных операций для конкретного продукта
Даю наводку, шесть емкостей и гвс и рецепты на 15 продуктов работаю в 160-ом без каких либо проблем

Юрий27
12.07.2017, 11:52
Просто заказчики хотят, чтоб уставки продуктов были в памяти, а им нужно было максимум нажать пару кнопок.
и при желании отредактировать была возможность.

capzap
12.07.2017, 12:07
Просто заказчики хотят, чтоб уставки продуктов были в памяти, а им нужно было максимум нажать пару кнопок.
и при желании отредактировать была возможность.

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

gen30
13.07.2017, 04:19
Добрый день! Столкнулся со следующей проблемой... Никак не могу установить таргет-файл для CodeSys...Имеется контроллер ПЛК100-220.Р-М. В папке с таргет-файлами этот контроллер отсутствует...
Ниже содержимое диска:
32046
32047
При попытке установить все файлы он выводит искомый контроллер в списке:
32048
Но после установки, при создании нового проекта этот контроллер отсутствует в IDE:
32049
Поиск нужного файла на официальном сайте не дал результат.
Что делать?

capzap
13.07.2017, 07:11
Используйте тот который заканчивается на r-m

gen30
13.07.2017, 09:32
Используйте тот который заканчивается на r-m

Спасибо! В прошлый раз он "не пошел"... Теперь работает нормально :-)

sosna
18.07.2017, 12:42
Всем добрый день. Подскажите, что означает подача на дискретный вход макс 10 кГц при применении аппаратного счетчика для ПЛК 150 ? Ни как не могу найти где это настраивается в ПЛК?

Гарчев Евгений
18.07.2017, 18:40
Всем добрый день. Подскажите, что означает подача на дискретный вход макс 10 кГц при применении аппаратного счетчика для ПЛК 150 ? Ни как не могу найти где это настраивается в ПЛК?

Здравствуйте! Речь идет о подмодулях дискретных входов "Trigger", "Counter 16bit", "Counter SP". Описание в РП, пп. 2.1.3, 2.1.4, 2.1.6 - http://www.owen.ru/uploads/rp_plc100-plc150-plc154_25.pdf

sosna
18.07.2017, 19:53
Спасибо Евгений.

KIPetek
20.07.2017, 13:06
Подскажите, пожалуйста. Нужно сделать так, чтобы двигатель работал некоторое время(4мин), потом была пауза(60мин), затем повторение этого в автоматическом режиме. Как это организовать, никак не могу допереть.

capzap
20.07.2017, 13:10
Подскажите, пожалуйста. Нужно сделать так, чтобы двигатель работал некоторое время(4мин), потом была пауза(60мин), затем повторение этого в автоматическом режиме. Как это организовать, никак не могу допереть.

http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf стр.357 блок BLINK

KIPetek
20.07.2017, 13:23
Огромное спасибо!

Romeo13
27.07.2017, 06:12
Контроллер ПЛК-100 после подачи питания находится в режиме СТОП. Кнопка переназначена, поэтому запустить можно только через среду CoDeSys, что крайне неудобно. Почему так происходит?
P.S. Иногда (вроде как при непродолжительном снятии питания) он всё же в режиме СТАРТ, батарейка целая, > 3 В.

capzap
27.07.2017, 06:46
Контроллер ПЛК-100 после подачи питания находится в режиме СТОП. Кнопка переназначена, поэтому запустить можно только через среду CoDeSys, что крайне неудобно. Почему так происходит?
P.S. Иногда (вроде как при непродолжительном снятии питания) он всё же в режиме СТАРТ, батарейка целая, > 3 В.

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

Slait_gul
27.07.2017, 18:15
Добрый день, подскажите пожалуйста, как при подаче питания на контроллер выключить все выходи на время около 1 минуты, для того чтобы загрузилась и проинициализировалась вся система, а дальше контроллер работал по программе???

создал системное событие OnPowerOn и прописал все выходы в режим False, но при старте все равно выходы сразу включаются из-за условий написанной программы.

S.A.D.
30.07.2017, 12:34
Добрый день. Задумался над реализацией обмена между ПЛК и АРМом посредством сетевых переменных как способ устранения всех текущих моих головных болей. Т.е на одном конце плк udp, на другом конце программа на c#. Собственно вопрос существует ли какое то описание протокола этих сетевых переменных и номера используемых портов. Чувствую что заветные id групп сетевых переменных напрямую связаны с номерами портов. Или только wireshark меня спасёт?

Lyric
02.08.2017, 16:53
Здравствуйте. Задача вроде простая, но ранее её делать не приходилось.

Нужно в одну энергонезависимую переменную организовать счёт моточасов если сигнал "работа двигателя" в TRUE.
Чтобы не убивать память обновлением этой энергонезависимой переменной каждый цикл, - думаю сделать переменную счёта отдельную, а чтобы в энергонезаивисимую это значение записывалось только при выключении питания ПЛК (речь о ПЛК110 старой версии).

Вопросов несколько:
1) Целесообразно ли использовать для этой цели переменную "Power Status" из блока статистики? То есть когда она в FALSE - тогда организовывать запись в энергонезависимую переменную?
2) Энергонезависимая переменная при этом без разницы где будет описана, - хоть в конфигурации хоть в GLOBAL RETAIN?
3) Ну и сам тип переменной RETAIN что означает? Как в железке работает она?
А) Что каждый раз при изменении этой переменной новое значение сразу записывается в энергонезависимый EEPROM/FLASH?
Б) Или переменная RETAIN - она при обычной работе ведёт себя как будто живёт в оперативной памяти, а в энергонезависимую часть памяти записывается только при отключении питания ПЛК?

Если как в варианте Б - значит моточасы прямо в ней и можно вести, не заморачиваясь с Power Status'ом и дополнительной переменной в оперативной памяти?

Подскажите как на самом деле это работает. Задача пустяковая, но вот этот момент с риском убийства памяти напрягает. Хотя, для сетевого обмена ВСЕ переменные описываются в конфигурации, и те, которые должны быть энергонезависимыми и обычные, и никакая память ещё ни разу не умирала.

petera
02.08.2017, 20:40
Здравствуйте. Задача вроде простая, но ранее её делать не приходилось.

Нужно в одну энергонезависимую переменную организовать счёт моточасов если сигнал "работа двигателя" в TRUE.
Чтобы не убивать память обновлением этой энергонезависимой переменной каждый цикл, - думаю сделать переменную счёта отдельную, а чтобы в энергонезаивисимую это значение записывалось только при выключении питания ПЛК (речь о ПЛК110 старой версии).

Вопросов несколько:
1) Целесообразно ли использовать для этой цели переменную "Power Status" из блока статистики? То есть когда она в FALSE - тогда организовывать запись в энергонезависимую переменную?
2) Энергонезависимая переменная при этом без разницы где будет описана, - хоть в конфигурации хоть в GLOBAL RETAIN?
3) Ну и сам тип переменной RETAIN что означает? Как в железке работает она?
А) Что каждый раз при изменении этой переменной новое значение сразу записывается в энергонезависимый EEPROM/FLASH?
Б) Или переменная RETAIN - она при обычной работе ведёт себя как будто живёт в оперативной памяти, а в энергонезависимую часть памяти записывается только при отключении питания ПЛК?

Если как в варианте Б - значит моточасы прямо в ней и можно вести, не заморачиваясь с Power Status'ом и дополнительной переменной в оперативной памяти?

Подскажите как на самом деле это работает. Задача пустяковая, но вот этот момент с риском убийства памяти напрягает. Хотя, для сетевого обмена ВСЕ переменные описываются в конфигурации, и те, которые должны быть энергонезависимыми и обычные, и никакая память ещё ни разу не умирала.
В ПЛК реализован "Вариант Б".
Так, что никакого "убийства" флеш памяти не будет.

Lyric
03.08.2017, 07:24
В ПЛК реализован "Вариант Б".
Так, что никакого "убийства" флеш памяти не будет.

Спасибо за быстрый ответ)

Lyric
03.08.2017, 10:46
А файл создать во FLASH-памяти можно только через модуль "Архиватор"?

petera
03.08.2017, 12:42
А файл создать во FLASH-памяти можно только через модуль "Архиватор"?

Совсем не обязательно.
Нужно использовать библиотеку SysLibFile.lib
На диске к ПЛК есть эта библиотека
32395
И описание
32396

32397

Там же можно и пример посмотреть.

Lyric
03.08.2017, 16:08
Совсем не обязательно.
Нужно использовать библиотеку SysLibFile.lib
На диске к ПЛК есть эта библиотека
32395
И описание
32396

32397

Там же можно и пример посмотреть.

Большое спасибо:). И ещё есть новый отдельный вопрос - как и где надо описать переменную двойного типа RETAIN PERSISTENT чтобы она на самом деле обладала свойствами обоих типов? Находил где-то таблицу со свойствами переменных в кодесисе и про переменную типа PERSISTENT написано что она сохраняет своё значение даже при перепрошивке ПЛК. А на деле - при перепрошивке значение переменной слетает в ноль, точно так же как и все остальные... Описывал свою переменную типа RETAIN PERSISTENT в разделе глобальных переменных.

Я всё пытаюсь создать переменную, которая бы не затиралась ни при каких манипуляцих с ПЛК, ищу разные пути. Записывать её в файл - наверное будет единственный вариант это реализовать?

razv
04.08.2017, 09:49
Здравствуйте
Подскажите как скопировать программный модуль или функцию на CFC из одного проекта в другой
Простое выделение и копирование блоков ни чего потом не вставляет в окно другого проекта
Библиотеку делать не хочется
Спасибо

Василий Кашуба
04.08.2017, 10:00
Здравствуйте
Подскажите как скопировать программный модуль или функцию на CFC из одного проекта в другой
Простое выделение и копирование блоков ни чего потом не вставляет в окно другого проекта
Библиотеку делать не хочется
Спасибо
А в другом проекте установлены такие же библиотеки?

petera
04.08.2017, 10:00
Здравствуйте
Подскажите как скопировать программный модуль или функцию на CFC из одного проекта в другой
Простое выделение и копирование блоков ни чего потом не вставляет в окно другого проекта
Библиотеку делать не хочется
Спасибо

Экспорт - Импорт
Экспорт
Либо так, если один POU
32419
Либо так, если POU много
32420 32421

Затем в любом другом проекте
32422 32423

Sulfur
04.08.2017, 10:51
Б) Или переменная RETAIN - она при обычной работе ведёт себя как будто живёт в оперативной памяти, а в энергонезависимую часть памяти записывается только при отключении питания ПЛК?


В ПЛК старой модели для сохранения ретайнов стоит аккумулятор. Иногда они выходят из строя, что влечет за собой потерю всех ретайн. Чем чаще выключается ПЛК, тем быстрее умирает аккумулятор. На своих двоих старых ПЛК просто поменял акк на более мощный (оригинал 140ма\ч, поставил 450ма\ч). Родные акки прожили три года, хотя некоторые пользователи отмечали, что умирает через год. Кроме того, если позволяет проект, то время работы ПЛК после пропадания питания нужно уменьшить до минимума. Штатные настройки - 6 секунд, я ставил 2 сек. Это позволит продлить жизнь акку, т.к. в момент отключения питания ПЛК начинает работать от акка установленное в проекте время.
А ретайнами пользовался как обычными переменными, проблем не наблюдалось. Причем одна переменная при работе обновляется до 100 раз в секунду, при этом ПЛК работает в режиме 24\7.

Lyric
04.08.2017, 16:47
Вроде получилось создать файл во FLASH-памяти,, записывать в него и считывать данные. Расширение у файла поставил .txt
Теперь хотелось бы его из памяти ПЛК вытянуть на ПК. Средствами Кодесиса это можно сделать? Если нет - то чем это сделать проще всего?


В ПЛК старой модели для сохранения ретайнов стоит аккумулятор. Иногда они выходят из строя, что влечет за собой потерю всех ретайн. Чем чаще выключается ПЛК, тем быстрее умирает аккумулятор. На своих двоих старых ПЛК просто поменял акк на более мощный (оригинал 140ма\ч, поставил 450ма\ч). Родные акки прожили три года, хотя некоторые пользователи отмечали, что умирает через год. Кроме того, если позволяет проект, то время работы ПЛК после пропадания питания нужно уменьшить до минимума. Штатные настройки - 6 секунд, я ставил 2 сек. Это позволит продлить жизнь акку, т.к. в момент отключения питания ПЛК начинает работать от акка установленное в проекте время.
А ретайнами пользовался как обычными переменными, проблем не наблюдалось. Причем одна переменная при работе обновляется до 100 раз в секунду, при этом ПЛК работает в режиме 24\7.

Понятно, спасибо. А не подскажете где эта настройка чтобы штатные 6 секунд работы аккумулятора уменьшить?

Lyric
05.08.2017, 07:54
Вроде получилось создать файл во FLASH-памяти,, записывать в него и считывать данные. Расширение у файла поставил .txt
Теперь хотелось бы его из памяти ПЛК вытянуть на ПК. Средствами Кодесиса это можно сделать? Если нет - то чем это сделать проще всего?


Файл стянул через PLC_IO. Но у него сбитая кодировка, кракозябры вместо цифр. Как-то можно настроить кодировку? Или формат файла TXT не совсем подходит для этой цели? Конечно, в финальном проекте программы - никто не будет лезть и считывать этот файл из ПЛК, но всё-таки мне сейчас в процессе отладки хотелось бы видеть что туда пишется.

P.S. Эта тема становится на мой личный блог:) Но хотелось бы, конечно, ответов на те вопросы, которые я задавал..

Владимир Ситников
05.08.2017, 10:25
Файл стянул через PLC_IO. Но у него сбитая кодировка, кракозябры вместо цифр. Как-то можно настроить кодировку? Или формат файла TXT не совсем подходит для этой цели?

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

Показывайте код, которым записывали этот самый файл и сам файл -- тогда ещё можно подсказать "как понимать этот файл". А, если нет, то продолжайте вести свой "блог".

serg_ingener
20.08.2017, 15:23
Здравствуйте участники форума ! Подскажите , ПЛК100 поддерживает WEB Визуализацию ? Если нет , то какие поддерживают (ПЛК ОВЕН) . И если можно , объясните как сделать WEB Визуализацию .

Можно-ли в визуализации CoDeSys v2.3 задавать значение текстом ( цифрами . Как , например в мастерскаде . ) а не ползунком .

RV9WFJ
21.08.2017, 08:37
Возможно у вас путаница в терминологии. ПЛК1хх поддерживают визуализацию, но не WEB. Если вам необходимо именно WEB то смотрите СПК207 или ПЛК3хх.
Значение вводить цифрами можно.

serg_ingener
21.08.2017, 17:02
Мне не нужна именно WEB , а как ещё сделать визуализацию , чтобы сделать готовый к работе проект ? Чтобы оператор открыл файл и работал .
Или объясните как запустить СoDeSys HMI безлицензионную версию , пусть ограниченную версию . Как она будет работать ?

Я пока обучаюсь программе CoDeSys , могу путаться . Заранее извиняюсь и прошу помощи !

Dimensy
22.08.2017, 08:58
Или объясните как запустить СoDeSys HMI безлицензионную версию , пусть ограниченную версию . Как она будет работать ?

Я пока обучаюсь программе CoDeSys , могу путаться . Заранее извиняюсь и прошу помощи !
Почитайте http://www.kipshop.ru/CoDeSys/steps/codesys_visu_v23_ru.pdf
Ну и здесь много чего для начала http://www.owen.ru/catalog/codesys_v2/51162335

serg_ingener
22.08.2017, 19:01
Уже читал . Так мог бы и я ответить .

capzap
22.08.2017, 19:04
Здравствуйте участники форума ! Подскажите , ПЛК100 поддерживает WEB Визуализацию ? Если нет , то какие поддерживают (ПЛК ОВЕН) . И если можно , объясните как сделать WEB Визуализацию .

Можно-ли в визуализации CoDeSys v2.3 задавать значение текстом ( цифрами . Как , например в мастерскаде . ) а не ползунком .

поддерживает если её самостоятельно напаисать или восползоваться решением от самой S3Software

как сделать WEB Визуализациютема http://www.owen.ru/forum/showthread.php?t=3129 ни куда не девалась

serg_ingener
22.08.2017, 19:52
Спасибо , но не могу смотреть вложения - чёрный квадрат с точкой в центре . Нужен веб браузер один из перечисленных в первом сообщении для просмотра и для создании WEB визуализации ?

capzap
22.08.2017, 22:14
Спасибо , но не могу смотреть вложения - чёрный квадрат с точкой в центре . Нужен веб браузер один из перечисленных в первом сообщении для просмотра и для создании WEB визуализации ?
http://www.owen.ru/forum/showthread.php?t=3129&p=139087&viewfull=1#post139087 это вложение должно открываться

serg_ingener
23.08.2017, 17:13
Открылось , что это за файл ?

capzap
23.08.2017, 17:25
Открылось , что это за файл ?

В КДС делайте проект=>импорт и выбиратете этот файл

serg_ingener
23.08.2017, 18:48
Я писал программы на языке CFC и LD другими не владею . Что делать с этим проектом ?

capzap
23.08.2017, 20:08
Я писал программы на языке CFC и LD другими не владею . Что делать с этим проектом ?

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

conobey
24.08.2017, 16:09
Добрый день, подскажите есть ли возможность в ПЛК ОВЕН 63 в языке программирования CFC на выход таймера TON ввести переменную, которая будет аналогична кнопке "Онлайн - Сброс"(Необходим сброс ПЛК после зажатой кнопки). Как я понимаю мне необходимо найти библиотеку, где будет описываться операции по данной кнопке и подключить ее. Правильно ли это или есть более простой способ?

Гарчев Евгений
24.08.2017, 16:28
Можно по выходу таймера запустить программу с бесконечным циклом.
А перезагрузка через системное меню не подходит?

serg_ingener
24.08.2017, 16:54
предположим запустить в реальном плк и зайти в контроллер через веб-браузер

У меня на этом проекте в режиме онлайн выскакивает много ошибок 3740 и 3760 . Может не хватает библиотек ?
В контроллер пока не пробовал загружать . Или всё-равно попробовать загрузить ?

capzap
24.08.2017, 17:14
У меня на этом проекте в режиме онлайн выскакивает много ошибок 3740 и 3760 . Может не хватает библиотек ?
В контроллер пока не пробовал загружать . Или всё-равно попробовать загрузить ?

Как Вы собираетесь тестировать работу с локальной сетью в эмуляции, даже виртуальный контроллер имеет свои библиотеки, отличные от тех, которые нужны овеновскому контроллеру. Для работы с сетью нужно добавлять SysLibSocket

serg_ingener
24.08.2017, 17:37
Я так понял нужно загрузить библиотеку SysLibSocket в проект и загрузить в плк ?
ПЛК на работе , попробую завтра , но боюсь возникнут новые вопросы (типа что дальше делать ). Не могли бы вы capzap объяснить всё по порядку .

Мне надо на мнемосхеме всего-то несколько кнопок , несколько индикаторов . Без мудрёных схем .

conobey
25.08.2017, 21:14
Мне необходимо при зажатии кнопки на пульте произвести сброс программы, аналогичный сбросу "онлайн - сброс". Запуск бесконечного цикла, как я понимаю, не даст этого результата

conobey
25.08.2017, 21:15
Можно по выходу таймера запустить программу с бесконечным циклом.
А перезагрузка через системное меню не подходит?
Мне необходимо при зажатии кнопки на пульте произвести сброс программы, аналогичный сбросу "онлайн - сброс". Запуск бесконечного цикла, как я понимаю, не даст этого результата

RV9WFJ
26.08.2017, 02:52
Вы бы написали для чего вам такая экзотика нужна, потому как в явном виде такой возможности нет. Но вы пожалуй первый кому это надо. Возможно вам просто инициализация процесса нужна, так это иначе решается.

capzap
26.08.2017, 07:06
Да не такой уж и первый, раньше тоже спрашивали как остановить работу программы

capzap
26.08.2017, 10:26
Я так понял нужно загрузить библиотеку SysLibSocket в проект и загрузить в плк ?
ПЛК на работе , попробую завтра , но боюсь возникнут новые вопросы (типа что дальше делать ). Не могли бы вы capzap объяснить всё по порядку .

Мне надо на мнемосхеме всего-то несколько кнопок , несколько индикаторов . Без мудрёных схем .

http://www.owen.ru/forum/showthread.php?t=3129&p=256239&viewfull=1#post256239

strs
27.08.2017, 15:12
Такой вопрос: можно ли, подав сигнал на дискретный вход ПЛК100, поставить выполнение программы на паузу? Включая все текущие таймеры, вычисления и прочее?
Мне нужно подключить кнопку к DI, чтобы пользователь нажав на нее, смог приостановить полностью тех процесс. Нажатием на другую кнопку, нужно запустить процесс с того же места, где он был приостановлен.

RV9WFJ
28.08.2017, 10:13
Такой вопрос: можно ли, подав сигнал на дискретный вход ПЛК100, поставить выполнение программы на паузу? Включая все текущие таймеры, вычисления и прочее?
Мне нужно подключить кнопку к DI, чтобы пользователь нажав на нее, смог приостановить полностью тех процесс. Нажатием на другую кнопку, нужно запустить процесс с того же места, где он был приостановлен.
Чем не устраивает всю программу поместить в новую программу, например ProgNew, а в PLC_PRG написать IF NOT DI1 THEN ProgNew(); END_IF; Где DI1 бит состояния вашей кнопки. Надо только проверить что с таймерами будет в таком случае. При желании можно их немного переписать, изменив стандартные.

strs
28.08.2017, 13:54
Чем не устраивает всю программу поместить в новую программу, например ProgNew, а в PLC_PRG написать IF NOT DI1 THEN ProgNew(); END_IF; Где DI1 бит состояния вашей кнопки. Надо только проверить что с таймерами будет в таком случае. При желании можно их немного переписать, изменив стандартные.

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

Dimensy
28.08.2017, 14:19
Надо только проверить что с таймерами будет в таком случае.
Так таймеры не ведут самостоятельно отсчет - они просто сравнивают текущее время с временем активации. Поэтому на паузу их не поставить

IVM
28.08.2017, 14:33
Так таймеры не ведут самостоятельно отсчет - они просто сравнивают текущее время с временем активации. Поэтому на паузу их не поставить

Если таймер не опрашивать, то он и считать не будет, т.е. застынет. Если его снова начать опрашивать, то он снова начнет считать.

capzap
28.08.2017, 14:36
Если таймер не опрашивать, то он и считать не будет, т.е. застынет. Если его снова начать опрашивать, то он снова начнет считать.

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

IVM
28.08.2017, 15:23
все дело в том, каким образом таймер получает время, чтоб сравнить его с заданным. Здесь однозначно придется свой таймер писать такой который еще и паузу умеет держать

Вот пример. Работает так как я писал в #5867. О каком таком таймере вы пишите мне не понятно.

capzap
28.08.2017, 15:49
Вот пример. Работает так как я писал в #5867. О каком таком таймере вы пишите мне не понятно.

и я про них, вернее все семейство, включая TP И TOF
предположим, завели время на 10 минут, через минуту перестали опрашивать, через 20 минут включили и что в результате произойдет. Таймер обращается к RTC, вычисляет разницу со стартовым временем, сравнивает её с PT, обнаруживает что время превышено и завершает работу таймера, подачей сигнала на выход таймера, а не как Вам видится, продолжает свою работу с того же места
Изменил Ваш проект, понаблюдайте в онлайне развернув ton1

IVM
28.08.2017, 15:53
и я про них, вернее все семейство, включая TP И TOF
предположим, завели время на 10 минут, через минуту перестали опрашивать, через 20 минут включили и что в результате произойдет. Таймер обращается к RTC, вычисляет разницу со стартовым временем, сравнивает её с PT, обнаруживает что время превышено и завершает работу таймера, подачей сигнала на выход таймера, а не как Вам видится, продолжает свою работу с того же места
Изменил Ваш проект, понаблюдайте в онлайне развернув ton1

А в моем примере что не так ?

capzap
28.08.2017, 16:01
А в моем примере что не так ?
что не так? не соотвествует поставленному запросу

Если таймер не опрашивать, то он и считать не будет, т.е. застынет. Если его снова начать опрашивать, то он снова начнет считать.

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

IVM
28.08.2017, 16:06
что не так? не соотвествует поставленному запросу


а нужно отсчет времени с начала не нужен

То что таймер застыл разве не означает, что отсчет продолжится не с нуля, а c того момента где он прервался ?

IVM
28.08.2017, 16:15
Capzap же показал.

И что он показал ?

RV9WFJ
29.08.2017, 10:44
Мне кажется костыль в данной ситуации вы изобретаете. А правильным было бы фиксировать время стопа и запускать после его снятия процесс с новым временем таймера. Или все обнулять в зависимости от условий. Я у себя так делаю.

RollForRepair
06.09.2017, 13:00
Здравствуйте. Продублирую свой вопрос из другой темы сюда:

Есть ПЛК-110-24.60.Р-М, на нём загружен проект, разработчик с исходниками уехал на полторы недели. Хотелось бы пока есть время провести испытания с уже зашитой программой.
Сейчас пытаюсь установить связь с ПЛК по RS-232, воткнул RJ в RS-232 Debug, через переходник RS-232/USB подсоединил к компьютеру, в диспетчере устройств Com-порт увидел. Далее в Codesys нажимаю открыть -> ПЛК -> выбираю свою конфигурацию -> выбираю Serial RS-232, правильный Com-порт, скорость 115200, ошибка связи каждый раз... Таргет файлы пробовал как качать с сайта, так и устанавливать с диска.

Что я делаю не так?

RV9WFJ
07.09.2017, 07:39
Здравствуйте. Продублирую свой вопрос из другой темы сюда:

Есть ПЛК-110-24.60.Р-М, на нём загружен проект, разработчик с исходниками уехал на полторы недели. Хотелось бы пока есть время провести испытания с уже зашитой программой.
Сейчас пытаюсь установить связь с ПЛК по RS-232, воткнул RJ в RS-232 Debug, через переходник RS-232/USB подсоединил к компьютеру, в диспетчере устройств Com-порт увидел. Далее в Codesys нажимаю открыть -> ПЛК -> выбираю свою конфигурацию -> выбираю Serial RS-232, правильный Com-порт, скорость 115200, ошибка связи каждый раз... Таргет файлы пробовал как качать с сайта, так и устанавливать с диска.

Что я делаю не так?Вариантов что вы делаете не так великое множество, так как вы не точно описываете свои настройки подключения. Но если предположить, что вы все делаете правильно, то порт Debug возможно используется в программе, и тогда для подключения надо просто перезагрузить ПЛК с подключенным к нему шнурком для программирования.

Sulfur
07.09.2017, 08:36
RollForRepair
ПЛК110 любых модификаций имеют такую особенность - порт Debug начинает работать только при включении\перезагрузке ПЛК с подключенным шнурком.

RollForRepair
07.09.2017, 11:01
RollForRepair
ПЛК110 любых модификаций имеют такую особенность - порт Debug начинает работать только при включении\перезагрузке ПЛК с подключенным шнурком.


Вариантов что вы делаете не так великое множество, так как вы не точно описываете свои настройки подключения. Но если предположить, что вы все делаете правильно, то порт Debug возможно используется в программе, и тогда для подключения надо просто перезагрузить ПЛК с подключенным к нему шнурком для программирования.

Большое спасибо, как раз в этом и была проблема!

odekolon
10.09.2017, 01:03
всем добрый вечер!
подключил к ПЛК110-60 модуль МУ110-32 по модбас
модуль подключился, как бы работает...
никак не могу сделать побитное присвоение имен ключей.
действовал так:
-создал MODBUS master
- к нему подключил подэлемент "unversal modbus device"
- а к нему , в свою очередь, "8 bit output module" в режиме "force multiply coils" 0x0f (10)

первые восемь ключей замечательно управляются - присваиваешь имена битам - все ок , работает

но следующий "8 bit output module" , вместо управления ключами, начинает управлять скважностью - релюхи щелкать начинают

при этом, на скриншоте, явно виден пробел в нумерации на одну десятичную позицию
если первый байт в codesys имеет адрес 6.1.0.0, то следующий должен быть 6.1.0.1, а он имеет адрес 6.1.1.0
получается пробел в 8 байт.
соответственно биты ставятся где -то в области управления скважностью
33053

Почему так происходит?

PS
пробовал подключать подэлементы WORD, и "32 bit_output module" - но эти элементы не дают возможности адресовать ключи побитно...

Smith2007
10.09.2017, 01:20
А вы этим битам дайте имена и попробуйте по именам к ним обратиться/присвоить

odekolon
10.09.2017, 10:16
А вы этим битам дайте имена и попробуйте по именам к ним обратиться/присвоить

подэлементы WORD и 32-bit output - не дают возможности адресоваться побитно. Это как-то извращаться надо.

odekolon
10.09.2017, 11:23
А х.з. Кто кроме вас знает адрес регистра куда пишите ? Картинки ведь такие информативные..
PS
"6.1.0.1" - а что это хрень и на кой ляд вы забиваете себе этим мозг ?

ага, спасибо, разобрался :)
нужно было правильные адреса расставить.
вся фигня была в том, что оба( или больше) подэлемента обращались к одним и тем же битам, соотвественно при каждом poll-time
койлу присваивался то 0 то 1. Соответственно оно и щелкало.:D

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

strs
10.09.2017, 13:45
Здравствуйте. Есть такой вопрос:

Имеется несколько функциональных блоков (FB), в них есть таймеры TP. Иногда бывает необходимость прервать работу ФБ, нажатием кнопки. Я пробовал поставить NО контакт (язык LD) перед ФБ, но при размыкании его таймеры, находящиеся в ФБ продолжают отчет, и если ФБ вызвать снова, таймеры начинают не сначала. Как полностью обнулить ФБ перед новым вызовом?

RollForRepair
11.09.2017, 09:25
Скажите, а ведь нельзя запустить и проверить проект загруженный на ПЛК110 через Codesys если у меня отсутсвует одна из библиотек? Разработчик уехал в отпуск оставил прошитый пульт, но без исходников.

capzap
11.09.2017, 09:34
Скажите, а ведь нельзя запустить и проверить проект загруженный на ПЛК110 через Codesys если у меня отсутсвует одна из библиотек? Разработчик уехал в отпуск оставил прошитый пульт, но без исходников.

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

RollForRepair
11.09.2017, 09:38
проект, даже если отсутствует какая то из библиотек это и есть исходники. Выразитесь подробнее что у Вас есть и что нужно сделать
Некоторые процессы в стенде, к которому подключен ПЛК110, не начинаются пока не поменять значения некоторых переменных в программе через Codesys, а запустить проект у меня не получается, т.к. ругается на библиотеки. Т.е. чтобы мне полноценно провести испытания мне обязательно необходима библиотека от программиста?

capzap
11.09.2017, 10:01
обычно, у нормальных программистов, все переменные, требующие изменений во время процесса, выводят для доступности по модбас или по другим поддерживаемым протоколам. Возможно и нет нужды открывать онлайн режим в КДС и даже если переменная "спрятана" в проекте, есть устройства которые работают по codesys протоколу и могут изменить любую переменную проекта, не подключаясь с самой КДС

Dimensy
11.09.2017, 11:37
Как полностью обнулить ФБ перед новым вызовом?
Штатно никак - надо самому все организовывать. Если что, таймеры со сбросом есть в библиотеке OSCAT