PDA

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



Страницы : 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

приборист
13.05.2015, 09:39
Хорошо, спасибо за предложенный вариант.
Если кто-то подскажет еще по нижеприведенному вопросу,то для меня на данном этапе всё станет прозрачно совершенно.
Вот в этой теме
http://www.owen.ru/forum/showthread.php?t=19404&page=3
уважаемый Осинский Алексей приводит код такой:


PROGRAM PLC_PRG
VAR
xTrigger:BOOL:=FALSE; //Триггер для Rising Edge
END_VAR

IF xTrigger THEN //Если триггер установлен - сбросим его
xTrigger:=FALSE;
ELSIF wTmpMask<>wMask THEN //Если триггер не уставновлен - проверим изменилась ли маска, и если изменилась
wTmpMask:=wMask;
xTrigger:=TRUE; //подадим команду на запись
END_IF

То есть по сути запускает запись параметров по RS-485 по изменению состояния логической переменной (переходу FALSE-TRUE).
Если ранее уже установлено состояние TRUE, то переменная сбрасывается в FALSE и следующей же командой - в TRUE.
Система успеет отследить, что был логический переход? От чего зависит, успеет или нет? Где хотя бы это смотреть, читать?

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

Kvazar
13.05.2015, 10:38
Почему в СПК при добавлении каналов (пустых и с нуля) в устройство Modbus_Slave_COM_Port их можно добавить очень много, но как только начинаешь расписывать адреса регистров кнопка добавления каналов отключается? Получается, что в процессе наладки если понадобится добавить канал придётся переписывать всё по новой?

Методом научного тыка установлено, что если в мастере Modbus Master стереть числа таймингов, вписать те же самые, затем закрыть вкладки мастера и слэйва, затем открыть вкладку слейва и потом вкладку с каналами, то кнопка магически становится доступна.

Kvazar
13.05.2015, 11:09
Триггер сначала сбрасывается, потом, если переменная изменилась - подается команда на запись и сбрасывается она лишь в следующем цикле.
Спасибо! Недосмотрел, всё так. Невнимательность.

alek4322
18.05.2015, 01:10
подскажите пожалуйста, ни как не могу поставить таймер на паузу, нужно именно остановить таймер, а потом запустить, чтобы отсчёт времени продолжился с места остановки, подмена уставки таймер на нулевую сбрасывает таймер, после отсчёт времени начинается с начала, и ещё при выводе времени работы таймер на визуализацию в спк выводится вместе с временем и знак Т#, как сделать так чтобы этот знак не выводился, а выводилось только значение времени

Kvazar
20.05.2015, 15:29
Функциональный блок принимает на вход 16-разрадное слово вида:
00..011..1 - то есть идет подряд сколько-то нулей и потом подряд несколько единиц. Нужно определить, сколько единиц в слове.
Как проще всего реализовать? Сам уже придумал два варианта, один с использованием цикла (нежелательно как я понял), другой с использованием логарифма по основанию 2 (такого стандартного оператора не нашел, переход к другому основанию - уж больно лютое решение). Подскажите как быть.

amn
20.05.2015, 15:49
Воспользуйтесь функцией, как раз сегодня сделал. :)
использовать так:
a:=quantity_bits(b);
где a типа BYTE, b типа WORD.

Kvazar
20.05.2015, 16:02
А-а, вон оно как, каждый бит перевести в байт, и сложить эти байты. Сумма будет равна как раз числу единичных.
Спасибо:)

Mihail.B
21.05.2015, 18:37
Доброго времени суток.
Проблема такая: есть СПК207 и модули МВ110-8А, МУ110-32Р, МВ110-32ДН, МЭ110-224.1М (каждого вида по несколько штук), обмен по Modbus RTU.
Связь со всеми устройствами налажена, а так же опрос всех, за исключением МЭ110-224.1М.
Необходимо считать значение тока (значение регистра по РЭ 0х0051, 0х0052). Опрос функцией 03 регистров к примеру 0х0010 происходит успешно.
Но как только задаешь в параметрах канала Modbus Slave код 03, регистр 0х0051, длина 2 при попытке запуска проекта прибор сразу же отваливается, пишет ошибка шины.
Сам МЭ110-224.1М настроен с помощью конфигуратора МХ110. Настройки аналогичны другим успешно опрашиваемым модулям с единственным отличаем "работа по Modbus RTU" (в других этого пункта просто нет). Так же установлена одна галочка "измерение тока". Версию прошивки МЭ110-224.1М не помню.
Нужна хоть какая-нибудь наводка на решение проблемы. Уже всю голову себе поломал. Сам я начинающий, так что истина может лежать где-то на поверхности.

Уточняю: МЭ110-224.1М версия программы 1.09

alek4322
25.05.2015, 08:41
Добрый день, подскажите пожалуйста, необходимо каждые двадцать четыре часа, допустим в 12.00 ночи, получить сигнал TRUE и записать его в переменную, я так понимаю необходимо осуществить взаимодействие с внутренними часами СПК110, пишу программу в CFC.

RV9WFJ
25.05.2015, 08:57
Изучайте матчасть http://prolog-plc.ru/docs/TimeExperience.pdf

Conacry
25.05.2015, 14:19
Здравствуйте. Подскажите как подключить виртуальный контроллер в Codesys 3.5 SP5 Patch5?

Евгений Кислов
25.05.2015, 14:37
Здравствуйте. Подскажите как подключить виртуальный контроллер в Codesys 3.5 SP5 Patch5?

http://www.owen.ru/forum/showthread.php?t=20869&p=166181&viewfull=1#post166181

КашниковСЮ
28.05.2015, 08:15
подскажите кто пользовался фб limitalarm ,нет сигнала с выхода il ,в место него выходы O и U становятся в true одновременно

Евгений Кислов
28.05.2015, 08:32
подскажите кто пользовался фб limitalarm ,нет сигнала с выхода il ,в место него выходы O и U становятся в true одновременно

Предположу, что у вас верхний предел (HIGH) меньше нижнего (LOW) [или наоборот].

КашниковСЮ
28.05.2015, 09:02
скриншот !!!

КашниковСЮ
28.05.2015, 09:04
спасибо заработало!

alek4322
29.05.2015, 02:17
Доброе время суток, подскажите пожалуйста, как реализовать в визуализации обратный отсчёт времени.

Евгений Кислов
29.05.2015, 08:40
Доброе время суток, подскажите пожалуйста, как реализовать в визуализации обратный отсчёт времени.

Как вариант:

18398

18399

где 1000 - это время цикла задачи программы в мс.

alek4322
29.05.2015, 12:19
Забыл сообщить, пишу программу в CFC, в программе таймер ТР, он отсчитывает время по уставке на входе РТ и выдаёт значение на выходе ЕТ, но когда это значение времени с выхода ЕТ вывожу на визуализацию %t[mm:ss], визуализация показывает отсчёт от 0 и до допустим 5 минут, а необходимо наоборот от 5 минут до 0. ST язык не знаю, если можно подсказку в CFC.

Евгений Кислов
29.05.2015, 12:36
Забыл сообщить, пишу программу в CFC, в программе таймер ТР, он отсчитывает время по уставке на входе РТ и выдаёт значение на выходе ЕТ, но когда это значение времени с выхода ЕТ вывожу на визуализацию %t[mm:ss], визуализация показывает отсчёт от 0 и до допустим 5 минут, а необходимо наоборот от 5 минут до 0. ST язык не знаю, если можно подсказку в CFC.

На CFC мой вариант выглядит так:

18402

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

_Mikhail
29.05.2015, 12:48
%t выводит системное время и никакого отношения к таймеру не имеет

Евгений Кислов
29.05.2015, 12:56
%t выводит системное время и никакого отношения к таймеру не имеет

%t выводит системное время в том случае, если к элементу не привязана текстовая переменная.
Если привязана переменная типа TIME, DT и т.д. - то выводит ее значение.

_Mikhail
29.05.2015, 13:47
%t выводит системное время в том случае, если к элементу не привязана текстовая переменная.
Если привязана переменная типа TIME, DT и т.д. - то выводит ее значение.

Вот пожалуйста %tс привязанной переменной18403

Евгений Кислов
29.05.2015, 13:58
Вот пожалуйста %tс привязанной переменной18403

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

У меня все работает согласно справке:

18404

alek4322
30.05.2015, 15:47
На CFC мой вариант выглядит так:

18402

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

