PDA

Просмотр полной версии : CODESYS V3.5. Вопросы и ответы



Страницы : 1 2 3 4 [5] 6 7 8 9 10 11 12 13

RA.
12.09.2016, 15:55
RA,Добрый день. Вы похоже решали задачу похожею на мою, скажите а каким методом вы определяли в проге номер агрегата,т.е. вы извлекли из масива ,например, 15 и как опредилили что нужно включить 15 , а не 14?

ну у меня немного другая задача была: массив заданий: состоящий из количества штук и длины производимой заготовки.
после старта задания назначаю индекс массива = 1, беру из этих элементов массива длину и кол-во
анализирую если кол-во = 0, увеличиваю индекс (+1)
если кол-во больше 0, тогда длину и кол-во "передаю на изготовление"
в ходе изготовления считаю сделанные единицы и вычитаю из начального задания
как только этот остаток станет равен 0 - перехожу на след шаг - снова увеличиваю индекс (+1)
и т.д.
естественно следим чтобы индекс не вылезал за размер массива
в конце задания индекс ставлю =0. И останавливаю процесс - т.е. весь описанный выше код не исполняется, а как только пускаю (в ручную) изменю индекс на 1.

и да, эта программа на 90% состоит из проверок, а сами переключения по шагам в одном repeat сделаны.

дрю
12.09.2016, 16:01
Примерн с инкриментом индекса и я собираюсь делать, а что такое *repeat* и на каком языке пишите?

RA.
12.09.2016, 16:03
RA,Добрый день. Вы похоже решали задачу похожею на мою, скажите а каким методом вы определяли в проге номер агрегата,т.е. вы извлекли из масива ,например, 15 и как опредилили что нужно включить 15 , а не 14?

в этом случае можно брать текущий шаг - N элемента массива и затем


case ArrAgr[n] of
1: Var1:=true;
2: Var2:=true;
...
27: Var27:true;
End_case;

RA.
12.09.2016, 16:07
Примерн с инкриментом индекса и я собираюсь делать, а что такое *repeat* и на каком языке пишите?

оператор цикла Repeat <действие> until <условие>. - выполняет <действие>, пока <условие> не станет TRUE.

это все (что касается массивов и проверок... ) на ST пишу

дрю
12.09.2016, 16:12
Сase не доводилось пользоваться, но как я понимаю ваш вариант - в каждом шаге перебрать все 27 комбинаций и в следоющих шагах тоже по 27?

RA.
12.09.2016, 16:18
Сase не доводилось пользоваться, но как я понимаю ваш вариант - в каждом шаге перебрать все 27 комбинаций и в следоющих шагах тоже по 27?

а зачем следующие?
у вас будет цикл увеличивающий шаги на +1 и проверяющий что выбранный элемент не нулевой

и после него вот этот один case на 27 комбинаций, ему на вход элемент массива с номером N.


смена шага - каким-то вашим условиям или задержки времени

дрю
12.09.2016, 16:25
залез в справку в стандарте МЭК не нашёл, правда оператора FOR тоже не увидел, можете привести пример кусочка текста проги с операторм REPEAT ?

RA.
12.09.2016, 16:26
залез в справку в стандарте МЭК не нашёл, правда оператора FOR тоже не увидел, можете привести пример кусочка текста проги с операторм REPEAT ?

http://informatics.mccme.ru/mod/book/view.php?id=3919&chapterid=436

и в личке

дрю
12.09.2016, 16:42
RA. Большое спасибо, я сегодня приобрел инструмент который позволяет копнуть гораздо быстрее и изящней, если можно так сказать!!!!

RA.
12.09.2016, 16:46
RA. Большое спасибо, я сегодня приобрел инструмент который позволяет копнуть гораздо быстрее и изящней, если можно так сказать!!!!

Да не за что)
А что за инструмент-то?? :D

дрю
13.09.2016, 08:28
Ответил в личку:)

energvk
13.09.2016, 17:46
Добрый день, не могу понять как изменить часовой пояс в контроллере. Через библиотеку получаю время в формате UTC +0.

Что интересно, через SPK_TOOLS время получаю адекватное. Используя библиотеку CAA DT_UTILS, через GetTime получаю время в DT UTC:+0. Почему - не могу понять, и вроде можно сменить часовой пояс, но тоже не получается

Евгений Кислов
14.09.2016, 09:19
Добрый день, не могу понять как изменить часовой пояс в контроллере. Через библиотеку получаю время в формате UTC +0.

Что интересно, через SPK_TOOLS время получаю адекватное. Используя библиотеку CAA DT_UTILS, через GetTime получаю время в DT UTC:+0. Почему - не могу понять, и вроде можно сменить часовой пояс, но тоже не получается

Укажите используемую версию прошивки СПК, пожалуйста.

energvk
14.09.2016, 12:56
В общем разобрался. Когда залил пример проекта sys_time_SPK107_Target_3.5.2.0.projectarchive время перевелось на 2 часа назад.

energvk
14.09.2016, 13:24
Хотя, конечно как с часовым поясом работать всё же не понятно (чтение/запись)
Пробовал такой код:

rtrGetGmt(CLK:= cmdGetGmt, Q=> );
GetGmt(
xExecute:= rtrGetGmt.Q,
xDone=> ,
xBusy=> ,
xError=> ,
eError=> ,
tziInfo=> curGmt);
gmtIBias:=curGmt.iBias;

curSetGmt.iBias := gmtSetIBias;
rtrSetGmt(CLK:= cmdSetGmt, Q=> );
SetGmt(
xExecute:= rtrSetGmt.Q,
tziInfo:= curSetGmt,
xDone=> ,
xBusy=> ,
xError=> ,
eError=> );


где gmtSetIBias := 120 (я так понял в минутах задается).
Не работает.

Евгений Кислов
14.09.2016, 13:35
Я когда-то пробовал сделать это на виртуальном контроллере - и у меня тоже не получилось. Мы уточним у компании 3S, как работать с данным функционалом.

дрю
18.09.2016, 11:20
Подскажите пожалуста, пытаюсь запустить виртуальный контроллер (WIN 3? Start PLS в трее все сделал) и выскакивает такое окно причем на двух компах, что делать?26435

Евгений Кислов
18.09.2016, 11:27
Подскажите пожалуста, пытаюсь запустить виртуальный контроллер (WIN 3? Start PLS в трее все сделал) и выскакивает такое окно причем на двух компах, что делать?26435

Правой кнопкой на Device - команда Обновить устройство - поставить галочку Показывать все версии - выбрать виртуальный контроллер версии 3.5.5.0.

дрю
18.09.2016, 11:57
Большое спасибо, заработало!

energvk
18.09.2016, 18:13
Опять у меня непонятки с библиотекой CAA DTUtil.
Создаю ФБ


FUNCTION_BLOCK UNPACK_dwDT
VAR_INPUT
inDwDT :DWORD;
END_VAR

VAR_OUTPUT
dtRTC :DT;
year, month, day :UINT;
hour, minute, second :UINT;
//dayWeek :DTU.RTCLK.WEEKDAY;
dayWeek :UINT;
dayWeekWS :WSTRING;
dayYear :UINT;
END_VAR

VAR
ErrDayWeek :POINTER TO INT;
ErrDayConcat :POINTER TO INT;
splitDT :DTU.ERROR;
END_VAR
***********************************
dtRTC := DWORD_TO_DT (inDwDT);
splitDT := DTU.DTSplit(
dtDateAndTime:= dtRTC,
puiYear:= ADR(year),
puiMonth:= ADR(month),
puiDay:= ADR(day),
puiHour:= ADR(hour),
puiMinute:= ADR(minute),
puiSecond:= ADR(second));

dayWeek := DWORD_TO_UINT(((inDwDT / 86400) +3) MOD 7) + 1;
dayYear := DWORD_TO_UINT((inDwDT + 43200) / 31557600 + 1970);


Но на выходе, кроме dayWeek и dayYear получаю нули. Я что-то не так делаю?

Евгений Кислов
18.09.2016, 18:32
У меня ваш ФБ работает нормально.

26441

Предположу, что вы запускаете проект в эмуляции. Так делать не надо. Используйте виртуальный контроллер CODESYS Control Win V3. Cм. СПК. FAQ, п. 9.8.

energvk
18.09.2016, 18:36
Странно, ладно буду разбираться где накосячил...

Евгений Кислов
18.09.2016, 18:41
Странно, ладно буду разбираться где накосячил...

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

energvk
18.09.2016, 19:01
Да, действительно дело было в этом, спасибо.

Alex_Chuy
19.09.2016, 00:09
Здравствуйте, уважаемые! Подскажите новичку, а лучше "ткните", если не затруднит, в пример с ФБ ArchivatorOwenLib на языке CFC. Попытался разобрать в примере на ST, но до меня не доходит: как записывать в GetData несколько переменных? или нужно для каждой переменной свой блок на CFC?

александр 64
19.09.2016, 16:50
подскажите где засада ,хочу послать данные на ОРС сервер не получается организовать модбас слейв с спк

Евгений Кислов
19.09.2016, 19:12
подскажите где засада ,хочу послать данные на ОРС сервер не получается организовать модбас слейв с спк

В целом, Modbus Slave настроен корректно, только у параметра Всегда обновлять переменные лучше поставить значение Вкл. 2 (всегда в задаче цикла шины).

Ну и галочку Задержка я бы снял.

Вероятно, проблема на уровне настройки OPC. Напишите мне завтра на почту или в skype, пожалуйста - отправлю вам рабочую версию документа о связи СПК с OPC-серверами.

дрю
20.09.2016, 16:11
Подскажите пожалуста почему не исполняет26476ся простой код?26477 26478. Пробую на виртуальном контроллере.Спасибо.

Евгений Кислов
20.09.2016, 17:36
Подскажите пожалуста почему не исполняет26476ся простой код?26477 26478. Пробую на виртуальном контроллере.Спасибо.

А вы уверены, что Nomer_AGR[3]=3? Возможно, вы путаете значение индекса и значение элемента массива с данным индексом?

Если уверены, то выкладывайте проект.

RA.
21.09.2016, 01:14
Подскажите пожалуста почему не исполняет26476ся простой код?26477 26478. Пробую на виртуальном контроллере.Спасибо.

по скринам похоже, что из CASE не выходит:
3ий элемент массива = 0, проверки =0 в Case нет, ELSE перед END_CASE тоже нет.

RA.
21.09.2016, 01:18
Неужели целиком экран не показать? и не раскрыть массив, например, чтобы мы тоже видели значения все. и если есть исключения - CDS же пишет на чем он встал.
двойное синее подчеркивание массива - и о чем предупреждает компилятор??

дрю
21.09.2016, 11:49
Евгений прав, значение масива не передаёться виндекс CASE, вот так работает 26485. Сейчас пытаюсь как передать значение масива в индекс CASE, как получиться отпишусь.

RA.
21.09.2016, 14:25
Евгений прав, значение масива не передаёться виндекс CASE, вот так работает 26485. Сейчас пытаюсь как передать значение масива в индекс CASE, как получиться отпишусь.

по первым скринам:

http://www.owen.ru/forum/attachment.php?attachmentid=26477&d=1474377028

в CASE приходит 3 (третий) элемент массива, равный 0. Далее в CASE его сравниваем с 1, 2, 3. Ноль естественно не равен ни 1, ни 2 ни 3. никае из условий CASE не выполняется. Обработки этой ситуации ELSE тоже нет.

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

дрю
21.09.2016, 16:46
Все ребят разобрался как работает оператор СASE и цикл REPEAT. Прилагаю скрин с програмкой 26494

