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

Евгений Кислов
22.02.2017, 11:25
можете дать ссылку на главу, где к control win v3 можно приделать "как бы физические" входы/выходы. Потому что, когда выбираешь owen plc 323, то он не хочет грузиться в виртуальный контроллер (который control win v3), т.е. при сканировании - пустая сеть, а если выбрать control win v3, то у него нету входов - выходов.
Понятно, что логику можно отрабатывать и так, но потом, кода появится физический контроллер, надо соответствующие переменные на входы и выходы настраивать получается? А сразу как-нибудь нельзя?

Эмулировать именно входы-выходы, расположенные на борту самого ПЛК - нельзя.

chm
22.02.2017, 12:48
т.е. отладку ведём на виртуальном; переменные, которые вход-выход - пока глобальные (или даже необязательно?), а потом, когда будет физический контроллер доступен, качаем к нему таргет, устанавливаем, меняем устройство (ветка device), у него уже появляется ветка Internal, там во вкладке "соотнесение входов/выходов" всё руками ставим?

Евгений Кислов
22.02.2017, 12:55
т.е. отладку ведём на виртуальном; переменные, которые вход-выход - пока глобальные (или даже необязательно?), а потом, когда будет физический контроллер доступен, качаем к нему таргет, устанавливаем, меняем устройство (ветка device), у него уже появляется ветка Internal, там во вкладке "соотнесение входов/выходов" всё руками ставим?

Да, совершенно верно.

uni
22.02.2017, 14:52
Подскажите, возможно ли в CoDeSys 3.5 выполнить асинхронное чтение из файла. Я имею в виду, есть ли функция чтения, которая возвращает управление сразу после вызова (в том же цикле), не блокируя выполнение. Мне нужен аналог линуксовой связки read и select.

Евгений Кислов
22.02.2017, 15:01
Подскажите, возможно ли в CoDeSys 3.5 выполнить асинхронное чтение из файла. Я имею в виду, есть ли функция чтения, которая возвращает управление сразу после вызова (в том же цикле), не блокируя выполнение. Мне нужен аналог линуксовой связки read и select.

Насколько я помню - CAA File работает именно так.

Dmitro
26.02.2017, 12:19
Существуют ли библиотеки графических элементов и где их можно взять?
Например по гидравлике/пневматике, более красивые кнопки и индикаторы?
На сайте кодесис ничего не нашел.

RV9WFJ
26.02.2017, 12:35
Можно нарисовать все что только фантазия позволит например в илюстраторе. Благодаря поддержке svg это не выглядит потом как инородная графика.

ASo
26.02.2017, 12:49
Существуют ли библиотеки графических элементов и где их можно взять?
Например по гидравлике/пневматике, более красивые кнопки и индикаторы?Попробуйте на винтике. Там требуется регистрация, но она бесплатная.

Эдуард_Н
26.02.2017, 13:31
Попробуйте на винтике. Там требуется регистрация, но она бесплатная.

Что за винтик?

Dmitro
26.02.2017, 15:12
SCADA Tracemode

1116 графических изображений технологических объектов и процессов;
596 анимированных объектов;

SCADA CodeSYS

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

ASo
26.02.2017, 15:19
Что за винтик?
http://www.weintek.com/globalw/Download/Download.aspx тыц в library

Rake Runner
26.02.2017, 15:24
SCADA Tracemode

1116 графических изображений технологических объектов и процессов;
596 анимированных объектов;

SCADA CodeSYS

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

Что такое SCADA CodeSYS?