К сожалению ни чего не выходит, у меня работает таймер ТР, он отсчитывает время согласно установленному времени на входе РТ ( t_5min: Time := t#5m;) и выдаёт отсчёт на свой выход ЕТ в переменную (t1_1_5m: Time;), я снимаю отсчёт с переменной на выходе ЕТ и выставляю его в визуализации на СПК и визуализация показывает отсчёт от 0 минут до 5 минут, а нужно наоборот осуществить отсчёт в визуализации обратно от 5 минут до 0 минут. Заранее благодарен за ответ.

smk1635
30.05.2015, 16:12
К сожалению ни чего не выходит, у меня работает таймер ТР, он отсчитывает время согласно установленному времени на входе РТ ( t_5min: Time := t#5m;) и выдаёт отсчёт на свой выход ЕТ в переменную (t1_1_5m: Time;), я снимаю отсчёт с переменной на выходе ЕТ и выставляю его в визуализации на СПК и визуализация показывает отсчёт от 0 минут до 5 минут, а нужно наоборот осуществить отсчёт в визуализации обратно от 5 минут до 0 минут. Заранее благодарен за ответ.

Ну так надо из заданного времени вычесть пройденное. Элементарно же.

alek4322
30.05.2015, 17:12
Ну так надо из заданного времени вычесть пройденное. Элементарно же.

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

smk1635
30.05.2015, 18:29
Спасибо большое всё получилось, я ещё пока новичок в этой теме, ещё заметил в работе таймера не равномерность отсчёта времени, секунды идут то быстрее, то медленнее, заметно даже на глаз, если можете подскажите пожалуйста из-за чего это может происходить, и как с этим бороться

Так, с ходу, не подскажу. Программу на контроллере крутите или эмуляция ?

alek4322
31.05.2015, 02:03
Так, с ходу, не подскажу. Программу на контроллере крутите или эмуляция ?

Программу кручу в эмуляции.

smk1635
31.05.2015, 10:17
Программу кручу в эмуляции.

В эмуляции это бывает. В контроллере всё нормально будет работать.

Василий Кашуба
31.05.2015, 12:38
Забыл сообщить, пишу программу в CFC, в программе таймер ТР, он отсчитывает время по уставке на входе РТ и выдаёт значение на выходе ЕТ, но когда это значение времени с выхода ЕТ вывожу на визуализацию %t[mm:ss], визуализация показывает отсчёт от 0 и до допустим 5 минут, а необходимо наоборот от 5 минут до 0. ST язык не знаю, если можно подсказку в CFC.
Отнимайте от 5 минут вашу переменную и получите обратный отсчёт.

Эдуард_Н
02.06.2015, 17:12
Подскажите как можно в КДС3.5 посмотреть на предмет не используемых переменных и т.п.? В КДС2 это проект-контроль.

Евгений Кислов
02.06.2015, 21:07
Подскажите как можно в КДС3.5 посмотреть на предмет не используемых переменных и т.п.? В КДС2 это проект-контроль.

Проект - Установки проекта - Статический анализ - ставим галочки

Теперь после генерации кода (меню Компиляция) видим соответствующие сообщения.

18440

18441

alek4322
02.06.2015, 23:13
Доброго времени суток, подскажите пожалуйста, есть задача, вести журнал отчёта, в виде таблицы ежедневно, например, каждый день по завершении рабочей смены производить запись в таблицу и сохранять, возможно ли осуществить это в СПК, если да, то с чего начать. Пишу программу в CFС, заранее благодарен за помощь.

КашниковСЮ
04.06.2015, 04:30
Подскажите как устранить ошибки ,ткните носом.
Причем стабильна только 255 ошибка остальные плавают при компилировании ,интересно что именно не так настроил и как исправить.

liboyl
04.06.2015, 14:46
Доброго дня .. КашниковСЮ вы в своём проекте выберите какой нибудь один способ подключения модулей по мотбас.. 18458через устройства или 18459через программу.. да порт указан не верно18460. А так смотрите примерыhttp://www.owen.ru/forum/showthread.php?t=21365 или http://www.owen.ru/forum/showthread.php?t=15530 Обмен по интерфейсам: ...СПК+МВ110-4ТД: или примерно так https://yadi.sk/d/cm1A0fHbh5Ryq
Удачи..

alek4322
07.06.2015, 15:29
Здравствуйте, при подключении библиотеки syslibtime появляются вот такие ошибки, если кто сталкивался с этим подскажите в чём проблема.

------ Компиляция : Приложение: Device.Sim.Device.Application -------
типизировать код...
генерировать код...
генерировать глобальные инициализации ...
генерировать код инициализации...
генерация перемещений...
[WARNING] Мойка самообслуживания на СПК: C0200: Отсутствует разрешение для заполнителя CmpCodeMeter
[ERROR] syslibtime, 1.1.0.0 (codesys): PersistentVars(Строка 1): C0104: Недостаточно памяти глобольных данных: Переменная '__stApplicationName', 32 байт. (Инкрементная компиляция может привести к фрагментации памяти. Выполните команду "Компилировать, Очистить" для принудительного перераспределения данных и кода.)
[ERROR] syslibtime, 1.1.0.0 (codesys): PersistentVars(Строка 1): C0104: Недостаточно памяти глобольных данных: Переменная '__dwChecksum', 4 байт. (Инкрементная компиляция может привести к фрагментации памяти. Выполните команду "Компилировать, Очистить" для принудительного перераспределения данных и кода.)
[ERROR] syslibtime, 1.1.0.0 (codesys): PersistentVars(Строка 1): C0104: Недостаточно памяти глобольных данных: Переменная '__ulLength', 4 байт. (Инкрементная компиляция может привести к фрагментации памяти. Выполните команду "Компилировать, Очистить" для принудительного перераспределения данных и кода.)
[ERROR] syslibtime, 1.1.0.0 (codesys): PersistentVars(Строка 1): C0104: Недостаточно памяти глобольных данных: Переменная '__bInitNew', 1 байт. (Инкрементная компиляция может привести к фрагментации памяти. Выполните команду "Компилировать, Очистить" для принудительного перераспределения данных и кода.)
[ERROR] syslibtime, 1.1.0.0 (codesys): PersistentVars(Строка 1): C0104: Недостаточно памяти глобольных данных: Переменная '__bDummyForAlignment', 3 байт. (Инкрементная компиляция может привести к фрагментации памяти. Выполните команду "Компилировать, Очистить" для принудительного перераспределения данных и кода.)
Компиляция завершена -- 5 ошибок, 1 предупреждений : загрузка невозможна!

александр 64
08.06.2015, 18:14
уважаемые господа подскажите как запрограмировать кнопки самого спк 207 , где они лежат

Евгений Кислов
09.06.2015, 07:35
уважаемые господа подскажите как запрограмировать кнопки самого спк 207 , где они лежат

Посмотрите п. 14.3 документа "СПК.FAQ".

КашниковСЮ
16.06.2015, 05:22
спасибо ! liboyl буду пробовать!

alek4322
18.06.2015, 13:57
добрый день, подскажите пожалуйста, есть входная переменная на ней через определённое время появляется сигнал типа BOOL(True), и по появлению этого сигнала необходимо производить запись из другой переменной в переменную массива, трудность у меня заключается в том, чтобы по приходу сигнала производить запись в разные переменные массива, то есть я понимаю так, появился разрешающий сигнал на запись, произошла запись, потом появился следующий сигнал, должен осуществиться запрет на запись в первую переменную массива и осуществиться разрешение на запись в следующую переменную того же массива, как это осуществить? Пишу программу в CFC.

Евгений Кислов
18.06.2015, 14:49
добрый день, подскажите пожалуйста, есть входная переменная на ней через определённое время появляется сигнал типа BOOL(True), и по появлению этого сигнала необходимо производить запись из другой переменной в переменную массива, трудность у меня заключается в том, чтобы по приходу сигнала производить запись в разные переменные массива, то есть я понимаю так, появился разрешающий сигнал на запись, произошла запись, потом появился следующий сигнал, должен осуществиться запрет на запись в первую переменную массива и осуществиться разрешение на запись в следующую переменную того же массива, как это осуществить? Пишу программу в CFC.

Ну, например так:

18638

Когда переменная Trigger принимает значение TRUE, то счетчик Index увеличивается на единицу, и переменная Variable записывается в равный Index'у элемент массива Arr.

Порядок выполнения блоков имеет значение.

Если у вас сигнал приходит импульсом (т.е. после появления сразу сбрасывается в FALSE), то блоки 4-6 не нужны.

alek4322
19.06.2015, 00:52
Ну, например так:

18638

Когда переменная Trigger принимает значение TRUE, то счетчик Index увеличивается на единицу, и переменная Variable записывается в равный Index'у элемент массива Arr.

Порядок выполнения блоков имеет значение.

Если у вас сигнал приходит импульсом (т.е. после появления сразу сбрасывается в FALSE), то блоки 4-6 не нужны.

Спасибо за помощь, но у меня есть вопрос по поводу увеличения Index на единицу, у меня массив My_Data: ARRAY[0..89] OF My_Type; и я так понял [Index] это [0..89] а как прибавлять к [Index] это [0..89] единицу и ещё, у меня массив (как бы состоит) из структуры и всё это используется для таблицы состоящей из двух столбцов и много строчек, так вот я по появлению сигнала, допустим в 18:00, каждый день произвожу запись в таблицу, у меня в таблицу запись производится но только в одну строку под №0, а по приходу следующего сигнала на следующий день, также в 18:00, у меня в таблицу производится следующая запись, только вот в эту же строку под №0, просто происходит перезапись, а нужно чтобы запись на следующий день происходила в следующую строку под №1 и так далее, помогите с советом пожалуйста, программированием занимаюсь всего 1.5 месяца и поэтому сложновато догадаться самому, а информации по работе с таблицами в визуалке на СПК почти нет или я так умею искать, за ранее благодарен за внимание.
TYPE My_Type :
STRUCT
DAT: DT;
sred: DWORD;
END_STRUCT
END_TYPE

Евгений Кислов
19.06.2015, 07:19
Спасибо за помощь, но у меня есть вопрос по поводу увеличения Index на единицу, у меня массив My_Data: ARRAY[0..89] OF My_Type; и я так понял [Index] это [0..89] а как прибавлять к [Index] это [0..89] единицу и ещё, у меня массив (как бы состоит) из структуры и всё это используется для таблицы состоящей из двух столбцов и много строчек, так вот я по появлению сигнала, допустим в 18:00, каждый день произвожу запись в таблицу, у меня в таблицу запись производится но только в одну строку под №0, а по приходу следующего сигнала на следующий день, также в 18:00, у меня в таблицу производится следующая запись, только вот в эту же строку под №0, просто происходит перезапись, а нужно чтобы запись на следующий день происходила в следующую строку под №1 и так далее, помогите с советом пожалуйста, программированием занимаюсь всего 1.5 месяца и поэтому сложновато догадаться самому, а информации по работе с таблицами в визуалке на СПК почти нет или я так умею искать, за ранее благодарен за внимание.
TYPE My_Type :
STRUCT
DAT: DT;
sred: DWORD;
END_STRUCT
END_TYPE

Выложите, пожалуйста, ваш проект, чтобы было, от чего отталкиваться.

Я правильно понимаю, что вы хотите что-то вроде этого?

http://www.youtube.com/watch?v=iX1t7U8EHm0

alek4322
19.06.2015, 13:21
Выложите, пожалуйста, ваш проект, чтобы было, от чего отталкиваться.

Я правильно понимаю, что вы хотите что-то вроде этого?

http://www.youtube.com/watch?v=iX1t7U8EHm0

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


18654

Массив объявил так

18655

к сажелению полностью выложить проект не могу, делается частями, но вот моя часть это работа с часами реального времени и вот собственно ведение таблицы по времени
первая часть
18658
вторая часть
18659
Заранее благодарен за помощь

экран визуализации выглядит вот так
18660

Евгений Кислов
19.06.2015, 13:34
Извините, мне кажется, вам будет легче адаптировать код моей ST программы на CFC, чем мне - разобраться в вашей.

18664

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

alek4322
19.06.2015, 15:24
Извините, мне кажется, вам будет легче адаптировать код моей ST программы на CFC, чем мне - разобраться в вашей.

18664

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

Спасибо за помощь, попробую адаптировать, правда ST я не очень понимаю, там на скриншотах верхняя часть - это я выдернул системное время преобразовал в секунды с 1970г и вобщем выделил минуты и часы, а потом для проверки поставил для разрешения на запись переменную Rabs, в которой каждую минуту появляется сигнал, и эта часть программы производит запись в таблицу 18665, попробовал сделать так 18666 но не получилось, буду пробовать дальше может что нибудь и получится

Евгений Кислов
19.06.2015, 15:31
Спасибо за помощь, попробую адаптировать, правда ST я не очень понимаю, там на скриншотах верхняя часть - это я выдернул системное время преобразовал в секунды с 1970г и вобщем выделил минуты и часы, а потом для проверки поставил для разрешения на запись переменную Rabs, в которой каждую минуту появляется сигнал, и эта часть программы производит запись в таблицу 18665, попробовал сделать так 18666 но не получилось, буду пробовать дальше может что нибудь и получится

Самое главное - когда вы пишите MyData[0], вы записываете данные в нулевую строку структуры (и, соответственно, таблицы). Поэтому очевидно, что у вас данные будут только в этой строке. Нужно использовать MyData[index], где index - переменная типа INT. Меняя ее значение, вы будете менять строку структуры, в которую записываются данные.

alek4322
19.06.2015, 16:20
Самое главное - когда вы пишите MyData[0], вы записываете данные в нулевую строку структуры (и, соответственно, таблицы). Поэтому очевидно, что у вас данные будут только в этой строке. Нужно использовать MyData[index], где index - переменная типа INT. Меняя ее значение, вы будете менять строку структуры, в которую записываются данные.

Спасибо за ответ, я думал об этом, сейчас буду пробовать, а объявить массив нужно так MyData[index] OF My_type или так MyData[index1..index31] OF My_type и ещё хотел спросить, а вот в таблицу в столбец дата в строки записывается значение текущей даты и времени DT#2015-06-19-18:00:00 а возможно чтобы запись велась так 2015-06-19-18:00:00 или отображалась так на СПК

Евгений Кислов
19.06.2015, 17:52
Спасибо за ответ, я думал об этом, сейчас буду пробовать, а объявить массив нужно так MyData[index] OF My_type или так MyData[index1..index31] OF My_type и ещё хотел спросить, а вот в таблицу в столбец дата в строки записывается значение текущей даты и времени DT#2015-06-19-18:00:00 а возможно чтобы запись велась так 2015-06-19-18:00:00 или отображалась так на СПК

Массив у вас объявлен правильно: MyData[0..89] OF My_type. Но когда вы обращаетесь к его элементу в программе, обращайтесь не по константе [0], а по переменной [index]. Меняя значение переменной index, вы будете менять элемент, в который происходит запись.

По поводу времени - преобразуйте его в строку (блок DT_TO_STRING) и используйте функцию Delete из библиотеки Standard, чтобы вырезать ненужные символы. Соответственно, вместо массива DT вам потребуется массив STRING.

alek4322
20.06.2015, 10:58
Массив у вас объявлен правильно: MyData[0..89] OF My_type. Но когда вы обращаетесь к его элементу в программе, обращайтесь не по константе [0], а по переменной [index]. Меняя значение переменной index, вы будете менять элемент, в который происходит запись.

По поводу времени - преобразуйте его в строку (блок DT_TO_STRING) и используйте функцию Delete из библиотеки Standard, чтобы вырезать ненужные символы. Соответственно, вместо массива DT вам потребуется массив STRING.

Спасибо за совет, но что-то я не пойму, а как обращаться не по константе [0], а по переменной [index]?

alek4322
20.06.2015, 12:07
Спасибо за совет, но что-то я не пойму, а как обращаться не по константе [0], а по переменной [index]?

Ура понял как это сделать, выкладую скрин 18673

alek4322
20.06.2015, 13:20
Ура понял как это сделать, выкладую скрин 18673

Выкладываю скрин с функцией delete библиотеки standart, которая обрезает (DT# ) 18674 и визуалка 18675

Евгений Кислов
20.06.2015, 14:54
Рад, что у вас все получилось. Напоминаю, что надо проверять, чтобы значение Index не превысило 89, иначе произойдет ошибка при попытке записи в несуществующий элемент массива.

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

alek4322
21.06.2015, 13:03
Рад, что у вас все получилось. Напоминаю, что надо проверять, чтобы значение Index не превысило 89, иначе произойдет ошибка при попытке записи в несуществующий элемент массива.

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

Спасибо за совет, столкнулся с новой проблемой работы с таблицей, при первом запуске в первую строку таблицы производится запись 1970-01-01-00:00:00 18683 сейчас пытаюсь решить эту проблему, в идеи хочу создать 12 таблиц на каждый месяц года, в которые каждые сутки будут заноситься и сохраняться данные даты-времени и дохода, для того чтобы можно было просмотреть доход за любой день года, интересно хватит ли памяти у СПК 110 ещё раз спасибо Евгений Кислову за помощь. Так же вижу проблему с исчезновением питания на длительный период, после пропажи и появления питания контроллера происходит запись в первую строку таблицы, а нужно чтобы запись продолжалась со следующей строки, ведь нумерацию строк в таблице я хочу использовать как нумерацию дней в месяце.

Евгений Кислов
21.06.2015, 15:14
Спасибо за совет, столкнулся с новой проблемой работы с таблицей, при первом запуске в первую строку таблицы производится запись 1970-01-01-00:00:00 18683 сейчас пытаюсь решить эту проблему, в идеи хочу создать 12 таблиц на каждый месяц года, в которые каждые сутки будут заноситься и сохраняться данные даты-времени и дохода, для того чтобы можно было просмотреть доход за любой день года, интересно хватит ли памяти у СПК 110 ещё раз спасибо Евгений Кислову за помощь. Так же вижу проблему с исчезновением питания на длительный период, после пропажи и появления питания контроллера происходит запись в первую строку таблицы, а нужно чтобы запись продолжалась со следующей строки, ведь нумерацию строк в таблице я хочу использовать как нумерацию дней в месяце.

1. По поводу первой строки с 1970-01-01-00:00:00 - вам надо поменять местами блоки, чтобы время считывалось после появления Rabs.

2. По поводу пропадания питания - почитайте про retain (энергонезависимые) переменные.

alek4322
21.06.2015, 22:28
1. По поводу первой строки с 1970-01-01-00:00:00 - вам надо поменять местами блоки, чтобы время считывалось после появления Rabs.

2. По поводу пропадания питания - почитайте про retain (энергонезависимые) переменные.

Спасибо за совет, только вот когда меняешь блоки местами получается вот что 18686 вместо 18686, получается что при включении в любом случае происходит запись в первую строку таблицы, а должна происходить запись, только когда в переменной Rabs есть разрешающий сигнал, а в переменной Rabs сигнал появляется только когда происходит сравнение значения переменной cdwtime5 со значением уставки - переменная Ust_1s (переменная cdwtime5 гоняет внутри секунды от 0 до 60)(переменная Ust_1s имеет значение 0) обе переменные имеют тип Word, после оперетора сравнения, в переменную Rabs кратковременно записывается значение True. 18688
Про энергонезависимые переменные я почитал, только вот не пойму зачем нужны тогда переменные не энергонезависимые, ведь энергонезависимые переменные лучше и в проекте можно все переменные делать энергонезависимыми или что то не дочитал.

alek4322
22.06.2015, 00:47
Спасибо за совет, только вот когда меняешь блоки местами получается вот что 18686 вместо 18686, получается что при включении в любом случае происходит запись в первую строку таблицы, а должна происходить запись, только когда в переменной Rabs есть разрешающий сигнал, а в переменной Rabs сигнал появляется только когда происходит сравнение значения переменной cdwtime5 со значением уставки - переменная Ust_1s (переменная cdwtime5 гоняет внутри секунды от 0 до 60)(переменная Ust_1s имеет значение 0) обе переменные имеют тип Word, после оперетора сравнения, в переменную Rabs кратковременно записывается значение True. 18688
Про энергонезависимые переменные я почитал, только вот не пойму зачем нужны тогда переменные не энергонезависимые, ведь энергонезависимые переменные лучше и в проекте можно все переменные делать энергонезависимыми или что то не дочитал.

Ура, получилось сделать так, что бы при включении запись сразу же не производилась в первую строку, а только тогда когда придёт нужное время 18690 нужно сделать было так 18691

Camypau
22.06.2015, 08:31
Нужен пример работы UniWrite UniRead с МУ110-32Р.
Зарание спасибо.

energvk
23.06.2015, 17:19
Не могу разобраться. Создал в проекте кнопку для управления пользователями. Соответственно хочу чтобы эта кнопка становилась невидимой при смене пользователя, а вместо неё появлялась кнопка выхода. Но оказывается, что стоит только у пользователя выше None поставить галочку на невидимый, соответственно невидимый становиться и у None, т.е. пользователя по умолчанию. В тупике...:confused:

Евгений Кислов
23.06.2015, 18:05
Не могу разобраться. Создал в проекте кнопку для управления пользователями. Соответственно хочу чтобы эта кнопка становилась невидимой при смене пользователя, а вместо неё появлялась кнопка выхода. Но оказывается, что стоит только у пользователя выше None поставить галочку на невидимый, соответственно невидимый становиться и у None, т.е. пользователя по умолчанию. В тупике...:confused:

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

energvk
23.06.2015, 18:14
Именно так у меня в СКАДЕ реализовано. Проблема в том,что не могу найти как переменные пользователей называются в CDS

Евгений Кислов
23.06.2015, 18:42
Именно так у меня в СКАДЕ реализовано. Проблема в том,что не могу найти как переменные пользователей называются в CDS

VisuElems.CurrentUserName (тип WSTRING)

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



IF VisuElems.CurrentUserName <> "" THEN
ButtonInvisible:=TRUE;
END_IF

energvk
23.06.2015, 23:32
VisuElems.CurrentUserName (тип WSTRING)

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

Спасибо, как раз и не мог найти VisuElems.CurrentUserName <> "". Про пустые кавычки бы и не подумал...:)

В таком виде
IF VisuElems.CurrentUserName <> "" THEN
ButtonInvisible:=TRUE;
END_IF переменная почему-то всегда в тру. Сделал так

IF VisuElems.CurrentUserName <> "" THEN
hideButUser1:=TRUE;
hideButUser2:=FALSE;
ELSE
hideButUser1:=FALSE;
hideButUser2:=TRUE;
END_IF

timurt
25.06.2015, 11:09
Не могу вставить MOVE в программу, вставляется блок с одним входом и одним выходом (СПК207web). Подскажите, а то я уже все перепробовал

Евгений Кислов
25.06.2015, 11:52
Не могу вставить MOVE в программу, вставляется блок с одним входом и одним выходом (СПК207web). Подскажите, а то я уже все перепробовал

У MOVE, собственно, как раз один вход и один выход.

Но, очевидно, вы хотите EN/ENO:

18750 18751

timurt
25.06.2015, 12:13
У MOVE, собственно, как раз один вход и один выход.

Но, очевидно, вы хотите EN/ENO:

18750 18751

Спасибо, а то я два дня как......)))