Lekoo
21.09.2016, 19:08
26496
Объясните пожалуйста, как добавить плк, без него, в режиме эмуляции, переменные на OPC сервер не достать, если я правильно понимаю, то под gateway, должна находится строка с плк. Ссылка на таргет плк приветствуется

Евгений Кислов
21.09.2016, 19:28
26496
Объясните пожалуйста, как добавить плк, без него, в режиме эмуляции, переменные на OPC сервер не достать, если я правильно понимаю, то под gateway, должна находится строка с плк. Ссылка на таргет плк приветствуется

Вы уверены, что вам нужен именно Codesys Softmotion Win V3? Если нет, см. СПК. FAQ, п. 9.8.

Lekoo
21.09.2016, 22:37
Проблема решена, я скачал таргет, но забыл перезапустить codesys, после перезапуска все отобразилось, хоть плк назывался не читаемым шрифтом, но работает.
Может кто-то сталкивался с европрибором, с их плк возможно работать в codesys? Не могу найти их таргеты

Serjay
25.09.2016, 17:18
Всем привет!
Работаю над одним проектом, в качестве ПЛК выбрал СПК1ХХ чисто для работы в эмуляторе.
Ну так вот столкнулся с такой проблемой, сигнал на включение выхода уходит, а выход не подсветчивается. Или еще хуже, выход светится а на визуализации не отображается, хотя раннее всё работало. первый раз с таким сталкиваюсь.

Евгений Кислов
26.09.2016, 10:18
Всем привет!
Работаю над одним проектом, в качестве ПЛК выбрал СПК1ХХ чисто для работы в эмуляторе.
Ну так вот столкнулся с такой проблемой, сигнал на включение выхода уходит, а выход не подсветчивается. Или еще хуже, выход светится а на визуализации не отображается, хотя раннее всё работало. первый раз с таким сталкиваюсь.

Стандартная рекомендация - выполнить команды Очистить все и Перекомпиляция из меню Компиляция, после чего повторно загрузить (не путать с онлайн-обновлением) проект. Если не поможет, то надо выкладывать архив проекта и скриншоты с подробным описанием, что ожидается и что происходит на самом деле.

дрю
26.09.2016, 15:30
Подскажите пожалуста, как в КДС -3 записать несколько инструкции в одну строчку, например TEMP_1:=1 TEMP_2:=1 TEMP_3:=1;

Евгений Кислов
26.09.2016, 15:40
Подскажите пожалуста, как в КДС -3 записать несколько инструкции в одну строчку, например TEMP_1:=1 TEMP_2:=1 TEMP_3:=1;

Так и записывать:

TEMP_1:=TEMP_2:=TEMP_3:=1;

дрю
27.09.2016, 11:20
Спасибо, применю!

дрю
27.09.2016, 16:51
Еш0 по синтаксису вопрос, как записать проверку сразу нескольких переменных в одну строчку 26695

Евгений Кислов
27.09.2016, 17:31
Еш0 по синтаксису вопрос, как записать проверку сразу нескольких переменных в одну строчку 26695

Извините, пока не понял вопрос. Можно раскрыть его подробнее?

дрю
28.09.2016, 08:04
Понял, спасибо!

AlexMo
28.09.2016, 11:07
Доброго времени, уважаемые.

Может быть я плохо искал, но не нашел ответ на следующие вопросы:

1). Возможно ли в Codesys 3.5 конвертирование языков в LD, к примеру из CFC?
2). Как организовать связь по RS-485 СПК207 и ПЧВ на языке LD? (работа с командным словом, словом состояния, пересчетом значений мощности, напряжения, частоты, тока, уставками задания).
И если можно, то ткните носом на доступную для понимания литературу или примеры рабочих проектов работы на LD в Codesys 3.5.

Евгений Кислов
28.09.2016, 11:32
Доброго времени, уважаемые.

Может быть я плохо искал, но не нашел ответ на следующие вопросы:

1). Возможно ли в Codesys 3.5 конвертирование языков в LD, к примеру из CFC?
2). Как организовать связь по RS-485 СПК207 и ПЧВ на языке LD? (работа с командным словом, словом состояния, пересчетом значений мощности, напряжения, частоты, тока, уставками задания).
И если можно, то ткните носом на доступную для понимания литературу или примеры рабочих проектов работы на LD в Codesys 3.5.

1) Конвертация языков доступна только для LD/FBD/IL.
2) С готовыми примерами на LD может возникнуть проблема. Можно почитать справку CODESYS и соответствующую главу из книги Игоря Петрова (http://www.moscowbooks.ru/ebooks/book.asp?id=8336941).

AlexMo
28.09.2016, 12:33
Печально. Ну и на том спасибо.
А в чем проблема по поводу примеров на LD? Неужели этот язык настолько непопулярен в среде Codesys?

AlexMo
28.09.2016, 20:17
Уважаемые, приветствую.
И снова новичок с очередными глупыми вопросами.
Не думал, что настолько сложно найти в сети подходящую и доходчивую инфу по созданию связей по rs-485 между СПК, модулями входов/выходов и ПЧВ на языке LD. Поэтому, прошу сильно не бить, но вопросы я всё-таки задам.
МВ110-2AС, МВ110_16Д_ДН и МУ110_8Р_К и СПК2хх 04 (хотелось бы еще и ПЧВ) нужно связать по rs-485. Физически подключится к этим модулям нет возможности, ибо пока их не имею. И вроде как в эмуляторе они не работают.
По аналогии с примерами на CFC попытался сделать связи на LD. При компиляции ошибок не выдает, но есть непонятные моменты:

1) Собственно правильна ли данная логика основной программы связей между ФБ (во вложении)? Что можете посоветовать?
2) При добавлении слейв устройств я указывал им адреса слейвов и таймаут, а в программе на входах Addr, TimeOut они все по умолчанию и изменить я их не могу. Это возможно только через конфигуратор или как-то еще?
3) При включении эмуляции флаги завершения ФБ модулей входов/выходов то истина, то ложь. Почему так?
4) Также при включении эмуляции на выходах кода ошибки ФБ модулей входов/выходов, постоянно выдается параметр 254. Это отсутствие связи? Если да, тогда вроде как понятно почему.. т.к. модули физически не подключены?
5) Компилятор ругается в случае, если я пытаюсь поставить ответвления от идентификатора Handle ФБ ComConn и соединить их с идентификаторами Handle ФБ модулей входов/выходов. Соединить получилось только так: один ФБ ComConn и один ФБ модуля входов/выходов в каждом отдельном нетворке. Нормально ли это?
6) Нужно ли использовать драйверы из библиотеки Mx110_Drivers? Если да, то подскажите где и как.

Надеюсь не только на критику, но и на помощь. Благодарю за понимание.

Ssem
30.09.2016, 21:36
Добрый вечер, подскажите как в CODESYS v.3,5 привязать вход к конкретному адресу на модуле. В CODESYS v.2 все понятно, назначается имя сразу в модуле, а как здесь? В документации не нашел:confused:

Евгений Кислов
30.09.2016, 23:13
Добрый вечер, подскажите как в CODESYS v.3,5 привязать вход к конкретному адресу на модуле. В CODESYS v.2 все понятно, назначается имя сразу в модуле, а как здесь? В документации не нашел:confused:

О каком контроллере и входе идет речь?

Ssem
01.10.2016, 09:37
О каком контроллере и входе идет речь?
Owen SPK2xx 03.CS с модулями MV110, MU110

Евгений Кислов
01.10.2016, 14:37
Owen SPK2xx 03.CS с модулями MV110, MU110

Ознакомьтесь с документом СПК. Modbus, п. 3.

Ssem
01.10.2016, 21:25
Ознакомьтесь с документом СПК. Modbus, п. 3.
Спасибо, и вправду там все есть.

приборист
02.10.2016, 23:16
Доброго вечера.
Подскажите по такому вопросу:
При обновлении проекта (внесение небольших изменений)
Предлагает стандартное меню, выбираем загрузка изменений.
И грузится весь проект (такой же размер как и при полном обновлении проекта)
Раньше всегда грузилось 80-100кб. А теперь приходится ждать + происходят подвисания Codesys на Генерации Кода.
Версия CDS - 3.5 SP7 Patch 3
Компилятор 3.5.7.0
Стили визуализации 3.5.5.0

Евгений Кислов
02.10.2016, 23:32
Доброго вечера.
Подскажите по такому вопросу:
При обновлении проекта (внесение небольших изменений)
Предлагает стандартное меню, выбираем загрузка изменений.
И грузится весь проект (такой же размер как и при полном обновлении проекта)
Раньше всегда грузилось 80-100кб. А теперь приходится ждать + происходят подвисания Codesys на Генерации Кода.
Версия CDS - 3.5 SP7 Patch 3
Компилятор 3.5.7.0
Стили визуализации 3.5.5.0

Возможно, у вас по дефолту стоит галка Обновление загрузочного проекта? Т.е. помимо небольших изменений еще boot project заново создается.
Вообще, по опыту не рекомендую обновлять проект, по возможности лучше каждый раз перезаливать целиком.

приборист
03.10.2016, 06:23
Возможно, у вас по дефолту стоит галка Обновление загрузочного проекта? Т.е. помимо небольших изменений еще boot project заново создается.
Вообще, по опыту не рекомендую обновлять проект, по возможности лучше каждый раз перезаливать целиком.

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

firetester
04.10.2016, 08:56
Доброго всем времени суток! Подскажите, пожалуйста, если кто знает, как использовать на одном объекте нагреватели разной мощности?
Ситуация: большой объект, 2 разных импульсных задвижки. У одной мощность, допустим, 10Ед (1), у другой 2Ед(2). Для поддержания т-ры 120град требуется ~14% открытия заслонки 2Ед. Но, объект большой и на одной заслонке 2 объект греется 3-4 часа. На одной задвижке 1 объект греется 1,2 часа. Но поддерживать на ней т-ру сложно, один лишний процент открытия и перерегулирование наступает очень быстро. Регулировать более короткими импульсами (текущее - 400мс) не получается - нет реакции задвижки. Вопрос: Как собрать структуру из двух ПИД так, чтоб на подходе к уставке заслонка 1 плавно закрывалась, а заслонка 2 плавно подхватывала регулирование? Может, кто-то сможет вкратце в CFC набросать модель? Ну или хотя бы пояснить принцип управления в данном случае? Заранее спасибо!

energvk
06.10.2016, 11:50
Добрый день! Появилась проблема: создал библиотеку в формате .library (проверял и в формате compiled-library). Добавил в репозитарий и в менеджер библиотек. Проект нормально компилируется, ошибок не выдает. Но при загрузке выдает сообщение:
26879

То есть ссылки на ФБ из библиотеки вызывают ошибку. Никак не могу понять в чём дело и как это победить

Евгений Кислов
06.10.2016, 12:14
При загрузке в СПК или виртуальный контроллер?

Вообще, не видя самой библиотеки, сложно что-то сказать.

energvk
06.10.2016, 12:23
При загрузке в СПК107. Библиотеку сейчас отправлю в личку

energvk
08.10.2016, 00:32
Доброй ночи. Подскажите пожалуйста по диалогам. Создаю универсальный диалог, в котором прописываю переменные в VAR_IN_OUT. Обратил внимание в симуляции, что при открытии диалога переменные нормально записываются, но если эти переменные меняются, то в диалоге изменения не отображаются. Что появились изменения нужно диалог закрыть и открыть заново. При этом если указывать переменные непосредственно из программы, то изменения динамически меняются при открытом диалоге.
Я правильно понимаю, что переменные читаются только при открытии диалога?