Dmitro
26.02.2017, 15:32
Кнопки "регистрация" не замечено((

Сергей0308
26.02.2017, 15:43
Кнопки "регистрация" не замечено((

Попробуйте что либо скачать, она появится!

29742

Dmitro
26.02.2017, 15:46
http://www.weintek.com/globalw/Download/Download.aspx тыц в library

Бомба, спасибо!
p.s. flb формат ((

Pleonix
27.02.2017, 17:28
Здравствуйте. Возможно ли отображать в визуализации при помощи спецификатора целочисленные переменные с представлением 1234 в виде 12,34 ?

Евгений Кислов
27.02.2017, 19:57
Здравствуйте. Возможно ли отображать в визуализации при помощи спецификатора целочисленные переменные с представлением 1234 в виде 12,34 ?

В принципе - можно с помощью особой уличной магии:


29759

29760

Но если честно я бы не рекомендовал действовать подобным образом - лучше конвертировать переменную в программе в нужный вид (REAL или STRING) и отображать ее в визуализации в "чистом" виде.

Pleonix
27.02.2017, 20:56
Понятно. Странно, что такую мелочь не предусмотрели в КДС3, было бы удобно.

Dmitro
27.02.2017, 21:43
Как повернуть изображение, нашел только динамический поворот вроде как по переменным. А без?

Евгений Кислов
27.02.2017, 21:48
Как повернуть изображение, нашел только динамический поворот вроде как по переменным. А без?

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

chm
03.03.2017, 12:53
неделя с лишним прошла, стало значительно легче )).
Остались следующие вопросы, почему-то касаются визуализации (пока в браузерном варианте хватит), прошу показать ссылку, где рассказывается об этом:

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

- тиражирование элементов/блоков. Очень часто бывает, (у меня 90%), что есть куча чего-то одинакового. Выключатели там, задвижки, резервуары и т.п. Есть ли пути нарисовать из примитивов картинку (вроде блока в автокаде), их параметры привязать к полям одного экземпляра некоей структуры.
А потом картинку на тот же экран скопировать, но не лазать каждому примитиву переменные переназначать, а где-то в одном месте всем переменным для данного блока назначить другой экземпляр той же структуры для привязки, и весь блок уже будет соответствовать состоянию полей уже того, другого экземпляра структуры?

- Если на один экран не влезает, то можно ли организовать какую-то "ссылку" на другой экран, например, по нажатию элемента?

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

спасибо.

Евгений Кислов
03.03.2017, 15:40
Собственно, вся информация о визуализации собрана в документе СПК. Визуализация (ссылка в подписи). Большая часть ваших вопросов там описана. Я рекомендую вам ознакомиться с документом, если останутся вопросы - буду рад ответить на них в соответствующей теме.

Dmitro
04.03.2017, 13:03
29844

Такая ошибка на этапе ОНЛАЙН.
Пытаюсь использовать persistant retain переменные.
Что бы это значило?
Заранее спасибо

Евгений Кислов
04.03.2017, 13:10
29844

Такая ошибка на этапе ОНЛАЙН.
Пытаюсь использовать persistant retain переменные.
Что бы это значило?
Заранее спасибо

Persistant переменные в данный момент не поддерживаются.

Dmitro
04.03.2017, 13:15
Persistant переменные в данный момент не поддерживаются.

Убираю ПЕРСИСТЕНТ, остается только РЕТЕЙН.
Те же ошибки(

Евгений Кислов
04.03.2017, 13:17
Перекомпиляцию делали? Покажите скриншот POU с объявлением этих переменных.

Dmitro
04.03.2017, 13:24
Перекомпиляцию делали? Покажите скриншот POU с объявлением этих переменных.

29846

Делал очистить/компиляций, как рекомендуется в ошибке.
Делал очистить все/компиляция тоже самое.

Поясните пожалуйста отличие "компиляция" от "перекомпиляция", неочевидно.

Евгений Кислов
04.03.2017, 13:29
У меня смутное подозрение, что вы просто отредактировали строчку в компоненте PersistentVars. Так не получится - удалите его вообще и объявите retain переменные в Списке глобальных переменных.

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

Dmitro
04.03.2017, 13:58
У меня смутное подозрение, что вы просто отредактировали строчку в компоненте PersistentVars. Так не получится - удалите его вообще и объявите retain переменные в Списке глобальных переменных.

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

Так и сделал - все отлично. Спасибо Евгений!

Dmitro
04.03.2017, 16:27
На экране есть фрейм, а в нем заложено несколько разных визуализаций, которые выбираются по индексу.
Когда меняю индекс и делаю видимым фрейм, сначала мелькает окно с предыдущей визуализацией.

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

Евгений Кислов
04.03.2017, 16:36
Можете выложить какой-нибудь простой проект, на котором наблюдается проблема?

VigVam
07.03.2017, 08:32
Добрый день. Можете подсказать библиотеку для PID регулятора? Нужно управление КЗР без обратного сигнала состояния, а ещё бы графики преобразования с уличной температуры в ту которую можно подать на сам PID для корректировки (PID использую из Util.lib, но может быть есть более надежный?). Пытался использовать PID_regulators.lib, но при заливке на СПК 207 стал выдавать ошибки, хотя при компиляции все нормально было.

Евгений Кислов
07.03.2017, 09:02
Добрый день. Можете подсказать библиотеку для PID регулятора? Нужно управление КЗР без обратного сигнала состояния, а ещё бы графики преобразования с уличной температуры в ту которую можно подать на сам PID для корректировки (PID использую из Util.lib, но может быть есть более надежный?). Пытался использовать PID_regulators.lib, но при заливке на СПК 207 стал выдавать ошибки, хотя при компиляции все нормально было.

PID_regulators.lib не поддержан - это библиотека для контроллеров со вторым CODESYS.
Помимо Util'a, ПИД-регуляторы есть в библиотеке OSCAT, и на нашем форуме также некоторые пользователи выкладывали свои версии.

VigVam
09.03.2017, 09:51
Можно ли в CodeSyS 3.5 создавать макросы из функциональных блоков? Если да то как?

Евгений Кислов
09.03.2017, 09:59
Можно ли в CodeSyS 3.5 создавать макросы из функциональных блоков? Если да то как?

В явном виде нет - придется создать отдельную функцию/функциональный блок на CFC для этого.

Dmitro
10.03.2017, 00:09
Выйдет ли библиотека работы с ПЧВ преобразователем частоты векторным для codesys3? убил огромное количество времени, чтоб управлять по рс485.
та что на сайте в codesys 3 не работает.

Сергей0308
10.03.2017, 06:41
Выйдет ли библиотека работы с ПЧВ преобразователем частоты векторным для codesys3? убил огромное количество времени, чтоб управлять по рс485.
та что на сайте в codesys 3 не работает.

Попробуйте вот эти слова:

29954

Ну и задание скорости не забудьте!

RV9WFJ
10.03.2017, 06:55
Выйдет ли библиотека работы с ПЧВ преобразователем частоты векторным для codesys3? убил огромное количество времени, чтоб управлять по рс485.
та что на сайте в codesys 3 не работает.Если вам только командное слово + ошибки + частота и ток. То могу в личку прислать свою 100% рабочую.

Yanis
11.03.2017, 08:36
Здравствуйте, а есть ли переменная в CodeSys 3.5 Которая становится TRUE, если есть не квитированные тревоги

sa_mut
17.03.2017, 19:04
Доброго времени суток: проблема с массивом в кодесис 3 (3.5 sp10 patch1+). По непонятной причине компилятор не пропускает массив с заранее инициализированными элементами. Скрин в приложении. Тот же код в КДС 2.3 работает без вопросов.30106

ASo
17.03.2017, 19:15
Возьмите массив данных в [ ]

sa_mut
17.03.2017, 19:29
Aso
Возьмите массив данных в [ ]

спасибо большое!!! Возможно Вы знаете где можно посмотреть изменения по синтаксису в КДС3 относительно КДС2. Help какой-то обрезанный. Информации вообще нет. Может нужно Help отдельно устанавливать?

Евгений Кислов
17.03.2017, 19:50
Начиная с SP7 хелп на русском отсутствует. Ищите англоязычный в папке установки CODESYS (...\Codesys\Online Help).

Вот русскоязычный хелп из SP6:
https://yadi.sk/d/OtxdkJqT3G73jf

sa_mut
17.03.2017, 19:57
Начиная с SP7 хелп на русском отсутствует. Ищите англоязычный в папке установки CODESYS (...\Codesys\Online Help).

Вот русскоязычный хелп из SP6:

Евгений, спасибо. Подключил EN Help через: Настройки/опции

попробую прикрутить еще русскоязычный

Евгений Кислов
17.03.2017, 20:01
Приложил ссылку к сообщению выше.

gs_62
19.03.2017, 13:18
Помойму КДС не может инициализировать массив структур внутри другой структуры.

Всё было нормально, когда в моей структуре Prog_struc не было массива, а были просто вложенные структуры (на картинках они закоментарены).
30120

Etap_struc: 30122

Но мне надо обращаться к данным по индексу, и я вместо перечня структур вставил массив этих структур
И теперь не проходит инициализация
30123
Ошибки какие-то ахинейные: на Prg1 пишет ';' expected instead of 'Prg2', на stages[1] пишет 'Assign' expected instead '['

Или я что-то не так сделал?

Евгений Кислов
19.03.2017, 14:09
Вообще, чтобы понять принцип инициализации сложных составных переменных, лучше один раз объявить их через ассистент ввода - вбиваете имя несуществующей переменной в теле программы, нажимаете enter и он автоматически появляется.

К слову, зачастую удобнее делать инициализацию прямо в коде - в стиле



IF xInit THEN
// инициализация
END_IF


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

Если всё же рассматривать ваш случай (инициализация при объявлении) - то вот упрощенный пример:

30125 30126 30127
30128

gs_62
19.03.2017, 18:40
Пример помог. Но надо озвучить конкретную причину:

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

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

Евгений Кислов
19.03.2017, 18:53
Считаю это недоработкой языка ST. Если массив большой, а мне надо в объявлениях инициировать только последние ячейки, придётся перечислять значения всех ненужных ячеек.

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



MyST2: ST2 := (ast1Var := [2(()), (wVar := 40, rVar := 40.4)]); // инициализируем только последний элемент массива

gs_62
19.03.2017, 19:20
2(()) - такую конструкцию я не знал. Она значит - до второго (в данном случае последнего) элемента всё пусто?

Евгений Кислов
19.03.2017, 19:22
2(()) - такую конструкцию я не знал. Она значит - до второго (в данном случае последнего) элемента всё пусто?

Она означает "два пустых элемента". Можно использовать несколько "пустышек" в рамках инициализации одного массива (две пустышки, значения, пустышка, значения, значения, сколько-то еще пустышек и т.д.).

2(()) - это именно для массива структур, для массива чисел, соответственно, было бы 2(0).

gs_62
19.03.2017, 19:56
И всётки, ST - недоязык. В данном случае - инициализировть отдельные элементы массива, хоть и можно, но... Массив - это прежде всего адресуемое (индексом) пространство ячеек памяти (переменных). Поэтому инициализировать ячейку не так как при обращении, не по индексу, а какими-то неочевидными конструкциями (указывая сколько до неё предшествующих ячеек и чем они заполнены) - это как бы сказать ... неестественно, нелогично, неоптимально, короче через ж...

Есть и ещё недостатки. Например отсутствие меток кода и goto на них. Без goto невозможно сделать легко читаемый и понимаемый код в небольших, но логически сложных процедурах.

Евгений Кислов
19.03.2017, 20:25
И всётки, ST - недоязык. В данном случае - инициализировть отдельные элементы массива, хоть и можно, но... Массив - это прежде всего адресуемое (индексом) пространство ячеек памяти (переменных). Поэтому инициализировать ячейку не так как при обращении, не по индексу, а какими-то неочевидными конструкциями (указывая сколько до неё предшествующих ячеек и чем они заполнены) - это как бы сказать ... неестественно, нелогично, неоптимально, короче через ж...

Есть и ещё недостатки. Например отсутствие меток кода и goto на них. Без goto невозможно сделать легко читаемый и понимаемый код в небольших, но логически сложных процедурах.

Инициализировать по индексу можно в коде - как уже упоминал.
Goto есть (если внезапно действительно нужен именно он, что несколько странно в контексте концепции цикла ПЛК) - читайте в справке про JMP.

По поводу недоязыка - стоит учитывать, что ST разрабатывался в начале 90-х для пользователей без бэкграунда (по крайней мере, без серьезного) в программировании. Естественно, о синтаксическом сахаре особо не задумывались.

Все же понимают, что ST - это не С и т.д., но всё, что можно сделать - понять, принять и простить.

gs_62
19.03.2017, 23:16
Отлично! JMP есть. Теперь я почти в своей тарелке"! (я ж ассемблерщик)
Я читал мануал к КДС 2.3 - там в ST нет JMP, и думал что в новых КДСах синтаксис не изменился.

plot1948
20.03.2017, 09:40
Здравствуйте.Нужен совет.Раньше делал пару проектов в КДС2.3 в редакторе LD,проблем не было,но там и на входе и на выходе были дискретные сигналы. Сейчас нужно сделать проект на входе аналоговый сигнал на выходе дискретный.Возможно ли это реализовать в LD и если нет,то какой язык выбрать?

Эдуард_Н
21.03.2017, 04:45
Начиная с SP7 хелп на русском отсутствует. Ищите англоязычный в папке установки CODESYS (...\Codesys\Online Help).

Вот русскоязычный хелп из SP6:
https://yadi.sk/d/OtxdkJqT3G73jf
Открывается, а текста внутри справки нет. Что не так?

У мня из папки CODESYS (...\Codesys\Online Help) открывается нормально.

Евгений Кислов
21.03.2017, 07:11
По всей видимости, вам надо сделать так:

30153

slonegd
22.03.2017, 10:39
Ассемблерщик, зачем вам ST, если есть IL?
Если вы напишите программу с переходами на st и потом эту программу будут читать другие люди, то они о вас будут не самого хорошего мнения. В st есть куча способов обойтись без переходов, не ассемблер же. Почитайте, что такое спагетти код, может проникнитесь.

Dmitro
25.03.2017, 20:29
Есть категория компьютеров "тонкий клиент".
Можно ли на них (Windows CE, embedded или Linux) запустить CodeSys Runtime и какие требования по памяти/жесткому диску?
Заранее спасибо

Евгений Кислов
25.03.2017, 20:41
Есть категория компьютеров "тонкий клиент".
Можно ли на них (Windows CE, embedded или Linux) запустить CodeSys Runtime и какие требования по памяти/жесткому диску?
Заранее спасибо

Да, это возможно - с помощью виртуального контроллера (Soft PLC) Codesys Control Win V3. В состав среды программирования входит триальная версия с ограничением времени непрерывной работы (2 часа, после этого можно перезапустить).

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

http://www.prolog-plc.ru

Презентация на упомянутую тему:
http://www.prolog-plc.ru/docs/conf15/Make_the_Right_Choice.pdf

chm
27.03.2017, 14:32
вопрос есть, как графический примитив типа "текстовое поле" поставить на попа?
В смысле, чтобы строка читалась начиная снизу, и заканчивая сверху, а верх букв был слева, а низ справа.

Евгений Кислов
27.03.2017, 14:46
вопрос есть, как графический примитив типа "текстовое поле" поставить на попа?
В смысле, чтобы строка читалась начиная снизу, и заканчивая сверху, а верх букв был слева, а низ справа.

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

chm
27.03.2017, 15:40
30245

вот так чтобы было. текст можно неизменяемый

Евгений Кислов
27.03.2017, 15:52
30245

вот так чтобы было. текст можно неизменяемый

Понятно. Так можно:

30246

В редакторе будет горизонтально, но при запуске проекта на дисплее будет так:

30247

chm
27.03.2017, 16:49
у меня такого нету. Ни в "метке" ни в "текстовом поле". 3.5 sp7 P4
Или другой текст надо?

Евгений Кислов
27.03.2017, 17:35
у меня такого нету. Ни в "метке" ни в "текстовом поле". 3.5 sp7 P4
Или другой текст надо?

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

chm
31.03.2017, 12:19
обратно про тиражирование.
Оно какое-то убогое, по крайней мере, в том виде, в каком описано в 11.3.6. СПК Визуализация . Так как сказано про одномерный массив. А если вот в одну структуру вложить другую, (поскольку не только два вложенных массива интересны, а ещё и добавление другого типа переменных), то никак не получилось это объехать за счёт своего воображения.
Если конкретно - то пусть будет квадратик, внутри которого рядами в определённом количестве кружочки. Квадратик надо в зависимости от обстоятельств красить внутри разным цветом, под это дело переменная отводится. Кружочки внутри квадратика надо тоже по обстоятельствам красить разным цветом, под это дело для кружочка тоже отводится переменная. Кружочков внутри квадратика находится много, потому для квадратика делаем структуру, где будет куча всего полезного, к тому же, переменная, отвечающая за цвет квадратика, и массив структур, отвечающих за кружочки (у них ведь не только цвет, а тоже ещё много чего есть.)
Но квадратиков надо по условиям иметь 100500 штук, и он должны изображаться, в свою очередь, внутри некоего окна, для которого тоже хочется сделать структуру с кучей разных переменных, и массив со структурами для "квадратиков", внутри которых структуры для "кружочков".

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

Rake Runner
31.03.2017, 12:38
Просто разработчики вряд ли думали о наркоманах, которые будут на панели отрисовывать тайловую графику.

chm
31.03.2017, 13:08
одинаковые, например, шкафы с лампочками, или привода задвижек с теми же лампочками стоят рядами не только в воображении наркоманов...

Rake Runner
31.03.2017, 14:15
одинаковые, например, шкафы с лампочками, или привода задвижек с теми же лампочками стоят рядами не только в воображении наркоманов...

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

chm
31.03.2017, 14:49
...в котором, однако, не нашёл переменных, позволяющих цеплять его к конкретному полю структуры...

Rake Runner
31.03.2017, 15:14
...в котором, однако, не нашёл переменных, позволяющих цеплять его к конкретному полю структуры...

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

chm
31.03.2017, 15:37
есть какая-то штука, названная в переводе "переключить переменную фрейма", но, кажется, не оно.
А никаких других кандидатов на это дело не наблюдается.

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

То есть, по всей видимости, на вход подать - можно.
Но всё равно для каждого "ящика" - свой фрейм рисовать. Ну или скопировать, но назначать экземпляр - всё равно руками.

slonegd
31.03.2017, 16:17
Фреймы вполне могут решить вашу, фреймы можно переключать переменной типа ИНТ, если их несколько и они изменяются в зависимости от условий. Переменную эту можете менять где угодно. На вход/выход фрейма вполне можно вставить любое количество переменных и структур, а так же полей структур. Фреймы могут входить друг в друга, при этом структуру для внутреннего фрейма надо передать во внешний фрейм либо отдельной переменной структуры, либо в составе внешней структуры. Говорят не следует вкладывать фреймы более чем на 3 порядка, я не проверял. У меня пока только 2 порядка было.
Внутри фреймов могут быть свои переменные, которые видны только им. (например str: ARRAY[0..1] OF STRING:=['On','Off']; а в каком нибудь прямоугольнике в текст вписать str[BOOL_TO_INT(bVar)], и тогда надпись будет меняться в зависимости от логической переменной.)
Не обязательно использовать все переменные структуры внутри фрейма. На разные фреймы может быть завязана одна структура, или 2 экземпляра 1 структуры.

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

Если у вас 105 панелей с 16 рубильниками, то логично создать фрейм с 16 рубильниками, вар ин аут которого является массив структур arstRubilnik[1..16]. В структуру можно впихнуть, что вам нужно(видимость, цвет, переменная вкл/откл, запрет ввода, надпись при рубильнике, и тд).
Этот массив структур пихнуть в отдельную структуру stPanel. (не уверен как оформить массив массивов) Создать массив этих структур по количеству панелей arstAllPannels[1..105]. Вставить фрейм на экран и привязать к нему arstAllPannels[i].stPanel.arstRubilnik. i менять где угодно в программе или визуализации, тем самым изменять панель во фрейме на любую из 105.

chm
04.04.2017, 17:32
не пойму, кто на ком стоял...
пока всё вышеприведённое в разных сочетаниях не поехало.

понимаю так:
1. делаем DUT - структуру на рубильник, в нёй состояния, цвет покраски будущего сигнала визуализации, для краткости оно будет называться тип "рубильник". rub
2. делаем DUT - структуру на панель, в ней разная штуковина, которая относится к панели целиком (пусть будет переключатель местного/дистанционного управления и т.д.) и массив из структур, которые рубильник, пусть он называется тип "панель". pan
3. делаем DUT - структуру на усё хозяйство, в которой нечто общее на все панели вообще и массив из этих панелей.
ну, в облегчённом виде в п. 3 можно сделать массив из панелей, и тогда уже не DUT, а в PLC_PRG в шапке. , оно будет тип "отделение" otd - ну пусть так.

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

4. вставляем новую визуализацию, которая пусть визуализирует отдельный рубильник. в ней разворачиваем шапку (не тыкательную хрень справа, а то место сверху, где var_in_out написано и туда объявляем переменную, пусть она будет называться ino_rub , у который будет тип "рубильник" (rub)). Рисуем квадратик для сигнализации состояния рубильника. Теперь надо, чтобы квадратик красился цветом, который будет определятся переменной Цвет в структуре "рубильник", являющейся элементом массива рубильников в структуре "панель", являющейся в свою очередь элементом массива в структуре "отделение" в её экземпляре "экземпляр отделения".
выделяем квадратик, идем в правую часть и где "переменные цвета" - "нормальное состояние" - "цвет фрейма" - "цвет заливки" тыкаем. Там вылезает табличка, в ней ищем переменную ino_rub для текущей визуализации, ней находим поле "цвет". Он вставился, почему-то не ino_rub.color, а просто color.
на всякий случай сохраняем это дело и пытаемся для смеха компилировать. Видим два ругательства, что визуализация "рубильник" не имеет экземпляров и третье - что идентификатор color в визуализации "рубильник" не задан. Опаньки. Ну ладно, может, всё целиком поедет...

5. делаем визуализацию для панели. там вставляем элемент "фрейм", нам открывается диалог "конфигурация фрейма". там выбираем визуализацию одиночного рубильника, которую делали выше. Фрейм сразу принимает вид визуализации рубильника, которую заранее сделали маленькой, чтоб влезало. Так делаем 2 раза, пусть пока будет по 2 рубильника на панели и по 2 панели на секции/отделении. Да, в структурах этого тоже по 2 штуки. Ещё на панель приделываем просто прямоугольник, его изменение цвета будет сигнализировать о состоянии панели "в общем". В шапке ему делаем переменную ino Тип pan (панель).
Оба фрейма "рубильников" сразу в правой части заимели в поле "ссылка" значение ino_rub, при компиляции опять ругается на "цвет" в рубильнике и про экземпляры тоже. Про "панель" такого, почему-то, не пишет.


6. то же повторяем про "отделение".

7. делаем последнюю, главную визуализацию "main", туда ставим визуализацию "отделение" во фрейме.


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

slonegd
05.04.2017, 11:35
по 4 пункту: переменная должна быть ino_rub.color, а не просто color, тогда одна ошибка компиляции уйдет.
В визуализации main надо дать ссылку на конкретную структуру, экземпляр которой был создан в plc_prg. Внутри фрейма вы это же сделали, а в мейне забыли, вот он и ругается.
Всё будет, надо верить в себя.

Евгений Кислов
05.04.2017, 12:44
Добрый день. Поднятая тема (сложная визуализация, типизация объектов) показалась интересной, поэтому в свободное время на коленке сделал видео.
https://www.youtube.com/watch?v=eHWSI_Ll8VU&


Может быть, кому-то оно в чем-нибудь поможет.

Dmitro
05.04.2017, 16:10
Как сделать запуск проекта без CodeSysa ?
Для этого есть как я понимаю пакет Codesys control RTE? Но как ему указать файл с прогой?
Или проект должен быть "с HMI" ?

chm
05.04.2017, 17:03
ага. не получалось, потому что я делал не так как на 10:42 и 11:25. чего-то не ясно, почему кнопки внутри панели размножать нельзя, а панели по основному экрану - можно.
Дома вечером попробую.
Фактически, тут всё есть, чтобы мне сделать нужное.
Кое что предстоит выяснить на будущее и для собственного любопытства.

Евгений Кислов
05.04.2017, 17:40
чего-то не ясно, почему кнопки внутри панели размножать нельзя, а панели

Вот это уже недоработка на стороне CODESYS. Я не проверял в последних сервис-паках - возможно, уже исправили.

Евгений Кислов
05.04.2017, 17:41
Как сделать запуск проекта без CodeSysa ?
Для этого есть как я понимаю пакет Codesys control RTE? Но как ему указать файл с прогой?
Или проект должен быть "с HMI" ?

Извините, не понял вопрос. Что именно вы хотите запустить и где?

chm
10.04.2017, 10:33
есть мнение, что тиражирование сделано так, что работает только с конкретными объектами, под который память отведена, например экземпляры структур. А они у нас появляются только когда основной экран рисуем. Всё, что до этого, в том числе и внутрипанельное - это абстрактное описалово, потому и не цепляется...


тут другой вопрос:
для отображения кириллицы надо включать в менеджере визуализации пункт "использовать строки Unicode", так?
Так почему-то оно не помогает. То есть, что надписи на кнопках и прямоугольниках да, получаются, хотя какие-то зубчатые из-за масштабирования текста, а вот которые динамически менять через переменную - что-то не хотят. Сейчас посмотрю, было ли оно в "кине"... Нет, там латиницей обзывали.

slonegd
11.04.2017, 09:10
Для кирилицы надо использовать переменные типа wstring. Библиотека standard64, в ней же и все строковые функции с префиксом w. Это помимо галочки про юникод.

chm
14.04.2017, 11:14
ага, получается. Там ещё вместо ' надо ".

А у меня в оболочке глюк :-( . когда в панели инструментов (где графика) по вкладкам тыкаю, они не разворачиваются.

Explorerrr
17.04.2017, 07:44
Добрый день. Возможно-ли вставить сюда сеть протокола "Овен"? 30627

Евгений Кислов
17.04.2017, 07:57
Добрый день. Возможно-ли вставить сюда сеть протокола "Овен"? 30627

Добрый день. К сожалению, нет. Для опроса приборов по протоколу Овен используйте библиотеку OwenNet:
http://www.owen.ru/catalog/codesys_v3/80224381

Explorerrr
17.04.2017, 08:10
Спасибо за ответ. Тогда такой вопрос. Если я напишу программу опроса, как организовать её работу чтобы ей пользовались к примеру 5 переменных для опроса прибора?

Евгений Кислов
17.04.2017, 08:15
Спасибо за ответ. Тогда такой вопрос. Если я напишу программу опроса, как организовать её работу чтобы ей пользовались к примеру 5 переменных для опроса прибора?

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

Explorerrr
17.04.2017, 08:31
Извините, не понял вопрос. О каких 5 переменных речь? Можно привести более конкретный пример?
К примеру пишу программу для опроса прибора - открыть СОМ порт и т.д.... Мне нужно эту программу писать для каждой переменной (которую я хочу прочитать с прибора) или я могу её написать один раз и использовать как шаблон для остальных переменных для опроса прибора, Как это сделать?

Евгений Кислов
17.04.2017, 08:40
Извините, не понял вопрос. О каких 5 переменных речь? Можно привести более конкретный пример?
К примеру пишу программу для опроса прибора - открыть СОМ порт и т.д.... Мне нужно эту программу писать для каждой переменной (которую я хочу прочитать с прибора) или я могу её написать один раз и использовать как шаблон для остальных переменных для опроса прибора, Как это сделать?

СOM-порт достаточно открыть один раз. См. пример в документации - там происходит чтение одной переменной и запись другой. Чтение пяти переменных можно оформить по аналогии.
http://ftp.owen.ru/index.html/CoDeSys3/11_Documentation/01_SPK/SPK_TRM212owen_v.1.1.pdf

Explorerrr
17.04.2017, 08:50
СOM-порт достаточно открыть один раз. См. пример в документации - там происходит чтение одной переменной и запись другой. Чтение пяти переменных можно оформить по аналогии.
http://ftp.owen.ru/index.html/CoDeSys3/11_Documentation/01_SPK/SPK_TRM212owen_v.1.1.pdf

Всё понял, большое спасибо.)

LordAn
17.04.2017, 14:37
Народ, может кто поможет нубу с такой проблемой.
Задача такая: Нужно запустить условный кулер на 5 секунд, если если появилась первая ошибка запускаем кулер еще раз, если снова ошибка срабатывает сигнализация.
Подобный код не выдает необходимый алоритм. Повторный запуск не происходит.


PROGRAM PLC_PRG
VAR
var1: BOOL := false;
error: INT := 0;
TPinst: TP;
Var0: BOOL;
alarm: BOOL;
END_VAR

label: TPInst(IN := Var0, PT:= T#5S);
Var1 :=TPInst.Q;
IF TPInst.ET=T#5S THEN
CASE error OF
0: error:=error+1;
JMP label;
1: error:=error+1;
alarm:=TRUE;
END_CASE
END_IF
Очень похоже, что ответ будет очевиден и просто я тупой, но все-же, может кто пояснит. Заранее благодарю.

chm
17.04.2017, 15:18
добрый день снова.
отзеркаливание фреймов бывает? (ну, не хочется такой же второй рисовать, хочется существующий отразить, как в автокаде каком-нибудь)?
Вращение вот точно есть.

Евгений Кислов
18.04.2017, 07:39
добрый день снова.
отзеркаливание фреймов бывает? (ну, не хочется такой же второй рисовать, хочется существующий отразить, как в автокаде каком-нибудь)?
Вращение вот точно есть.

Такой возможности не предусмотрено.

Евгений Кислов
18.04.2017, 08:33
Народ, может кто поможет нубу с такой проблемой.
Задача такая: Нужно запустить условный кулер на 5 секунд, если если появилась первая ошибка запускаем кулер еще раз, если снова ошибка срабатывает сигнализация.
Подобный код не выдает необходимый алоритм. Повторный запуск не происходит.


PROGRAM PLC_PRG
VAR
var1: BOOL := false;
error: INT := 0;
TPinst: TP;
Var0: BOOL;
alarm: BOOL;
END_VAR

label: TPInst(IN := Var0, PT:= T#5S);
Var1 :=TPInst.Q;
IF TPInst.ET=T#5S THEN
CASE error OF
0: error:=error+1;
JMP label;
1: error:=error+1;
alarm:=TRUE;
END_CASE
END_IF
Очень похоже, что ответ будет очевиден и просто я тупой, но все-же, может кто пояснит. Заранее благодарю.

У вас в коде не происходит сброса Var0 - а TP запускается в работу импульсом по переднему фронту.

chm
18.04.2017, 13:54
дорисовался, блин...
paint buffer overflow

Советуют его увеличить в расширенных настройках менеджера визуализации. Только почему-то их не найти.
или даже я найду, где увеличить, а ПЛК323-24.03.01 это потом не вытянет, как это заранее узнать?

Евгений Кислов
18.04.2017, 14:02
дорисовался, блин...
paint buffer overflow

Советуют его увеличить в расширенных настройках менеджера визуализации. Только почему-то их не найти.
или даже я найду, где увеличить, а ПЛК323-24.03.01 это потом не вытянет, как это заранее узнать?

ПЛК323 - скорее всего, не вытянет, он не предназначен для отрисовки сложной визуализации.

30653

Dmitro
18.04.2017, 19:50
Как запустить application.app с помощью только "CODESYS Control RTE3", без среды разработки?

Перерыл документацию, все что нашел
VisualClientController.exe --application=Application --flags=1 (restart)
Эта утилита никак не реагирует ни на эту, ни на другие параметры.

Евгений Кислов
18.04.2017, 20:22
Как запустить application.app с помощью только "CODESYS Control RTE3", без среды разработки?

Перерыл документацию, все что нашел
VisualClientController.exe --application=Application --flags=1 (restart)
Эта утилита никак не реагирует ни на эту, ни на другие параметры.

Не очень понял - а чем не устраивает вариант запуска из меню Пуск?

spdif123
18.04.2017, 20:37
Добрый день. Подскажите как использовать стандартный диалог выбора файла (FileOpenSave) ?
Тестирую на WinControl PLC. В тест-проекте есть кнопка, на кнопку положил действие открыть диалог FileOpenSave. В runtime при нажатии на кнопку срабатывает внутреннее исключение.
Посмотрел учебные проекты - в них отправляется команда на ПЛК для открытия диалога (я буду использовать СПК110.Д с вводами/выводами на борту).
Посмотрел хелп, в котором описан диалог на примере логина.
Обычно диалоги открытия файлов вызываются с начальной директорией, маской файлов и т.д. Скорее всего для инициализации надо использовать ФБ Visu_FbFileListProvider?

Евгений Кислов
18.04.2017, 20:43
Добрый день. Подскажите как использовать стандартный диалог выбора файла (FileOpenSave) ?
Тестирую на WinControl PLC. В тест-проекте есть кнопка, на кнопку положил действие открыть диалог FileOpenSave. В runtime при нажатии на кнопку срабатывает внутреннее исключение.
Посмотрел учебные проекты - в них отправляется команда на ПЛК для открытия диалога (я буду использовать СПК110.Д с вводами/выводами на борту).
Посмотрел хелп, в котором описан диалог на примере логина.
Обычно диалоги открытия файлов вызываются с начальной директорией, маской файлов и т.д. Скорее всего для инициализации надо использовать ФБ Visu_FbFileListProvider?

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

Dmitro
18.04.2017, 21:15
Не очень понял - а чем не устраивает вариант запуска из меню Пуск?

application.app запустить из меню Пуск? Как?

Евгений Кислов
18.04.2017, 21:24
application.app запустить из меню Пуск? Как?

Запускается, естественно, сам виртуальный контроллер. Но, в теории, можно подложить application.app (и остальные файлы/каталоги) в его директорию - .../папка установки CODESYS/GatewayPLC. При старте виртуального контроллера должен происходить автоматический запуск расположенного в данной папке приложения.

Upd. - провел эксперимент на виртуальнике (обычном, не RTE) - методика работает.

spdif123
19.04.2017, 07:04
Добрый день. Опишите подробнее задачу, которую вы хотите решить. Что вы планируете делать с помощью этого диалога?
Необходимо организовать выбор файла txt в определенной директории.

Евгений Кислов
19.04.2017, 07:07
Необходимо организовать выбор файла txt в определенной директории.

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

spdif123
19.04.2017, 07:28
Извините, можно еще подробнее? С помощью какого элемента вы планируете открыть этот файл? Как с ним планируете работать? И на каком контроллере?
1.Чтение/запись файла выполняется моим ФБ в котором используется функции библиотеки SysFile. Это уже проверено и работает.
2.Стандартный вариант формирования рецептов мне не подходит. Поэтому парсинг txt файла будет выполняться мной.
3.Рецептов может быть сколь угодно много. С сохранением рецепта проблем нет. А для выбора файла будет открываться диалог FileOpenSave, по результатам диалога я должен получить полный путь к файлу.
Пример http://www.cta.ru/cms/f/460233.pdf (98 стр.)
Контроллер СПК110.Д

Евгений Кислов
19.04.2017, 08:08
1.Чтение/запись файла выполняется моим ФБ в котором используется функции библиотеки SysFile. Это уже проверено и работает.
2.Стандартный вариант формирования рецептов мне не подходит. Поэтому парсинг txt файла будет выполняться мной.
3.Рецептов может быть сколь угодно много. С сохранением рецепта проблем нет. А для выбора файла будет открываться диалог FileOpenSave, по результатам диалога я должен получить полный путь к файлу.
Пример http://www.cta.ru/cms/f/460233.pdf (98 стр.)
Контроллер СПК110.Д

Ситуацию понял. Прикладываю пример от компании 3S (см. приложение FileDialog).
Никакой другой информации по поводу использования FileOpenSave мне не встречалось.

spdif123
19.04.2017, 08:33
И еще один вопрос. Можно ли программно(POU PRG) добавлять/удалять строки в объекте проекта "Список текстов.." ?

Евгений Кислов
19.04.2017, 08:37
И еще один вопрос. Можно ли программно(POU PRG) добавлять/удалять строки в объекте проекта "Список текстов.." ?

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

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

alexmaemur
03.05.2017, 18:00
Коллеги прошу помощи.
При работе с виртуальным контроллером Control Win V3 не могу с ним соединится.
В установках соединения сканирую сеть и нахожу устройство с адресом 0080.
При нажатии Enter выскакивает сообщение Вход пользователя устройства в систему: Вы не обладаете достаточными правами для выполнения этой операции. Введите имя и пароль. Какое имя и пароль вводить? И если оно было ранее введено как стереть, чтобы ввести по новой?

Евгений Кислов
03.05.2017, 18:42
Коллеги прошу помощи.
При работе с виртуальным контроллером Control Win V3 не могу с ним соединится.
В установках соединения сканирую сеть и нахожу устройство с адресом 0080.
При нажатии Enter выскакивает сообщение Вход пользователя устройства в систему: Вы не обладаете достаточными правами для выполнения этой операции. Введите имя и пароль. Какое имя и пароль вводить? И если оно было ранее введено как стереть, чтобы ввести по новой?

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

alexmaemur
04.05.2017, 10:43
Выложите, пожалуйста, скриншоты, на которых видно вашу проблему. И уточните версию CODESYS.


CODESYS V3.5 SP8 Patch 4

При старте PLC через трей у меня появляется надпись:
The CODESYS Control PLC allows executing program code with system level access on this machine. This may pose as a security threat unless appropriate measures are taken to limit network access to this machine.
You can do this in CODESYS with the Online Menu Command:
Online->Security->Add Online User.

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

Все скриншоты и описания к ним в файле Проблема авторизации.doc

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

Евгений Кислов
04.05.2017, 10:50
В принципе, надпись носит информационный характер. Добавлять юзеров необязательно. Но все выглядит так, как будто вы добавили одного и настроили для него пароль, после чего сделали часть функционала среды доступным только для этого юзера.

Настройка юзеров - Проект - Установки проекта - Пользователи и группы.

alexmaemur
04.05.2017, 11:19
Там есть только один пользователь Everyone. Я так понимаю это по умолчанию имеющийся юзер.

Создаю проект новый. Все по умолчанию, на базе Control Win V3. Сразу же пытаюсь настроить соединение т.е никаких пользователей для нового проекта. Результат тот же.

Евгений Кислов
04.05.2017, 11:34
Там есть только один пользователь Everyone. Я так понимаю это по умолчанию имеющийся юзер.

Создаю проект новый. Все по умолчанию, на базе Control Win V3. Сразу же пытаюсь настроить соединение т.е никаких пользователей для нового проекта. Результат тот же.

Возможна, проблема в конкретной ОС? Есть возможность проверить на другой системе?

alexmaemur
04.05.2017, 12:19
Создам новую виртуалку и установлю все по новой, похоже другого пути нет. Получается не ясно что это за пользователь необходим??? Где его создавать и редактировать:confused:

Инженер23
10.05.2017, 16:44
Здравствуйте искал в хелпе кодесиса не нашел, как перевести переменную типа integer в строку? (язык ST)

Евгений Кислов
10.05.2017, 17:24
Здравствуйте искал в хелпе кодесиса не нашел, как перевести переменную типа integer в строку? (язык ST)


sVar:=INT_TO_STRING(iVar);

chm
15.05.2017, 17:59
вопрос ещё один.
Как закрасить кнопку цветов, выражаемым через переменную, когда она в нажатом состоянии?
Как в ненажатом - оно и так понятно.

Евгений Кислов
15.05.2017, 18:24
вопрос ещё один.
Как закрасить кнопку цветов, выражаемым через переменную, когда она в нажатом состоянии?
Как в ненажатом - оно и так понятно.

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

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

cad555
15.05.2017, 23:31
добрый день . подскажите как организовать обратный отсчет времени.

Евгений Кислов
16.05.2017, 06:58
добрый день . подскажите как организовать обратный отсчет времени.

ФБ таймеров (TON и т.д.) расположены в библиотеке Standard. Они реализуют прямой отсчет.
Соответственно, чтобы перейти к обратному, надо из заданного значения времени (точки отсчета) вычитать время с выхода таймера.

cad555
17.05.2017, 18:35
добрый день . Функциональный блок Real_Time_Clock из библиотеки SPK TOOLS срабатывает 1 раз , потом срабатывает только на третий раз. в чем может быть причина ?
если поставить три вызова подряд , срабатывает на второй раз

Евгений Кислов
17.05.2017, 20:08
добрый день . Функциональный блок Real_Time_Clock из библиотеки SPK TOOLS срабатывает 1 раз , потом срабатывает только на третий раз. в чем может быть причина ?
если поставить три вызова подряд , срабатывает на второй раз

Добрый день. Библиотека SPK_TOOLS не рекомендуется к использованию на актуальных прошивках.
Воспользуйтесь системной библиотекой CAA DTutil. См. документ СПК. Системное время (ссылка в подписи).


если поставить три вызова подряд , срабатывает на второй раз

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

cad555
17.05.2017, 20:25
Добрый день. Библиотека SPK_TOOLS не рекомендуется к использованию на актуальных прошивках.
Воспользуйтесь системной библиотекой CAA DTutil. См. документ СПК. Системное время (ссылка в подписи).



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

с dtu таже история

Евгений Кислов
17.05.2017, 20:29
с dtu таже история

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

prog8
18.05.2017, 09:05
Где можно почитать о работе с файлами на СПК107? Конкретно интересует: как попасть на примонтированную флешку, можно ли ее "зачрутить" (chroot, FILE.SetRoot почему-то не работает, говорит "NOT EMPLEMENTED"), определить, действительно ли это флешка, или просто каталог (sysExecute('mount | grep /mnt/ufs/media')?), как определить размер флешки (df /dev/sda?), будет ли создаваться файл, если открывать его в режиме APPEND, когда его еще нет, какие будут атрибуты у созданного файла... Много вопросов еще. Справка по CAA File нормальная, но не все там понятно, например, зачем в цикле делается вызов filop(xExecute:=true), не достаточно ли вызвать ОДИН РАЗ, а потом мониторить xBusy/xDone?.. В общем, хочется увидеть НОРМАЛЬНЫЙ мануал по файловым операциям с описанием особенностей при работе на СПК с его линуксом.

Евгений Кислов
18.05.2017, 09:59
Где можно почитать о работе с файлами на СПК107? Конкретно интересует: как попасть на примонтированную флешку, можно ли ее "зачрутить" (chroot, FILE.SetRoot почему-то не работает, говорит "NOT EMPLEMENTED"), определить, действительно ли это флешка, или просто каталог (sysExecute('mount | grep /mnt/ufs/media')?), как определить размер флешки (df /dev/sda?), будет ли создаваться файл, если открывать его в режиме APPEND, когда его еще нет, какие будут атрибуты у созданного файла... Много вопросов еще. Справка по CAA File нормальная, но не все там понятно, например, зачем в цикле делается вызов filop(xExecute:=true), не достаточно ли вызвать ОДИН РАЗ, а потом мониторить xBusy/xDone?.. В общем, хочется увидеть НОРМАЛЬНЫЙ мануал по файловым операциям с описанием особенностей при работе на СПК с его линуксом.

Добрый день. Создание такого мануала запланировано.
"Особенности" планируется оформлять как готовый функционал - например, ряд функций (статус, команда размонтирования, размер флэшки) вынесен в таргет-файлы (начиная с версии 3.5.4.25).

Если есть возможность - пожалуйста, напишите мне на почту (в подписи), какие темы и вопросы вы считаете необходимым раскрыть в данном документе - желательно, как можно детальнее, с примерами конкретных задач, которые вы хотите решить с помощью CAA File.

chm
18.05.2017, 10:22
Привязать переменную кнопки к параметру Переключить цвет и задать переменную для параметра Переменная тревоги.
Т.е. нажатие на кнопку приведет к ее переключению в состояние тревоги, на которое можно завязать цвет через переменную.

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

Чего-то никак. я понимаю, красится оно в цвет "переменные цвета - цвет" по-умолчанию, "переменная цвета - цвет тревоги" по установке в 1 переменной "переключить цвет" там же. Переменная "переключить цвет" может быть той же самой, которая "переменная состояния кнопки-двоичная переменная", которую надо устанавливать через "конфигурация ввода - on moise click непосредственно, через st code или как-то так (мне надо западающая кнопка). И, типа, цвет переключится в тот, который "тревоги". Ну, или по этой штуке основной цвет подменять, и тогда в "переключить цвет" уже ничего не пишем.
Так вот, ничего нету. Надавленная кнопка всегда белая, а текст на ей всегда бирюзовый (((,

Евгений Кислов
18.05.2017, 12:14
Чего-то никак. я понимаю, красится оно в цвет "переменные цвета - цвет" по-умолчанию, "переменная цвета - цвет тревоги" по установке в 1 переменной "переключить цвет" там же. Переменная "переключить цвет" может быть той же самой, которая "переменная состояния кнопки-двоичная переменная", которую надо устанавливать через "конфигурация ввода - on moise click непосредственно, через st code или как-то так (мне надо западающая кнопка). И, типа, цвет переключится в тот, который "тревоги". Ну, или по этой штуке основной цвет подменять, и тогда в "переключить цвет" уже ничего не пишем.
Так вот, ничего нету. Надавленная кнопка всегда белая, а текст на ей всегда бирюзовый (((,

Cнял видео с примером:

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

chm
18.05.2017, 12:36
извините, постоянно из-за меня какой-то напряг (

Евгений Кислов
18.05.2017, 12:39
извините, постоянно из-за меня какой-то напряг (

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

serg-e-f
18.05.2017, 13:24
Выложите архив вашего проекта, пожалуйста, а также приведите несколько скриншотов, которые наглядно демонстрируют проблему.

dtugt.xExecute:=1;
dtugt();
IF dtugt.xDone=1 THEN
today:=dtugt.dtDateAndTime;
dtugt.xExecute:=FALSE;
eError:=DTU.DTSplit(
dtDateAndTime:=today,
puiYear:=ADR(year) ,
puiMonth:=ADR(month),
puiDay:=ADR(day) ,
puiHour:=ADR(hour) ,
puiMinute:=ADR(minute) ,
puiSecond:=ADR(secund));
END_IF

varы
dtugt:DTU.GetDateAndTime;
eError:dtu.ERROR;
minute,hour,day,month,year,secund: UINT;
today:dt;

Первый раз срабытывает и все (( , условие выполняется!

serg-e-f
18.05.2017, 13:34
31213 вот дата записывается 1 раз и все

Евгений Кислов
18.05.2017, 13:39
31213 вот дата записывается 1 раз и все

ФБ чтения времени работает по переднему фронту. Т.е. если хотите постоянно считывать время - постоянно дергайте вход.
См. документ - там все это описано.

serg-e-f
18.05.2017, 14:29
ФБ чтения времени работает по переднему фронту. Т.е. если хотите постоянно считывать время - постоянно дергайте вход.
См. документ - там все это описано.

так я и дергаю
1)dtugt.xExecute:=1;
2)dtugt.xExecute:=FALSE;

Dmitro
18.05.2017, 14:38
Не стартует программный контроллер Codesys Control Win (установленный без среды разработки).
Нажатие "start plc" не вызывает никакой реакции.
Прога положена в каталог gatewayPLC.
А старт сервиса выдает ошибку 1053 (таймаут).

Почему не запускается? Спасибо.

Евгений Кислов
18.05.2017, 14:43
так я и дергаю
1)dtugt.xExecute:=1;
2)dtugt.xExecute:=FALSE;

Обращаю внимание - вы нигде не вызываете ФБ с dtugt.xExecute:=FALSE
Так что на входе блока всегда TRUE - и соответственно он срабатывает только один раз.

Евгений Кислов
18.05.2017, 14:44
Не стартует программный контроллер Codesys Control Win (установленный без среды разработки).
Нажатие "start plc" не вызывает никакой реакции.
Прога положена в каталог gatewayPLC.
А старт сервиса выдает ошибку 1053 (таймаут).

Почему не запускается? Спасибо.

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

cad555
18.05.2017, 20:37
ув.Гуру. Подскажите почему dtu.getdateandtime срабатывает только на второй проход(цикла). библиотеку SPK_tool мне тут сказали использовать нельзя. а с CAA DTU получается следующая фигня.

до первого прогона
31227

после первго прогона
31228

и наконец то xdone только после второго прогона
31229

Евгений Кислов
18.05.2017, 20:44
Это модель поведения блока. В чем, собственно, проблема? Данный блок используется для чтения системного времени, которое само по себе измеряется с определенной погрешностью. Лишний цикл (10 мс) ничего не изменит. Более того, формат DT вообще представляет время как число секунд, миллисекунды не используются.

cad555
18.05.2017, 20:54
Это модель поведения блока. В чем, собственно, проблема? Данный блок используется для чтения системного времени, которое само по себе измеряется с определенной погрешностью. Лишний цикл (10 мс) ничего не изменит.

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

Евгений Кислов
18.05.2017, 21:02
...то его можно было бы вызывать только при определенном условии и делать проверки. но так как блок отрабатывает за два цикла , логику работы программы выстроить невозможно.

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

cad555
18.05.2017, 21:16
у меня одни переменные меняются в течение одного цикла и влияют на условия вызова фб со считыванием времени , а в слудующем цикле переменные уже приняли другие значения а фб еще не отработал. а на второй проход он уже не вызывается.

Евгений Кислов
18.05.2017, 21:27
у меня одни переменные меняются в течение одного цикла и влияют на условия вызова фб со считыванием времени , а в слудующем цикле переменные уже приняли другие значения а фб еще не отработал. а на второй проход он уже не вызывается.

Правильно ли я понял, что вы говорите о конструкции типа:




IF условия THEN

считать системное время
если системное время считано и равно (или больше/меньше/не равно) заданному, то сбросить ФБ и выполнить нужные действия

END_IF



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



// выносим запуск ФБ за пределы IF ... END_IF
dtugt(xExecute:=( условие1 AND условие 2 и т.д.) );

IF dtugt.xDone
// забираем dtDateAndTime
END_IF




Еще раз уточню, что забирать время с выхода блока можно только в тот цикл, когда xDone=TRUE (т.е. блок успешно завершил работу).

serg-e-f
19.05.2017, 07:16
Правильно ли я понял, что вы говорите о конструкции типа:




IF условия THEN

считать системное время
если системное время считано и равно (или больше/меньше/не равно) заданному, то сбросить ФБ и выполнить нужные действия

END_IF



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



// выносим запуск ФБ за пределы IF ... END_IF
dtugt(xExecute:=( условие1 AND условие 2 и т.д.) );

IF dtugt.xDone
// забираем dtDateAndTime
END_IF




Еще раз уточню, что забирать время с выхода блока можно только в тот цикл, когда xDone=TRUE (т.е. блок успешно завершил работу).

да , все верно , спс .

ArsGaz
25.05.2017, 01:30
Здравствуйте. Впервые установил CoDeSyS 3.5. При попытке запуска в режиме эмуляции ругается что не найден файл GWClient.dll Переустановка программы не помогла. Поиски информации по проблеме в интернете не увенчались успехом. CODESYS Gateway в трэе честно светится и говорит что работает. Может кто сталкивался и знает решение?

Евгений Кислов
25.05.2017, 07:04
Здравствуйте. Впервые установил CoDeSyS 3.5. При попытке запуска в режиме эмуляции ругается что не найден файл GWClient.dll Переустановка программы не помогла. Поиски информации по проблеме в интернете не увенчались успехом. CODESYS Gateway в трэе честно светится и говорит что работает. Может кто сталкивался и знает решение?

Здравствуйте.

Вы при установке ставите галочки для установки всех компонентов? Данный файл относится CODESYS OPC Server 3, он у вас установлен?

При установке всех компонентов папка должна выглядеть примерно так:

31360

ArsGaz
25.05.2017, 11:19
Да, установлены все компоненты. В папке CODESYS OPC Server 3 файл GWClient.dll присутствует.

UPD. Дело было в косяке винды, не вставали новые обновления и криво работал .net framework. После вылечивания проблемы ошибка ушла.

dr_alf
02.06.2017, 10:26
Подскажите правильно ли я понимаю работу элемента move.
Когда на входе "EN" присутствует TRUE , элемент пропускает через себя все сигналы.
В момент смены TRUE на FALSE на "EN", сигнал на выходе "out" должен пропасть, даже если он присутствует на входе "in".

У меня получается совсем иначе: подаю TRUE на "in", далее TRUE на "EN", - появляется TRUE на "out".
Далее меняю TRUE на FALSE на управляющем входе "EN", то же самое делаю на входе "in", но на выходе "out" продолжает висеть TRUE.
Если же первым убирать сигнал "in", а потом "EN", все работает как нужно.

31520

31519
31521

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

RV9WFJ
02.06.2017, 10:35
Используйте AND

dr_alf
02.06.2017, 11:57
Используйте AND

Вспомнил что когда то давно, в самом первом моем проекте в CS2 ,были тоже проблемы c move, я там как раз AND применил.
Но сейчас в CS3 этот способ не прокатил.
31522 31523

В принципе решение уже нашел, создал ФБ-аналог на ST:

FUNCTION_BLOCK swith
VAR_INPUT
en:BOOL;
in:BOOL;
END_VAR
VAR_OUTPUT
out:BOOL;
END_VAR
VAR
out_:BOOL:=FALSE;
END_VAR



IF en = TRUE THEN
out:=in;
ELSE
out:=out_;
END_IF

Все больше убеждаюсь что нужно весь проект на ST переводить, почти все на него постепенно перевел.

Sulfur
02.06.2017, 13:37
dr_alf
Для вашей задачи вполне достаточно стандартного элемента AND. Вам уже это говорили выше.

В вашем ФБ можно сделать проще, убрать одну переменную.
IF en THEN out:=in ELSE out :=FALSE; END_IF;

КБА
02.06.2017, 13:43
dr_alf
Не любите кошек? Вы просто не умеете их готовить :)
Вам предлагают использовать блок AND без входа EN.
А MOVE с EN - это способ описать в FBD (CFC) оператор IF, где EN - условие, а собственно MOVE - присвоение, т.е. присвоение выходной переменной значения выхода блока MOVE происходит только при активном условии EN, а если условие не выполняется, то и присвоение не выполняется.
Для блока AND без EN присвоение выходной переменной результата логической операции происходит всегда.

Зинец Олег
15.06.2017, 14:17
Здравствуйте, подскажите, пожалуйста, есть ли в библиотеке AlarmManager'a переменная, по которой можно узнать, что пришла какая-либо тревога?

2ar
16.06.2017, 19:05
1. Добавляем в Менеджере библиотек библиотеку DATE and TIME

17857

2. В этой библиотеке нас интересует подбиблиотека CAA Real Time Clock Extern (CAA RTCLK). В нее входят два функциональных блока для работы с системным временем - GetDateAndTime (считывание системного времени) и SetDateAndTime (запись системного времени).

17859

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

17860

4. Системное время хранится в формате DT (DATE and TIME). Физически - это переменная типа DWORD, в которой записывается число секунд, прошедшее с 00:00 часов 1 января 1970 года. Поэтому сразу добавим блоки конвертации DT в DWORD и STRING (для наглядности). Не забываем привязать нашу программу к какой-нибудь задаче.

17861

5. После запуска проекта, при условии, что вход блока GetDateAndTime принял значение TRUE, получаем на выходе системное время в формате DT, и после преобразований - в DWORD и STRING. Нужно понимать, что в данном случае блок сработает один раз - в момент запуска программы (потому что на входе сразу TRUE).

17858

Как уже упоминалось, виртуальный контроллер живет по UTC+0, поэтому в данном случае видна разница с моим временем в трее - т.к. у меня UTC+3.

Блок SetDateAndTime работает аналогично - подаем на вход время в формате DT, смотрим на изменение времени в трее.

Все сделал вроде по инструкции выше, но дату все равно выводит 1970
31708

Евгений Кислов
16.06.2017, 20:05
Все сделал вроде по инструкции выше, но дату все равно выводит 1970
31708

Блок однократно отрабатывает по импульсу на входе. См. документ СПК. Системное время (ссылка в подписи) - там готовый пример с описанием.

2ar
17.06.2017, 09:47
Евгений, спасибо.
Будем изучать.

Осинский Алексей
19.06.2017, 10:21
Здравствуйте, подскажите, пожалуйста, есть ли в библиотеке AlarmManager'a переменная, по которой можно узнать, что пришла какая-либо тревога?

Добрый день!
Возможность есть, но потребуется немного доработать Вашу программу.

В приложении Вы найдете пример подсчета количества активных аварий (AlarmsCount.project).
Перенесите в Ваш проект директорию Alarms counter.
Добавьте вызов программы AlarmsCounter_PRG.

Все. Получить количество активных аварий Вы можете из выходной переменной AlarmsCounter_PRG.iAlarmsCount

31715

2ar
19.06.2017, 19:52
Прочитав СПК. Системное время так и не нашел как запустить время при отладке на компьютере.
Реального контроллера под рукой нет. Изучения и просмотр делаю на обычном компьютере.
При эммуляции следующее
31735

Евгений Кислов
19.06.2017, 19:58
Вы, вероятно, запускаете проект в эмуляции. Так не получится.
Используйте виртуальный контроллер - см. СПК.FAQ, п. 9.8.

2ar
20.06.2017, 17:18
Все получилось. Спасибо.

chm
29.06.2017, 12:12
как побороть сообщение "визуализация <такая-то> не представлена в вашем приложении" (не имеет экземпляров, т.д.)? Всё время была представлена и имела, а тут вдруг типа перестала.

Евгений Кислов
29.06.2017, 12:28
как побороть сообщение "визуализация <такая-то> не представлена в вашем приложении" (не имеет экземпляров, т.д.)? Всё время была представлена и имела, а тут вдруг типа перестала.

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

GoodLuck
12.07.2017, 14:12
Добрый день!
Подскажите, пожалуйста!

Как мне передать LREAL на ОРС сервер стандартными средствами конфигурации в Codesys 3.5?

Передать LREAL c помощью 4-х WORD'ов почему-то не получается.

Евгений Кислов
12.07.2017, 14:18
Добрый день!
Подскажите, пожалуйста!

Как мне передать LREAL на ОРС сервер стандартными средствами конфигурации в Codesys 3.5?

Передать LREAL c помощью 4-х WORD'ов почему-то не получается.

Добрый день. О каком OPC речь? Вероятно, нужно изменить порядок WORD (возможно, прямо на уровне настройки OPC).

GoodLuck
12.07.2017, 14:36
Добрый день. О каком OPC речь? Вероятно, нужно изменить порядок WORD (возможно, прямо на уровне настройки OPC).

Спасибо, помогло.

Drive74
12.07.2017, 21:06
Добрый день!
Подскажите, пожалуйста!
Такой эффект. При опросе ПЛК304 (на одном порту) двух модулей сначала 8АС затем 16Р все работает замечательно. Но как только вводится таймаут 5-15ms (таймером программно)(см.скрин32045, изменения красным) между опросом первого модуля 8АС и вторым (16Р), управление выходами с 9-го по 16 не представляется возможным. Остальные выхода с 1-го по 8 управляются. На модуль 8АС тайминг ни как не сказывается.
С чем может связана описанное "чудо" и как с ним можно бороться?

RV9WFJ
13.07.2017, 08:05
Вопрос к Евгению Кислову:
Вы в своем примере с RTC использовали следующее объявление переменных:

{attribute 'hide' := ''}
fbGetDateAndTime: DTU.GetDateAndTime;
attribute 'hide' понятно, := '' в данном контексте не понятно.

Евгений Кислов
13.07.2017, 08:11
Вопрос к Евгению Кислову:
Вы в своем примере с RTC использовали следующее объявление переменных:

attribute 'hide' понятно, := '' в данном контексте не понятно.

Это не я использовал, это так сработал экспорт/импорт в PLCOpen XML.

Drive74
13.07.2017, 09:07
capzap, благодарю за ответ.
"Связано можно быть с тем, что не умеете работать с таймером." - Не, не умеем, ни кто не научил, да и мы сами тут плюшками балуемся :)

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

Drive74
13.07.2017, 10:01
capzap, считаю, что тип таймера не является определяющим, т.к. используемый тип таймера TON в данной связке выполняет свои функции и обмен происходит. Ключевое - где можно потерять полслова, если других изменений не вноситься? Спасибо.

Drive74
13.07.2017, 10:17
К сожалению, номера элементов CodeSys выставляет автоматически

Евгений Кислов
13.07.2017, 10:25
К сожалению, номера элементов CodeSys выставляет автоматически

ПКМ на элемент - Порядок выполнения - и можно настроить вручную (или по потоку данных).

Drive74
13.07.2017, 10:35
Евгений, cazap большая Вам благодарность за поддержку. Упорядочил "в соответствии с потоком данных" и заработало. СПАСИБО!

neitwood
14.07.2017, 10:29
Здравствуйте уважаемые форумчане. Нужна ваша помощь. Третий день бьюсь над задачей, никак не могу победить. Нужно подружить ПМ01 с СПК207 в системе CODESYS V3.5 SP5. А конкретнее посылать с СПК207 через ПМ01 смски об авариях в цехе.
В HyperTerminal модем реагирует на AT команды, смс посылает без особых проблем.
В CODESYS же послать какую либо команду даже из библиотеки OwenModemLib не получается. СМСки не отправляет.

В функциональном блоке FB_SMS_CSD выходная переменная Busy всегда равна TRUE. Проверял функцией FB_SMS_CSD.GetModemStatus состояние модема. Выход modemstatus всегда висит в нуле, сообщая о готовности модема.

Порт по всей моей дилетантской видимости открыт. Slave устройство если я правильно понял добавлять к ком порту не нужно. Для того чтобы СПК увидел модем достаточно добавить в проект ком порт и мастер?
Скажите пожалуйста что я делаю не так? Скриншот проекта ниже.
32087

neitwood
14.07.2017, 10:34
Выкладываю файл проекта, если у кого нибудь найдется немножко времени =)

Sulfur
15.07.2017, 19:37
чем может связана описанное "чудо" и как с ним можно бороться?

Вероятно с тем, что Вы используете не то, что надо.
Для ознакомления. (http://www.owen.ru/forum/showthread.php?t=21365&highlight=Mx110)

Использую несколько модулей МУ110-16К, и никогда проблем с ними не испытывал.

Евгений Кислов
15.07.2017, 19:41
Вероятно с тем, что Вы используете не то, что надо.
Для ознакомления. (http://www.owen.ru/forum/showthread.php?t=21365&highlight=Mx110)

Использую несколько модулей МУ110-16К, и никогда проблем с ними не испытывал.

Там же речь о ПЛК304, версия таргета скорее всего ниже версии шаблонов.

OlegLP
22.07.2017, 11:22
Добрый день!
Возможность есть, но потребуется немного доработать Вашу программу.

В приложении Вы найдете пример подсчета количества активных аварий (AlarmsCount.project).
Перенесите в Ваш проект директорию Alarms counter.
Добавьте вызов программы AlarmsCounter_PRG.

Все. Получить количество активных аварий Вы можете из выходной переменной AlarmsCounter_PRG.iAlarmsCount

31715

Алексей, здравствуйте!
Возник такой же вопрос.
При добавлении папки Alarm counter высыпается куча ошибок при компиляции. Чего может не хватать?
CDS 3.5 SP5 СПК107 target 3.5.4.25

RV9WFJ
22.07.2017, 19:07
Библиотеку Alarm Manager Interfaces подключили к проекту?

OlegLP
22.07.2017, 23:35
Да, действительно)) Чувствую же, что чего то не хватает..
Первый проект в Кодесисе, не все освоено еще
П.С. Леонид, будем знакомы. Олег RL6LP

Эдуард_Н
23.07.2017, 07:17
Подскажите как избавится от этих предупреждений32175

SA104
23.07.2017, 07:52
Подскажите как избавится от этих предупреждений32175
Меню Проект---Установки Проекта---- Предупреждения компилятора .
Далее уберите галку у тех предупреждений. которые вам не нужны.

RV9WFJ
23.07.2017, 07:52
Использовать UINT_TO_ INT в тревогах.

Эдуард_Н
23.07.2017, 09:43
Использовать UINT_TO_ INT в тревогах.

Но там нет не INT, UINT32176

LDaneel
25.07.2017, 15:22
Здрасти от новичка.
Гуру, просветите по многозадачности в среде кдс.
Такая ситуация:
В рамках одного приложения есть глобальные данные и несколько таск, которые неким образом беспечно модифицируют эти данные.
По разумному, доступ к данным надо синхронизировать (например средствами SysSemProcess)?
Или (**наивно**) кдс сам настолько умный, что обеспечиваем межтасковую синхронизацию глобальных данных?

Евгений Кислов
25.07.2017, 16:09
Здрасти от новичка.
Гуру, просветите по многозадачности в среде кдс.
Такая ситуация:
В рамках одного приложения есть глобальные данные и несколько таск, которые неким образом беспечно модифицируют эти данные.
По разумному, доступ к данным надо синхронизировать (например средствами SysSemProcess)?
Или (**наивно**) кдс сам настолько умный, что обеспечиваем межтасковую синхронизацию глобальных данных?

См. библиотеку SysSem.

LDaneel
25.07.2017, 16:55
См. библиотеку SysSem.

Евгений, я не спрашивал какую либу смотреть.
Я спросил о возможной скрытой заботе кдс о межтасковой синхронизации глобальных данных, коли уж подразумеваются таски и глобальные данные в рамках одного приложения.
Повторю вопрос: кодесис обеспечивает какую либо СКРЫТУЮ (на подобии скрытого создания и запуска тасков) синхронизацию данных? или все ручками делать?

Евгений Кислов
25.07.2017, 17:44
Никакой "скрытой межтасковой синхронизации" на уровне CODESYS нет.

uni
01.08.2017, 10:09
Про это нигде не написано пока, поэтому показываю как можно делать синхронизацию с использованием ФБ TLocker.

function_block TLocker
var_input
sleepus: ulint := 50;
end_var
var
_sleepus: ulint := 50;
_cnt: caa.count;
_mutex: caa.bolt;
end_var

_sleepus := sleepus;

--------------------
method public Lock

while _mutex.Reserve( _cnt ) do SchedWaitSleep( _sleepus ); end_while;

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

method public UnLock

_mutex.Free();

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

Для использования нужно обернуть доступ к глобальным переменным методами Lock и Unlock:

var
_locker: TLocker;
end_var

_locker.Lock();

// Модифицируем данные.
// ...

_locker.Unlock();

Drive74
10.08.2017, 06:18
Всех приветствую!

Знающие подскажите, пожалуйста.

Имеется ПЛК304[M01]. Работал какое то время, но после неизвестных событий, перестал запускаться. Попытки сбросить к заводскому состоянию или перезалить программу выдавал следующее32550
Пришлось перепрошить ПЛК.
После прошивки удалось залить программу только после установки в Codesys Gateway-2 = IP ПЛК (Gateway-1 localhost - не находит ПЛК . Программа заработала, но пропал обмен с панелью Weintek по UDP протоколу (Ethernet).

Где и куда копать?

дрю
10.08.2017, 15:54
Добрый день! Подскажите пожалуста как на ST написать проверку переменой ,,..если TEMP_1 <800 но >10 то FLAG_1:=0; Не сооброжу какой синтаксис в одном условии проверки 2 констант..

Евгений Кислов
10.08.2017, 15:59
Если прямолинейно - то так.



IF TEMP_1>10 AND TEMP_1<800 THEN
FLAG_1:=0;
END_IF

дрю
10.08.2017, 16:37
Спасибо!!!!!

Drive74
16.08.2017, 11:52
В каких диапазонах для оптимальной работы ПЛК304, должны быть мин.джитер и макс.джитер?32637

Евгений Кислов
16.08.2017, 11:55
В каких диапазонах для оптимальной работы ПЛК304, должны быть мин.джитер и макс.джитер?32637

Каковы критерии оптимальной работы?

Drive74
16.08.2017, 12:03
Каковы критерии оптимальной работы?
Передача данных без задержек.

И вообще, что подразумевается под этими показателями (мин.джитер и макс.джитер) в Кодесис?

Евгений Кислов
16.08.2017, 12:07
Передача данных без задержек.

И вообще, что подразумевается под этими показателями (мин.джитер и макс.джитер) в Кодесис?

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

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

Вероятно, вас заинтересует эта тема:
http://www.owen.ru/forum/showthread.php?t=27201

Drive74
16.08.2017, 12:25
В CDS джиттер - это время между запланированным и фактическим началом выполнения задачи.
Мин. и макс. - это, соответственно, статистические данные. Например, максимальный джиттер в значительном числе случаев наблюдается при старте контролера.

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

Вероятно, вас заинтересует эта тема:
http://www.owen.ru/forum/showthread.php?t=27201

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

Евгений Кислов
16.08.2017, 12:30
Правильно, ли понимаю, что в нашем случае имеет смысл уменьшить время цикла каждой задачи?

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

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

Drive74
16.08.2017, 13:19
Если основным вопросом является передача данных, то лучше смотреть на ее прямые характеристики (отношения числа ошибок к общему числу пакетов, например), а не косвенные (типа джиттера).

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

Хорошо.
Спасибо.

omelchuk
29.08.2017, 12:48
Вопрос начинающего.
Имею массив из 32 двухбайтных значений, получаемый по модбас рту.
Можно-ли при помощи указателей получить две строки по 32 сивола? Без копирования байтов, просто указав строке, что она теперь должна читаться здесь...
Синтаксис меня доканает, а через cfc никак...
VAR
Str_001: STRING(32);
Str_002: STRING(32);
Array_100: ARRAY[0..31] OF WORD;
END_VAR

omelchuk
29.08.2017, 14:16
Спасибо capzap, попробую сейчас.

и эти две строчки вполне можно написать и на cfc
ЗЫ чтоб получить из word байт нужно преобразовать юникодовские символы в кирилицу
В массиве - байты, как ни крути. Они уже привязаны к таблице кодировки символов ASCII. Без кирилицы.
На слэйве я их "упаковываю" в массив Input Regiter через указатель.

P.S. Ещё раз ОГРОМНОЕ СПАСИБО Уважаемому capzap, подправил под себя - всё работает как хотелось!!!

Sulfur
05.09.2017, 14:43
Вопрос:
Что я получу в переменной TimeOut? Секунды? Миллисекунды?
32977

Евгений Кислов
05.09.2017, 15:07
Вопрос:
Что я получу в переменной TimeOut? Секунды? Миллисекунды?
32977

Миллисекунды.

Sulfur
06.09.2017, 09:31
Благодарствую.

kuymba
04.10.2017, 17:39
Добрый день! При компиляции проекта 8 предупреждений и 5 сообщений. Будет ли работать такая программа на ПЛК?
Скриншот прилагается
заранее благодарен


33469

Осинский Алексей
05.10.2017, 08:55
Добрый день! При компиляции проекта 8 предупреждений и 5 сообщений. Будет ли работать такая программа на ПЛК?
Скриншот прилагается
заранее благодарен


33469

Добрый день.
Работать будет. Но компилятор предупреждает Вас, что могут возникнуть проблемы при преобразовании переменной с диапазоном значений 0..65535 в переменную с диапазоном значений -32768..32767.
Если Вы уверены, что In_MVA[x] не будет принимать значения больше, чем 32767, то просто добавьте преобразование WORD_TO_INT так:
Ain1 := WORD_TO_INT(In_MVA[0]);

Если же не уверены, то измените тип AinX с INT на WORD.

Sulfur
05.10.2017, 10:22
kuymba
У меня с такими предупреждениями работает несколько проектов. Но в моем случае значения переменных гарантированно не превышают +-720, поэтому я и не заморачивался на тему ворд_то_инт.

Sulfur
06.10.2017, 14:33
Вопрос:
Как в КДС 3.5 SP5 сделать на кнопке динамический текст в две строки? Собственно как сделать динамический текст я нашел как, но у меня пишет в одну строку, и поэтому текст выходит за границы кнопки. Сама кнопка сделана довольно высокая, хотелось бы, что бы текст был в несколько строк, по крайней мере в две.

capzap
06.10.2017, 14:35
Вопрос:
Как в КДС 3.5 SP5 сделать на кнопке динамический текст в две строки? Собственно как сделать динамический текст я нашел как, но у меня пишет в одну строку, и поэтому текст выходит за границы кнопки. Сама кнопка сделана довольно высокая, хотелось бы, что бы текст был в несколько строк, по крайней мере в две.

$R$N не работают?

Евгений Кислов
06.10.2017, 14:42
Если текст задан через переменную - то Capzap выше ответил, если забиваете вручную (через список текстов, например) - то комбинация Ctrl+Enter для перехода на новую строку.

Sulfur
06.10.2017, 15:04
Спасибо! Помогло Ctrl+Enter в списке текстов.

Dmitro
10.10.2017, 09:55
Есть элемент "управление вращением", представляющий собой поле с двумя стрелками вверх и вниз,
как ограничить чтобы нельзя было уменьшать меньше 0 и больше 100 ? Настроек в элементе таких нет.

Евгений Кислов
10.10.2017, 10:12
Есть элемент "управление вращением", представляющий собой поле с двумя стрелками вверх и вниз,
как ограничить чтобы нельзя было уменьшать меньше 0 и больше 100 ? Настроек в элементе таких нет.

В 3.5 SP5 Patch5 таких настроек действительно нет - они появились в более поздних версиях среды.

Ограничить можно только через обработку введенного значения в программе.

Tera
12.10.2017, 07:54
Здравствуйте. Как можно склеить строки WSTRING? Оператором CONCAT не получается.

Евгений Кислов
12.10.2017, 07:58
Здравствуйте. Как можно склеить строки WSTRING? Оператором CONCAT не получается.

Библиотека Standard64, функция WCONCAT.

Tera
12.10.2017, 10:05
Библиотека Standard64, функция WCONCAT.

Спасибо за ответ.

Dmitro
22.10.2017, 18:29
СПК110, обновил прошивку с 3.9хх до 5.ххх.
Установил последние таргеты и библиотеки.

Имею следующую ошибку

https://drive.google.com/file/d/0B6f7PZsS9aWfdThHLVNhSFluMFU/view?usp=sharing

Обновленная библиотека запрашивает более старую версию Standard?
(у меня Standard 3.5.5.0, с прошивкой 3.9хх работала нормально, с новой прошивкой/таргетами/либами - нет)

Евгений Кислов
22.10.2017, 18:51
СПК110, обновил прошивку с 3.9хх до 5.ххх.
Установил последние таргеты и библиотеки.

Имею следующую ошибку

https://drive.google.com/file/d/0B6f7PZsS9aWfdThHLVNhSFluMFU/view?usp=sharing

Обновленная библиотека запрашивает более старую версию Standard?
(у меня Standard 3.5.5.0, с прошивкой 3.9хх работала нормально, с новой прошивкой/таргетами/либами - нет)

Установите архив репозитория (ссылки в подписи).

Dmitro
22.10.2017, 19:24
Спасибо! Проблема решилась!

Остались такие ошибки
https://drive.google.com/file/d/0B6f7PZsS9aWfOGs1V3dIeHRJY0k/view?usp=sharing

При нажатии "создать загрузочное приложение" - окно слева на изображении.

При запуске на контроллере - EXCEPTIONS (ошибки в журнале справа на изображении).

Помогите, срочный проект, не хочется откатывать прошивку и все назад и потратить ночь(

Евгений Кислов
22.10.2017, 19:26
Попробуйте выполнить команды Очистить все и Перекомпиляция.

Dmitro
22.10.2017, 19:41
Попробуйте выполнить команды Очистить все и Перекомпиляция.

Не помогает.
Заметил в списке библиотек SPK_Drivers с выделяющейся версией 3.5.7.10 (остальные не выше 3.5.5), может в ней проблема? Поставить версию ниже нельзя.

И еще такие ошибки неизвестно чего
https://drive.google.com/file/d/0B6f7PZsS9aWfRUpBMGxKNmFUYXc/view?usp=sharing

Стоит ли прошить назад на 3.9хх, переустановить Кодесис, библиотеки, таргеты?

Евгений Кислов
22.10.2017, 19:51
Проблема не в версии SPK_Drivers. Отправьте архив вашего проекта (Файл - Сохранить архив) мне на почту, пожалуйста - завтра утром посмотрю.

Роман Усатов
02.11.2017, 01:42
привет!

принял на обслуживание поступили плк304 - проекты передали на флешке - но среду на ноуте не установили ... поставил сам

при первом открытии проекта-архива - выпали ошибки: https://cdn1.savepice.ru/uploads/2017/11/2/565e6f7887c5dda9ebe1508670575a8e-full.jpg (https://perfetto-furniture.com/) дмитрий колесник тако (http://news.eizvestia.com/news-markets/full/2609-dmitrij-kolesnik-reshil-pokorit-agrosektor)

что не так с установкой - куда копать?

Роман Усатов
02.11.2017, 13:36
проблема:

на обслуживание попадают плк304
проекты подрядчик передал
среду не успели поставить . ставил сам

codesys 3.5 c Вашего сайта = поставил
связь с плк304 = настроил
из плк304 проект считать = по чему-то не удалось

при открытии проекта из архива, высыпало кучю ошибок:
33967

что где когда - пошло не так?

RV9WFJ
02.11.2017, 13:49
Скорее всего проект создан в более новой версии чем у Вас. Жалуется что не может библиотек таких найти.

Dmitro
02.11.2017, 20:09
Проект компилировался и загружался ОК.
На каком-то этапе стало появляться суперинформативное сообщение "Object reference not set to an instance of an object".
Из-за которого загрузить проект в ОЗУ можно, а во флэш уже никак нельзя.
Помогите, проект горит.

Dmitro
02.11.2017, 20:19
Кириллица в имени одного из каталогов, где лежат картинки проекта...

Yury Evgenev
03.11.2017, 07:49
Здравствуйте!
Помогите разобраться. Настроил опрос прибора по Modbus через конфигурацию для ПЛК304. CS3 не может скомпилировать. Что не так? Может версии библиотек не правильные?
33972
Версия CODESYS V3.5 SP5 Patch 5

Евгений Кислов
03.11.2017, 07:53
Здравствуйте!
Помогите разобраться. Настроил опрос прибора по Modbus через конфигурацию. CS3 не может скомпилировать. Что не так? Может версии библиотек не правильные?
33972

Добрый день.

1. Обновите таргет файл (и, при необходимости, прошивку)
http://www.owen.ru/catalog/codesys_v3/32050189

2. Установите архив репозитория (ссылка в подписи)

Yury Evgenev
03.11.2017, 10:45
Добрый день.

1. Обновите таргет файл (и, при необходимости, прошивку)
http://www.owen.ru/catalog/codesys_v3/32050189

2. Установите архив репозитория (ссылка в подписи)
Спасибо за отклик. А нужно этот репозиторий как то конфигурировать в самой среде после установки? Всё равно не могу скомпилировать.
Прошивку я обновлял: OWEN-20150608-3949
Таргет скачал с сайта и переустановил.

Евгений Кислов
03.11.2017, 10:54
Репозиторий конфигурировать не нужно.
Таргет-файл в проекте вы обновили?

Yury Evgenev
03.11.2017, 11:09
Таргет-файл в проекте вы обновили?
Device -> обновить устройство. Пробовал всёчто касается ПЛК304. Ничего не получается.
33973

UPD. Попробовал открыть проект, который создавался 4 года назад в версии codesys 3.4. Заработал. Попробую найти разницу.
UPD 2. Версии Modbus Master, COM port расходятся.
Раньше была 3.4.1.2 и всё работает.
Теперь предлагает версию 3.5.5.0 и не компилирует. Не подскажите, можно ли где-нибудь достать достать старую версию этого устройства?

Евгений Кислов
03.11.2017, 11:21
Device -> обновить устройство. Пробовал всёчто касается ПЛК304. Ничего не получается.
33973

Есть возможность предоставить удаленное подключение по TeamViewer?

Yury Evgenev
03.11.2017, 12:00
Да. Есть такая возможность. Написать Вам на почту?

Евгений Кислов
03.11.2017, 12:03
Да. Есть такая возможность. Написать Вам на почту?

Да, или в skype.

Dmitro
05.11.2017, 14:19
Очень много драгоценного времени забирает "соединение с контроллером" (СПК110, прошивка крайняя).

1. При соединении кабелем компа и контроллера иногда сразу, иногда 1-3 минуты идет процесс "идентификация в сети".
2. Gateway не удается подключить в течение 3-10 минут, потом он вдруг самопроизвольно "зеленеет" и коннектится.
3. Связь с gateway сама собой пропадает.
4. При соединении с gateway пропадает обычный Интернет.

Как можно с этим бороться?
На этих задержках сгорает уйма времени.

Евгений Кислов
05.11.2017, 14:48
Вы виртуальный адаптер настроили? Адрес 10.0.6.1, маска 255.255.0.0.

Роман Усатов
07.11.2017, 17:06
проблема:

на обслуживание попадают плк304
проекты подрядчик передал
среду не успели поставить . ставил сам

codesys 3.5 c Вашего сайта = поставил
связь с плк304 = настроил
из плк304 проект считать = по чему-то не удалось

при открытии проекта из архива, высыпало кучю ошибок:
33967

что где когда - пошло не так?

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

что делать?

Евгений Кислов
07.11.2017, 19:17
Есть возможность выложить архив проекта? (Файл - Сохранить архив проекта)

SA104
14.11.2017, 11:37
Добрый день.
Подскажите, в какой библиотеке Codesys 3 , находятся элементы сравнения вещественных чисел - на большее, на равенство и как они называются?

Роман Усатов
14.11.2017, 20:34
проблема:

на обслуживание попадают плк304
проекты подрядчик передал
среду не успели поставить . ставил сам

codesys 3.5 c Вашего сайта = поставил
связь с плк304 = настроил
из плк304 проект считать = по чему-то не удалось

при открытии проекта из архива, высыпало кучю ошибок:
33967

что где когда - пошло не так?

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

что делать?

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

http://i.piccy.info/i9/f9ffe09a7e35a3df2b664e37a73432cb/1510680989/7171/1196688/image001_240.jpg (http://piccy.info/view3/11778070/08120e7a42a4a202a4ed9b9fb7b4e2f7/)http://i.piccy.info/a3/2017-11-14-17-36/i9-11778070/240x156-r/i.gif (http://i.piccy.info/a3c/2017-11-14-17-36/i9-11778070/240x156-r)


Спасибо!

Dmitro
15.11.2017, 23:04
Вы виртуальный адаптер настроили? Адрес 10.0.6.1, маска 255.255.0.0.

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

Нужно ли в настройках "виртуального адаптера овен", там, где только адрес можно поставить и только, ставить 10.0.6.1?
Спасибо

Евгений Кислов
16.11.2017, 06:56
Сначала контроллер находится, все ок.
Когда нажимаю "онлайн", гейтвей отваливается. И так раз 5 повторил, результат одинаковый.
Кабель "прохудился"? Помехи?

Нужно ли в настройках "виртуального адаптера овен", там, где только адрес можно поставить и только, ставить 10.0.6.1?
Спасибо

Да, нужно.

Dmitro
16.11.2017, 21:43
Да, нужно.

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

SA104
17.11.2017, 07:07
Аналогичная ситуация была на СПК207 с неправильной версией таргета.
Даже прошивка слетала . Поставьте актуальную версию таргета.

oleg1821
20.11.2017, 06:40
Не скачивается документация на Codesys 3. Как скачать?

Евгений Кислов
20.11.2017, 07:01
Не скачивается документация на Codesys 3. Как скачать?

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

Upd. - фтп починили.