alek4322
25.06.2015, 13:35
Интересно, а возможно ли присвоить переменной массив, идея заключается в том чтобы присваивать в разное время одной и той же переменной разные массивы, таким образом по достижении, ну например последнего числа месяца, переключать запись из одной таблицы в другую таблицу, символизирующую другой (следующий) месяц, попробовал сделать так 18753 перестал производить запись в таблицу, вроде и ошибок компилятор не находит, я так предполагаю, что нельзя в одну и туже переменную производить две разные записи, наверное стоит попробовать как нибудь по другому, или как то разделить эти записи по времени, пока не пойму что делать.

Евгений Кислов
25.06.2015, 13:56
Если вам надо одновременно отображать 12 разных таблиц, то вам в любом случае потребуется 12 разных массивов.

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

alek4322
25.06.2015, 16:17
Если вам надо одновременно отображать 12 разных таблиц, то вам в любом случае потребуется 12 разных массивов.

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

Спасибо за ответ, я тоже так же и подумал, создал 12 разных массивов, создал визуалку 18756 с переключением окон, в зависимости от нажатого месяца отображается соответствующее окно и там таблица месяца, из системного времени вырезал месяц присвоил его число переменной mesiac тип int и хотел с помощью оператора MUX, в зависимости от числа месяца присваивать соответствующий массив переменной index_dt (дата и время) и index_dox (доход) что бы в зависимости от того какой месяц производилась запись в таблицу этого месяца, соответственно в соответствующее число, но хотя компилятор ошибок не выдаёт, он перестал производить запись в таблицу. Где то логическая ошибка. Выкладываю скрин кода 18758

Евгений Кислов
25.06.2015, 18:05
Спасибо за ответ, я тоже так же и подумал, создал 12 разных массивов, создал визуалку 18756 с переключением окон, в зависимости от нажатого месяца отображается соответствующее окно и там таблица месяца, из системного времени вырезал месяц присвоил его число переменной mesiac тип int и хотел с помощью оператора MUX, в зависимости от числа месяца присваивать соответствующий массив переменной index_dt (дата и время) и index_dox (доход) что бы в зависимости от того какой месяц производилась запись в таблицу этого месяца, соответственно в соответствующее число, но хотя компилятор ошибок не выдаёт, он перестал производить запись в таблицу. Где то логическая ошибка. Выкладываю скрин кода 18758

В моем понимании, самый простой (очевидно, не самый оптимальный) вариант таков: создать 12 однотипных цепочек. Через блок EQ номер месяца сравнивается с числом (например, 1), если это TRUE, то запускается запись в массив January. В другой цепочке происходит сравнение с 2, если TRUE, то запись в февраль, и так далее.

alek4322
25.06.2015, 19:31
В моем понимании, самый простой (очевидно, не самый оптимальный) вариант таков: создать 12 однотипных цепочек. Через блок EQ номер месяца сравнивается с числом (например, 1), если это TRUE, то запускается запись в массив January. В другой цепочке происходит сравнение с 2, если TRUE, то запись в февраль, и так далее.