RV9WFJ
08.10.2016, 05:34
Начнем с того что VAR_IN_OUT это ничто иное как просто указатели на внешнюю для диалога переменную. Возможно что-то не так в отображении настроили. Там же два раза надо одну и ту же переменную указывать: один раз для отображения второй для редактирования. Ну и если косяков не обнаружите попробуйте тоже самое во фрейме сделать, там точно работает и ИМХО фреймы гораздо быстрее и стабильнее диалога.

energvk
08.10.2016, 12:55
Вот оно что. Да я один раз только указывал, возможно поэтому. По поводу фреймов читал, что они быстрее и стабильнее, но не могу пока сообразить как сделать чтобы окно с фреймом открывалось как диалог и в нем уже отображался нужный диалог (по примеру - нажал на кнопку - открылось окно управления нужного механизма).

energvk
08.10.2016, 17:20
Эхх, нет динамического обновления переменных в диалоге((( печаль

RV9WFJ
09.10.2016, 06:43
Что-то я не соображу, накой вы во фрейм диалог впихиваете. Во фрейм надо обычные визуализации вставлять. И выбирать нужную в момент вызова через спец. переменную. Плюс используем флаг видимости и прячем все, когда наш фрейм не нужен на главной визуализации.Если не осилите в понедельник ришлю пример в личку.
Диалог - тот же фрейм только уже заточенный под функционал диалога силами CoDeSys.

energvk
10.10.2016, 00:11
Нет, во фрейм я диалог не впихиваю)). Попробую объяснить. К примеру, у меня есть на визуализации 5 насосов, 4 задвижки. При нажатии на иконку вызывается диалог для управления (который полностью визуализацию не меняет, что удобно: можно видеть, что на основной мнемосхеме происходит). Изначально я нарисовал 9 диалогов (5 - на насосы, 4 - задвижки). Разумеется я весьма быстро понял, что это мягко говоря гемморойно, так как при любой корректировке функциональности диалога приходиться вносить изменения во всех остальных. Соответственно разумное решение один общий диалог на насосы и один общий диалог на задвижки. В var_in_out прописал переменную i, которой при нажатии на иконку присваивается значение номера. Также сюда же хотел внести переменные для визуализации кнопок, текста и т.п. + в диалогах кроме кнопок управления, также отображаются текущие параметры (ток, частота и прочее). И всё это обновляется только при открытии диалога. То есть изменения в режиме реального времени не видно. Пока переменным визуализации кнопок, текста и т.п. приставил массивы с индексом i. Работает. Как подобное организовать во фрейме пока очень смутно представляю. Доделаю проект, буду разбираться. Хотя пока не ясны преимущества на самом деле.

Надеюсь понятно объяснил.

P.S. За пример буду премного благодарен.

firetester
10.10.2016, 08:13
Еще вопрос, если можно. На СПК207 переключение экранов настроено на хардверные кнопки (F1-F5). В общем, если открыть диалог на каком-то экране и попытаться переключить экран клавишей, то на экране СПК ничего не меняется (открыт диалог на N-ном экране), а управление диалогом становится невозможно. Помогает только вызвать тот экран (напр.,нажать F3 если был открыт экран, назначенный на F3) , с которого был открыт диалог, подождать секунд 20 и панелька "отвисает".

RV9WFJ
10.10.2016, 08:34
Фреймы и диалог по сути одно и тоже просто во фрейме больше доступа к управлению. А даилог законченная конструкция. Соответственно на счет массивов вы совершенно верно думаете. Во фрейм достаточно передавать индекс массива, а все остальные данные подтягивать напрямую с визуализации через индекс. Что касается онлайн обновления данных во фрейме, то возможно тут еще версия CoDeSys закралась. Раньше у меня точно работало, но в какой-то версии тоже с этим сталкивался. Поскольку в том проекте было не сильно актуально то просто забил. Думаю вам стоит уточнить этот вопрос у Евгения, или самому попробовать на разных версиях CS.
Теперь немного ближе к делу. Последние проекты я делаю по такой схеме: главная мнемосхема всего одна (на самом деле еще логи аварий и настройки где диалоги не нужны) на ней два фрейма - в одном все визуализации. Во втором фрейм для диалогов (всех). Соответственно в проекте есть переменная которая отвечает за видимость второго фрейма (с диалогами). В визуализации самого диалога так же есть фреймы куда в зависимости от задачи подкидываю разные диалоги. Конструкция шикарно работает, без тормозов. Есть только одно ограничение, про которое нельзя забывать (пока) глубина вложенности фреймов не более трех.

energvk
10.10.2016, 11:45
Спасибо, в принципе понял. Проверил: создал фрейм, вставил в него созданный ранее диалог, в который передаю массивы, работает также.
Вот что непонятно. К примеру есть у меня пять визуализаций. На главной - кнопки с подписями, нажатие на которые переключает визуализацию. Иконки устройств вызывают диалоги с присваиванием номера устройства. Соответственно это можно переделать под фреймы как вы выше расписали. В чем профит?

RV9WFJ
10.10.2016, 12:10
Ранее профит был в том, что фреймы не тормозили, а диалоги можно было с кофе ждать (возможно сейчас этот косяк уже исправили). А сейчас я уже привык так делать и на диалогах экспериментировать времени нет.

Эдуард_Н
18.10.2016, 18:17
Подскажите, что не так делаю: давно использую ОВЕНовский ФБ "RealTimeClock4" и при изменении значений на входах "Set" (Set_Year, Set_Month и т.д.) на выходе ни чего не меняется, управлять получается только входами "Add" (Add_Year, Add_Month и т.д.).

Евгений Кислов
19.10.2016, 07:33
Подскажите, что не так делаю: давно использую ОВЕНовский ФБ "RealTimeClock4" и при изменении значений на входах "Set" (Set_Year, Set_Month и т.д.) на выходе ни чего не меняется, управлять получается только входами "Add" (Add_Year, Add_Month и т.д.).

Возможно, вы не используете ФБ UpdateUint? Вообще, проще всего работать с временем непосредственно при помощи библиотек CAA DTUtil - см. документ СПК. Системное время.

Эдуард_Н
19.10.2016, 11:53
Возможно, вы не используете ФБ UpdateUint? Вообще, проще всего работать с временем непосредственно при помощи библиотек CAA DTUtil - см. документ СПК. Системное время.

ФБ UpdateUint использую, сейчас специально сделал проект и вытащил туда эти два ФБ и тот же самый результат.

Евгений Кислов
19.10.2016, 11:56
ФБ UpdateUint использую, сейчас специально сделал проект и вытащил туда эти два ФБ и тот же самый результат.

Тогда выложите проект, пожалуйста - посмотрю, в чем может быть дело.

Эдуард_Н
19.10.2016, 12:19
Тогда выложите проект, пожалуйста - посмотрю, в чем может быть дело.

Проект это конечно, но ФБ то Ваши.

Евгений Кислов
19.10.2016, 14:02
Строки 19 и 327 в ФБ закомментируйте.

Проверять, естественно, надо на реальном контроллере, а не в эмуляции.

Эдуард_Н
19.10.2016, 14:08
Строки 19 и 327 в ФБ закомментируйте.

Проверять, естественно, надо на реальном контроллере, а не в эмуляции.

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

Valsinat
21.10.2016, 06:28
У меня есть контроллер СПК207-220.04.00-CS. Порт COM-3 настроен как мастер и работает без нареканий. COM-1 пытался настроить как Slave: входы-выходы соотнесены с переменными из программы, все отлично компилируется и зашивается на контроллер, а вот опросить не получается никак. Использую протокол Modbus RTU.
Сейчас уже все ставлю под сомнения, а потому: как определить адреса регистров для опроса и какой командой их надо считывать? Как соотнести адрес ячейки памяти контроллера (например %QW88) и номер регистра?
271622716327164

Евгений Кислов
21.10.2016, 07:33
У меня есть контроллер СПК207-220.04.00-CS. Порт COM-3 настроен как мастер и работает без нареканий. COM-1 пытался настроить как Slave: входы-выходы соотнесены с переменными из программы, все отлично компилируется и зашивается на контроллер, а вот опросить не получается никак. Использую протокол Modbus RTU.
Сейчас уже все ставлю под сомнения, а потому: как определить адреса регистров для опроса и какой командой их надо считывать? Как соотнести адрес ячейки памяти контроллера (например %QW88) и номер регистра?
271622716327164

Посмотрите документ СПК. Modbus, п. 4.7.

Valsinat
21.10.2016, 09:08
Спасибо, помогло!
Еще один вопрос: как очистить историю тревог? Архивацию нужна, но перед тем как отправлять заказчику историю надо очистить.

Евгений Кислов
21.10.2016, 09:21
Спасибо, помогло!
Еще один вопрос: как очистить историю тревог? Архивацию нужна, но перед тем как отправлять заказчику историю надо очистить.

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

александр 64
21.10.2016, 18:55
подскажите можно ли сделать чтоб она и та же авария записывалась в таблицу тревог каждый раз при появлении в новую строку на спк

Евгений Кислов
21.10.2016, 18:58
подскажите можно ли сделать чтоб она и та же авария записывалась в таблицу тревог каждый раз при появлении в новую строку на спк

В принципе, можно - для этого необходимо всегда отображать таблицу в режиме истории.

Эдуард_Н
23.10.2016, 09:22
Что за бяка? раньше такого не было.

Решилось переустановкой КДС.

Виталий АСМ
24.10.2016, 17:29
Добрый день, может ли кто подсказать как панель оператора ОВЕН связать с двумя драйверами и серводвигателями через плату коммутации все провода есть, вопрос в программировании. Как написать программу для работы серводвигателей. Панель оператора программируется CODESYS а плата коммутации работает на Mach3. Есть у кого нибудь такой опыт. Очень нужно. Спасибо всем, кто откликнется. 27247

energvk
25.10.2016, 01:58
Здравствуйте. При установке cds на компьютер и последующее открытие проекта вызывает кучу ошибок на отсутствие нужных версий библиотек (системные библиотеки почему имеют версии подбибиотек ниже установленных репозитарием. Обычно просто нажимаешь скачать недостающие, но что делать если ПК не имеет выхода в интернет?

Евгений Кислов
25.10.2016, 07:24
Использовать архивы проектов - они включают в себя все библиотеки, девайсы и т.д.

Mgonch
25.10.2016, 10:20
Здравствуйте. Подключаю к СПК207 МВ110-224.4ТД по инструкции. После компиляции напротив МВ появляется желтый треугольник, нажимаем кнопку пуск происходит опрос 1 раз и и загорается красный треугольник. Из за чего это может быть?

Евгений Кислов
25.10.2016, 10:24
Здравствуйте. Подключаю к СПК207 МВ110-224.4ТД по инструкции. После компиляции напротив МВ появляется желтый треугольник, нажимаем кнопку пуск происходит опрос 1 раз и и загорается красный треугольник. Из за чего это может быть?

Например, из-за отсутствия галочки Автопереподключение в компоненте Modbus Master. Обратите внимание, что в компоненте версии 3.5.7.0 галочка не работает - необходимо использовать версию 3.5.5.0.

Mgonch
25.10.2016, 10:53
Спасибо. Сейчас попробую, галочка там действительно не выставлялась.

Эдуард_Н
29.10.2016, 04:39
Как можно поменять шрифт использующийся по умолчанию в КДС? особенно интересует замена шрифта в "VisuDialogs.Numpad".

Евгений Кислов
29.10.2016, 09:00
Как можно поменять шрифт использующийся по умолчанию в КДС? особенно интересует замена шрифта в "VisuDialogs.Numpad".

Стандартные диалоги доступны для редактирования.

Соответствующая библиотека лежит в ...\CODESYS\Projects\Visu\Dialogs\

energvk
01.11.2016, 22:32
Столкнулся на СПК207 с непонятной проблемой. В панели был загружен работающий проект. Всё нормально работало. Потом заметил ошибку в текстах менеджера аварий. В двух местах изменил текст и загрузил в панель. После этого началось непонятное: часть программы перестала работать и начал отваливаться ethernet. Ethernet починился перезагрузкой СПК. А непонятную работу программы победить не удалось ни сбросом к заводским, ни очисткой проекта. На скринах выделены проблемы. Конкретно присвоение массивов не работает, либо работает частично.

27396
27397

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

energvk
02.11.2016, 23:54
В общем проверил, загрузил предыдущий проект без изменений текста в менеджере аварий, работает. Новый - нив какую. Снова изменить текст в работающем варианте руки не успели дойти.
Но столкнулся с небольшой проблемкой. Есть на диалоге поле для изменения переменной:

27421

27422

27423

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

RV9WFJ
03.11.2016, 08:18
Запись переменной в OnMouseDown сделайте, а ST код в OnDialogClosed и все должно заработать.

Mgonch
03.11.2016, 09:19
Codesys 3.5 SP7 patch6 съехало окно ввода переменной в конфигураторе ввода. Как быть? 27427

RV9WFJ
03.11.2016, 09:23
Использовать SP5 Path 5

energvk
03.11.2016, 12:37
Запись переменной в OnMouseDown сделайте, а ST код в OnDialogClosed и все должно заработать.

Обнаружил, что OnDialogClosed НЕ РАБОТАЕТ! При закрытии диалога ввода переменные не присваиваются, st-код также не обрабатываются! Что делать?

GoodLuck
03.11.2016, 16:30
Обнаружил, что OnDialogClosed НЕ РАБОТАЕТ! При закрытии диалога ввода переменные не присваиваются, st-код также не обрабатываются! Что делать?

Какая версия Codesys? Я программирую в SP5 Patch 5 все работает.

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

energvk
03.11.2016, 17:04
Проверил в эмуляции - тоже не работает. Прикладываю кусок проекта в архиве. Версия SP5 Path 5

27435

energvk
04.11.2016, 12:17
В InputConfiguration работают все функции,кроме OnDialogClosed. Евгений Кислов, прошу Вашей помощи. В чём ошибка? Не могу разобраться. Для проекта важно выполнять запись команды сразу после изменения переменной.

Евгений Кислов
04.11.2016, 12:22
В InputConfiguration работают все функции,кроме OnDialogClosed. Евгений Кислов, прошу Вашей помощи. В чём ошибка? Не могу разобраться. Для проекта важно выполнять запись команды сразу после изменения переменной.

С OnDialogClosed связан один баг - соответствующий метод не работает во вложенных диалогах. Соответственно, как раз ваша ситуация - вы в своем диалоговом окне вызываете стандартный диалог ввода. Исправили в SP8.

energvk
04.11.2016, 15:42
Вот оно что! Спасибо за информацию. Придется делать костыли

Number17
08.11.2016, 23:31
В софт в CDS состоит из задач, которые выполняются в цикле, по событию и т.д. и т.п. Как создать кусок программы который будет выполняться перед запуском всех задач? Что я имею ввиду. Привык мыслить категориями программирования микроконтроллеров. Сначала выполняется код всяких разных инициализаций, настроек, потом запускается системный цикл, начинаются крутиться всякие разные прерывания или задачи (в случае RTOS). Т.е. к коду инициализации больше обращений не будет (только в случае сброса). Как нечто подобное организовать в CDS?

Евгений Кислов
09.11.2016, 07:26
В софт в CDS состоит из задач, которые выполняются в цикле, по событию и т.д. и т.п. Как создать кусок программы который будет выполняться перед запуском всех задач? Что я имею ввиду. Привык мыслить категориями программирования микроконтроллеров. Сначала выполняется код всяких разных инициализаций, настроек, потом запускается системный цикл, начинаются крутиться всякие разные прерывания или задачи (в случае RTOS). Т.е. к коду инициализации больше обращений не будет (только в случае сброса). Как нечто подобное организовать в CDS?

Типичный пример кода, исполняемого однократно при загрузке контроллера (подразумевается, что xInit - булевская переменная, которая не перезаписывается из других фрагментов программы):




IF NOT(xInit) THEN
// команды инициализации
xInit:=TRUE;
END_IF

Number17
09.11.2016, 09:03
Типичный пример кода, исполняемого однократно при загрузке контроллера (подразумевается, что xInit - булевская переменная, которая не перезаписывается из других фрагментов программы):




IF NOT(xInit) THEN
// команды инициализации
xInit:=TRUE;
END_IF



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

Евгений Кислов
09.11.2016, 09:14
В данный момент - именно так. В последних версиях CDS появилась возможность обрабатывать системные события (старт проекта - одно из таких событий), но этот функционал не поддерживается на текущих прошивках СПК.

evgeni293
09.11.2016, 10:32
Подскажите каким образом работает задержка в 1 с.


IF (TIMER+T#1S)<TIME() THEN
TIMER:=TIME();
CHASTOTA_AUTO:=CHASTOTA_AUTO+1;

FUNCTION_BLOCK REGULIATOR
VAR_INPUT
REAL_DAVLENIE:REAL;
ON_OFF:BOOL;
USTAVKA_DAVLENIEL:REAL;
MIN_DAVLENIE:REAL;
MAX_DAVLENIE:REAL;
MIN_CHASTOTA:REAL;
MAX_CHASTOTA:REAL;
SBROS:BOOL;
END_VAR
VAR_OUTPUT
CHASTOTA_AUTO:REAL;
END_VAR
VAR
TIMER: TIME;
END_VAR

Сам код
IF ON_OFF=TRUE THEN
IF REAL_DAVLENIE>=USTAVKA_DAVLENIEL THEN
IF (TIMER+T#1S)<TIME() THEN
TIMER:=TIME();
CHASTOTA_AUTO:=CHASTOTA_AUTO+1;
END_IF
ELSE IF REAL_DAVLENIE<=USTAVKA_DAVLENIEL THEN
IF (TIMER+T#1S)<TIME() THEN
TIMER:=TIME();
CHASTOTA_AUTO:=CHASTOTA_AUTO-1;
END_IF
END_IF
END_IF
IF CHASTOTA_AUTO<=MIN_CHASTOTA THEN CHASTOTA_AUTO:=MIN_CHASTOTA;

END_IF
IF CHASTOTA_AUTO>=MAX_CHASTOTA THEN CHASTOTA_AUTO:=MAX_CHASTOTA;
END_IF

IF SBROS=TRUE THEN CHASTOTA_AUTO:=0;

END_IF
ELSE IF ON_OFF=FALSE THEN CHASTOTA_AUTO:=0;
END_IF
END_IF

Alexmorphy
09.11.2016, 15:03
считываю значение из прибора, надо это значение разделить на 1000, в итоге получаю 0. Почему?

Евгений Кислов
09.11.2016, 15:11
считываю значение из прибора, надо это значение разделить на 1000, в итоге получаю 0. Почему?

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

Alexmorphy
09.11.2016, 15:20
Выложите архив проекта, пожалуйста. Если это невозможно - то приведите кусок кода, желательно, скриншотом из онлайн-мониторинга - чтобы увидеть корректное считанное значение и операцию деления, которая приводит к обнулению значения.

Скрин программы
27503

Евгений Кислов
09.11.2016, 15:26
Попробуйте вот так:



Omix_IB_REAL:=(WORD_TO_REAL(Omix_IB)/1000);

Alexmorphy
09.11.2016, 15:30
Попробуйте вот так:



Omix_IB_REAL:=(WORD_TO_REAL(Omix_IB)/1000);


Спасибо. Помогло.
А можно теорию по этому случаю?

Евгений Кислов
09.11.2016, 15:37
Переменные типа WORD - целочисленные. Результат операции над целыми числами является целым числом. Чтобы компилятор понял, что вы хотите получить результат с плавающей точкой, необходимо в явном виде ему это пояснить с помощью преобразования типов.

дрю
11.11.2016, 11:29
27523
добрый день! Компилятор ругается на страницу визуализации "вместо")" требуется выражение". Но эта ошибка,как я понимаю, относится к текстовым языкам. А где её искать на странице визуализации. Не хочется сносить всю страницу и начинать с нуля.

Евгений Кислов
11.11.2016, 11:31
27523
добрый день! Компилятор ругается на страницу визуализации "вместо")" требуется выражение". Но эта ошибка,как я понимаю, относится к текстовым языкам. А где её искать на странице визуализации. Не хочется сносить всю страницу и начинать с нуля.

Выложите архив проекта, пожалуйста.

дрю
11.11.2016, 11:39
Как прикрепить фаил? Не могу в меню найти соответствующей иконки

Евгений Кислов
11.11.2016, 11:41
Как прикрепить фаил? Не могу в меню найти соответствующей иконки

В расширенном режиме (кнопка справка от кнопки отправки сообщения) - иконка рядом со смайликами.

дрю
11.11.2016, 11:45
Спасибо. Отправляю.

Евгений Кислов
11.11.2016, 11:57
На кнопке Шнек 1 переход в никуда - если его убрать или настроить, то проблема исчезает.

дрю
11.11.2016, 12:11
Евгений ОГРОМНОЕ спасибо!!:o

Number17
11.11.2016, 21:15
CDS 3.5 SP5 P5. Не могу изменить набор свойств со Стандартного на Профессиональный. При первом запуске установил Профессиональный набор - установлен Стандартный. Дальнейшие попытки изменить настройку через соответствующее окно задачи параметров не приводят к желаемому результату. В чём дело?
Ещё момент... Описанная ситуация наблюдается на нескольких ПК где установлена CDS.

Евгений Кислов
11.11.2016, 21:20
CDS 3.5 SP5 P5. Не могу изменить набор свойств со Стандартного на Профессиональный. При первом запуске установил Профессиональный набор - установлен Стандартный. Дальнейшие попытки изменить настройку через соответствующее окно задачи параметров не приводят к желаемому результату. В чём дело?

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

Number17
11.11.2016, 22:25
Вероятно, вводит в заблуждение тот факт, что при нажатии на кнопку изменения набора всегда отображается Стандартный. Но это не означает, что текущий режим именно стандартный - просто по умолчанию всегда предлагается именно он. Последовательно выбирайте оба режима, каждый раз наблюдая за чекбоксами - и все станет понятно.

Да, действительно... вводит в заблуждение. Всё работает.

Number17
11.11.2016, 22:29
Вопрос по виртуальному контроллеру. Какие возможности для отладки он предоставляет? Я так понимаю что он ценен только для отладки визуализации.

Евгений Кислов
11.11.2016, 22:45
Вопрос по виртуальному контроллеру. Какие возможности для отладки он предоставляет? Я так понимаю что он ценен только для отладки визуализации.

Виртуальный контроллер (который не следует путать с эмуляцией) - полноценный soft-PLC, который поддерживает весь функционал CODESYS, в том числе обмен и работу с файлами. Можно отметить, что лицензия на него (которая снимает ограничение на время непрерывной работы) в полной комплектации стоит 770 евро в CODESYS store. Так что возможности для отладки у него крайне широкие. К числу того, что отладить на нем не удастся, можно отнести linux-зависимые библиотеки - такими, например, являются CmpSysExec и SPKtools.

Number17
11.11.2016, 23:19
Виртуальный контроллер (который не следует путать с эмуляцией) - полноценный soft-PLC, который поддерживает весь функционал CODESYS, в том числе обмен и работу с файлами. Можно отметить, что лицензия на него (которая снимает ограничение на время непрерывной работы) в полной комплектации стоит 770 евро в CODESYS store. Так что возможности для отладки у него крайне широкие. К числу того, что отладить на нем не удастся, можно отнести linux-зависимые библиотеки - такими, например, являются CmpSysExec и SPKtools.

То есть если я прицеплю какой нибудь модуль Mx110-xxx к ПК через преобразователь 485 интерфейса, то вполне возможно отлаживать обмен?

Евгений Кислов
11.11.2016, 23:24
То есть если я прицеплю какой нибудь модуль Mx110-xxx к ПК через преобразователь 485 интерфейса, то вполне возможно отлаживать обмен?

Да, обмен отлаживать можно, но стоит все же понимать, что тайминги между ПК/модулем и СПК/модулем будут отличаться - так что не стоит, например, подбирать таймауты, ориентируясь на виртуальник. С простой проверкой самого факта наличия обмена - вообще никаких проблем.

Number17
12.11.2016, 00:45
С простой проверкой самого факта наличия обмена - вообще никаких проблем.
Это и имел ввиду.

Number17
12.11.2016, 09:45
Пытаюсь изменить подсветку дисплея с помощью SysExecute('echo "30" >/sys/class/backlight/pwm-backlight/brightness &');
Выдаёт ошибку: Идентификатор 'SysExecute' не задан.
Библиотека CmpSysExec подключена. Что не учёл?

Number17
12.11.2016, 10:18
Вот что у меня 27551
Через консоль. Что то через ФБ Brightnees который в SPK_Tools не получается яркость изменять.

Евгений Кислов
12.11.2016, 10:42
Добавьте библиотеку отдельно или используйте пространство имен от SPK_tools - в стиле SPK_Tools.SysExecute(...)

Уточните, пожалуйста, модель, модификацию и версию прошивки контроллера, на котором не работает управление подсветкой через SPK_tools.

Number17
12.11.2016, 11:36
Добавьте библиотеку отдельно или используйте пространство имен от SPK_tools - в стиле SPK_Tools.SysExecute(...)

Уточните, пожалуйста, модель, модификацию и версию прошивки контроллера, на котором не работает управление подсветкой через SPK_tools.

СПК105, версия прошивки 3.947

Number17
12.11.2016, 11:40
могу предположить что не нравится компилятору использование двойных кавычек внутри одинарных, надо пробовать либо слешами, либо hex-кодами

Исхожу из того что написано в примерах в документации от производителя)))