Спасибо за совет, буду сегодня пробовать осуществить, тоже о таком варианте думал, но что то вначале хотел попробовать так как на прошлом скрине, через оператор MUX, хотел поинтересоваться что то в проекте у меня много переменных около 400 все переменные retain для СПК 110 это нормально или в будущем лучше как то организовать запись на съёмный носитель?
А О хотел ещё поинтересоваться а нет ли в содесис специального функционального блока типа дешифратора у которого один вход но можно создать много выходов допустим под каждый месяц года и в зависимости от того какое число появляется на входе этого функционального блока он бы выдавал истину на соответствующий по счёту выход, чтобы избежать кучи операторов EQ или MUVE

Евгений Кислов
25.06.2015, 20:15
хотел поинтересоваться что то в проекте у меня много переменных около 400 все переменные retain для СПК 110 это нормально или в будущем лучше как то организовать запись на съёмный носитель?

Объем памяти retain - 4 кб, это около 1000 переменных типа DWORD.



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

Вы можете сами создать такой блок (Добавить объект-->Pou-->Функциональный блок).

На ST это пара строк.

18761 18762

alek4322
26.06.2015, 09:51
Объем памяти retain - 4 кб, это около 1000 переменных типа DWORD.




Вы можете сами создать такой блок (Добавить объект-->Pou-->Функциональный блок).
На ST это пара строк.

18761 18762

Спасибо за совет, вчера создал 12 однотипных цепочек, всё работает, но получил дополнительный эффект 18764 и 18765, 18766, получается, в текущий месяц, запись даты и дохода производится правильно, но и параллельно производится запись 1970-01-01-00:00:00 в текущее число, в таблицу каждого месяца, выкладываю части кода 18767, 18768, интересно у меня в коде ведь осуществлён запрет на на это, блина, как эта запись проскакивает туда.

Евгений Кислов
26.06.2015, 10:04
Что происходит на первом скрине? Выглядит так, как будто вы записываете номер текущего дня во все переменные, которые определяют строки таблиц, в которые происходит запись.

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

18770


Посмотрите, я где-то ошибся в понимании логики вашей программы? Рассматриваю момент появления импульса Rabs=TRUE.

18771

Видимо, если на входе MOVE130 FALSE, то на выходе - не абстрактная пустота, а нулевое значение того типа, который на входе (т.е. в случае DT - новогодняя полночь 1970), и оно проходит дальше в ваши январи, марты и т.д.

alek4322
26.06.2015, 11:28
Что происходит на первом скрине? Выглядит так, как будто вы записываете номер текущего дня во все переменные, которые определяют строки таблиц, в которые происходит запись.

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

18770


Посмотрите, я где-то ошибся в понимании логики вашей программы? Рассматриваю момент появления импульса Rabs=TRUE.

18771

Видимо, если на входе MOVE130 FALSE, то на выходе - не абстрактная пустота, а нулевое значение того типа, который на входе (т.е. в случае DT - новогодняя полночь 1970), и оно проходит дальше в ваши январи, марты и т.д.

Спасибо за ответ, только что эту проблему решил, сделал вот так 18774 и всё заработало пока как надо, только вот запись даты и времени стала записывать с опережением на одну секунду 18775 наверное программа большая или не знаю почему.

Евгений Кислов
26.06.2015, 11:32
Спасибо за ответ, только что эту проблему решил, сделал вот так 18774 и всё заработало пока как надо, только вот запись даты и времени стала записывать с опережением на одну секунду 18775 наверное программа большая или не знаю почему.

Попробуйте поработать над порядковыми номерами блоков (в таком порядке они выполняются), а то у вас на одном скрине номера из первой, второй и третьей сотни. Контекстное меню--->Порядок выполнения--->Установить.

alek4322
26.06.2015, 12:02
Попробуйте поработать над порядковыми номерами блоков (в таком порядке они выполняются), а то у вас на одном скрине номера из первой, второй и третьей сотни. Контекстное меню--->Порядок выполнения--->Установить.

Спасибо за совет, порядковые номера я установил Контекстное меню--->Порядок выполнения--->Установить. Просто программа большая получилась, вот ещё момент попробовал упростить программу вместо этого кода 18776 попробовал сделать так 18777, а как это возможно такое, это что глюк в программе?

Евгений Кислов
26.06.2015, 12:07
Спасибо за совет, порядковые номера я установил Контекстное меню--->Порядок выполнения--->Установить. Просто программа большая получилась, вот ещё момент попробовал упростить программу вместо этого кода 18776 попробовал сделать так 18777, а как это возможно такое, это что глюк в программе?

Возможно что?

alek4322
26.06.2015, 12:15
Возможно что?

Вот это 18778.

Евгений Кислов
26.06.2015, 12:24
Выход MOVE не сбрасывается после исчезновения TRUE на входе EN, ваша программа тут не при чем.

Можно после MOVE126 поставить AND и завести на нее выход MOVE и Rabs.

alek4322
26.06.2015, 13:07
Выход MOVE не сбрасывается после исчезновения TRUE на входе EN, ваша программа тут не при чем.

Можно после MOVE126 поставить AND и завести на нее выход MOVE и Rabs.

Так на входе EN оператора MOVE126 и не было ни когда TRUE, он ведь может появиться только тогда, когда оперетор сравнения EQ125 на выходе выдаст TRUE, а он не может выдать его так как сравнивает значение переменной mesiac (которое равно 6) с числом 1, а также переменная Rabs не даёт TRUE так как на ней TRUE может появиться только один раз в минуту 18781 (здесь внутри переменной cdwtime5 гоняется время равное одной минуте по кругу, а оператор EQ93 сравнивает его с переменной Ust_1s значение в которой равно 0, и только когда они сравниваются переменная Rabs находится в состоянии TRUE только одну секунду в минуте, остальное время в минуте переменная Rabs находится в состоянии FALSE)

Евгений Кислов
26.06.2015, 13:14
Попробуйте выполнить команды меню Компиляция: Очистить все, затем - Перекомпиляция.

alek4322
26.06.2015, 13:33
Попробуйте выполнить команды меню Компиляция: Очистить все, затем - Перекомпиляция.

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

Olegss
30.06.2015, 19:53
Здраствуйте. Как поменять язык CFC на FBD? На вкладке меню только CFC/

Евгений Кислов
30.06.2015, 20:55
Здраствуйте. Как поменять язык CFC на FBD? На вкладке меню только CFC/

Конвертация CFC->FBD не предусмотрена, поэтому в данном случае вам надо создать новую программу на нужном вам языке.

Olegss
30.06.2015, 20:57
Да.Спасибо,уже понял.

Olegss
03.07.2015, 12:57
Возможно ли создавать макросы и если можно то как в CodeSys v3.5 SP5?

Евгений Кислов
03.07.2015, 13:15
Возможно ли создавать макросы и если можно то как в CodeSys v3.5 SP5?

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

Olegss
03.07.2015, 13:19
Да,именно так. Не получется создать свой функциональный блок. Подскажите как.

Евгений Кислов
03.07.2015, 13:39
Да,именно так. Не получется создать свой функциональный блок. Подскажите как.

Точно так же, как программу:

18869

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

Olegss
03.07.2015, 13:49
Спасибо! Все получилось.

ООО "БЛС инжинеринг"
03.07.2015, 20:50
У кого есть проектик или набросок проекта, используя СПК107 только как панель оператора и подключён к ПЛК110?
Хочу посмотреть прицеп связи между собой, если кому то не тяжело сделать набросок для хоть пару переменных бул и ворд, пожалуйста

_Mikhail
03.07.2015, 22:17
У кого есть проектик или набросок проекта, используя СПК107 только как панель оператора и подключён к ПЛК110?
Хочу посмотреть прицеп связи между собой, если кому то не тяжело сделать набросок для хоть пару переменных бул и ворд, пожалуйста

смотри http://www.youtube.com/watch?v=WhldODV1Cco&list=PL2EcVEe6E9SB4F3WVm-MptpHA5ep0nrq5&index=7

ООО "БЛС инжинеринг"
03.07.2015, 23:22
смотри http://www.youtube.com/watch?v=WhldODV1Cco&list=PL2EcVEe6E9SB4F3WVm-MptpHA5ep0nrq5&index=7

Большое спасибо:)

Olegss
04.07.2015, 10:00
Если у созданного мной FB некоторые связи между елементами нужно выводить на визуализацию то эти связи нужно выводить из данного FB ?

Евгений Кислов
04.07.2015, 12:27
Если у созданного мной FB некоторые связи между елементами нужно выводить на визуализацию то эти связи нужно выводить из данного FB ?

Да, именно так.

Olegss
04.07.2015, 17:00
как создать свою библиотеку и добавить в нее свой FB?

ASo
04.07.2015, 17:06
Точно также, как и проект. Только выбрать тип проекта - библиотека.
Затем Вам надо будет установить ее в систему менеджером библиотек и подключить к проекту.
Тип библиотеки Вы выбираете на свое усмотрение.

alek4322
05.07.2015, 18:42
Здравствуйте, я опять по работе с таблицами и вывода их на экран СПК110, создал таблицы на каждый месяц года, каждый день производится запись даты и дохода, всё работает нормально, только есть один момент, после совета от (Евгения Кислова) по поводу ошибки в работе программы 18884 (Попробуйте выполнить команды меню Компиляция: Очистить все, затем - Перекомпиляция.) Я выполнил всё как и было сказано, ошибка пропала, только вот не на долго, после буквально одной загрузки без ошибки, она появляется снова и каждый раз приходится делать это (Попробуйте выполнить команды меню Компиляция: Очистить все, затем - Перекомпиляция.)
И ещё вопрос таблица работает на год, только на год, возникла проблема хранении отчёта в следующем году, он ведь высокосный, и получается либо составлять такие таблицы на каждый год по отдельности, либо каким то образом составить один месяц таблицы февраль два раза, с разным количеством дней 28 и 29 дней, и как то подменять эти месяцы когда наступает высокосный год, смысл какой на СПК панели отображаются двенадцать таблиц на каждый месяц текущего года в них производится запись и сохранение информации на каждый день года, для того чтобы можно было просмотреть информацию по каждому дню, по завершении года информация записывается в виде общего подсчёта в другую таблицу, составленную на каждый год, дальше все таблицы месяцев обнуляются, то есть вся информация стирается, и производится запись заново в эти же таблицы только уже со отчётом на следующий год, а он высокосный по этому нужно подменить одну таблицу февраля 28 дней на другую таблицу февраля 29 дней, и сделать это нужно автоматически не заметно для пользователя. Вопрос, возможно ли это сделать в СОДЕСИС 3.5 или придётся составлять кучу таблиц на каждый год, самый главный вопрос КАК ЭТО СДЕЛАТЬ? Программирую в CFC, заранее благодарен за помощь.

Евгений Кислов
06.07.2015, 07:38
А в чем, собственно, проблема с високосным годом? Какая разница, сколько дней писать писать в таблицу? (при условии, что в ее массиве хватает места) Или сам факт наличия пустой строки в конце так принципиален?

По поводу ошибки - она проявляется в эмуляции или на СПК? Т.е. если проект без ошибки залить в контроллер, через какое-то время там начинает сбиваться время в таблицах?

alek4322
06.07.2015, 08:33
А в чем, собственно, проблема с високосным годом? Какая разница, сколько дней писать писать в таблицу? (при условии, что в ее массиве хватает места) Или сам факт наличия пустой строки в конце так принципиален?

По поводу ошибки - она проявляется в эмуляции или на СПК? Т.е. если проект без ошибки залить в контроллер, через какое-то время там начинает сбиваться время в таблицах?

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

ООО "БЛС инжинеринг"
06.07.2015, 22:11
Кто из добрых людей подскажет как сделать в СПК-107 при срабатывание аварии чтоб страничка визуализации менялась или переворачивалась на таблицу или на баннер тревоги чтоб увидеть что произошло, прикладываю мой проеектик 18893 скажите как это сделать если вообще можно как я хочу?