Number17
12.11.2016, 11:57
Действительно дело было в в пространстве имён SPK_tools. SPK_Tools.SysExecute(...) работает.

P.S. Доигрался... установил "0" на подстветку, всё потухло, ничего не видать ))).

Number17
12.11.2016, 13:18
через putty зайдите и сделайте как должно быть

В блоке инициализации строчку кода с загрузкой значения подсветки воткнул, загрузил проект и всё в норму пришло. На будущее ограничил значение нижней границы параметра значением "5".

Эдуард_Н
14.11.2016, 04:27
Где найти эту бибку?

Евгений Кислов
14.11.2016, 07:35
Где найти эту бибку?

Она входит в состав CODESYS. Искать, соответственно, в строке поиска при добавлении библиотеки в проект. См. СПК. Системное время, п. 5.1.

Эдуард_Н
14.11.2016, 09:47
Она входит в состав CODESYS. Искать, соответственно, в строке поиска при добавлении библиотеки в проект. См. СПК. Системное время, п. 5.1.

А эта ошибка почему?

Евгений Кислов
14.11.2016, 09:53
Это стоит посмотреть в сообщениях CODESYS. Возможно, у вас по каким-то причинам не установились данные библиотеки.

Эдуард_Н
14.11.2016, 10:00
Это стоит посмотреть в сообщениях CODESYS. Возможно, у вас по каким-то причинам не установились данные библиотеки.

Как из установить? Переустановить КДС?
И вот, что пишет КДС

Евгений Кислов
14.11.2016, 10:03
В Менеджере библиотек есть кнопка Скачать недостающие библиотеки - если проблема в этом. Приведите сообщения об ошибках из CODESYS все-таки.

Эдуард_Н
14.11.2016, 10:08
В Менеджере библиотек есть кнопка Скачать недостающие библиотеки - если проблема в этом. Приведите сообщения об ошибках из CODESYS все-таки.

Это где там такая кнопка? Сообщения в предыдущем сообщении.

Евгений Кислов
14.11.2016, 10:14
В вашем случае стоит переустановить CODESYS.

Эдуард_Н
14.11.2016, 10:40
В вашем случае стоит переустановить CODESYS.

Не помогает. Может сначала надо было КДС3.5, а уже потом КДС3.5SP5?

Эдуард_Н
14.11.2016, 11:23
Да, сначала установил КДС3.5SP5 (Думал без него обойдётся), а потом переустановил КДС3.5SP5P5.

energvk
14.11.2016, 22:41
В InputConfiguration работают все функции,кроме OnDialogClosed. Евгений Кислов, прошу Вашей помощи. В чём ошибка? Не могу разобраться. Для проекта важно выполнять запись команды сразу после изменения переменной.


С OnDialogClosed связан один баг - соответствующий метод не работает во вложенных диалогах. Соответственно, как раз ваша ситуация - вы в своем диалоговом окне вызываете стандартный диалог ввода. Исправили в SP8.


Вот оно что! Спасибо за информацию. Придется делать костыли

Что-то колтыли тоже не работают:

27601

При onMouseDown у меня записывается нужный аргумент и должна переключаться в TRUE переменная PLC_PRG.chgFreq[i] (для проверки её также в ST-коде присваиваю, по причине ниже).
Далее в программе работает следующий код:


// обрабатываем изменение частоты насосов
FOR i := 1 TO 5 DO
IF chgFreq[i] THEN
Cmd := INT_TO_WORD(i)+4; Arg1 := 6; chgFreq[i] := FALSE;
END_IF;
END_FOR;


И опять же у меня при нажатии на ОК переменная Arg2 записывается, а chgFreq[i] переходит в TRUE только при следующем открытии диалога ввода.
Боюсь предположить, что

С OnDialogClosed связан один баг - соответствующий метод не работает во вложенных диалогах. Соответственно, как раз ваша ситуация - вы в своем диалоговом окне вызываете стандартный диалог ввода. Исправили в SP8.
также относиться и к "Переключить переменную" и ST-коду. Теплится надежда, что у меня что-то не так, иначе возникает серьёзная проблема - как выполнить нужную мне последовательность без глобальной переделки диалогов.

Евгений Кислов
15.11.2016, 08:03
У меня, в целом, подобная конструкция работает. Правда, есть один достаточно специфичный момент - chgFreq[i] переходит в TRUE сразу после открытия диалога ввода.

Т.е., полагаю, вы для себя это представляете в стиле:


открытие диалога ввода-->ввод нового значения-->нажатие на ОК-->взведение флага-->если флаг взведен, то выполняем код

А CODESYS это воспринимает буквально:


открытие диалога ввода-->взведение флага (независимо, что там в диалоге ввода, пусть он просто даже завис открытым)-->если флаг взведен, то выполняем код

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

energvk
15.11.2016, 09:51
У меня, в целом, подобная конструкция работает. Правда, есть один достаточно специфичный момент - chgFreq[i] переходит в TRUE сразу после открытия диалога ввода.

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


Т.е., полагаю, вы для себя это представляете в стиле:

открытие диалога ввода-->ввод нового значения-->нажатие на ОК-->взведение флага-->если флаг взведен, то выполняем код


Именно так мне и нужно, но при использовании фреймов это не работает.


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

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

открытие диалога ввода-->ввод нового значения-->нажатие на ОК-->выполняем код

То есть нужно опять всё переделывать :mad:

Number17
15.11.2016, 11:03
Во вкладке Device присутствует следующий параметр Опции цикла шины - Задачи цикла шины.. Что это за параметр? На что влияет?

Евгений Кислов
15.11.2016, 11:10
Определяет частоту вызова modbus-компонентов. В большинстве случаев лучше не трогать ни эту (общую), ни аналогичные индивидуальные для компонентов настройки - при значениях по умолчанию обмен привязывается к задаче с наименьшим временем цикла. Поскольку обычно в проекте есть MainTask с циклом 10-20 мс, то проблем не возникает.

Number17
15.11.2016, 11:15
Определяет частоту вызова modbus-компонентов. В большинстве случаев лучше не трогать ни эту (общую), ни аналогичные индивидуальные для компонентов настройки - при значениях по умолчанию обмен привязывается к задаче с наименьшим временем цикла. Поскольку обычно в проекте есть MainTask с циклом 10-20 мс, то проблем не возникает.

Интересуюсь потому что не могу обмен запустить на библиотеке Modbus:http://www.owen.ru/forum/showthread.php?t=23897&p=227122&viewfull=1#post227122. Подумал что может быть в этом параметре дело.

Евгений Кислов
15.11.2016, 11:46
Интересуюсь потому что не могу обмен запустить на библиотеке Modbus:http://www.owen.ru/forum/showthread.php?t=23897&p=227122&viewfull=1#post227122. Подумал что может быть в этом параметре дело.

На библиотеку этот параметр вообще никак не влияет. По вашему вопросу лучше обратиться в техподдержку.

Number17
15.11.2016, 22:42
Cтандартные средства конфигурации Modbus в CDS: как привязать логическую переменную к триггеру запуска канала?

Евгений Кислов
16.11.2016, 07:23
Cтандартные средства конфигурации Modbus в CDS: как привязать логическую переменную к триггеру запуска канала?

http://www.owen.ru/forum/showthread.php?t=23370&p=197240&viewfull=1#post197240

дрю
16.11.2016, 10:18
Добрый день! Подскажите пожалуста как присвоить переменной в разделе обявлениЙ <TEMP_6: TIME;> 4 секунды, например, чтобы потом можно было этуп еременную подстовлять в функциональном блоке таймера вместо <T#4S>?

Евгений Кислов
16.11.2016, 10:21
Вот так:


tTime:TIME:=t#4s;

дрю
16.11.2016, 10:23
Странно код не попал в текст поэтому повторюсь. Обявляем переменную TEMP_1: TIME; Как её инициализировать в разделе обявлений чтобы в функциональном блоке таймера не писать T#4S?

дрю
16.11.2016, 10:23
Сейчас попробую!

дрю
16.11.2016, 10:29
Ругаеться 27628

Евгений Кислов
16.11.2016, 10:30
Вы забыли "=". Внимательно посмотрите на мой пример еще раз.

дрю
16.11.2016, 10:32
Точно! Извиняюсь за свою невнимательность...:o. Спасибо!

energvk
17.11.2016, 12:35
У меня тоже работала. Правда запись значения команды выполнялась после закрытия диалога. А вот когда уже начал использовать фреймы - начались эти проблемы.



Именно так мне и нужно, но при использовании фреймов это не работает.



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

открытие диалога ввода-->ввод нового значения-->нажатие на ОК-->выполняем код

То есть нужно опять всё переделывать :mad:

Переделал - в фрейм вместо диалога поставил визуализацию - заработало как предполагалось изначально. Но есть одно "Но" - на визуализации в фрейме появились артефакты:

27643

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

Евгений Кислов
17.11.2016, 15:24
При каких обстоятельствах появляются артефакты? Случаем не при использовании невидимых элементов?

energvk
17.11.2016, 15:29
Мммм... не совсем понятен вопрос. Поясню: у меня теперь на главном экране висит фрэйм с визуализацией, который в обычном режиме скрыт. При нажатии на другой фрейм данный фрейм становится видимым. И вот когда он виден - на нем такие артефакты