Евгений Кислов
07.07.2015, 07:27
Кто из добрых людей подскажет как сделать в СПК-107 при срабатывание аварии чтоб страничка визуализации менялась или переворачивалась на таблицу или на баннер тревоги чтоб увидеть что произошло, прикладываю мой проеектик 18893 скажите как это сделать если вообще можно как я хочу?

Например, через CurrentVisu:

18894 18895


http://www.youtube.com/watch?v=fvoqGuopfFk

ООО "БЛС инжинеринг"
07.07.2015, 09:02
Например, через CurrentVisu:

18894 18895


http://www.youtube.com/watch?v=fvoqGuopfFk

Спасибо большое

приборист
07.07.2015, 13:30
Добрый день!
Подскажите по такому вопросу:
СПК107 - не меняется скорость порта COM1 (RS232).
С помощью SysCom пытаюсь отправить строку в порт на компьютер - приходит только если на компьютере выставить скорость 9600 (проверял двумя программами)
При другой скорости приходит ерунда.
Алгоритм прост:

CASE step OF 0:
Settings.sPort:=2; (*номер COM-порта*)
Settings.ulBaudrate:=38400; (*скорость*)
Settings.byParity:=0;
Settings.ulTimeout:=0;
Settings.byStopBits:=1;
Settings.ulBufferSize:=0;
step:=1;

1:
comHandle:=SysComOpen(Settings.sPort,ADR(result));
//getSett:=SysComGetSettings(comHandle,ADR(Settings) ,ADR(SettingsEx));

IF comHandle<>16#FFFFFFFF THEN
sendBytes:=SysComWrite(comHandle, ADR(str), len(str), 0, ADR(result));
END_IF

SysComClose(comHandle);
step:=2;

END_CASE




Но какие бы настройки не ставил(необходимо 38400)
Данные приходят только на 9600.
В конфигураторе порт выбран как rs232.

Проект во вложении.

ПАН
08.07.2015, 14:58
спасайте! ситуевина такая как настроить орс сервер, точнее MatrikonOPCExplorer .
стоит задача с СПК207 выдергивать данные(обработанные алгоритмом программы) и эти данные запузыривать в 1с.
натыкайте меня носом, что делать!!

ООО "БЛС инжинеринг"
22.07.2015, 19:21
Как можно сделать в визуализацию CODESYS V3.5 так чтоб страница была под паролем?
Если можно проектик.

Евгений Кислов
22.07.2015, 20:31
Как можно сделать в визуализацию CODESYS V3.5 так чтоб страница была под паролем?
Если можно проектик.

Если я правильно понял вопрос, то:
http://www.owen.ru/forum/attachment.php?attachmentid=13987&d=1407498446
стр. 16-19

smk1635
22.07.2015, 20:32
Как можно сделать в визуализацию CODESYS V3.5 так чтоб страница была под паролем?
Если можно проектик.

На почте забери.

ООО "БЛС инжинеринг"
22.07.2015, 21:25
Если я правильно понял вопрос, то:
http://www.owen.ru/forum/attachment.php?attachmentid=13987&d=1407498446
стр. 16-19

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

ООО "БЛС инжинеринг"
22.07.2015, 21:27
На почте забери.

Спасибо, словил:o

КашниковСЮ
23.07.2015, 16:25
в чем проблема разложите на пальца ,спк постоянно что то опрашивает (судя по индикатору сом на панели спк) даже когда все кабели отключены и ПО нет .

КашниковСЮ
23.07.2015, 16:54
судя по скорости мерцания у спк в 2 раза выше.

Эдуард_Н
24.07.2015, 09:54
Подскажите как использовать менеджер рецептов, желательно с примером.

Евгений Кислов
24.07.2015, 10:09
Подскажите как использовать менеджер рецептов, желательно с примером.

Ответил в лс.

liboyl
25.07.2015, 22:51
Ответил в лс.

Ну да !!!!! и сразу всем всё стало понятно.....!

Сергей0308
25.07.2015, 22:57
Ну да !!!!! и сразу всем всё стало понятно.....!

Полностью согласен, если в цифрах - на 101%!!!

Евгений Кислов
26.07.2015, 09:18
Ну да !!!!! и сразу всем всё стало понятно.....!

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

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

КашниковСЮ
26.07.2015, 09:25
ПОДСКАЖИТЕ В ЧЕМ ПРОБЛЕМА?

Anry65
26.07.2015, 12:08
Всем привет! Вопрос к тем кто выводил в визуализации "банер тревог". Вопрос первый: Как сделать чтобы Timestamp отображал только время!(ни год, ни месяц, ни секунды) 2; Как изменить цвет банера тревог когда он находится в режиме ожидания.

Евгений Кислов
26.07.2015, 12:44
Всем привет! Вопрос к тем кто выводил в визуализации "банер тревог". Вопрос первый: Как сделать чтобы Timestamp отображал только время!(ни год, ни месяц, ни секунды) 2; Как изменить цвет банера тревог когда он находится в режиме ожидания.

1. Насколько я понимаю, с Timestamp ничего сделать нельзя. Можно попробовать через заместители в столбце Сообщение:

19125

2. Если речь о режиме ожидания подтверждения, то в настройках класса тревог:

19124

Anry65
26.07.2015, 17:30
Евгений спасибо за ответ и внимание....

Владиславыч
31.07.2015, 09:37
Добрый день, есть ли пример для CoDeSys V3 с ООП, где используются интерфейсы методы и свойства?
Очень интересуют свойства, по поводу интерфейсов и методов нашел статью с описанием, а вот со свойствами разобраться не получается

RV9WFJ
31.07.2015, 10:28
В хелпе CS есть скудная информация. Примеров не попадалось.

Евгений Кислов
31.07.2015, 10:31
Добрый день, есть ли пример для CoDeSys V3 с ООП, где используются интерфейсы методы и свойства?
Очень интересуют свойства, по поводу интерфейсов и методов нашел статью с описанием, а вот со свойствами разобраться не получается

Вот примеры от компании 3S. Самому с ними работать не доводилось.

Владиславыч
31.07.2015, 12:04
спасибо, пойду курить эти пимеры

Эдуард_Н
01.08.2015, 03:32
Добрый день, есть ли пример для CoDeSys V3 с ООП, где используются интерфейсы методы и свойства?
Очень интересуют свойства, по поводу интерфейсов и методов нашел статью с описанием, а вот со свойствами разобраться не получается

Нельзя ли и мне эту статью почитать? Может выложите.

Евгений Кислов
01.08.2015, 08:04
Нельзя ли и мне эту статью почитать? Может выложите.

Насколько понимаю, речь о статье Петрова:
http://prolog-plc.ru/art7

liga_blunt
03.08.2015, 20:30
CODESYS 3.5SP7 Release.zip уже выложили

Эдуард_Н
04.08.2015, 04:24
CODESYS 3.5SP7 Release.zip уже выложили

А CODESYS 3.5 SP6 Patch5 Release был? Или я его пропустил? Если был дайте кто ни будь скачать, у меня этакая коллекция почти все версии КДС есть.:)

Евгений Кислов
04.08.2015, 07:22
А CODESYS 3.5 SP6 Patch5 Release был? Или я его пропустил? Если был дайте кто ни будь скачать, у меня этакая коллекция почти все версии КДС есть.:)

Такого патча не было.