Евгений Кислов
17.11.2016, 15:32
Мммм... не совсем понятен вопрос. Поясню: у меня теперь на главном экране висит фрэйм с визуализацией, который в обычном режиме скрыт. При нажатии на другой фрейм данный фрейм становится видимым. И вот когда он виден - на нем такие артефакты

Отправьте архив проекта мне на почту, пожалуйста. И, если не сложно, приложите пошаговую инструкцию, куда жать, чтобы увидеть артефакты.

Marina44
18.11.2016, 23:05
Как изменить время?

Евгений Кислов
19.11.2016, 09:54
Как изменить время?

См. документ СПК. Системное время.

дрю
24.11.2016, 11:32
Добрый день! В ST создал таймер TP. Создал переменную типа WORD Назвал её TIME_TP_1. В эту переменную я хочу записывать секунды с выхода таймера ET без десятых , значит нужно сделать преобразования, вот как я написал:
TP_1: (IN=1, PT:=T#10S);
TIME_TP_1:=TIME TO INT TP_1.ET;
Но гдето ошибка в преобразовании, компилятор ругаеться, подскажите пожалуста как правильно?27755

capzap
24.11.2016, 11:35
TIME_TP_1:=TIME_TO_INT( TP_1.ET);
так наверное

дрю
24.11.2016, 11:37
27756 не не работает

дрю
24.11.2016, 11:41
Понял я не сделал нижнее подчеркивание. Спасибо!27757

дрю
24.11.2016, 13:54
Подскажите При компиляции выскочил такое сообщение 27771. Команду после которой оно появилось удалил из программы, но оно по прежнему выскакивает. Журнал нашел 27773. А что необходимо сделать для возобновления компиляции?

Евгений Кислов
24.11.2016, 14:07
Подскажите При компиляции выскочил такое сообщение 27771. Команду после которой оно появилось удалил из программы, но оно по прежнему выскакивает. Журнал нашел 27773. А что необходимо сделать для возобновления компиляции?

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

дрю
24.11.2016, 14:20
Спасибо. Выполнил ЛОГИН С ЗАГРУЗКОЙ и сообщение пропала. А подскажите еще пожалуста какая должна быть правильной запись :
В переменную Типа WORD я пересылая через преобразование типов время с выхода таймера ET
VREMA_TP_1:= TIME_TO_WORD (TP_1.ET);
Но в переменную оно попадает в виде милисекунд, а нужны секунды. Значит после преобразования эту величину нужно разделпить на 1000 а после присвоить это значение VREMA_TP_1. Какой синтаксис этой записи?

дрю
24.11.2016, 14:31
Все разобрался, извиняюсь.

dr_alf
13.12.2016, 16:25
Пытаюсь передать данные от СПК-110 к частотнику.
В CodeSys для этой цели использую ФБ MB_WR_REGS.
Не пойму ка правильно разобрать строку в HEX-формате и раскидать ее по параметрам блока в соответствии с нижеописанным примером команды на реверсивное вращение.

Информация предоставленная мне в тех поддержке:
---------------------------------------------------------------------------
По частотному преобразователю СТА-С2

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

Чтение параметров.
В руководстве п.4.1 "Список функциональных параметров" есть таблица
параметров. Левый столбец это адрес параметра для чтения по протоколу.
Например параметр P0.01 (Источник задания частоты) имеет адрес 0001,
параметр D-08 (Входное напряжение) имеет адрес 0D08.

Пример чтения параметра D-08 Входное напряжение. Адрес устройства - 1.
запрос: 01 03 0d 08 00 02 47 65. В соответствии модбас.
ответ: 01 03 04 01 86 00 00 1a. Результат 0186 = 390.


Управление.
В соответсвсвии с модбас
ячейка 2000 - слово управления.
бит 0 - стоп
бит 1 - пуск
бит 4 - прямо
бит 5 - реверс

ячейка 2001 - задание частоты

Пример команда на реверсивное вращение (00 21) на частоте 15,89 Гц (06 35)
01 10 20 00 00 02 04 00 21 06 35 f9 d3 - в соответствии с модбас.

---------------------------------------------------------------------------

С параметром DevAddr все ясно = беру 01 с начала строки, а вот что и как правильно записать в остальные?

Mgonch
15.12.2016, 10:34
Добрый день. Помогите пожалуйста разобраться в следующем вопросе: как измерить скорость изменения переменной. По сути надо записать значение переменной, подождать две секунды, снова записать значение переменной, и вычислить разницу с предыдущим значением этой переменной.

Sulfur
15.12.2016, 13:35
Добрый день. Помогите пожалуйста разобраться в следующем вопросе: как измерить скорость изменения переменной. По сути надо записать значение переменной, подождать две секунды, снова записать значение переменной, и вычислить разницу с предыдущим значением этой переменной.

Делать чтение\запись переменной по таймеру?

--------------------------------

Вопрос: как перенести установленную в КДС 3.5 SP5 библиотеку на другой компьютер с точно таким же КДС?
Исходники библиотеки утеряны, но в первом компьютере установленная библиотека работает нормально.

Евгений Кислов
15.12.2016, 13:39
Делать чтение\запись переменной по таймеру?

--------------------------------

Вопрос: как перенести установленную в КДС 3.5 SP5 библиотеку на другой компьютер с точно таким же КДС?
Исходники библиотеки утеряны, но в первом компьютере установленная библиотека работает нормально.

Все установленные библиотеки лежат в C:\ProgramData\CODESYS\Managed Libraries

Попробуйте найти ее там и потом установить на другом ПК через Репозиторий библиотек.

Sulfur
15.12.2016, 14:03
Все установленные библиотеки лежат в C:\ProgramData\CODESYS\Managed Libraries

Попробуйте найти ее там и потом установить на другом ПК через Репозиторий библиотек.

Спасибо, всё получилось.

дрю
15.12.2016, 15:29
Подскажите пожалуЙста, в какой библиотеке есть функциональный блок для управления 3_х ходовыми задвижками?

дрю
16.12.2016, 09:41
Нашли В UTIL/LIB

Pimpl
20.12.2016, 10:29
Подскажите пожалуйста. Верх у меня на Мастер Скада, низ CoDeSysOPCDA. При обрыве связи не диагностируется потеря связи. Всё замирает по последним данным и не подхватывает возобновление связи. Постоянно приходится перезагружать АРМ. что делать?

dr_alf
21.12.2016, 02:48
При попытке использования библиотеки ModulsOwenLib 3.4.0.7, а вернее попытке обращения к COM порту в программе при загрузке приложения в ПЛК304 возникает ошибка:
[FATAL ERROR] Неразрешённая ссылка: 'RS_MODE_SETUP'

Тоже было такое.
Удалил библиотеку SysCom 3.5.5.0
Так как в библиотеке ModulsOwenLib присутствует своя SysCom.
В менеджере библиотек возле ModulsOwenLib нажать на плюсик, раскрывается дерево, и там ее видно.

dr_alf
22.12.2016, 09:13
Изучаю ST. Хочу передать данные из CodeSys через COM-порт в программу-терминал на комп. И из терминала в CodeSys.
Цепочка у меня такая: CodeSys (виртуальный контроллер) -> программа-эмулятор COM-портов comcom -> терминал ComPump.
За основу взял этот (http://www.owen.ru/forum/attachment.php?attachmentid=3510&d=1298643539) пример. При запуске он передает строку с данными. Но обратно данные в среду разработки не принимаются.
В проекте мне нужно оставить только один COM-порт. Попробовал сам редактировать код, теперь COM-порт не открывается.
Помогите пожалуйста разобраться где я неправильно нашКодил.

IF Conn1.Done = FALSE THEN //если порт закрыт откроем его
Conn1(enable:=TRUE ,PortNum:=3); // откроем первый физический порт Р1,
//все остальные настройки оставим по умолчанию
IF Conn1.Done = TRUE THEN
SysComPurge (Conn1.Handle); // очистим его буфер
TimeOut:=100; //время для функций Read и Write
END_IF
END_IF

blinker.TIMEHIGH:=T#4S;
blinker.TIMELOW:=T#1S;
blinker(ENABLE:=TRUE);// блинк нужен для организации переодичности работы программы, период 5 секунд

rtrig(CLK:=blinker.OUT);
CASE stat OF

1: BufBR[1]:=1; //запись данных в первый порт, данные придут соответственно в 4й порт
BufBR[2]:=2;// отсылаем 8 байт одним куском
BufBR[3]:=3;
BufBR[4]:=4;
BufBR[5]:=5;
BufBR[6]:=6;
BufBR[7]:=7;
BufBR[8]:=7;
IF Conn1.Done = TRUE THEN
bWrite:=SysComWrite(Conn1.Handle, ADR(BufBW), 8, TimeOut, ADR(Err)); // то что одним куском видно здесь
// цифра "8" означает записать в порт 8байт
IF bWrite>0 THEN
WCount:=WCount+1;
counter:=counter+UDINT_TO_BYTE(bWrite);
END_IF
IF counter>=8 THEN stat:=1;counter:=0; END_IF
END_IF
2: BufBW[1]:=8; // после этого отправим что нибудь в порт Р1
BufBW[2]:=7;// это что нибудь - значения присвоенные переменной BuffW
BufBW[3]:=6;
BufBW[4]:=5;
BufBW[5]:=4;
BufBW[6]:=3;
BufBW[7]:=2;
BufBW[8]:=1;

3: //как отправим прочтем

IF Conn1.Done = TRUE THEN
bRead:=SysComRead(Conn1.Handle, ADR(BufBR), 8, TimeOut, ADR(Err));
IF bRead>0 THEN
//RCount2:=RCount2+1;
FOR i:=1 TO bRead DO
BuffIn[8+counter+i]:=BufBR[i];
END_FOR
counter:=counter+UDINT_TO_BYTE(bRead);
IF counter>=8 THEN
stat:=4;
counter:=0;
(*FOR i:=1 TO bRead DO
IF BufBR[i]<>BufBW[i] THEN
ErrCnt:=ErrCnt+1;
END_IF
END_FOR*)
END_IF
END_IF
END_IF
4: IF rtrig.Q THEN // по таймеру обнулим переменные отображающее состояние и начнем все с начала
stat:=0;
RCount:=0;
WCount:=0;
END_IF
END_CASE

Дмитрий520
22.12.2016, 13:13
Подскажите начинающему пжл.!! Если аналоговый выход датчика инклинометра в характеристиках 0...4,5В,, можно его подключить к аналоговому входу модуля МВ110 0..10В? Заранее спасибо

Sulfur
29.12.2016, 14:06
Дмитрий520
Если характеристика датчика линейная, то нет проблем. В любом случае будет пересчет напряжения в градусы в КДС, и ничто не мешает написать формулу так, что бы учитывалась данная особенность датчика.

Nickolay II
03.01.2017, 14:54
Здравствуйте!
вопрос имею от новичка.
делаю изменения в рабочей программе для СПК 107.
например меняю коэффициент пересчета дискретного выхода.
компилирую.
создаю загрузочное приложение.
сбрасываю на флэшку, АРР.
гружу в СПК.
после перезагрузки СПК перестает опрашивать модули входов/выходов. 485, на модулях - не моргает.
перегружаю старую версию, всё работает.
чего не так при компиляции делаю?

seas71
05.01.2017, 18:38
Здравствуйте! Подскажите начинающему, вопрос в следующем. Необходимо организовать работу по RS232. Необходимо писать/читать данные. Использую библиотеку Syscom. С записью проблем нет, проблема с чтением. Для для чтения данных в библиотеке есть отдельный ФБ. Не могу понять как пользоваться этим функциональным блоком. Можно привести пример чтения данных по RS232? Спасибо!

Lacrimosa
19.01.2017, 15:03
Не могу разобраться с таймерами.
Помогите примером на ST следующего алгоритма:

Нажатие кнопки--> запускаем таймер пока кнопка нажата --> сравниваем таймер со значением 1 сек например --> если меньше (отпустили раньше, чем 1 сек) то одно действие --> если кнопку держим дольше 1 сек, то раз в 0,5 сек a:=a+1;.

Lacrimosa
20.01.2017, 16:11
Если не сложно, то примером не поделитесь?

Lacrimosa
20.01.2017, 17:54
только если держим - то события отпускания не происходит (долгое нажатие) - поэтому и думал использовать таймер.

Svorog
24.01.2017, 15:59
Здравствуйте, подскажите пожалуйста люди знающие: как можно записать переменную в определенный момент времени и вывести её на экран в соответствующем прямоугольнике, т.е. практически задача выглядит следующим образом: при поднятии температуры выше 60 градусов необходимо записать значение давления в первом прямоугольнике, при поднятии температуры до 80 градусов записать значение давления в следующем прямоугольнике и т.д..

RV9WFJ
24.01.2017, 16:23
R_TRIG60(CLK:=Temp >= 60);
IF R_TRIG60.Q THEN square60:= pressure; END_IF;

R_TRIG80(CLK:=Temp >= 80);
IF R_TRIG80.Q THEN square80:= pressure; END_IF;

Svorog
24.01.2017, 17:49
R_TRIG60(CLK:=Temp >= 60);
IF R_TRIG60.Q THEN square60:= pressure; END_IF;

R_TRIG80(CLK:=Temp >= 80);
IF R_TRIG80.Q THEN square80:= pressure; END_IF;

при этом square60, square80... будут сохранять начальные значения в момент пересечения указанной температуры? и ещё попутный вопрос как подобный код вставить в мой проект написанный на CFC?

Number17
24.01.2017, 20:32
Возможно ли как то сохранить или экспортировать проект СоDeSys таким образом, что бы исходные коды программ (например, написанных на ST), сохранялись в текстовый файл или группу файлов? Привык уже что в средах разработки программ на С (например) любой *.с или *.h файл возможно открыть в стороннем текстовом редакторе и работать с ним. Здесь же для того что бы скопировать кусок кода из другого прожекта приходится открывать ещё одну копию CDS или же ручками переносить код в текстовый редактор и сохранять.

Евгений Кислов
24.01.2017, 20:57
Возможно ли как то сохранить или экспортировать проект СоDeSys таким образом, что бы исходные коды программ (например, написанных на ST), сохранялись в текстовый файл или группу файлов? Привык уже что в средах разработки программ на С (например) любой *.с или *.h файл возможно открыть в стороннем текстовом редакторе и работать с ним. Здесь же для того что бы скопировать кусок кода из другого прожекта приходится открывать ещё одну копию CDS или же ручками переносить код в текстовый редактор и сохранять.

Есть автодокументирование (Проект - Документ) и экспорт в xml (Проект - Export PLCopenXML). Насколько это удобно - уже другой вопрос.

Number17
25.01.2017, 12:04
Каким способом предпочтительнее измерять промежутки времени порядка миллисекунд - десятков секунд? Использовать какие то таймера или работать с системным временем? Запоминать начальные и конечные временные точки и вычитать одно из другого, например. Аппаратных таймеров которые можно гибко настроить и на основе них организовать системный таймера, например как в МК, тут нет. Сформировать импульс определённой длительности возможно, например, с помощью таймера TP. А если требуется измерить длительность какого воздействия какие методы использовать?

Евгений Кислов
25.01.2017, 12:17
Использовать какие то таймера или работать с системным временем? Запоминать начальные и конечные временные точки и вычитать одно из другого, например.

Да, это типичный способ. Функция TIME() возвращает время системного таймера (отсчитывает от старта ПЛК с дискретностью до мс).

Number17
25.01.2017, 13:40
Да, это типичный способ. Функция TIME() возвращает время системного таймера (отсчитывает от старта ПЛК с дискретностью до мс).

Разрядность регистра системного таймера в СПК105 соответствует разрядности типа TIME (32 разряда)?

Number17
25.01.2017, 20:29
Удачно получаю значения системного таймера с использованием функции TIME(), измеряю требуемые мне длительности событий. Решил визуализировать значения системного таймера и использовать как информацию о времени работы устройства после включения. Пытаюсь вывести значение в текстовое поле с помощью переменой tWork := TIME(); и вывожу эту переменную с помощью форматирования %t[hh:mm:ss]. В итоге получаю какое то непонятное значение... При включении устройства отсчёт начинается не с нулевого времени а с 8-й минуты с копейками. При этом нету разницы загружаю ли я прошивку сразу в оперативку или шью флэш и потом перегружаю СПК105. При этом при отладке (когда заливаю сразу в оперативку) вижу что переменная имеет совсем иное, адекватное значение, соответствующее реальному времени работы девайса. Что не так?

Евгений Кислов
25.01.2017, 20:43
В SP5 Patch5 не работает отображение переменных с форматом %t[...] - вместо значения отображается системное время. В более поздних версиях это поправили.
Вы можете конвертировать значение таймера в STRING и отображать уже его.

Number17
26.01.2017, 10:59
В проекте случилась какая то непонятная "авария" - отказали кнопки. Никаких действий определённых для кнопок (исполнения кода на ST, переключения экранов визуализации, переключения логических переменных) не происходит. Остальные элементы работают нормально. В чём причина?

Евгений Кислов
26.01.2017, 11:03
В проекте случилась какая то непонятная "авария" - отказали кнопки. Никаких действий определённых для кнопок (исполнения кода на ST, переключения экранов визуализации, переключения логических переменных) не происходит. Остальные элементы работают нормально. В чём причина?

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

Number17
26.01.2017, 11:37
Извините, очень сложно ответить на подобный вопрос, не видя проекта и не имея информации, как воспроизвести проблему. Если есть возможность - свяжитесь со мной по skype.

Заработало. Перезагрузка CDS и проекта результата не дала, но после перезагрузки компьютера проблема решилась.

Виктор Зайцев
30.01.2017, 09:36
Добрый день. я новичок, надеюсь на вашу помощь! осваиваю CDS 3.5 PATCH7. программирую на языке CFC. с программной частью разобрался. Решил начать с простых примеров визуализации. сделал один вход и выход и попытался их связать. в результате вылезла непонятная мне ошибка... помогите пожалуйста с ней разобраться...29008

Евгений Кислов
30.01.2017, 09:41
Добрый день. я новичок, надеюсь на вашу помощь! осваиваю CDS 3.5 PATCH7. программирую на языке CFC. с программной частью разобрался. Решил начать с простых примеров визуализации. сделал один вход и выход и попытался их связать. в результате вылезла непонятная мне ошибка... помогите пожалуйста с ней разобраться...29008

При работе с эмуляцией используйте вариант Логин с загрузкой.

29009

Но лучше эмуляцию не использовать вообще. Производите отладку на виртуальном контроллере (см. СПК. FAQ, п. 9.8).

Виктор Зайцев
30.01.2017, 10:00
спасибо за помощь! заработало )

Djekhan
09.02.2017, 15:18
товарищи, помогите, осваиваю cds 3.5 sp7 язык cfc, пробую связать кнопку с рядом переменных, чтобы выполнялась следующее...например при выключенном режиме I1=0, I2=0, I3=0, I4=O. В др режимах варианты меняются. пробовал реализовать программно в plc_prg, не выходит компилятор ругается, пробовал в свойствах кнопки через st код, толи я программу пишу неправильно, толи я делаю что-то не так...
и если у кого есть учебник по ст буду признателен.)) надеюсь на вашу помощь

Евгений Кислов
09.02.2017, 15:26
товарищи, помогите, осваиваю cds 3.5 sp7 язык cfc, пробую связать кнопку с рядом переменных, чтобы выполнялась следующее...например при выключенном режиме I1=0, I2=0, I3=0, I4=O. В др режимах варианты меняются. пробовал реализовать программно в plc_prg, не выходит компилятор ругается, пробовал в свойствах кнопки через st код, толи я программу пишу неправильно, толи я делаю что-то не так...
и если у кого есть учебник по ст буду признателен.)) надеюсь на вашу помощь

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

Djekhan
09.02.2017, 15:42
29323
Скриншот экрана программы. я кажись программу неправильно пишу...хотя смотрел как пишется программа на языке ст, все равно фейл...

RV9WFJ
09.02.2017, 15:53
У вас программа почему-то в области обьявления переменных. Перетащите ее вниз.

Евгений Кислов
09.02.2017, 15:54
29323
Скриншот экрана программы. я кажись программу неправильно пишу...хотя смотрел как пишется программа на языке ст, все равно фейл...

Рекомендую ознакомиться с документом СПК. Первый старт - он снимет большую часть вопросов начального уровня.

Евгений Кислов
09.02.2017, 15:56
У вас программа почему-то в области обьявления переменных. Перетащите ее вниз.

Перетаскивание не поможет - там программа на CFC, если приглядеться.

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

Djekhan
09.02.2017, 16:41
спасибо! будем разбираться)

Drive74
17.02.2017, 06:28
Всем здравствовать! Знающие, сообщите, пожалуйста, почему в чекбокс автовосстановление связи в Modbus_Master_Com_Port может быть неактивен? Пробовал менять различные версии modbus устройств. Спасибо.29569

Евгений Кислов
17.02.2017, 07:12
Всем здравствовать! Знающие, сообщите, пожалуйста, почему в чекбокс автовосстановление связи в Modbus_Master_Com_Port может быть неактивен? Пробовал менять различные версии modbus устройств. Спасибо.29569

Чекбокс стал активен в версии Modbus Master'a 3.5.5.0.

B.S.V
17.02.2017, 10:28
День добрый.
До этого писал (пару раз на ST) в CDS2.3 . Щас понадобилось написать под СПК110. Взял CDS3 P7 (может это моя первая ошибка? взять P5?) и следуя логики CDS2 не нахожу как добавлять модули в/в (пишу на ST). В CFC я не вкуриваю как реализовывать алгоритм, как обрабатывать входные данные и как передавать эти данные сторонним устройствам. Таргет установлен, библиотеки OWEN установлены (может не все но установил все что нашел на сайте). как добавлять модули? И читал и видео смотрел, мож туплю но мой вопрос везде обходят стороной.
Заранее благодарен.

Евгений Кислов
17.02.2017, 10:30
День добрый.
До этого писал (пару раз на ST) в CDS2.3 . Щас понадобилось написать под СПК110. Взял CDS3 P7 (может это моя первая ошибка? взять P5?) и следуя логики CDS2 не нахожу как добавлять модули в/в (пишу на ST). В CFC я не вкуриваю как реализовывать алгоритм, как обрабатывать входные данные и как передавать эти данные сторонним устройствам. Таргет установлен, библиотеки OWEN установлены (может не все но установил все что нашел на сайте). как добавлять модули? И читал и видео смотрел, мож туплю но мой вопрос везде обходят стороной.
Заранее благодарен.

Добрый день. Ознакомьтесь с документом СПК. Modbus - в нем рассмотрены все упомянутые вами вопросы.
http://ftp.owen.ru/index.html/CoDeSys3/11_Documentation/01_SPK/SPK_Modbus_v.1.0.pdf