приборист
04.08.2015, 10:05
CODESYS 3.5SP7 Release.zip уже выложили
Картинки прикольные появились.
Flat стиль добавили.
Но вот изменение вкладок - мне не понравилось :(

Эдуард_Н
04.08.2015, 17:11
Картинки прикольные появились.
Flat стиль добавили.
Но вот изменение вкладок - мне не понравилось :(

Скриншоты выложите пожалуйста.

alek4322
07.08.2015, 01:05
Доброе время суток, реализовал программу в CFC на СПК 110, которая подсчитывает доход за операцию, интересно возможно ли этот доход вывести на ККТ (Контрольно кассовую технику) чтобы автоматически распечатывать кассовый чек, я думаю что возможно, если чековый принтер поддерживает МОДБАС, просто ни когда с этим не сталкивался и не знаю с чего начать, может кто реализовывал это, если да, то очень был бы благодарен за подсказку хотя бы порядка действий.

Сергей0308
07.08.2015, 01:35
Тема была, может чем поможет?
http://www.owen.ru/forum/showthread.php?t=21802

alek4322
07.08.2015, 02:23
Тема была, может чем поможет?
http://www.owen.ru/forum/showthread.php?t=21802

Спасибо за ответ, но я предполагаю использование не принтера а именно чекового принтера который печатает чеки, допустим купленного товара как в магазине, когда вы покупаете еду в магазине вам дают чек, по видимому чековый принтер печатает чеки в двойном экземпляре для учета кассы, и перед распечаткой чека кассир не печатает форму чека он забивает подсчитанную стоимость, нажимает на кнопку и всё, чековый принтер всё остальное делает сам, то есть добавляет дату и время, наименование учреждения, допустим "ИП (Такое то)", всякие коды типа ОГРН и т.д., но и соответственно добавляет в чек подсчитанную сумму денег, может я ошибаюсь, но я представляю это действо так, в памяти чекового принтера хранится форма чека установленного образца я посылаю по модбасу посылку данных стоимости товара, ну и дату с временем, а он добавляет посланную мной информацию в специально отведённые места формируя чек и распечатывает его, либо второй вариант, форма чека хранится не в чековом принтере, а в моём СПК 110 и с начала именно СПК110 формирует чек, а потом отправляет его на печать чековому принтеру. Вопрос вот в чём, какой порядок действий нужно выполнить что бы реализовать это.

RV9WFJ
07.08.2015, 07:41
Чековый принтер считай ККМ без ЭКЛЗ. Никакого ModBus там в помине нет. Более того там у каждого фискального регистратора, а они именно так называются, свой драйвер обычно. Вариантов тут немного - или искать панель с CS на базе Windows. Или в промежуток между СПК и ФР вставить какой-то девайс с Windows и там уже конвертить из ModBus в то что "сьест" ФР.

alek4322
07.08.2015, 09:23
Чековый принтер считай ККМ без ЭКЛЗ. Никакого ModBus там в помине нет. Более того там у каждого фискального регистратора, а они именно так называются, свой драйвер обычно. Вариантов тут немного - или искать панель с CS на базе Windows. Или в промежуток между СПК и ФР вставить какой-то девайс с Windows и там уже конвертить из ModBus в то что "сьест" ФР.

Спасибо за ответ, я новичок в программировании ПЛК, поэтому не знаю что такое (ККМ, ЭКЛЗ, CS, ФР) Если можно, дайте расшифровку.

приборист
07.08.2015, 09:32
Спасибо за ответ, я новичок в программировании ПЛК, поэтому не знаю что такое (ККМ, ЭКЛЗ, CS, ФР) Если можно, дайте расшифровку.
ПЛК тут непричем.
ККМ - контрольно-кассовая машина
ЭКЛЗ - электронная контрольная лента
ФР - фискальный регистратор

Тут больше важен протокол общения по rs232.
Modbus врядли где то будет (либо будет очень дорого стоить)
Встречал некоторые кассовые аппараты с обменом по rs232 с помощью ASCII команд, в эту сторону думаю и надо копать.

RV9WFJ
07.08.2015, 10:12
Так вы похоже и в кассовых аппаратах не разбираетесь поскольку:
ККМ - контрольно-кассовая машина
ЭКЛЗ - электронная контрольная лента защищённая
CS - CoDeSys
ФР - фискальный регистратор (по вашему принтер чеков)

AlexEl
21.08.2015, 10:35
Коллеги, подскажите новичку, как в CODESYS V3.5 SP5 в редакторе CFC завести несколько страниц. Как-то случайно получилось, а осмысленно не получается. Заметил, что там, где получилось, есть элемент "Страница" в меню доступных элементов. Где нет- элемент отсутствует.

Евгений Кислов
21.08.2015, 10:43
Коллеги, подскажите новичку, как в CODESYS V3.5 SP5 в редакторе CFC завести несколько страниц. Как-то случайно получилось, а осмысленно не получается. Заметил, что там, где получилось, есть элемент "Страница" в меню доступных элементов. Где нет- элемент отсутствует.

При добавлении POU:

19627

AlexEl
21.08.2015, 10:46
[QUOTE=Евгений Кислов;178662]При добавлении POU:

понял, спасибо! А существующий POU уже нельзя разбить на страницы?

Евгений Кислов
21.08.2015, 10:53
При добавлении POU:

понял, спасибо! А существующий POU уже нельзя разбить на страницы?

Подозреваю, что нет, копипастьте содержимое.

_Pavel_
03.09.2015, 20:39
Подскажите, плиз: функция __XINT_TO_UDINT в редакторе, если включено автообьявление новых переменных, постоянно просит её объявить как переменную, это можно игнорировать и всё работает, но непонятно. Как от этого избавиться?

Эдуард_Н
04.09.2015, 11:27
Подскажите, как то у меня не правильно "порядок выполнения" упорядывается, не с первой страницы, а как то в разброс.

kukla100
04.09.2015, 19:18
Помогите!!!
Нужен ФБ погода-зависимый температурный график.
Входа:
Т, уличное - измеренное;
Т, мин. уличное - уставка;
Т, макс. уличное - уставка;
Т, мин. теплоносителя - уставка;
Т, макс. теплоносителя - уставка;
Наклон - уставка;
Сдвиг - уставка;
Точка излома - уставка;
Выход:
Т, вычесленное;

Игорюня
05.09.2015, 07:10
Я пользуюсь такой вот формулой, без точек излома, для Кубани нормально подходит.

k = (Тотоп max - Тотоп min) / (Тнаруж min - Тнаруж max)
b = Тотоп min - k * Тнаруж max
y = k * Тнаруж + b

Может поможет?

amn
05.09.2015, 11:55
Поищите в этой теме http://www.owen.ru/forum/showthread.php?t=11341&p=68729&viewfull=1#post68729

redasred
06.09.2015, 18:51
у меня в добавлении устройств не раскрывается устройства, что можно зделать?19803

Евгений Кислов
06.09.2015, 20:16
у меня в добавлении устройств не раскрывается устройства, что можно зделать?19803

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

Эдуард_Н
07.09.2015, 03:43
Подскажите, как мне в КДС3 сбросить "порядок выполнения", а то получается, в каком порядке я накидал элементы, в таком они и выполняются и от перемены мест элементов этот "порядок выполнения" не изменяется.

Евгений Кислов
07.09.2015, 07:26
от перемены мест элементов этот "порядок выполнения" не изменяется.

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

19805

Или вопрос в том, что после изменения номеров порядок выполнения остается прежним?

Федор2
07.09.2015, 10:18
workscan.ru найдет работку прям сейчас, просто зайдите и посмотрите списки вакансий и вам все станет понятно. Основная часть вакансий создана сегодня поэтому времени у вас предостаточно, более того я думаю вам пойдет на отлично. Я вам так скажу если вы чем нить тут не довольны то оставляйте отзывы и не тормозите

Эдуард_Н
07.09.2015, 14:17
Взаимное расположение блоков в принципе и не влияет на последовательность их выполнения.
Последовательность определяется номером в верхнем правом углу блока. Изменить его можно во вкладке Порядок выполнения контекстного меню:

19805

Или вопрос в том, что после изменения номеров порядок выполнения остается прежним?

Делаю "порядок выполнения"-"упорядочить в соответствии с потоком данных", а они как то странно расставляются, ноль где-то в середине и так по всему алгоритму разбросаны. И пункт который у вас на скрине ("Установить порядок выполнения") у меня за темнён.

Евгений Кислов
07.09.2015, 14:35
Делаю "порядок выполнения"-"упорядочить в соответствии с потоком данных", а они как то странно расставляются, ноль где-то в середине и так по всему алгоритму разбросаны. И пункт который у вас на скрине ("Установить порядок выполнения") у меня за темнён.

Выложите, пожалуйста, проект (достаточно только куска с CFC).

Эдуард_Н
07.09.2015, 17:25
Удалил страницы и добавил их по новой, все элементы выстроились как надо. Видать в CODESYS V3.5 SP5 Patch 5 со страницами проблемы.

redasred
08.09.2015, 18:38
кто может объяснить мне настройку modbus канала, про регистр READ и Write именно как узнавать какой сдвиг вписывать и длину?

redasred
08.09.2015, 21:53
19853 подскажите новичку, при добалении модбас мастер и компиляции сразу выдает много ошибок из за чего ? и что зделать чтобы небыло их.

Евгений Кислов
08.09.2015, 21:57
19853 подскажите новичку, при добалении модбас мастер и компиляции сразу выдает много ошибок из за чего ? и что зделать чтобы небыло их.

Использовать сочетание версий ПО из документа СПК. Система версий ПО, п. 5, версию модбас мастера - 3.5.5.0.

redasred
09.09.2015, 22:01
вы не могли ссылку дать на модбас мастер 3.5.5.0? а то я только нахожу 3.5.4.2

Евгений Кислов
10.09.2015, 07:17
вы не могли ссылку дать на модбас мастер 3.5.5.0? а то я только нахожу 3.5.4.2

Модбас мастер этой версии входит в CODESYS 3.5 SP5 Patch 5.

ООО "БЛС инжинеринг"
14.09.2015, 21:09
Кто подскажет где можно взять таргет для СПК1хх.Д?

Евгений Кислов
14.09.2015, 22:02
Кто подскажет где можно взять таргет для СПК1хх.Д?

А из этой сборки не подходит?
http://www.owen.ru/uploads/txtlic.php?url=http:/ftp.owen.ru/index.html/CoDeSys3/03_Targets/Owen_Target_Install_3.5.4.20_v23.zip

19952

ООО "БЛС инжинеринг"
14.09.2015, 22:32
А из этой сборки не подходит?
http://www.owen.ru/uploads/txtlic.php?url=http:/ftp.owen.ru/index.html/CoDeSys3/03_Targets/Owen_Target_Install_3.5.4.20_v23.zip

19952

Да спасибо подошло.
Есть ещё один вопрос где-то может есть видео как конфигурировать СПК1хх.Д?

ООО "БЛС инжинеринг"
15.09.2015, 23:38
Да спасибо подошло.
Есть ещё один вопрос где-то может есть видео как конфигурировать СПК1хх.Д?

Может кто-то сделает видео не большое как это делается конфигурация на СПК1хх.Д

redasred
19.09.2015, 14:42
Здравствуйте, не подскажите как узнать какой именно "Адрес Slave" нужно вписывать, где его смотреть или ...? заранее благодарю

Евгений Кислов
19.09.2015, 15:23
Здравствуйте, не подскажите как узнать какой именно "Адрес Slave" нужно вписывать, где его смотреть или ...? заранее благодарю

Тот, который задан в настройках вашего slave-устройства.

redasred
19.09.2015, 17:16
Спасибо, еще 1 такой вопрос, в настройках "ModBus канала" регистр Read и Write как узнать какой сдвиг вписать?

Евгений Кислов
19.09.2015, 17:35
Спасибо, еще 1 такой вопрос, в настройках "ModBus канала" регистр Read и Write как узнать какой сдвиг вписать?

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

Эдуард_Н
20.09.2015, 11:28
Подскажите, есть ли возможность увеличить размер шрифта в "комментарии"?

Эдуард_Н
27.09.2015, 12:57
Кто-нибудь знает как добавить иконку в функциональный блок?

Евгений Кислов
27.09.2015, 13:59
Кто-нибудь знает как добавить иконку в функциональный блок?

20160

В CFC, насколько мне известно, отображение иконок не поддерживается.

Эдуард_Н
27.09.2015, 15:32
Там галочка в настройках есть

Евгений Кислов
27.09.2015, 15:56
Там галочка в настройках есть

Да, теперь увидел. Спасибо.

Эдуард_Н
27.09.2015, 16:59
Как в редакторе CFC в пункте масштабирование(нижний правый угол) застолбить масштаб 75%, а то в редакторе визуализации он есть, а в редакторе CFC постоянно приходится вводить.

redasred
02.10.2015, 15:26
20228 можете подсказать почему нет вкладок и что сделать для этого чтобы они появились?

Евгений Кислов
02.10.2015, 15:33
20228 можете подсказать почему нет вкладок и что сделать для этого чтобы они появились?

Вкладок и не должно быть, см. инструкцию:
http://www.owen.ru/forum/showthread.php?t=21365

20229

redasred
02.10.2015, 16:45
Тогда как сделать чтобы было так?20232

Евгений Кислов
02.10.2015, 19:54
Тогда как сделать чтобы было так?20232

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


https://www.youtube.com/watch?v=AMa389insAo

redasred
02.10.2015, 20:34
спасибо за ответ, но хорошо было, если все делалось через CFC, а через modbus slave можно только 10 каналов сделать

Евгений Кислов
02.10.2015, 21:56
спасибо за ответ, но хорошо было, если все делалось через CFC, а через modbus slave можно только 10 каналов сделать

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

По поводу 10 каналов:
http://www.owen.ru/forum/showthread.php?t=22220

sobol
03.10.2015, 08:54
Всем привет.

Каким-то образом часть экранов визуализациий и лист глобальных переменных перекочевали из вкладки devices во вкладку POU. Как вернуть обратно?
Находясь во вкладке devices , при создании новых визуализаций они сразу попадают во вкладку POU. Почему?

Евгений Кислов
03.10.2015, 09:15
Всем привет.

Каким-то образом часть экранов визуализациий и лист глобальных переменных перекочевали из вкладки devices во вкладку POU. Как вернуть обратно?
Находясь во вкладке devices , при создании новых визуализаций они сразу попадают во вкладку POU. Почему?

Когда создаете, нажимайте ПКМ на узел Application, а не на пустое место.

Вернуть можно с помощью Ctrl+C/Ctrl+V из вкладки POU в узел Application.

sobol
03.10.2015, 16:43
Спасибо, получилось.

Чёкнутый Рысь
07.10.2015, 09:28
Если удалось решить вопрос с Трендами, то подскажите как решили эту проблему?

Maxim_SPb
22.10.2015, 17:11
Найти где-то старую версию библиотеки. Но я не понимаю, зачем вам это. В новой версии все уже привязано за вас внутри модуля, а вам только остается использовать уже готовые переменные.
Объясните, пожалуйста, как это осуществить в CFC? Я правде непонимаю. Те провести соотнесение входов/выходов.

Евгений Кислов
22.10.2015, 20:08
Объясните, пожалуйста, как это осуществить в CFC? Я правде непонимаю. Те провести соотнесение входов/выходов.

Я предполагаю, что вы пользуетесь обновленными шаблонами модулей из этой темы:
http://www.owen.ru/forum/showthread.php?t=21365

Итак, представим, что вам надо считать значение температуры c первого входа модуля М110-8А и записать в переменную rTemp1 типа REAL.

Вы добавили в проект Modbus COM, в него - Modbus Master, а в него - ваш модуль. В его настройках вы видите только Slave ID и таймаут. Возникает резонный вопрос - где привязывать переменные к каналам?

20516

Но удобство шаблонов модулей в том, что вам уже не нужно самому привязывать переменные, склеивать два WORD в REAL и т.д.

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

20517

К выходу блока MOVE привязываете переменную rTemp1.

20518

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

Теперь должно стать очевидно, что можно вообще обойтись без этой переменной, используя нашу MV110_8A.rEAd_1. Можно предположить, что в некоторых случаях это не очень удобно из-за длинного и, возможно, не всегда понятного названия.

Все вышеизложенное есть в документации на шаблоны модулей (см. ссылку в начале поста).

Maxim_SPb
23.10.2015, 10:47
Я предполагаю, что вы пользуетесь обновленными шаблонами модулей из этой темы:
http://www.owen.ru/forum/showthread.php?t=21365

Итак, представим, что вам надо считать значение температуры c первого входа модуля М110-8А и записать в переменную rTemp1 типа REAL.

Вы добавили в проект Modbus COM, в него - Modbus Master, а в него - ваш модуль. В его настройках вы видите только Slave ID и таймаут. Возникает резонный вопрос - где привязывать переменные к каналам?

20516

Но удобство шаблонов модулей в том, что вам уже не нужно самому привязывать переменные, склеивать два WORD в REAL и т.д.

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

20517

К выходу блока MOVE привязываете переменную rTemp1.

20518

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

Теперь должно стать очевидно, что можно вообще обойтись без этой переменной, используя нашу MV110_8A.rEAd_1. Можно предположить, что в некоторых случаях это не очень удобно из-за длинного и, возможно, не всегда понятного названия.

Все вышеизложенное есть в документации на шаблоны модулей (см. ссылку в начале поста).

Спасибо Вам огромное. Ошибка состояла в том, что не ставил точку в конунце названия модуля. "MV110_8A."
Но скажу Вам, что без данной разжеванной подсказки я не смог найти этой инфы в мануалах.

Эдуард_Н
23.10.2015, 15:21
Но скажу Вам, что без данной разжеванной подсказки я не смог найти этой инфы в мануалах

А как же инструкция? http://www.owen.ru/forum/showthread.php?t=21365

energvk
23.10.2015, 17:24
Не могу понять, что за ошибки выскакивают. Вроде ничего особенно не делал в программе:

20530

Евгений Кислов
23.10.2015, 18:07
Не могу понять, что за ошибки выскакивают. Вроде ничего особенно не делал в программе:

20530

Попробуйте удалить из проекта Таблицу тревог и создать ее заново.

Если не поможет, то по возможности выложите архив проекта с указанием версии, в которой вы его создавали.

ntro123
26.10.2015, 10:19
Добрый день:
ПЛК 323, CODESYS V3.5 SP7 Patch 2,
Библиотеки:
Standard 3.5.7.0
Переменные:

PROGRAM PLC_PRG
VAR
x:BOOL;
END_VAR
Программа:

x:=true;

Выдает при компиляции 88 ошибок:
20542


Почему? как быть? Как первую программу запустить?

Евгений Кислов
26.10.2015, 10:24
Добрый день:
ПЛК 323, CODESYS V3.5 SP7 Patch 2,
Библиотеки:
Standard 3.5.7.0
Переменные:

Программа:


Выдает при компиляции 88 ошибок:
20542


Почему? как быть? Как первую программу запустить?

20544

http://www.owen.ru/catalog/codesys_v3/opisanie

ntro123
26.10.2015, 11:37
Удалил пред. верси, установил по ссылке что вы дали, все равно ошибки:
20548

Евгений Кислов
26.10.2015, 11:38
Удалил пред. верси, установил по ссылке что вы дали, все равно ошибки:
20548

Архив репозитория ставили?

ntro123
26.10.2015, 11:49
Нет, меня слово "СПК" спугнуло, сейчас поставлю.

Поставил (стандартная установка), создал новый проект, законнектился к ПЛК, все равно ошибки:
20549

Прошивки которые ставил:
setup_plc_firmware_v1.025.exe
usr_fw_setup_plc323web_v3.212.exe

3.9xxx для СПК, я так понимаю.

Евгений Кислов
26.10.2015, 11:52
Нет, меня слово "СПК" спугнуло, сейчас поставлю.

Поставил (стандартная установка), создал новый проект, законнектился к ПЛК, все равно ошибки:
20549

По скриншоту видно, что у вас не хватает библиотеки. Откройте Менеджер библиотек - там вверху должна быть кнопка Докачать недостающие библиотеки.
setup_plc_firmware_v1.025.exe
usr_fw_setup_plc323web_v3.212.exe

3.9xxx для СПК, я так понимаю.

Посмотрите Менеджер библиотек. Там вверху будет кнопка Докачать недостающие библиотеки.

ntro123
26.10.2015, 11:55
Извините, не вижу:
20550

Евгений Кислов
26.10.2015, 11:58
Извините, не вижу:
20550

Тогда что будет, если нажать на ошибку? (синий текст внизу - Не удалось вставить библиотеку...).

ntro123
26.10.2015, 12:10
Нажимал уже, вот что будет:
20551

Евгений Кислов
26.10.2015, 12:14
Нажимал уже, вот что будет:
20551

Понятно.

Предлагаю еще попробовать этот архив репозитория установить:
http://file.karelia.ru/drzrgk/

ntro123
26.10.2015, 12:30
Да, помогло, огромное спасибо!

tkont
26.10.2015, 13:18
тему по V3.5 SP7 не вижу
решил попробовать
взял проект из V3.5 SP5
вылетает одно предупреждение
C0373: The image size is less than the element rectangle size. With scale type FIXED paint bugs can occur in your visualization. Please increase the element rectangle size. (Visualization Keypad from library visudialogs, 3.5.7.0 (system))

колонка с позицией пустая
в какой это визуализации (15 окон) , где найти этот элемент что компилятору не нравится ? как искать ?

ntro123
26.10.2015, 19:08
в codesys 3.5 в отличии от 2 версии, не могу найти вкладку "ресурсы" (слева внизу), как мне настроить входа/выхода?
Можно ли пример (код или проект) где для ПЛК 323 подается сигнал на "выход 1", чтобы она загорелась. И где есть нормальное руководство на русском языке по codesys 3.5+?

UPD: нашел в FAQ свой вопрос и ответ на него. Запрятали в Owen:Internal.

arelavv
28.10.2015, 11:29
Вопрос не по теме , но от начинающего...
Не могу открыть файлы с расширением TWP? , открывается КДС 2, при попытки открыть непосредственно из КДС 3 - не вижу (нет поддерживаемых файлов), чудеса прям...Куча примеров -не могу посмотреть...?

Евгений Кислов
28.10.2015, 11:36
Вопрос не по теме , но от начинающего...
Не могу открыть файлы с расширением TWP? , открывается КДС 2, при попытки открыть непосредственно из КДС 3 - не вижу (нет поддерживаемых файлов), чудеса прям...Куча примеров -не могу посмотреть...?

TWP - это файл для панели СП270, открывается программой Конфигуратор СП200.

http://www.owen.ru/catalog/graficheskaya_panel_operatora_s_sensornim_upravlen iem_owen_sp270/opisanie

И да, вопрос действительно не по теме.

arelavv
28.10.2015, 13:34
Понял спасибо!!!

ntro123
29.10.2015, 19:02
Извините за тупой вопрос, но совсем заплыл.

1) Библиотека UNM есть в cd 3.5?
2) как UNM связана с modbus? (если связана)
3) и самый сложный вопрос (у меня каша в голове), как мне все это соединить воедино, и отправить что-то на порт rs-485 плк323.
Какие функции, какие бибилиотеки (UNM или подобные), какие устройства modbus'ы и т.п. нужно добавлять в проект.