B.S.V
17.02.2017, 11:23
:) Не сообразил что это может быть описано в инструкции на Modbus. Благодарю.

Drive74
17.02.2017, 11:36
Евгений, благодарю за информацию.
Как в данном случае восстанавливать соединение ПЛК304 (target 3.5.3) со слейвами?

Евгений Кислов
17.02.2017, 12:56
Евгений, благодарю за информацию.
Как в данном случае восстанавливать соединение ПЛК304 (target 3.5.3) со слейвами?

В данном случае это будет возможно только при организации обмена через библиотеку Modbus.
http://www.owen.ru/catalog/codesys_v3/80224381

Drive74
17.02.2017, 14:20
Евгений, с библиотеками тоже не так все просто. Почему то при загрузке проекта возникают ошибки (скрин ошибок). В чем может быть проблема? 29586 29587 29588

Евгений Кислов
17.02.2017, 14:37
Евгений, с библиотеками тоже не так все просто. Почему то при загрузке проекта возникают ошибки (скрин ошибок). В чем может быть проблема? 29586 29587 29588

Используйте библиотеку Modbus и ComService (чтобы открыть порт), а не ModulsOwenLib.

Drive74
17.02.2017, 14:41
Евгений, хорошо. Будем пробовать.

Спасибо.

Svorog
18.02.2017, 11:40
Доброго времени суток столкнулся с проблемой в проекте потребовалось подключить к СПК модуль МУ110К в добавок к уже имеющемуся МУ110Р, для подключения предыдущего модуля использовал шаблон, шаблоны для первого и второго модуля одинаковые с одинаковыми названиямии я так понимаю с одинаковыми назначениями выходов? для управлением релейного модуля использовал в программе на CFC вывод MU110_8R_K.wOut8.
очень прошу ответить на следующие вопросы:
1. как мне обратиться к транзисторному модулю с тем же номером выхода?
2. с одного выхода транзисторного модуля мне нужен шим сигнал для управления контроллером шагового двигателя, я правильно понял что предварительно записав скважность шим в модуль, в дальнейшим я программно управляю выходом присваивая значения переменной привязанной к этому выходу в диапазоне от 1 до 1000? скорость меня интересует постоянная и изменять в процессе работы её не требуется, только подобрать значение во время отладки.

Евгений Кислов
18.02.2017, 12:02
Для работы с МУ110-Р и МУ110-К, действительно, используется один шаблон, но каждый его экземпляр в дереве устройств имеет уникальное имя. По умолчанию CODESYS добавляет к дефолтному имени экземпляра порядковый номер, но можно указать свое имя. Соответственно, при обращении к конкретному модулю указывается именно это уникальное имя.

29613

Для шаблонов работа с ШИМ не поддержана - в этом случае придется вручную настраивать Modbus Slave устройство.

Svorog
18.02.2017, 12:33
Для работы с МУ110-Р и МУ110-К, действительно, используется один шаблон, но каждый его экземпляр в дереве устройств имеет уникальное имя. По умолчанию CODESYS добавляет к дефолтному имени экземпляра порядковый номер, но можно указать свое имя. Соответственно, при обращении к конкретному модулю указывается именно это уникальное имя.

29613

Для шаблонов работа с ШИМ не поддержана - в этом случае придется вручную настраивать Modbus Slave устройство.

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

Евгений Кислов
18.02.2017, 14:13
1. Добавляете вместо шаблона устройство Modbus Slave, Com Port версии 3.5.4.0.
2. На вкладке Общее указываете его адрес.
3. На вкладке Канал Modbus Slave создаете канал. В соответствии с РЭ (с. 41-42) для первого выхода выбираете функцию 16, сдвиг (адрес регистра) - 0, длина - 1.

29614

4. На вкладке Соотнесение входов/выходов привязываете к каналу переменную типа WORD и включаете настройку Вкл. 2 (всегда в задаче цикла шины).

29615

Drive74
20.02.2017, 06:35
Доброго дня! Нужна помощь.
Используя библиотеку Modbus и ComService (чтобы открыть порт) пытаюсь установить связь с модулем МУ110-16Р (ПЛК308-М01 - мастер, порт Р1 (COM2), при использовании COM5, ситуация не меняется). Модуль МУ110-16Р не реагирует на запросы. Светодиод COM-порта мигает красным с одинаковой частотой. Листинг подпрограммы и настройки модуля прилагаю. Спасибо. 2964229643

Евгений Кислов
20.02.2017, 07:34
1. Вы перезагружали модуль по питанию после подключения к нему Конфигуратором Mx110?
2. Какой цикл задачи COM?

Svorog
20.02.2017, 08:43
1. Добавляете вместо шаблона устройство Modbus Slave, Com Port версии 3.5.4.0.
2. На вкладке Общее указываете его адрес.
3. На вкладке Канал Modbus Slave создаете канал. В соответствии с РЭ (с. 41-42) для первого выхода выбираете функцию 16, сдвиг (адрес регистра) - 0, длина - 1.

29614

4. На вкладке Соотнесение входов/выходов привязываете к каналу переменную типа WORD и включаете настройку Вкл. 2 (всегда в задаче цикла шины).

29615

Спасибо Евгений, сделал по вашей инструкции, модуль подключился (компиляцию прошел успешно), далее по нажатию кнопки делаю выполнить st код в котором присваиваю значение 100 привязанной к моему выходу переменной типа word, загружаю проект, индикатор обмена данными постоянно моргает, но двигатель не вращается. я правильно понимаю что меняя значение переменной я изменяю скважность ШИМ? и означает ли моргания индикатора что на программном уровне все правильно функционирует и необходимо разбираться с аппаратной частью?

Евгений Кислов
20.02.2017, 08:54
Моргание индикатора означает, что контроллер отправляет запросы на модуль. Да, переменная должна менять скважность ШИМ первого выхода.
В дереве устройств индикаторы обмена зеленые, как я понимаю? В таком случае, нужно проверить настройки модуля - выставлен ли для ШИМ период и т.д. После подключения конфигуратором необходимо перезагрузить модуль по питанию.

chm
20.02.2017, 10:25
добрый день.
начальство сказало посмотреть Codesys 3.5, на тему "стоит ли этим заниматься".
сижу смотрю.
есть непонятная штука:
сделал функциональный блок вида:

Декларация:
FUNCTION_BLOCK FB1
VAR_INPUT
END_VAR
VAR_OUTPUT
out1:INT;
END_VAR
VAR
END_VAR

Тело:
ld 10
st out1

тут по поводу второй строки мне пишет: "Accu must be loaded properly before this statement".
Я ничего не понимаю.
LD не грузит аккумулятор, или грузит его недостаточно "properly"?
или я чего-то криво делаю?

Евгений Кислов
20.02.2017, 10:31
Добрый день.

У вас каждая строка в своем network'е - а надо сделать их в одном. Правой кнопкой мыши на первую строку, выбрать пункт Вставить IL-строку ниже. См. скриншоты.

Как сейчас у вас:

29653

Как надо:

29654

chm
20.02.2017, 12:10
спасибо, получилось.
А что ему нужно, чтобы входные/выходные модули контроллера имитировать, как в Сименсе?

Евгений Кислов
20.02.2017, 12:13
спасибо, получилось.
А что ему нужно, чтобы входные/выходные модули контроллера имитировать, как в Сименсе?

Можно чуть конкретнее - о какого рода имитации идет речь?

chm
20.02.2017, 12:30
Ну, система программирования же для контроллера, т.е. наблюдать, как оно здорово действует на ПК видеть недостаточно, подразумевается в дальнейшем воздействие на физический мир )
дело в том, что физического контроллера пока нету, как раз решается вопрос, рассмотреть ли их в качестве аппаратно базы на будущее.
у Сименсов/Омронов/Бекхофов имеется ограниченная возможность обходиться без физического контроллера путём имитации его на персоналке: устанавливать значения дискретных/аналоговых входов, наблюдать показания дискретных и аналоговых выходов.
Здесь всё несколько отличается, потому как среда программирования отдельно, а контроллер отдельно, а указанные выше товарищи под свой контроллер делали среду разработки, или наоборот, или всё вместе, но как-то так.
Я всего 4 дня разбираюсь, не всё ясно пока.

Евгений Кислов
20.02.2017, 12:41
В CODESYS точно также можно имитировать контроллер на персоналке - см. СПК. FAQ, п. 9.8.
При этом, соответственно, можно изменять значения его переменных (которые в реальной жизни будут привязаны к входам/выходам).

Или я все-таки неправильно понял ваш вопрос?

chm
20.02.2017, 13:24
тут скорее 9.10, но и там не совсем то, что надо. (или то, и кроме кодесиса надо устанавливать специальные модуля под контроллер, который предполагается к использованию?)
не внутренние переменные, а вход, к которому датчик присоединяется. Но которого на самом деле сейчас нет.
исполнительный орган, на который подаётся управляющий сигнал. Которого тоже пока нет.

Евгений Кислов
20.02.2017, 13:32
не внутренние переменные, а вход, к которому датчик присоединяется. Но которого на самом деле сейчас нет.


А чем с точки зрения имитации "вход, которого на самом деле нет" отличается от внутренней переменной, значение которой вы сами задаете в режиме отладки?
Но, в принципе, можно добавить в проект и настроить Modbus Slave устройства, на виртуальном контроллере они даже будут работать - т.е. вы можете подключить к ПК модуль IO, к модулю - датчик, и увидеть считанное значение в вашей программе.

Drive74
20.02.2017, 14:51
Евгений,
"1. Вы перезагружали модуль по питанию после подключения к нему Конфигуратором Mx110?" - Обязательно, потому что преобразователь интерфейса (usb-rs485) для параметрирования подключали через выключение питания.
"2. Какой цикл задачи COM?" - Сообщите, пожалуйста, где возможно узнать данную информацию?

Евгений Кислов
20.02.2017, 14:54
Евгений,
"1. Вы перезагружали модуль по питанию после подключения к нему Конфигуратором Mx110?" - Обязательно, потому что преобразователь интерфейса (usb-rs485) для параметрирования подключали через выключение питания.
"2. Какой цикл задачи COM?" - Сообщите, пожалуйста, где возможно узнать данную информацию?

2. На вкладке Конфигурация задач нужно выбрать задачу COM и посмотреть значение параметра Интервал.

Drive74
20.02.2017, 15:05
Евгений,
тип задачи - циклическое
интервал t#20ms

Евгений Кислов
20.02.2017, 15:14
Евгений,
тип задачи - циклическое
интервал t#20ms

Это корректно. Вы можете в вашей программе сразу инициализировать буфер (abyMY110_16R_buffer) с какими-то значениями?
Если это ни к чему не приведет, то лучше обратиться в техподдержку для оперативного решения проблемы: http://www.owen.ru/82329884

Drive74
20.02.2017, 21:36
"Вы можете в вашей программе сразу инициализировать буфер (abyMY110_16R_buffer) с какими-то значениями?" - Какие значения можно попробовать?

Евгений Кислов
20.02.2017, 21:38
"Вы можете в вашей программе сразу инициализировать буфер (abyMY110_16R_buffer) с какими-то значениями?" - Какие значения можно попробовать?

Все биты в TRUE, например.

Pleonix
21.02.2017, 11:17
Здравствуйте.
Не получается воспользоваться преобразованием DW_TO_REAL и другими из библиотеки OSCAT. Пакет OSCAT BASIC 3.3.3.0 в менеджере пакетов добавил, в менеджере библиотек проекта BASIC добавил, появился подпункт standart. При наборе подсказки появляются что функция из библиотеки оскат, но при компиляции появляются ошибки С0046 и C0035. Что я делаю неправильно?