Мои достижения: повесил JP1 (джампер) на переменную, и если JP1 включен то подать TRUE на реле 1, и она загорится. Дальше продвинутся не могу.

Очень прошу помочь, сам честно пытался читать мануалы и т.п. но многое под cd 2.3, и многое не понятно.

RV9WFJ
29.10.2015, 21:02
UNM.lib в CS3.5 нет. Можете использовать Syslibcom, modbus и CAA Com библиотеки. Точно до букв названия с телефона точно не напишу.

energvk
29.10.2015, 22:54
Что-то не могу понять по обмену СПК с ПЛК160. СПК в роли мастера. Опрашивает, получает данные (циклически). Но с изменением значений возникли трудности. Например есть переменная var, которая отображается в визуализации. При её изменении должен срабатывать триггер на запись нового значения:

IF out THEN //Если триггер установлен - сбросим его
out:=FALSE;
ELSIF var_tmp<>var THEN //Если триггер не уставновлен - проверим изменилось ли значение, и если изменилось
var_tmp:=var;
out:=TRUE; //подадим команду на запись
END_IF
Но триггер не срабатывает (проверял, ставил счётчик). Если же выполнять запись через промежуточную переменную, например change_var, которую опять же обрабатывает ФБ, дает триггер на запись и в конфигурации modbus на запись указывать уже не var, а change_var, то изменения записываются. Так и должно быть или я что то не так делаю?

Yegor
30.10.2015, 09:40
Триггер это вот так:
VAR
trig: R_TRIG;
END_VAR


trig(CLK := var <> var_tmp);
IF trig.Q THEN
var_tmp := var;
END_IFА вы велосипед какой-то придумываете. По остальным вопросам без проекта предметного разговора не выйдет, наверное.

energvk
30.10.2015, 11:19
Триггер это вот так:
VAR
trig: R_TRIG;
END_VAR


trig(CLK := var <> var_tmp);
IF trig.Q THEN
var_tmp := var;
END_IFА вы велосипед какой-то придумываете. По остальным вопросам без проекта предметного разговора не выйдет, наверное.

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

ntro123
31.10.2015, 21:27
В cds3 хочу открыть порт 4 (rs-485) (пока что просто открыть) на плк323, через библиотеку comsys.

Вот такой код:
20615

Понимаю что полный бред. Но порт не открывается, возвращает -1 (ошибка то бишь).

Очень сложно найти по comsys cds3 что-то, везде либо не ST, либо cds2, либо юзают:

ALIAS COMSettings : COM_Settings

Old definition only for backward compatibility (для совместимости оставили)

Как открыть порт и получить дескриптор?

PS на порту ничего не висит (т.е. физически в него ничего не воткнуто, я надеюсь это не мешает открыть порт, да?)

energvk
11.11.2015, 00:53
Я правильно понимаю, что в СПК не реализована 20-я функция modbus на чтение файла?

ntro123
11.11.2015, 13:55
Подскажите как правильно сбрасывать значения переменных. Так как постоянно после изменения проекта, после заливки старые значения переменных сохраняются, приходится либо меня названия переменных, либо сначала залить пустой проект и только затем основной. Очень не удобно, устал от костылей.

Как правильно реализуется сброс данных и кода при отладки и разработки проекта? (мануалы и гугл не помог, в целом по КДС инфы по минимуму).

Евгений Кислов
11.11.2015, 13:58
Подскажите как правильно сбрасывать значения переменных. Так как постоянно после изменения проекта, после заливки старые значения переменных сохраняются, приходится либо меня названия переменных, либо сначала залить пустой проект и только затем основной. Очень не удобно, устал от костылей.

Как правильно реализуется сброс данных и кода при отладки и разработки проекта? (мануалы и гугл не помог, в целом по КДС инфы по минимуму).

А как вы заливаете проект? Выложите скриншот.

ntro123
11.11.2015, 14:20
А как вы заливаете проект? Выложите скриншот.

Как-то так заливаю:

Евгений Кислов
11.11.2015, 14:25
Как-то так заливаю:

Понятно. Выбирайте логин с загрузкой (см. второй скрин).

Еще как стандартная рекомендация: перед заливкой выполнять команды Очистить все и Перекомпиляция из меню Компиляция.

ntro123
11.11.2015, 14:29
Действительно, что-то затупил я, спасибо.

ntro123
11.11.2015, 15:41
Подскажите почему не вызывается функция (код корректный, т.к. если все тоже самое сделать в ФБ то будет работать и вызываться).
Вызов: 20773
Функция: 20774

Результат 1: 20775
Результат 2: 20776

Мне нужно только 1 булевое значение вернуть.

PS делаю все по мануалу SPK_First_start_v.0.8.pdf (только код, я понимаю что у меня ПЛК).

UPD: разобрался. очень ограниченные функции, кроме вычислений они не нужны.

sobol
11.11.2015, 17:44
Здравствуйте, не могу разобраться, почему не включается один из таймеров TON (см. скриншот). testtimer включается и отсчитывает время, а milling_timer нет.20777

Yegor
11.11.2015, 18:50
У вас код под условием выполняется только один раз при k=0. Дальше этот таймер просто не вызывается. Народная примета: таймер под условием — к длительным командировкам.

sobol
11.11.2015, 19:13
Это просто тестовая программка. Задача кода под условием - запустить таймер один раз чтобы увидеть в отладчике, что отсчет времени идет (ET увеличивается). Столкнулся с этой ситуацией в рабочей программе.

Yegor
11.11.2015, 20:51
запустить таймер один разВ ПЛК не бывает «запустить один раз». Ну то есть так почти не пишут. Не надо рассматривать таймер как самостоятельную сущность. Когда вы вызываете таймер с IN=TRUE после IN=FALSE, то таймер запоминает этот момент как начало отсчёта. Дальше он сам по себе считать не будет. Вы должны его вызывать, чтобы он посчитал своё время работы. Так вот под вашим условием он своё время считать не может, хоть и зафиксировал момент запуска. Если таймер нужно запускать по какому-то условию, то подавайте это условие прямо на вход типа milling_timer(IN := k > 5) прямо в теле программы (вне блока IF), и с момента, когда k>5, ваш таймер будет как бы идти.

sobol
11.11.2015, 21:07
Спасибо, попробую.

sobol
12.11.2015, 09:42
Создал другую тестовую программку... Да, действительно , получается нужно каждый цикл ПЛК вызывать таймер с параметром IN:=TRUE , чтобы он считал.

RV9WFJ
12.11.2015, 09:55
Я правильно понимаю, что в СПК не реализована 20-я функция modbus на чтение файла?
В ModBus TCP Slave реализована. Но из вашего вопроса не понятно где именно вы хотите использовать эту функцию (Master/Slave, RS/TCP).

energvk
12.11.2015, 22:28
В ModBus TCP Slave реализована. Но из вашего вопроса не понятно где именно вы хотите использовать эту функцию (Master/Slave, RS/TCP).

Спасибо за ответ, буду разбираться. Планирую использовать в tcp slave. А в библиотеке modbus_tcp_slave от Овен есть поддержка данной функции?

RV9WFJ
13.11.2015, 06:12
Именно ее я и имею в виду, когда пишу про 20ю функцию. Есть только там момент неприятный. На плохих каналах связи (3G + OpenVPN) библиотека подвисает возвращая статус ОК. Пока придумал такой костыль - сбрасывать флаг Enable раз в час на пару секунд. Думаю это связано с тем что открытые сокеты при разрывах не закрываются и библиотека зависает достигнув MaxClients.

vnkorol
21.11.2015, 09:22
Подскажите, как грамотно организовать учет времени переменной, находящейся в состоянии, например "1".

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

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

vnkorol
21.11.2015, 12:22
а просто воспользоваться таймером TON, нет желания?

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

Кроме того, необходимо, чтобы отключение по таймеру не мешало управлению светом с выключателей на стенах (у меня пр110 этим заведует) и с сенсорной панели.

Может, в отдельную тему вынести?

SokolovA
28.11.2015, 15:38
Добрый день!

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

Вопрос - каким образом оптимальнее организовать обработку самого процесса в Codesys? С ПЛК обычно я делал PLC_PRG на CFC и функциональные блоки внутри на ST по мере необходимости. Но этот подход мне не очень нравится, поскольку отсутствует гибкость (отчасти, потому что в Codesys v2 не было событий). Как делаете вы? Интересует чужой опыт, чтобы не наломать дров =)

Заранее спасибо!

firetester
03.12.2015, 08:45
Доброго времени суток! Ребят, в проекте два модуля МК1108Д4Р. Как добавить в конфигурацию знаю. Вопрос: Как объяснить codesys какой из них адрес 4, а какой - 6? При добавлении ФБ нет возможности указать адрес устройства...
21158

Евгений Кислов
03.12.2015, 08:54
Доброго времени суток! Ребят, в проекте два модуля МК1108Д4Р. Как добавить в конфигурацию знаю. Вопрос: Как объяснить codesys какой из них адрес 4, а какой - 6? При добавлении ФБ нет возможности указать адрес устройства...
21158

В настройках модуля:

21160

ntro123
03.12.2015, 17:02
Подскажите:

udiTimeOut не работает.
CDS 3.5
VAR
read:COM.Read;


PROG:
read(xExecute:=TRUE, hCom:=hd, pBuffer:=ADR(res_byte), udiTimeOut:=1000000, szSize=>sz);

По идеи спустя 1 сек (1000000 мкс) должно:
read.xError=TRUE
и
read.eError=5001

Ничего не происходит!

Что не так? Как реализовать таймаут грамотно? Без велосипедов с таймерами.

Небольшой кусочек кода прикрепил.

Andrew_Stranger
04.12.2015, 10:53
Добрый день. У кого есть примеры работы с рецептами? Смотрел пример от 3S, но пока сложно разобраться.

Евгений Кислов
04.12.2015, 10:57
Добрый день. У кого есть примеры работы с рецептами? Смотрел пример от 3S, но пока сложно разобраться.

Пример работы с компонентом описан в документе СПК. Визуализация, п. 11.3.8.

ntro123
04.12.2015, 16:25
вроде бы контроллеры работают начиная с миллисекунд, а не микро, попробуйте подождать 20 минут
и еще этот небольшой кусок отдельно работает?

US указано (см. скрин).

Откуда 20 минут???

Да он работает, если указать верные данные (адрес устройства) то работает, специально для теста поменял на левый адрес.

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

capzap
04.12.2015, 16:53
US указано (см. скрин).

Откуда 20 минут???

Да он работает, если указать верные данные (адрес устройства) то работает, специально для теста поменял на левый адрес.

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

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

а про 20 минут, этоя грубо округлил

ntro123
04.12.2015, 19:13
совсем не хочется искать что за бибку и что за плк Вы используете, лучше я Вам тоже скрин покажу

а про 20 минут, этоя грубо округлил

Да, допустим, я пытался разные значения указать, если очень маленькое то сразу уходит в ошибку (причем не в 5001), если добавить 0 в тому числу (из-за которого уходит сразу в ошибку), то можно хоть 10 минут ждать, ничего не происходит.

Еще раз сегодня протестю и подробно опишу что делал и что получил.

Andrew_Stranger
04.12.2015, 21:43
Пример работы с компонентом описан в документе СПК. Визуализация, п. 11.3.8.
Спасибо. Масштаб проделанной работы впечатляет.

ntro123
05.12.2015, 15:37
совсем не хочется искать что за бибку и что за плк Вы используете, лучше я Вам тоже скрин покажу

а про 20 минут, этоя грубо округлил

21200

Как видим разные немного библиотеки, ждал довольно долго (минут 10, толку 0, нету таймаута).

Время указывал в 1/1'000'000 сек. Так как там us. Если ставить скажем 1000 сразу уходит в ошибку (но не в 5001).

Шевцов Игорь
05.12.2015, 15:46
Добрый день.
При попытке использования библиотеки ModulsOwenLib 3.4.0.7, а вернее попытке обращения к COM порту в программе при загрузке приложения в ПЛК304 возникает ошибка:
[FATAL ERROR] Неразрешённая ссылка: 'RS_MODE_SETUP'

В журнале устройства имеются следующие сообщения:
Failed to resolve empty_fun
Could not link external function RS_MODE_SETUP
Failed to resolve RS_MODE_SETUP

CDS: v3.5 SP5 Patch5
Таргет: owen_plc304_m01_cds3.5.3.40.devdesc

В чем может быть проблема?
Год назад пользовался этой библиотекой проблем таких не помню, правда и какой тогда CDS был не помню.
Задача следующая: необходимо по COM4 опрашивать 6 ТРМ138В по протоколу ОВЕН, COM1 занят уже под MODBUS.
Пробовал уже даже пустой проект создавать, библиотеки только: Standard 3.5.5.0, ModulsOwenLib 3.4.0.7, IoStandard 3.5.1.0
по тексту только:
VAR_GLOBAL
ComConn_4: ModulsOwenLib.ComConn; // COM 4
END_VAR

(*Открытие СОМ 4*)
ComConn_4(
enable:= TRUE,
PortNum:= 5,
PortBaudrate:= 19200,
PortParity:= 0,
PortStopBits:= 1,
PortByteSize:= 8,
Port_Mode:= 2,
Port_ModeOn:= TRUE,
Port_CloseOn:= ComConn_4.Port_CloseOn);
и все равно ошибка при загрузке...

capzap
05.12.2015, 16:03
ждал довольно долго (минут 10, толку 0, нету таймаута).
Вы не можете разделить 1000 на 60, чтоб узнать сколько минут стоило подождать

И еще раз напомню, какие контроллеры я встречал, все имеют минимальную единицу времени 1мс, так как серия библиотек САА позиционируется как универсальная, может и мкс где то в будущем понадобятся. Таймеры или счетчики выполняются раз в цикл обычно и если он больше миллисекунды, становится не принципиально сколько там микросекунд выставлено.
Лучше опишите как Вы тестируете таймаут, потому что по выложенному коду не ясно, проверяете ли Вы ситуацию когда есть ошибка и одновременно Done поднят и какой нибудь "мусор" принят

ntro123
05.12.2015, 17:52
Как это обычно бывает начал разбираться, повылезало кучу проблем =)
Такс, с таймаутом не разобраться пока не разберусь с вот такой вот проблемой:

есть PLC меркурий 225.11 (PLC-I)
Ему каждые 0.5s + цикл самой программы (выходит где-то запрос раз в 2s) отправляю запрос, получаю ответ, сравниваю чексумму и CRC, каждый 10-30 пакет битый, точнее сдвинут (часть пакета сдвинута внизу, а вверху та часть что должна быть внизу) пример:
счетчик PLC отдает какие-то данные, а за ними сразу время и дату, а получается так, что дату и время он пихает в начале пакета, а данные после. Возможно это часть данных с другого пакета.

В чем может быть проблема? Раз в две секунды опрос разве очень часто и PLC на такое не рассчитан?)
Проблема в канале связи? Не думаю, провод от ПЛК до PLC 20 см.
Проблема с буфером? Подскажите пожалуйста.

UPD: поменял с 0.5s на 2.5 помойму только хуже стало.
Походу я туплю и проблема в том что таймер висит 0_0
Получается отправляю запрос, жду 2.5 секунды, потом читаю данные которые уже частично ушли с порта. Так ведь?

21201

21202

21203

Yegor
07.12.2015, 14:18
Автоматическое скачивание отсутствующих библиотек у всех работает? У меня не пашет что-то.

ntro123
07.12.2015, 19:56
Есть функция TIME_OF_DAY. Есть ли что-то похожее для получения текущего дня месяца?

Евгений Кислов
07.12.2015, 21:18
Есть функция TIME_OF_DAY. Есть ли что-то похожее для получения текущего дня месяца?

Функции библиотеки CAA DTutil должны вам помочь, как мне кажется.

http://www.owen.ru/forum/showthread.php?t=21476&p=174357&viewfull=1#post174357