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

Евгений Кислов
24.02.2023, 12:27
Привет.
Подскажите, существует ли функция, которая собирает значение DWORD из 4-х отдельных байт в принимаемом массиве, наподобие этой:



MEM.MemMove(pSource:=ADR(arrReceive[10]), pDestination:=ADR(dwValue), uiNumberOfBytes:=4); // Забираем готовое значение


Но! Которая собирает их старшим байтом вперед?

Или может быть проще как-то собрать это самостоятельно поэлементно так:



dwValue := arrReceive[13] + (arrReceive[12] *256) + (arrReceive[11] *256*256) + (arrReceive[10] *256*256*256); // Забираем готовое значение


Спасибо.

А то китайцы - такие китайцы - умудрились в своих железках сделать передачу задом на перед...
https://aliexpress.ru/item/1005003380449974.html

Добрый день.
https://content.helpme-codesys.com/en/libs/CAA%20Memory/Current/CAA_Memory/Packing/PackBytesToDword.html

Newcomer
24.02.2023, 13:29
Нет, такой необходимости нет.
Видимо, у вас на уровне конфигурации системы есть какая-то специфика, которая не дает CODESYS корректно завершить установку.
Уточните, у вас ОС 32-битная или 64-битная?
Что можно попробовать сделать, на мой взгляд:
- установить свежую версию CODESYS Installer (https://disk.yandex.ru/d/aHZZq9xR11s3Hw) и установить CODESYS через него (потребуется подключение к интернету через VPN);
- установить CODESYS на виртуальной машине

Установил на диск D. Это допустимо ? Но сам процесс установки очень длительный, это и сбивало с толку.

Евгений Кислов
24.02.2023, 13:37
Установил на диск D. Это допустимо ? Но сам процесс установки очень длительный, это и сбивало с толку.

Да, допустимо.

sco-scorpion
25.02.2023, 02:20
Доброго времени суток.
Возникла проблема в написании программы по включению одной кнопки.
При написании на языке LAD программа отрабатывает нормально, при попытке написать на языке ST переменные bAuto_Perem, bAuto_Out начинаются перемигиваться.
В чем может быть проблема?

capzap
25.02.2023, 08:52
Доброго времени суток.
Возникла проблема в написании программы по включению одной кнопки.
При написании на языке LAD программа отрабатывает нормально, при попытке написать на языке ST переменные bAuto_Perem, bAuto_Out начинаются перемигиваться.
В чем может быть проблема?

потому что условие в ST лишнее, в LD когда импульс прошел переменной bAuto_Perem всегда фальш присваивается, а в ST она не меняет состояние если условие не выполняется.
Запусите проект пошагово и увидите кому когда что присваивается в обоих случаях
наверное нужно записать bAuto_Perem:= R_TRIG_AUTO.Q;

kondor3000
25.02.2023, 12:55
Доброго времени суток.
Возникла проблема в написании программы по включению одной кнопки.
При написании на языке LAD программа отрабатывает нормально, при попытке написать на языке ST переменные bAuto_Perem, bAuto_Out начинаются перемигиваться.
В чем может быть проблема?

весь код пишется в 2 строки

R_TRIG_Avto (CLK:=bAvto , Q=>bAvto_Perem );
bAvto_Out:=bAvto_Perem XOR bAvto_Out ;

sco-scorpion
25.02.2023, 14:32
Спасибо за помощь.

Newcomer
25.02.2023, 17:27
Добрый день

Установил CODESYS на диск D, установил таргеты ОВЕН. Создаю проект и не вижу в Категориях никаких таргетов. Как это понимать ?

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

Установил CODESYS на диск D, установил таргеты ОВЕН. Создаю проект и не вижу в Категориях никаких таргетов.

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

Newcomer
25.02.2023, 17:35
Добрый день.
Выложите ссылку на таргеты, которые вы установили.

https://owen.ru/product/codesys_v3/software

Евгений Кислов
25.02.2023, 17:41
https://owen.ru/product/codesys_v3/software

Это ссылка на таргеты очень старых контроллеров (СПК207 и т.п.).
В то время мы еще не делали шаблоны проектов (а судя по вашему скрину - вы ожидали увидеть именно их).
Какой именно контроллер вы собираетесь программировать?

Newcomer
25.02.2023, 17:43
Это ссылка на таргеты очень старых контроллеров (СПК207 и т.п.).
В то время мы еще не делали шаблоны проектов (а судя по вашему скрину - вы ожидали увидеть именно их).
Какой именно контроллер вы собираетесь программировать?

СПК107. Никаких других ссылок на таргет файлы нет.

Евгений Кислов
25.02.2023, 17:47
СПК107. Никаких других ссылок на таргет файлы нет.

У вас СПК107 с Ethernet или без?

Newcomer
25.02.2023, 17:52
У вас СПК107 с Ethernet или без?

Один с Ethernet, другой без Ethernet.

Евгений Кислов
25.02.2023, 17:57
Один с Ethernet, другой без Ethernet.

Тот, который с Ethernet - это СПК1хх [М01].
Для него потребуется свой таргет-файл, зависящий от версии прошивки.
Используйте выбиратор ("Поиск нужных версий ПО"):
https://owen.ru/product/codesys_v3/sreda_programirovaniay

Для СПК без Ethernet - я рекомендую установить CODESYS V3.5 SP5 Patch 5 и архив репозитория (ссылка в подписи), и программировать этот старый СПК в нем.
Таргет-файлы для этого СПК вы уже установили.

Newcomer
25.02.2023, 20:08
Почему не удаляется таргет-файл из CODESYS V3.5 SP17 Patch 3 ?

Евгений Кислов
25.02.2023, 20:12
Почему не удаляется таргет-файл из CODESYS V3.5 SP17 Patch 3 ?

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

Newcomer
25.02.2023, 20:16
По скрину сложно сказать.
Но удалять их смысла нет.
Вы сможете использовать их в любой версии CODESYS, а не только в той, в которой установили.

Эта картинка появляется и висит до бесконечности. Таргет не удаляется. Зачем нужен этот таргет в CODESYS V3.5 SP17 Patch 3. Я его установил по незнанию и теперь не могу удалить.

При попытке удаления сперва выскакивает такое сообщение.

Евгений Кислов
25.02.2023, 20:38
Зачем нужен этот таргет в CODESYS V3.5 SP17 Patch 3

Таргеты не привязаны к версиям CODESYS.
Вы сможете использовать их в любой версии CODESYS, а не только в той, в которой установили.
Т.е. когда вы установите V3.5 SP5 Patch 5 - то сможете и в нем использовать эти таргеты.
Поэтому я не понимаю, почему вы так настойчиво хотите его удалить.

sco-scorpion
26.02.2023, 00:52
Подскажите, правильный я выбрал функциональный блок (OCL.MB_SerialRequest) для подачи команды на запуск ПЧ AFD-E и выбора настроек:


fbMbSerialRequest.usiSlaveId := 15;
fbMbSerialRequest.eFuncCode := OCL.MB_FC.WRITE_SINGLE_COIL;
fbMbSerialRequest.uiDataAddr := 4864;
fbMbSerialRequest.uiDataCount := 22;

4864 - Это командное слово к которому обращаемся
а 22 - это старт и собирается из битов, как я понял (0001 0110)

Алексей81
26.02.2023, 02:35
Здравствуйте. В Овен Logic вер. 2.3.320.0, отсутствует "таймер реального времени"?66163

Сергей0308
26.02.2023, 03:54
Здравствуйте. В Овен Logic вер. 2.3.320.0, отсутствует "таймер реального времени"?66163

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

66165

Евгений Кислов
26.02.2023, 08:41
Подскажите, правильный я выбрал функциональный блок (OCL.MB_SerialRequest) для подачи команды на запуск ПЧ AFD-E и выбора настроек:


fbMbSerialRequest.usiSlaveId := 15;
fbMbSerialRequest.eFuncCode := OCL.MB_FC.WRITE_SINGLE_COIL;
fbMbSerialRequest.uiDataAddr := 4864;
fbMbSerialRequest.uiDataCount := 22;

4864 - Это командное слово к которому обращаемся
а 22 - это старт и собирается из битов, как я понял (0001 0110)

Надо так:




fbMbSerialRequest.usiSlaveId := 15;
fbMbSerialRequest.eFuncCode := OCL.MB_FC.WRITE_SINGLE_REGISTER;
fbMbSerialRequest.uiDataAddr := 4864;
fbMbSerialRequest.uiDataCount := 1;
fbMbSerialRequest.pData := ADR(wCmdWord);
fbMbSerialRequest.szSize := SIZEOF(wCmdWord);



где wCmdWord - переменная типа WORD, которая имеет значение 22.

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

https://owen.ru/forum/showthread.php?t=27889

66167

sco-scorpion
26.02.2023, 12:55
Вы уверены, что вам нужно настраивать опрос именно через библиотеку?
Может, будет проще воспользоваться готовым шаблоном, добавляемым в дерево проекта?



Если я правильно понимаю то для запуска нужно установить значение в TRUE (bool), таким способом я пробовал запустить и не получилось
Соединение с ПЧ настроилось нормально, в самом ПЧ установлен F0.3.33 -2 . Может еще надо какие-то параметры выставить?

Newcomer
26.02.2023, 12:59
Добрый день

Можно ли поменять размер шрифта в редакторе ST ?

Евгений Кислов
26.02.2023, 13:43
Добрый день

Можно ли поменять размер шрифта в редакторе ST ?

Добрый день.
Инструменты - Опции - Текстовый редактор - Текстовая область - Шрифт

Newcomer
26.02.2023, 14:30
Добрый день.
Инструменты - Опции - Текстовый редактор - Текстовая область - Шрифт

Как все просто. Спасибо.

Newcomer
26.02.2023, 16:46
Не могу найти ФБ BLINK. Какую библиотеку надо установить ?

Евгений Кислов
26.02.2023, 16:51
Не могу найти ФБ BLINK. Какую библиотеку надо установить ?

Util.
Ее не надо устанавливать - просто добавьте ее в Менеджер библиотек.

Newcomer
26.02.2023, 17:16
Добавил Util. В ассистенте не вижу BLINK.

Евгений Кислов
26.02.2023, 17:22
Выложите ваш проект - посмотрим, в чем у вас дело.

66174

Newcomer
26.02.2023, 17:37
Выложите ваш проект - посмотрим, в чем у вас дело.

66174

Проект......

Евгений Кислов
26.02.2023, 18:13
В нем тоже не вижу проблем.
Проверьте, что вы для вызова ассистента нажимаете именно в то место, куда нужно.

66178

Newcomer
26.02.2023, 18:49
С BLINK разобрался. А где в проекте объявляются глобальные переменные ?

Евгений Кислов
26.02.2023, 19:09
С BLINK разобрался. А где в проекте объявляются глобальные переменные ?

ПКМ на Applicaton - Добавление объекта - Список глобальных переменных

Newcomer
26.02.2023, 19:17
ПКМ на Applicaton - Добавление объекта - Список глобальных переменных

Спасибо. На сегодня, пожалуй, все.

Newcomer
27.02.2023, 14:04
Добрый день

Почему в Ассистенте ввода нет перечня глобальных переменных ?

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

Почему в Ассистенте ввода нет перечня глобальных переменных ?

Добрый день.
Выкладывайте ваш проект, посмотрим.

Godlike_S
27.02.2023, 14:45
Доброго времени суток!
Столкнулся с неожиданной для себя проблемой: имеем СПК с некой программой диспетчеризации и большим набором всевозможных тревог, соответственно когда тревог становится много, на таргет-визуализации возникает полоса прокрутки, которая позволяет прокручивать экран для поиска нужной информации (то же самое происходит и в истории). Но вот незадача, в WEB-визуализации полоса прокрутки не появляется, соответственно невозможно посмотреть ситуации, которые не поместились в окно менеджера тревог. Данную ситуацию наблюдал в SP14, но теперь наблюдаю и в SP17... Это баг такой или я что то делаю слегка неверно?

66201

66200

Cs-Cs
27.02.2023, 15:26
Godlike_S Попробуй зайти на визуализацию по ссылке, в которой параметром указано так:
http://nnn.nnn.nn.nnn:8080/index.htm?CFG_TouchHandlingActive=False
Это отключает режим тачскрина, и полосы прокрутки появляются. У меня так работает.

Godlike_S
27.02.2023, 16:14
Godlike_S Попробуй зайти на визуализацию по ссылке, в которой параметром указано так:
http://nnn.nnn.nn.nnn:8080/index.htm?CFG_TouchHandlingActive=False
Это отключает режим тачскрина, и полосы прокрутки появляются. У меня так работает.

Шаман, спасибо! Работает :D

P.S. Кстати это можно в CodeSys оказывается настроить, не обращал внимания даже...
66202

P.S.S. Кстати если галочка не стоит, то можно ткнуть пальцем в дисплей (если он конечно сенсорный, у меня например моноблок) и прокручивать журнал удерживая палец :rolleyes:

Cs-Cs
27.02.2023, 16:48
Godlike_S Это Евгению Кислову надо спасибо! Он меня научил! =)
Эта галочка появилась наверное в SP17. А я прогал на SP14, и там этого не было - вот и надо было программно настраивать верхню галочку, которая раньше влияла на то и другое.

Godlike_S
27.02.2023, 17:15
Godlike_S Это Евгению Кислову надо спасибо! Он меня научил! =)
Эта галочка появилась наверное в SP17. А я прогал на SP14, и там этого не было - вот и надо было программно настраивать верхню галочку, которая раньше влияла на то и другое.

Евгению вообще огромный респект! Фанат своего дела :cool:

Newcomer
28.02.2023, 11:46
Добрый день

Правильно я понимаю, что для объявления глобальных RETAIN-переменных надо создать отдельную область ? У меня в проекте это GVL_1.

Евгений Кислов
28.02.2023, 11:54
Добрый день

Правильно я понимаю, что для объявления глобальных RETAIN-переменных надо создать отдельную область ? У меня в проекте это GVL_1.

Добрый день.
Нет, это не обязательно - можно в одном списке глобальных переменных объявлять и VAR RETAIN, и обычные энергозависимые VAR.

Cs-Cs
28.02.2023, 11:56
Правильно я понимаю, что для объявления глобальных RETAIN-переменных надо создать отдельную область ? У меня в проекте это GVL_1.
Не совсем ясен вопрос. Главное, чтобы это был список глобальных переменных - тогда они глобальными и будут.
А так возможны варианты:
а) Просто список всех глобальных переменных, которые внутри сгруппированы как VAR, VAR_CONSTANT, VAR_RETAIN.
Однако для PERSISTENT удобнее завести один список.
б) Несколько глобальных списков со своими названиями, удобными для проекта (у меня, например, это VarsIO, VarsConstant, VarsVisual, VarsSettings - по ним сразу ясно, где что лежит)

Newcomer
28.02.2023, 12:11
Добрый день.
Нет, это не обязательно - можно в одном списке глобальных переменных объявлять и VAR RETAIN, и обычные энергозависимые VAR.

А так не получается.

Евгений Кислов
28.02.2023, 12:12
А так не получается.

Продемонстрируйте это скриншотом.

Newcomer
28.02.2023, 12:15
Продемонстрируйте это скриншотом.

Продемонстрировал.

Евгений Кислов
28.02.2023, 12:20
Продемонстрировал.

Замените VAR RETAIN на VAR_GLOBAL RETAIN

Newcomer
28.02.2023, 12:21
в блоке глобальных данных установили раздел глобальных данных(масло масленное), удалите и проверте исчезнет ли краснота, справку откройте на всякий случай

Ничего я сам не устанавливал. Это шаблон.

Newcomer
28.02.2023, 12:23
Замените VAR RETAIN на VAR_GLOBAL RETAIN

А вот это в точку. Спасибо.

capzap
28.02.2023, 12:25
Ничего я сам не устанавливал. Это шаблон.

66217со справки начинайте всегда искать причины

Newcomer
28.02.2023, 12:56
66217со справки начинайте всегда искать причины

Золотые слова.

RomeoVar
28.02.2023, 14:12
Добрый день знатокам!
Работаю над реализацией функционального блока для взаимодействия с сервоприводом. Сервоприводов будет несколько но не суть.
В проекте использую OwenCommunication обмен данными идет по шине Modbus RS485
На данный момент обмен реализовал через стек, в стек загружаются данные. примерно так:

fbComControl : OCL.COM_Control;
fbSerialRequest : OCL.MB_SerialRequest;
hCom : OCL.CAA.HANDLE;

fbComControl
(
xEnable := TRUE,
udiComPort := 1,
udiBaudRate := 115200,
udiByteSize := 8,
eParity := OCL.COM_PARITY.NONE,
eStopBit := OCL.COM_STOPBIT.ONE,
hCom => hCom
);


fbSerialRequest
(
xExecute := TRUE,
hCom := hCom,
tTimeout := T#100MS,
usiRetry := 3,
xIsAsciiMode:= FALSE,
usiSlaveId := fbAxisDrives[iAxisIndex].usiSlaveId,
eFuncCode := fbAxisDrives[iAxisIndex].stStack.eFuncCode,
uiDataAddr := fbAxisDrives[iAxisIndex].stStack.uiDataAddr,
uiDataCount := fbAxisDrives[iAxisIndex].stStack.uiDataCount,
pData := fbAxisDrives[iAxisIndex].stStack.pData,
szSize := fbAxisDrives[iAxisIndex].stStack.szSize
);

Все в таком виде вполне работоспособно, но!!! Не очень эстетично. Я бы хотел инкапсулировать OCL.MB_SerialRequest; в функциональный блок взаимодействия с устройством. Но в таком случае получается что будет запущено несколько экземпляров OCL.MB_SerialRequest; используя один и тот-же OCL.CAA.HANDLE; для Com-порта.
Допустимо ли такое?

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

Заранее признателен за консультацию

Евгений Кислов
28.02.2023, 14:16
Добрый день.


Допустимо ли такое?

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


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

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

RomeoVar
28.02.2023, 15:01
Если вы напишите арбитр, который будет контролировать, что в каждый момент времени вызывается только один из экземпляров вашего ФБ - то да.

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

Я же могу в своем ФБ выставлять флаг Com занят/свободен. если свободен, другой экземпляр моего ФБ может начать передачу и выставить флаг Занят до окончатия приема/передачи. Ведь так?

Но все-же как же это в документации правильно интерпретировать?

8.2 Ограничения, связанные с библиотекой CAA AsyncManager
Библиотеки, включающие в себя асинхронно выполняемые функциональные блоки (к таким
библиотекам, например, относятся CAA SerialCom, CAA NetBaseServices, CAA File и др.),
используют в своей реализации библиотеку CAA AsyncManager.
Данная библиотека имеет следующее ограничение: в каждый момент времени (в пределах
одного цикла контроллера) в программе может вызываться не более 20 экземпляров
асинхронно выполняемых функциональных блоков.

Евгений Кислов
28.02.2023, 15:55
Я же могу в своем ФБ выставлять флаг Com занят/свободен. если свободен, другой экземпляр моего ФБ может начать передачу и выставить флаг Занят до окончатия приема/передачи. Ведь так?

Безусловно, в своем коде вы можете делать всё, что считаете нужным.


Но все-же как же это в документации правильно интерпретировать?

Именно так, как написано. В документации этому моменту посвящена целая страница, на которой приведены конкретные примеры.

sco-scorpion
03.03.2023, 02:01
Подскажите, с чем может быть связана ошибка? Скриншот делался без подключения к ПЧ, также эта ошибка высвечивается если виртуальным контроллером подключиться к реальному ПЧ и связь установлена (зеленые стрелочки).

Евгений Кислов
03.03.2023, 06:22
Подскажите, с чем может быть связана ошибка? Скриншот делался без подключения к ПЧ, также эта ошибка высвечивается если виртуальным контроллером подключиться к реальному ПЧ и связь установлена (зеленые стрелочки).

Добрый день.
Какой у вас номер порта выбран в узле Modbus COM? Тоже 1? У ПК точно есть COM-порт с таким номером?

thecatvlz
03.03.2023, 11:06
Добрый день. Прошу помощи в поиске путей решения следующей задачи:
Есть некоторое оборудование, производящее изделия, т.е. процесс работы не непрерывный. Требуется выводить на печать на внешний ПК (для этой машины он предусмотрен отдельный) графики параметров работы - температуры, давления, технологических настроек и т.п. для конкретных изделий.
Я представляю это примерно так - по запуску цикла работы оборудования запускается архивирование, по завершению - останавливается. Вероятнее всего с сохранением в отдельный файл, очень желательно и график, и таблица. При необходимости оператор каким-либо образом должен иметь возможность найти данные по конкретному изделию и распечатать по нему отчет. Идентификатор изделия наверное должен и быть теми данными, по которым осуществляется поиск файла архива или же поиск в базе данных
Планирую использовать, скорее всего, СПК107. Возможно ли реализовать подобный режим архивирования? Или же нужно применить какую-либо SCADA? если второй вариант, то какую именно? Или же существует некоторое готовое решение в виде отдельного архиватора, позволяющее такое реализовать?
Если пишу не в той теме, прошу указать, где лучше разместить вопрос

Евгений Кислов
03.03.2023, 11:12
Добрый день. Прошу помощи в поиске путей решения следующей задачи:
Есть некоторое оборудование, производящее изделия, т.е. процесс работы не непрерывный. Требуется выводить на печать на внешний ПК (для этой машины он предусмотрен отдельный) графики параметров работы - температуры, давления, технологических настроек и т.п. для конкретных изделий.
Я представляю это примерно так - по запуску цикла работы оборудования запускается архивирование, по завершению - останавливается. Вероятнее всего с сохранением в отдельный файл, очень желательно и график, и таблица. При необходимости оператор каким-либо образом должен иметь возможность найти данные по конкретному изделию и распечатать по нему отчет. Идентификатор изделия наверное должен и быть теми данными, по которым осуществляется поиск файла архива или же поиск в базе данных
Планирую использовать, скорее всего, СПК107. Возможно ли реализовать подобный режим архивирования? Или же нужно применить какую-либо SCADA? если второй вариант, то какую именно? Или же существует некоторое готовое решение в виде отдельного архиватора, позволяющее такое реализовать?
Если пишу не в той теме, прошу указать, где лучше разместить вопрос

Добрый день.
Оператор работает с экраном СПК или через web-визуализацию?

sco-scorpion
03.03.2023, 11:16
Добрый день.
Какой у вас номер порта выбран в узле Modbus COM? Тоже 1? У ПК точно есть COM-порт с таким номером?

Ком порт получается через преобразователь интерфеса АС4-М и да это 1.

Евгений Кислов
03.03.2023, 11:17
Ком порт получается через преобразователь интерфеса АС4-М и да это 1.

Тогда у вас ошибка из-за конфликта доступа - один и тот же COM-порт пытается открыть и компонент в дереве проект, и блок в вашем коде.

sco-scorpion
03.03.2023, 11:26
Тогда у вас ошибка из-за конфликта доступа - один и тот же COM-порт пытается открыть и компонент в дереве проект, и блок в вашем коде.
Не совсем понял что надо делать, из дерева проекта удалить подключение оборудование Ком порта?

Евгений Кислов
03.03.2023, 11:51
Не совсем понял что надо делать, из дерева проекта удалить подключение оборудование Ком порта?

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

sco-scorpion
03.03.2023, 16:27
один и тот же COM-порт пытается открыть и компонент в дереве проект, и блок в вашем коде.
Спасибо, удалось подключиться, теперь возникла проблема с отправкой команды:
при отправки команды на запуск (22) ПЧ никак не реагирует, может еще что-то надо передать?

Евгений Кислов
03.03.2023, 16:53
Спасибо, удалось подключиться, теперь возникла проблема с отправкой команды:
при отправки команды на запуск (22) ПЧ никак не реагирует, может еще что-то надо передать?

Напишите этот вопрос на support@owen.ru, пожалуйста - вас проконсультируют по настройке AFD-E для управления по интерфейсу.
Но навскидку - функцию надо выбрать WRITE_SINGLE_REGISTER.

https://owen.ru/forum/showthread.php?t=20069&p=402051&viewfull=1#post402051

thecatvlz
03.03.2023, 19:43
Добрый день.
Оператор работает с экраном СПК или через web-визуализацию?
Управление/настройка установки планируется с экрана, работа с отчетами - с ПК

Евгений Кислов
03.03.2023, 19:56
Управление/настройка установки планируется с экрана, работа с отчетами - с ПК

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

sco-scorpion
03.03.2023, 21:17
Напишите этот вопрос на support@owen.ru, пожалуйста - вас проконсультируют по настройке AFD-E для управления по интерфейсу.
Я писал по поводу Com-порта и до сих пор ответа нету, только Вы ответили.


Но навскидку - функцию надо выбрать WRITE_SINGLE_REGISTER.

https://owen.ru/forum/showthread.php?t=20069&p=402051&viewfull=1#post402051
с этой функцией не работает, при опросе в Owen OPC Server используется WRITE_MULTIPLE_REGISTERS и меня смущает параметр xDone, если я правильно понимаю при правильной записи должен принять TRUE. И в Owen OPC Server есть параметр включен в работу, может в коде надо еще что-то передать?

Евгений Кислов
03.03.2023, 21:26
Можно и WRITE_MULTIPLE_REGISTERS использовать, но по документации - WRITE_SINGLE_REGISTER тоже подходит.
Судя по новым скриншотам - у вас блок нигде не вызывается.
Для вызова надо в строке 42 (указал ее для примера) сделать так:



fbMbSerialRequest();



После этого наблюдайте за значениями выходов ФБ.
Я ведь правильно понимаю, что значение eState вы пока вручную для отладки меняете, а не пытаетесь им манипулировать где-то в коде, который не попал на скриншоты?

sco-scorpion
03.03.2023, 22:08
Можно и WRITE_MULTIPLE_REGISTERS использовать, но по документации - WRITE_SINGLE_REGISTER тоже подходит.
Судя по новым скриншотам - у вас блок нигде не вызывается.
Для вызова надо в строке 42 (указал ее для примера) сделать так:

Выкладываю код, в этом виде ПЧ запускается на 1с, не у верен что правильно поставил fbMbSerialRequest() и хотелось бы понять куда правильнее его установить.


//Проверка привода на готовоность
fbComControl1
(
xEnable := TRUE,
udiComPort := 5,
udiBaudrate := 9600,
udiByteSize := 8,
eParity := OCL.COM_PARITY.NONE,
eStopBit := OCL.COM_STOPBIT.ONE
);

IF fbComControl1.xActive THEN

IF xKnop THEN
eState := 20;
END_IF

IF xStop THEN
eState := 40;
END_IF

CASE eState OF

10: // Опрос состояния AFD-E

20: // запуск AFD-E

fbMbSerialRequest();

wCmdWord := 22;
fbMbSerialRequest.xExecute := TRUE;
fbMbSerialRequest.hCom := fbComControl1.hCom;
fbMbSerialRequest.xIsAsciiMode := FALSE;
fbMbSerialRequest.usiSlaveId := 15; //адрес слейва
fbMbSerialRequest.eFuncCode := OCL.MB_FC.WRITE_SINGLE_REGISTER ; //функция
fbMbSerialRequest.uiDataAddr := 4864; // адрес начального запроса
fbMbSerialRequest.uiDataCount := 1; //число регистров
fbMbSerialRequest.pData := ADR(wCmdWord);
fbMbSerialRequest.szSize := SIZEOF(wCmdWord);
//fbMbSerialRequest.xError := xError;
//fbMbSerialRequest.eError := wError;


xLampRab := TRUE;
xLampOff := FALSE;

30: // Реверс

wCmdWord := 54;
fbMbSerialRequest.usiSlaveId := 15; //адрес слейва
fbMbSerialRequest.eFuncCode := OCL.MB_FC.WRITE_SINGLE_COIL; //функция
fbMbSerialRequest.uiDataAddr := 4864; // адрес начального запроса
fbMbSerialRequest.uiDataCount := 1; //число регистров
fbMbSerialRequest.pData := ADR(wCmdWord);
fbMbSerialRequest.szSize := SIZEOF(wCmdWord);

xLampRab := TRUE;
xLampOff := FALSE;

40: // Стоп

wCmdWord := 166;
fbMbSerialRequest.usiSlaveId := 15; //адрес слейва
fbMbSerialRequest.eFuncCode := OCL.MB_FC.WRITE_SINGLE_COIL; //функция
fbMbSerialRequest.uiDataAddr := 4864; // адрес начального запроса
fbMbSerialRequest.uiDataCount := 1; //число регистров
fbMbSerialRequest.pData := ADR(wCmdWord);
fbMbSerialRequest.szSize := SIZEOF(wCmdWord);

xLampRab := FALSE;
xLampOff := TRUE;

IF fbMbSerialRequest.xDone OR fbMbSerialRequest.xError THEN

//xCommand := FALSE;

END_IF

END_CASE
ELSE
;
END_IF

Евгений Кислов
03.03.2023, 22:18
Начните с этого:



VAR
...
fbKnopTrig: R_TRIG;
END_VAR


// Проверка привода на готовность
fbComControl1
(
xEnable := TRUE,
udiComPort := 5,
udiBaudrate := 9600,
udiByteSize := 8,
eParity := OCL.COM_PARITY.NONE,
eStopBit := OCL.COM_STOPBIT.ONE
);

IF fbComControl1.xActive THEN

fbKnopTrig(CLK := xKnop);

IF fbKnopTrig.Q THEN
eState := 20;
END_IF

CASE eState OF

0: // ожидание команды

10: // Опрос состояния AFD-E

20: // запуск AFD-E

wCmdWord := 22;
fbMbSerialRequest.xExecute := TRUE;
fbMbSerialRequest.hCom := fbComControl1.hCom;
fbMbSerialRequest.xIsAsciiMode := FALSE;
fbMbSerialRequest.usiSlaveId := 15; // адрес слейва
fbMbSerialRequest.eFuncCode := OCL.MB_FC.WRITE_SINGLE_REGISTER; // функция
fbMbSerialRequest.uiDataAddr := 4864; // адрес начального запроса
fbMbSerialRequest.uiDataCount := 1; // число регистров
fbMbSerialRequest.pData := ADR(wCmdWord);
fbMbSerialRequest.szSize := SIZEOF(wCmdWord);

fbMbSerialRequest();

// fbMbSerialRequest.xError := xError;
// fbMbSerialRequest.eError := wError;


IF fbMbSerialRequest.xDone OR fbMbSerialRequest.xError THEN

fbMbSerialRequest(xExecute := FALSE);
eState := 0;

END_IF

END_CASE

END_IF

sco-scorpion
03.03.2023, 23:00
Начните с этого:



Спасибо дело сдвинулось с мертвой точки)
С Вашим кодом двигатель запускается на 1с, я правильно понимаю что бы запуск был постоянным надо постоянно отправлять запрос?


IF fbMbSerialRequest.xDone OR fbMbSerialRequest.xError THEN

fbMbSerialRequest(xExecute := FALSE);
eState := 20;

END_IF

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

Евгений Кислов
03.03.2023, 23:02
С Вашим кодом двигатель запускается на 1с, я правильно понимаю что бы запуск был постоянным надо постоянно отправлять запрос?

Это должны специалисты по ПЧВ из нашей техподдержки пояснить. По моим воспоминаниям - при корректной настройке ПЧВ должно быть достаточно однократной отправки команды.

sco-scorpion
03.03.2023, 23:06
Это должны специалисты по ПЧВ из нашей техподдержки пояснить. По моим воспоминаниям - при корректной настройке ПЧВ должно быть достаточно однократной отправки команды.

Спасибо, тогда буду пробовать их тормошить.

Емельянов Кирилл
04.03.2023, 03:15
При отсутствии запросов от мастера ПЧ уходит в безопасный режим?

sco-scorpion
04.03.2023, 18:57
При отсутствии запросов от мастера ПЧ уходит в безопасный режим?
Как понять безопасный режим? В настройках такого нету.

sco-scorpion
04.03.2023, 19:28
Евгений Кислов, если Вам не сложно могли бы Вы объяснить почему в конце перечисления добавили fbMbSerialRequest()

wCmdWord := 22;
fbMbSerialRequest.xExecute := TRUE;
fbMbSerialRequest.hCom := fbComControl1.hCom;
fbMbSerialRequest.xIsAsciiMode := FALSE;
fbMbSerialRequest.usiSlaveId := 15; // адрес слейва
fbMbSerialRequest.eFuncCode := OCL.MB_FC.WRITE_SINGLE_REGISTER; // функция
fbMbSerialRequest.uiDataAddr := 4864; // адрес начального запроса
fbMbSerialRequest.uiDataCount := 1; // число регистров
fbMbSerialRequest.pData := ADR(wCmdWord);
fbMbSerialRequest.szSize := SIZEOF(wCmdWord);

fbMbSerialRequest();

На канале ОВЕНа в Ютубе есть вебинар по работе с библиотекой OwenCommunication и там при записи или считывании опускают


fbMbSerialRequest.xExecute := TRUE;
fbMbSerialRequest.hCom := fbComControl1.hCom;
fbMbSerialRequest.xIsAsciiMode := FALSE;

есть ли какие-то условия в указании этих переменных?
и в руководстве по Modbus пишут следующим образом


wCmdWord := 22;
fbMbSerialRequest
(
xExecute := TRUE;
hCom := fbComControl1.hCom;
xIsAsciiMode := FALSE;
usiSlaveId := 15; // адрес слейва
eFuncCode := OCL.MB_FC.WRITE_SINGLE_REGISTER; // функция
uiDataAddr := 4864; // адрес начального запроса
uiDataCount := 1; // число регистров
pData := ADR(wCmdWord);
szSize := SIZEOF(wCmdWord);
);
я правильно понимаю что это равнозначное написание или все таки есть разница?

Евгений Кислов
04.03.2023, 19:36
если Вам не сложно могли бы Вы объяснить почему в конце перечисления добавили fbMbSerialRequest()

Это вызов экземпляра ФБ.
Без него было примерно так - "погрузили все вещи в машину, но на газ не нажали".


я правильно понимаю что это равнозначное написание или все таки есть разница?

Действительно, блоки кода 1 и 3 из вашего поста - семантически эквивалентны.

В вебинаре показан еще один подход ("лаконичный"), когда вызов экземпляра ФБ происходит только в одном месте (и вот там как раз ему передаются значения на входы xExecute, hCom и xIsAsciiMode), а на шагах CASE другим его входам присваиваются параметры конкретного запроса (адрес устройства, адрес регистра и т.д.).

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

fatlortroll
06.03.2023, 09:21
День добрый.
Подскажите пожалуйста, как в CoDeSys организовано развёртывание проекта на множество устройств? Желательно без использования самой IDE CoDeSys, автономно.

Евгений Кислов
06.03.2023, 09:23
День добрый.
Подскажите пожалуйста, как в CoDeSys организовано развёртывание проекта на множество устройств? Желательно без использования самой IDE CoDeSys, автономно.

Добрый день.
Типовое решение, предлагаемое CODESYS - их Automation Server.
https://www.automation-server.com/en/

fatlortroll
06.03.2023, 09:34
А есть варианты нетиповых решений?

Евгений Кислов
06.03.2023, 09:48
А есть варианты нетиповых решений?

Не могу вам ничего готового автоматизированного предложить, извините.
Можно попробовать в сторону скриптового движка CODESYS IDE посмотреть (но тогда на ПК все равно потребуется ее установить):
https://content.helpme-codesys.com/en/CODESYS%20Scripting/_script_start_page.html

capzap
06.03.2023, 09:55
День добрый.
Подскажите пожалуйста, как в CoDeSys организовано развёртывание проекта на множество устройств? Желательно без использования самой IDE CoDeSys, автономно.

возможно Вы про это спрашиваете https://youtu.be/dJf4FMQoi0o?t=204


Ссылка на пост где ссылаются на видео https://owen.ru/forum/showthread.php?t=37477&p=401847&viewfull=1#post401847

66342

fatlortroll
06.03.2023, 10:00
Да мне бы хоть теорию -- какие файлы куда складывать в ФС ПЛК. Автоматизировать на минималках-то я смогу.

fatlortroll
06.03.2023, 10:04
По вашей ссылке -- настройка Modbus RTU в CoDeSys. Может, вы другую ссылку отправить хотели?

Tacio
06.03.2023, 10:17
Принято, проработаем этот вопрос в следующих прошивках.



Потому что, похоже, канал Enable OwenCloud обрабатывается не совсем корректно.

Прошивка 2.4.0601.0905, каналы xEnableOwenCloud и xIsOwenCloudEnabled выставлены в FALSE, а в логе всё равно сообщения с попытками соединения с сервисом owencloud.
Как отключить? Использование фильтра не предлагать.

Евгений Кислов
06.03.2023, 10:23
Да мне бы хоть теорию -- какие файлы куда складывать в ФС ПЛК. Автоматизировать на минималках-то я смогу.

Те же файлы, что создаются в результате выполнения команды Онлайн - Создать загрузочное приложение без подключения к ПЛК.
Путь зависит от модели ПЛК. Какой контроллер вы используете?

Евгений Кислов
06.03.2023, 10:36
Прошивка 2.4.0601.0905, каналы xEnableOwenCloud и xIsOwenCloudEnabled, а в логе всё равно сообщения с попытками соединения с сервисом owencloud.
Как отключить? Использование фильтра не предлагать.

Добрый день.
У меня в этой версии прошивки описанная проблема не воспроизводится.
См. скриншоты:

66343 66344

Возможно, после перевода xEnableOwenCloud в FALSE забыли обновить лог и видите прошлые сообщения?
Если нет - то пришлите в личку ваш телефон и обеспечьте удаленный доступ по AeroAdmin.

fatlortroll
06.03.2023, 11:25
> Какой контроллер вы используете?

СПК1xx

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

Юлия Лукина
06.03.2023, 11:53
Спасибо, тогда буду пробовать их тормошить.

Добрый день! Ваше обращение находится в работе, ожидайте, специалист Вам ответит.

Tacio
06.03.2023, 12:27
Добрый день.
У меня в этой версии прошивки описанная проблема не воспроизводится.
См. скриншоты:

66343 66344

Возможно, после перевода xEnableOwenCloud в FALSE забыли обновить лог и видите прошлые сообщения?
Если нет - то пришлите в личку ваш телефон и обеспечьте удаленный доступ по AeroAdmin.
Скриншоты прикладываю, для организации удалённого доступа пока нет технической возможности.

Евгений Кислов
06.03.2023, 12:34
Скриншоты прикладываю, для организации удалённого доступа пока нет технической возможности.

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

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

Эдуард_Н
06.03.2023, 13:54
Подскажите где в Windows хранятся графические файлы из "ImagePool" ?

fatlortroll
06.03.2023, 14:00
/home/root/CODESYS_WRK/PlcLogic/visu/

Эдуард_Н
06.03.2023, 14:01
/home/root/CODESYS_WRK/PlcLogic/visu/

А в windows они где?

Евгений Кислов
06.03.2023, 14:05
А в windows они где?

Без подключения к контроллеру: Онлайн - Создать загрузочное приложение - указать папку сохранения.
После этого перейдите в эту папку и откройте в ней папку PlcLogic/visu.

Эдуард_Н
06.03.2023, 14:10
Без подключения к контроллеру: Онлайн - Создать загрузочное приложение - указать папку сохранения.
После этого перейдите в эту папку и откройте в ней папку visu.

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

fatlortroll
06.03.2023, 14:11
Поправочка -- PlcLogic/visu

Почему-то так, в CS 3.5 SP14, во всяком случае.

Евгений Кислов
06.03.2023, 14:22
Поправочка -- PlcLogic/visu

Почему-то так, в CS 3.5 SP14, во всяком случае.

Справедливо. Поправил свой пост.

razv
06.03.2023, 15:48
Добрый день.
Пытаюсь читать значения из рецептов функцией RecipeManCommands.GetRecipeValues из библиотеки Recipe_Managment.
Все получается ок но не получается прочитать данные если они хранятся в рецепте в виде WSTRING. Даже если в функцию передать массив WSTRING строк то все возвращаются крокозяблы
Вопросы:
- можно ли хранить в рецепте строки WSTRING?
- как прочитать корректно такие строки без загрузки в переменные программы всего рецепта?
Спасибо

Евгений Кислов
06.03.2023, 15:51
Добрый день.
Пытаюсь читать значения из рецептов функцией RecipeManCommands.GetRecipeValues из библиотеки Recipe_Managment.
Все получается ок но не получается прочитать данные если они хранятся в рецепте в виде WSTRING. Даже если в функцию передать массив WSTRING строк то все возвращаются крокозяблы
Вопросы:
- можно ли хранить в рецепте строки WSTRING?
- как прочитать корректно такие строки без загрузки в переменные программы всего рецепта?
Спасибо

Добрый день.
1. Можно
2. Предлагаю начать с этого:
https://youtu.be/A1WrZVJUWhY

Про GetRecipeValues примерно с 30:00 начинается.

razv
06.03.2023, 15:59
Спасибо подробно и понятно. И отдельное спасибо за оперативный ответ

razv
06.03.2023, 18:13
Кстати наблюдение которое удалось выяснить - через метод RecipeManCommands.GetRecipeValues удается прочитать WSTRING строку из рецепта не более 65 символов длинной. Если строка длинней то программа вываливается в исключение.
Видимо внутренние переменные метода объявлены как STRING(260).
И для преобразования длинных строк в функции RECIPE_STRING_TO_WSTRING из примера по видео пришлось явно задать длину входной и выходной переменной иначе они ограничивались 80 символами (это максимум 20 символов для преобразования в WSTRING)

Евгений Кислов
06.03.2023, 18:18
Кстати наблюдение которое удалось выяснить - через метод RecipeManCommands.GetRecipeValues удается прочитать WSTRING строку из рецепта не более 65 символов длинной. Если строка длинней то программа вываливается в исключение.

Поисследую этого на досуге.

Upd. - проверил в V3.5 SP17 Patch 3. В ней с помощью метода RecipeManCommands.GetRecipeValues в принципе не получается считать строку (STRING) длиннее 80 символов.


И для преобразования длинных строк в функции RECIPE_STRING_TO_WSTRING из примера по видео пришлось явно задать длину входной и выходной переменной иначе они ограничивались 80 символами (это максимум 20 символов для преобразования в WSTRING)

Да, вы поступили совершенно правильно.

fatlortroll
07.03.2023, 08:35
> не получается считать строку (STRING) длиннее 80 символов

Ну так по умолчанию в CS строка без явного указания размера интерпретируется, как 80-символьная: If a size is not defined, then 80 characters are reserved by default (https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_datatype_string.html)

Евгений Кислов
07.03.2023, 08:55
> не получается считать строку (STRING) длиннее 80 символов

Ну так по умолчанию в CS строка без явного указания размера интерпретируется, как 80-символьная: If a size is not defined, then 80 characters are reserved by default (https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_datatype_string.html)

Там строка возвращается по указателю.
И есть поле iStringLength, которое задает пользователь (макс. длина строк в его буфере).
В принципе - в таких случаях обычно по указателю может вернуться строка с любым количеством символов - в т.ч. и более 80.
https://content.helpme-codesys.com/en/libs/Recipe%20Management/Current/pou-RecipeManCommands/GetRecipeValues.html

Показательный пример:
https://content.helpme-codesys.com/en/libs/StringUtils/Current/Public-Parts/Ansi/StrFindA.html

У функции вход типа POINTER TO STRING(255), но реально она может вычислить размер строки длиной вплоть до 32767 символов - вы можете легко в этом убедиться.

Так что POINTER TO STRING не всегда означает, что под указатель можно подложить только STRING(80) и не более - иногда это совсем не так.

fatlortroll
07.03.2023, 09:11
А, ясно. Это я на сигнатуру не посмотрел -- думал, что строка по значению передаётся.

sco-scorpion
07.03.2023, 11:21
Подскажите как можно написать код что бы при нажатии параметры передавались в Word, НО при этом должен формироваться Бит по переднему фронту. т.е. должна быть запись в xBit i wCmdWord.
В запись Word можно сделать через CASE, а вот что бы Бит формировался не могу сообразить.

Евгений Кислов
07.03.2023, 11:32
Подскажите как можно написать код что бы при нажатии параметры передавались в Word, НО при этом должен формироваться Бит по переднему фронту. т.е. должна быть запись в xBit i wCmdWord.
В запись Word можно сделать через CASE, а вот что бы Бит формировался не могу сообразить.

Вам нужен именно передний фронт или установка бита на время нажатия и сброс при отпускании будет приемлем?

sco-scorpion
07.03.2023, 11:35
Вам нужен именно передний фронт или установка бита на время нажатия и сброс при отпускании будет приемлем?

Передний фронт

Евгений Кислов
07.03.2023, 12:02
Передний фронт

Тогда сделайте так:

66361



// в коде PLC_PRG (или другой программы)
// fbRtrig - это экземпляр R_TRIG
fbRtrig(CLK := xCmd);

// укажите нужный вам бит
wCmdWord.0 := fbRtrig.Q;

sco-scorpion
07.03.2023, 14:11
Тогда сделайте так:

66361



// в коде PLC_PRG (или другой программы)
// fbRtrig - это экземпляр R_TRIG
fbRtrig(CLK := xCmd);

// укажите нужный вам бит
wCmdWord.0 := fbRtrig.Q;


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

MUSulmanin
07.03.2023, 14:22
Добрый день. Подскажите, возможно ли стать клиентом OPC UA в Codesys или только в роли сервера возможно?

Евгений Кислов
07.03.2023, 15:18
Этот вариант применим к одной кнопки, а мне к 3ом (старт, реверс и стоп)
Может я немного неправильно объяснил, приложил скрин куда происходит запись.

Можно ведь привязать к трем кнопкам три отдельные переменные и объявить в коде три экземпляра R_TRIG с записью в 3 нужных вам бита.

Евгений Кислов
07.03.2023, 15:19
Добрый день. Подскажите, возможно ли стать клиентом OPC UA в Codesys или только в роли сервера возможно?

Добрый день.
Наши контроллеры поддерживают только режим сервера.

sco-scorpion
07.03.2023, 16:52
Можно ведь привязать к трем кнопкам три отдельные переменные и объявить в коде три экземпляра R_TRIG с записью в 3 нужных вам бита.
Так мне нужно записать в один и тот же бит с трех кнопок, т.е.:
кнопка старт/ экземпляра R_TRIG - запись в бит (переменная - %QX20.1)/ запись word (%QW11)
кнопка стоп/ экземпляра R_TRIG - запись в бит (переменная - %QX20.1)/ запись word (%QW11)
кнопка реверс/ экземпляра R_TRIG - запись в бит (переменная - %QX20.1)/ запись word (%QW11)

Евгений Кислов
07.03.2023, 16:56
Так мне нужно записать в один и тот же бит с трех кнопок, т.е.:
кнопка старт/ экземпляра R_TRIG - запись в бит (переменная - %QX20.1)/ запись word (%QW11)
кнопка стоп/ экземпляра R_TRIG - запись в бит (переменная - %QX20.1)/ запись word (%QW11)
кнопка реверс/ экземпляра R_TRIG - запись в бит (переменная - %QX20.1)/ запись word (%QW11)

И что мешает вам сделать то, что вы описали?
К %QX20.1 привяжите отдельную булевскую переменную (например, xWriteCmd).

xWriteCmd := fbRtrig1.Q OR fbRtrig2.Q OR fbRtrig3.Q;

sco-scorpion
07.03.2023, 17:16
И что мешает вам сделать то, что вы описали?
К %QX20.1 привяжите отдельную булевскую переменную (например, xWriteCmd).

xWriteCmd := fbRtrig1.Q OR fbRtrig2.Q OR fbRtrig3.Q;

Спасибо, до такой записи не додумался.

ВладОвен
13.03.2023, 14:58
Привет.
Подскажите принцип срабатывания WatcDog таймера.

1. Если функциональный блок (FB) не отдал управление через определенной количество секунд, то в ПЛК летит сигнал RESET. Так?
2. Если программа (PRG) не отдала управление, то конфигуратор задач принудительно переключит ПЛК на другую программу? И так по кругу между программами? Или тоже сгенерируется сигнал Reset?

Евгений Кислов
13.03.2023, 16:13
Привет.
Подскажите принцип срабатывания WatcDog таймера.

1. Если функциональный блок (FB) не отдал управление через определенной количество секунд, то в ПЛК летит сигнал RESET. Так?
2. Если программа (PRG) не отдала управление, то конфигуратор задач принудительно переключит ПЛК на другую программу? И так по кругу между программами? Или тоже сгенерируется сигнал Reset?

Добрый день.

См. стр. 16, п. 3:
https://ftp.owen.ru/CoDeSys3/98_Books/CodesysTaskManagment.pdf

Петр Петрович
14.03.2023, 10:52
Добрый день.
Подскажите, пожалуйста, по такому вопросу. Предположим, мне нужно опрашивать по TCP около двух десятков устройств. Период опроса - от одной до нескольких секунд. Объем данных, которые будут исходить из контроллера и приниматься им - несколько сотен байт максимум. Некоторые устройства - десятки байт.

1. Допустимо ли в CODESYS создать такое колличество TCP-клиентов и некоторый связанный с ними ST-парсинг, если на том контроллере будет и визуализация для отображения состояния устройств и управления ими, или это вообще не проблема
в смысле нагрузки на средний контроллер?

2. Вполне ли достаточно для этого контроллеров Owen 200 серии?

Евгений Кислов
14.03.2023, 10:56
Добрый день.
Подскажите, пожалуйста, по такому вопросу. Предположим, мне нужно опрашивать по TCP около двух десятков устройств. Период опроса - от одной до нескольких секунд. Объем данных, которые будут исходить из контроллера и приниматься им - несколько сотен байт максимум. Некоторые устройства - десятки байт.

1. Допустимо ли в CODESYS создать такое колличество TCP-клиентов и некоторый связанный с ними ST-парсинг, если на том контроллере будет и визуализация для отображения состояния устройств и управления ими, или это вообще не проблема
в смысле нагрузки на средний контроллер?

2. Вполне ли достаточно для этого контроллеров Owen 200 серии?

Добрый день.
1. Зависит от характеристик "среднего контроллера".
2. Да.

Дмитрий Хороменков
15.03.2023, 14:34
Добрый день. Может в чем то заблуждаюсь. Не так давно занимаюсь Кодесис3.5. Написал пока начало блока:

IF w09>1 THEN
Pusk_Nasos_Otop_Syst:=FALSE;
TON_2(IN:=FALSE);
ELSE

TON_2(IN:=wa11,PT:=w12,Q=>Pusk_Nasos_Otop_Syst,ET=>wa25);
END_IF

Как бы у меня Блок TON находится внутри основного блока.

FUNCTION_BLOCK Nasos_Otop_Syst
VAR_INPUT
wa11: BOOL;
w12: TIME;
w09: REAL;
END_VAR
VAR_OUTPUT
Pusk_Nasos_Otop_Syst: BOOL;
wa25: TIME;
END_VAR
VAR
TON_2: TON;
END_VAR

Как бы все работает, но никак не могу понять смысл строчки Pusk_Nasos_Otop_Syst:=FALSE; если я ее убираю:
ведь я уже написал условие , что если wa>1, то на IN в TON будет FALSE соответственно и выход должен стать фальшем, а он остается TRUE.
В CFC без проблем все делается. А вот в ST какие то подковырки. Извините если этот форум не про правильность написания и устранении ошибок, подскажите пожалуйста про такой форум.

Евгений Кислов
15.03.2023, 14:48
Добрый день.


ведь я уже написал условие , что если wa>1, то на IN в TON будет FALSE соответственно и выход должен стать фальшем, а он остается TRUE.

Выход таймера - должен и становится. Вы путаете его с вашей переменной Pusk_Nasos_Otop_Syst. Исправление, которое поясняет ситуацию:




IF w09>1 THEN
TON_2(IN:=FALSE, Q=>Pusk_Nasos_Otop_Syst);
ELSE
TON_2(IN:=wa11,PT:=w12,Q=>Pusk_Nasos_Otop_Syst,ET=>wa25);
END_IF



Можно и так:


TON_2(IN := wa11 AND NOT(w09>1), PT := w12, Q => Pusk_Nasos_Otop_Syst, ET => wa25);

Дмитрий Хороменков
15.03.2023, 14:58
Благодарю Вас.

Дмитрий Хороменков
16.03.2023, 19:08
Ограничение диапазона позволяет объявить переменную, значения которой ограничены в определенных пределах. Существует возможность создать в проекте новые типы данных с ограниченным диапазоном значений либо задать диапазон непосредственно при объявлении переменной.

Создание нового типа выглядит так:

TYPE < Имя > : < Целый тип > (<от>..<до>) END_TYPE;



<Имя>
любой допустимый МЭК идентификатор,

<IЦелый тип>
один из типов SINT, USINT, INT, UINT, DINT, UDINT, BYTE, WORD,

DWORD (LINT, ULINT, LWORD).

<от>
константа, определяющая начало диапазона значений включительно

<до>
константа, определяющая конец диапазона значений включительно.




Пример:

TYPE

SubInt : INT (-4095..4095);

END_TYPE



Ограничение диапазона при объявлении переменной:

i : INT (-4095..4095);

ui : UINT (0..10000);

END_VAR


Это Кодесис 2.3 в 3.5 что то не выходит.

Евгений Кислов
16.03.2023, 19:12
Покажите, пожалуйста, скриншотами, что именно у вас не выходит.

Дмитрий Хороменков
16.03.2023, 19:49
VAR_INPUT
wa11: BOOL;
w12: TIME;
w13: TIME;
w09: REAL;
st01: REAL; Хочу w09 и st01 ограничить. Могу в INT перевести Делаю как указану в справочнике 2.3 не получается

Евгений Кислов
16.03.2023, 19:55
VAR_INPUT
wa11: BOOL;
w12: TIME;
w13: TIME;
w09: REAL;
st01: REAL; Хочу w09 и st01 ограничить. Могу в INT перевести Делаю как указану в справочнике 2.3 не получается

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

Дмитрий Хороменков
16.03.2023, 20:01
FUNCTION_BLOCK Nasos_Otop_Syst
VAR_INPUT
wa11: BOOL;
w12: TIME;
w13: TIME;
w09: INT(0..60);
st01: REAL;
END_VAR
VAR_OUTPUT
Pusk_Nasos_Otop_Syst: BOOL;
Pusk_Nasos_Ohl_Syst: BOOL;
wa25: TIME;
wa26: TIME;
END_VAR
VAR
TON_2: TON;
TOF_2 : TOF;
a1 : BOOL;
d1 : BOOL;
b1 : BOOL;
END_VAR Вот так сделал, блок вставляю в программу и на входе ставлю 70 или -10 , а оно работает, может это входную в программе надо ограничить? А я хотел бы чтобы у меня именно блок не пускал.

Дмитрий Хороменков
16.03.2023, 20:15
Да уж я опять напутал вход с переменной, но все таки хотелось бы без всякой писанины ограничить вход, а не переменную. Может есть такая возможность. Потому как блок он и есть, что то отдельное он должен сам себя защищать. Если подскажете прям спасете.

capzap
16.03.2023, 20:17
FUNCTION_BLOCK Nasos_Otop_Syst
VAR_INPUT
wa11: BOOL;
w12: TIME;
w13: TIME;
w09: INT(0..60);
st01: REAL;
END_VAR
VAR_OUTPUT
Pusk_Nasos_Otop_Syst: BOOL;
Pusk_Nasos_Ohl_Syst: BOOL;
wa25: TIME;
wa26: TIME;
END_VAR
VAR
TON_2: TON;
TOF_2 : TOF;
a1 : BOOL;
d1 : BOOL;
b1 : BOOL;
END_VAR Вот так сделал, блок вставляю в программу и на входе ставлю 70 или -10 , а оно работает, может это входную в программе надо ограничить? А я хотел бы чтобы у меня именно блок не пускал.

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

Дмитрий Хороменков
16.03.2023, 20:35
Да я пока путаюсь , извините. Хотя создание тоже пригодится.

Евгений Кислов
17.03.2023, 07:02
Вот так сделал, блок вставляю в программу и на входе ставлю 70 или -10 , а оно работает,

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

Для вашей ситуации нужно использовать POU для неявных проверок:

66570

https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_f_obj_pous_implicit_check.html

proxy
17.03.2023, 17:31
Добрый день. CODESYS V3.5 SP17 Patch 3 после перезапуска ПК, CODESYS не запускается, выдает ошибку. 66595. При повторной инсталяции пункт Repair не помог. До перезагрузки ПК установил библиотеку OwenCommunication и пытался обновить пакет конвертации проектов CODESYS 2.3 в процессе обновления было много ошибок, после я отменил процесс обновления. Подскажите пожалуйста решение. Спасибо.

Евгений Кислов
17.03.2023, 18:01
Добрый день. CODESYS V3.5 SP17 Patch 3 после перезапуска ПК, CODESYS не запускается, выдает ошибку. 66595. При повторной инсталяции пункт Repair не помог. До перезагрузки ПК установил библиотеку OwenCommunication и пытался обновить пакет конвертации проектов CODESYS 2.3 в процессе обновления было много ошибок, после я отменил процесс обновления. Подскажите пожалуйста решение. Спасибо.

Добрый день.
Я думаю, вам нужно удалить CODESYS (через Панель управления - Программы и компоненты) и, возможно, почистить реестр.
После этого установить CODESYS заново.

Павел444
18.03.2023, 01:41
Добрый день.
CODESYS 3.5 SP18/19 с контроллером Raspberry Pi.
Пробовал с Raspberry Pi 3 в демо моде, отлично все работало.
Потом подключил новый Raspberri Pi 4 B. Рантайм тихо слетает через пару минут. Иногда успеваю логин сделать и потом слетает.
Чтобы снова завелся, делаю старт рантайма, снова на несколько секунд все оживает, потом подыхает. В логе при этом не пишет никаких ошибок.
Можно ли лог контроллера завербосить или как-то понять почему падает рантайм?

Евгений Кислов
18.03.2023, 07:10
Добрый день.
CODESYS 3.5 SP18/19 с контроллером Raspberry Pi.
Пробовал с Raspberry Pi 3 в демо моде, отлично все работало.
Потом подключил новый Raspberri Pi 4 B. Рантайм тихо слетает через пару минут. Иногда успеваю логин сделать и потом слетает.
Чтобы снова завелся, делаю старт рантайма, снова на несколько секунд все оживает, потом подыхает. В логе при этом не пишет никаких ошибок.
Можно ли лог контроллера завербосить или как-то понять почему падает рантайм?

Добрый день.
Какая у вес версия пакета (.package) CODESYS Control for Raspberry Pi и ОС в Raspberry (в т.ч. разрядность)?

Павел444
18.03.2023, 14:40
Добрый день.
Какая у вес версия пакета (.package) CODESYS Control for Raspberry Pi и ОС в Raspberry (в т.ч. разрядность)?

У мена 4.7 версия контроллер, 32 битная разрядность, распбиан лайт, последняя версия.
Все оказалось тривиальнее. Пока что Контроллер 4.7 версии не поддерживает RPi 4 model B, HW Rev. 1.5.
Поддержка должна быть в версии 4.8, которая должна быть зарелизена в апреле.

proxy
18.03.2023, 21:10
Здравствуйте Евгений. Удалил CODESYS и почистил реестр (насколько смог). После повторной установки присутствует только язык ST, если создавать проект по шаблону то появляется такое сообщение 66611, нажимая на ОК - закрывается проект. (мне кажется вы упоминали что-то об этом на вебинаре «CODESYS V3.5: ответы на вопросы пользователей»).

Евгений Кислов
18.03.2023, 21:23
Здравствуйте Евгений. Удалил CODESYS и почистил реестр (насколько смог). После повторной установки присутствует только язык ST, если создавать проект по шаблону то появляется такое сообщение 66611, нажимая на ОК - закрывается проект. (мне кажется вы упоминали что-то об этом на вебинаре «CODESYS V3.5: ответы на вопросы пользователей»).

Добрый день.
Удалите CODESYS и установите заново в точности по инструкции:
https://youtu.be/3KcJWZEVXCg

proxy
18.03.2023, 22:28
Cпасибо, все работает!

Дмитрий Хороменков
19.03.2023, 12:29
BLINK_2(ENABLE:=TRUE,TIMELOW:=T#3S,TIMEHIGH:=T#3S, OUT=>av2); Здравствуйте подскажите пожалуйста, как в ST блоку добавить вход/выход EN/ENO

Евгений Кислов
19.03.2023, 12:58
BLINK_2(ENABLE:=TRUE,TIMELOW:=T#3S,TIMEHIGH:=T#3S, OUT=>av2); Здравствуйте подскажите пожалуйста, как в ST блоку добавить вход/выход EN/ENO

Добрый день.
"Добавить" что-то к библиотечному блоку нельзя. Можно создать на его базе свой блок-"обертку".
Если говорить конкретно про BLINK - то для него роль EN выполняет вход ENABLE.

kondor3000
19.03.2023, 13:00
BLINK_2(ENABLE:=TRUE,TIMELOW:=T#3S,TIMEHIGH:=T#3S, OUT=>av2); Здравствуйте подскажите пожалуйста, как в ST блоку добавить вход/выход EN/ENO

Для Блинка вместо TRUE на вход ENABLE поставьте булевую переменную, и уже её переключайте.

В общем случае, перед блоком ставите IF Enable THEN, который по переменной Enable разрешает, запрещает работу блока.
После блока END_IF

Дмитрий Хороменков
19.03.2023, 13:11
Блок обертка-это создать отдельный блок с доп контактами?

kondor3000
19.03.2023, 13:15
Блок обертка-это создать отдельный блок с доп контактами?

Ответил выше, 2 строка

proxy
20.03.2023, 00:46
Здравствуйте. ПЛК210-03-СS, целевая система 3.5.14.30. Первое включение и все FDO, DO светятся красным. 66625 Так ведь не должно быть? В документации сказано 66626 66627. Я так понимаю нужно отправлять производителю по гарантии или попробовать перепрошить? Спасибо за ответ.

Евгений Кислов
20.03.2023, 06:16
Здравствуйте. ПЛК210-03-СS, целевая система 3.5.14.30. Первое включение и все FDO, DO светятся красным. 66625 Так ведь не должно быть? В документации сказано 66626 66627. Я так понимаю нужно отправлять производителю по гарантии или попробовать перепрошить? Спасибо за ответ.

Добрый день.
Как я понимаю, питание и нагрузку к выходам вы еще не подключали.
См. подробнее здесь:
https://owen.ru/forum/showthread.php?t=28167&page=13&p=385072&viewfull=1#post385072

Дмитрий Хороменков
20.03.2023, 15:30
Примечание: При переходе ENABLE в FALSE, выход OUT остается в том состоянии, в котором он был в этот момент. Если вам необходимо чтобы выходная переменная сбрасывалась в FALSE при ENABLE равном FALSE, то используйте выражение "OUT AND ENABLE" на выходе (т.е. добавьте блок AND на выход и на второй вход подайте ENABLE) .

Добрый день , а как это изобразить на ST?

Солнечный заяц
20.03.2023, 15:38
Здравствуйте, есть группа тревог. Способ наблюдения "внешний диапазон" границы от -250 до 0, гистерезис 10%, задержка 1 сек. Способ подтверждения REP. Когда значение поднимается и колеблется около нуля, начинается "спам" сообщениями со значением порядка +0.25. Как я понял из справки, значением гистерезиса это не вылечить, может быть есть другие способы?

Евгений Кислов
20.03.2023, 15:52
Здравствуйте, есть группа тревог. Способ наблюдения "внешний диапазон" границы от -250 до 0, гистерезис 10%, задержка 1 сек. Способ подтверждения REP. Когда значение поднимается и колеблется около нуля, начинается "спам" сообщениями со значением порядка +0.25. Как я понял из справки, значением гистерезиса это не вылечить, может быть есть другие способы?

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

Солнечный заяц
20.03.2023, 15:56
Добрый день.
Я думаю, в вашей ситуации стоит формировать булевский сигнал тревоги в коде программы, а в группе тревог использовать тип наблюдения Дискретный.
В коде гораздо проще отфильтровать "дребезг" сигнала.

А можно будет как-то засунуть значение параметра в текст сообщения?

Евгений Кислов
20.03.2023, 15:56
А можно будет как-то засунуть значение параметра в текст сообщения?

Да, см. триггерные переменные (LATCH-переменные).

Солнечный заяц
20.03.2023, 16:05
Да, см. триггерные переменные (LATCH-переменные).

Увидел, большое спасибо!

kondor3000
20.03.2023, 16:21
Примечание: При переходе ENABLE в FALSE, выход OUT остается в том состоянии, в котором он был в этот момент. Если вам необходимо чтобы выходная переменная сбрасывалась в FALSE при ENABLE равном FALSE, то используйте выражение "OUT AND ENABLE" на выходе (т.е. добавьте блок AND на выход и на второй вход подайте ENABLE) .

Добрый день , а как это изобразить на ST?

BLINK_2(ENABLE:=ENABLE,TIMELOW:=T#3S,TIMEHIGH:=T#3 S, OUT=>av2);
av2:=av2 AND ENABLE;

sco-scorpion
20.03.2023, 19:30
Подскажите как правильно обращаться или присваивать ФБ Mx110Assistant.AFD_E_STATE_TO_ENUMS из него надо .wState, я так понимаю в это слово должно что-то записываться типа:

info1 := Mx110Assistant.AFD_E_STATE_TO_ENUMS.wState

Евгений Кислов
20.03.2023, 19:38
VAR
// привязана в шаблоне к каналу Слово состояния
wState: WORD;

fbStateToEnums: Mx110Assistant.AFD_E_STATE_TO_ENUMS;

// перечисления, описывающие режим работы ПЧВ
eControlMode: Mx110Assistant.AFD_E_CONTROL_MODE;
eWorkState: Mx110Assistant.AFD_E_WORK_STATE;
eEnergyMode: Mx110Assistant.AFD_E_ENERGY_MODE;
eSpeedRegulatorProtectState: Mx110Assistant.AFD_E_SPEED_REGULATOR_PROTECT_STATE ;

END_VAR

// в коде программы

fbStateToEnums
(
wState := wState,
eControlMode => eControlMode,
eWorkState => eWorkState,
eEnergyMode => eEnergyMode,
eSpeedRegulatorProtectState => eSpeedRegulatorProtectState
);

sco-scorpion
20.03.2023, 19:53
А если я использую готовые шаблоны AFD-E то не получится обратится к ФБ ?

Евгений Кислов
20.03.2023, 20:00
А если я использую готовые шаблоны AFD-E то не получится обратится к ФБ ?

Получится.

sco-scorpion
21.03.2023, 14:24
Подскажите как написать структуру что бы при получении кода ошибки выдавал значение, например:
10 -- нету напряжения;
11 -- перегрузка;
и т.д.

Евгений Кислов
21.03.2023, 14:26
Подскажите как написать структуру что бы при получении кода ошибки выдавал значение, например:
10 -- нету напряжения;
11 -- перегрузка;
и т.д.

В каком виде вам требуется получать ошибку? В виде строки?

sco-scorpion
21.03.2023, 14:40
В каком виде вам требуется получать ошибку? В виде строки?

да, в текстовом "нету напряжения"

Эдуард_Н
21.03.2023, 16:04
Здравствуйте, подскажите, что это означает? 66653

Евгений Кислов
21.03.2023, 16:11
да, в текстовом "нету напряжения"




VAR
// код ошибки
uiErrorCode: UINT;
// текст ошибки
wsErrorMessage: WSTRING;
END_VAR

// в коде

CASE uiErrorCode OF

10: wsErrorMessage := "Нету напряжения";
11: wsErrorMessage := "Перегрузка";

END_CASE



См. также п. 1.2 в данном документе:
https://ftp.owen.ru/CoDeSys3/98_Books/CodesysMemoryManipulation.pdf

Евгений Кислов
21.03.2023, 16:13
Здравствуйте, подскажите, что это означает? 66653

Добрый день.
Напоминает фантомную ошибку сервисной визуализации CODESYS.
Компиляция - Очистить все
После этого закрыть все открытые в CODESYS вкладки и заново загрузить проект.
Ошибка должна исчезнуть.

Эдуард_Н
21.03.2023, 17:31
Добрый день.
Напоминает фантомную ошибку сервисной визуализации CODESYS.
Компиляция - Очистить все
После этого закрыть все открытые в CODESYS вкладки и заново загрузить проект.
Ошибка должна исчезнуть.

Да, спасибо. Неправильно обновил библиотеку, и началось...

sco-scorpion
21.03.2023, 23:31
Подскажите что в коде не правильно написано, я так понимаю отсутствует цикличность и поэтому параметры не обновляются.
должно получиться, если один из верхних концевиков не исправен то на выходе обоих ничего не должно быть и соответственно нижние должны передать сигнал



IF NOT xLQ1_L_Up THEN // Левый верхний концевик

eLQ_State := 10;

END_IF

IF NOT xLQ2_L_Down THEN // Левый нижний концевик

eLQ_State := 20;

END_IF

IF NOT xLQ3_R_Up THEN // Правый верхний концевик

eLQ_State := 30;

END_IF

IF NOT xLQ4_R_Down THEN // Правый нижний концевик

eLQ_State := 40;

END_IF

IF xLQ5_Open THEN // Концевик границы открытия пиноли

xOpen_DO := TRUE;

ELSE // Сильно раскрыта пиноль
xOpen_DO := FALSE;
uiErrorCode := 14;

END_IF

IF xLQ6_Close THEN // Концевик границы закрытия пиноли

xClose_DO := TRUE;

ELSE // Сильно зажата пиноль
xClose_DO := FALSE;
uiErrorCode := 15;

END_IF

CASE eLQ_State OF
0:
xL_Up_DO := TRUE;
xL_Down_DO := TRUE;
xR_Up_DO := TRUE;
xR_Down_DO := TRUE;



10: // Не исправен верхний левый концевик
xL_Up_DO := FALSE;
xR_Up_DO := FALSE;
uiErrorCode := 10;
eLQ_State := 0;

20: // Не исправен нижний левый концевик
xL_Down_DO := FALSE;
xR_Down_DO := FALSE;
uiErrorCode := 11;
eLQ_State := 0;

30: // Не исправен верхний правый концевик
xL_Up_DO := FALSE;
xR_Up_DO := FALSE;
uiErrorCode := 12;
eLQ_State := 0;

40: // Не исправен нижний левый концевик
xL_Down_DO := FALSE;
xR_Down_DO := FALSE;
uiErrorCode := 13;
eLQ_State := 0;


END_CASE

Евгений Кислов
22.03.2023, 07:03
У вас внутри шагов CASE происходит eLQ_State := 0;
А на шаге 0 переменным всех 4 концевиков присваивается TRUE - поэтому они не могут иметь другие значения.

sco-scorpion
22.03.2023, 07:36
У вас внутри шагов CASE происходит eLQ_State := 0;
А на шаге 0 переменным всех 4 концевиков присваивается TRUE - поэтому они не могут иметь другие значения.

Убрал все равно значения не меняются

Евгений Кислов
22.03.2023, 07:39
А почему они должны меняться?
xLQ4_R_Down имеет значение FALSE, соответственно, вы попали на шаг 40.
Переменные под стрелочками остались в значениях FALSE, потому что на этом шаге им ничего не присваивается.

sco-scorpion
22.03.2023, 08:12
А почему они должны меняться?
xLQ4_R_Down имеет значение FALSE, соответственно, вы попали на шаг 40.
Переменные под стрелочками остались в значениях FALSE, потому что на этом шаге им ничего не присваивается.

xL_Up_DO и xR_Up_DO должны иметь значение TRUE.
Скорее всего надо разрабатывать другой алгоритм

sco-scorpion
22.03.2023, 08:15
я так понимаю в Case надо добавить обработку где будет присваиваться значения
xL_Up_DO := TRUE;
xL_Down_DO := TRUE;
и
xR_Up_DO := TRUE;
xR_Down_DO := TRUE;

sco-scorpion
22.03.2023, 18:44
Поэкспериментировал немного и все равно ничего не получается создается такое впечатление что код не работает


IF NOT xLQ1_L_Up THEN // Левый верхний концевик

eLQ_State := 10;

END_IF

IF NOT xLQ2_L_Down THEN // Левый нижний концевик

eLQ_State := 20;

END_IF

IF NOT xLQ3_R_Up THEN // Правый верхний концевик

eLQ_State := 30;

END_IF

IF NOT xLQ4_R_Down THEN // Правый нижний концевик

eLQ_State := 40;

END_IF

IF xLQ5_Open THEN // Концевик границы открытия пиноли

xOpen_DO := TRUE;

ELSE // Сильно раскрыта пиноль
xOpen_DO := FALSE;
uiErrorCode := 14;

END_IF

IF xLQ6_Close THEN // Концевик границы закрытия пиноли

xClose_DO := TRUE;

ELSE // Сильно зажата пиноль
xClose_DO := FALSE;
uiErrorCode := 15;

END_IF

IF xLQ1_L_Up AND xLQ3_R_Up THEN // Верхнии концевики исправны
eLQ_State := 50;
END_IF

IF xLQ2_L_Down AND xLQ4_R_Down THEN // Нижнии концевики исправны
eLQ_State := 60;
END_IF

CASE eLQ_State OF


10: // Не исправен верхний левый концевик
xL_Up_DO := FALSE;
xR_Up_DO := FALSE;
uiErrorCode := 10;
astErrorData[10].xAlarm := TRUE;
astErrorData[10].wsMessage := "Не исправен верхний левый концевик";


20: // Не исправен нижний левый концевик
xL_Down_DO := FALSE;
xR_Down_DO := FALSE;
uiErrorCode := 11;
astErrorData[11].xAlarm := TRUE;
astErrorData[11].wsMessage := "Не исправен нижний левый концевик";


30: // Не исправен верхний правый концевик
xL_Up_DO := FALSE;
xR_Up_DO := FALSE;
uiErrorCode := 12;
astErrorData[12].xAlarm := TRUE;
astErrorData[12].wsMessage := "Не исправен верхний правый концевик";


40: // Не исправен нижний левый концевик
xL_Down_DO := FALSE;
xR_Down_DO := FALSE;
uiErrorCode := 13;
astErrorData[13].xAlarm := TRUE;
astErrorData[13].wsMessage := "Не исправен нижний левый концевик";


50: // Верхнии концевики исправны
xL_Up_DO := TRUE;
xL_Down_DO := TRUE;


60: // Нижнии концевики исправны
xR_Up_DO := TRUE;
xR_Down_DO := TRUE;


END_CASE

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

Евгений Кислов
22.03.2023, 18:53
а должно как минимум 6

Почему вы так считаете?

sco-scorpion
22.03.2023, 19:18
Почему вы так считаете?

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

Евгений Кислов
22.03.2023, 19:23
Программа работает циклически, сверху в низ и соответственно каждая ошибка должна прописаться

Программа действительно работает циклически и "сверху вниз".
Каждый цикл вы записываете в eLQ_State значение 10, потом перезаписываете его значением 20, потом перезаписываете значением 30 и далее перезаписываете значением 40.
В итоге к моменту начала CASE eLQ_State на каждом цикле равно 40.
Так что программа работает совершенно корректно - в соответствии с написанным кодом.

sco-scorpion
22.03.2023, 19:56
Каждый цикл вы записываете в eLQ_State значение 10, потом перезаписываете его значением 20, потом перезаписываете значением 30 и далее перезаписываете значением 40.
В итоге к моменту начала CASE eLQ_State на каждом цикле равно 40.

То есть что бы зафиксировать каждую ошибку надо отказаться от CASE и все переписать на IF ?

Евгений Кислов
22.03.2023, 19:59
То есть что бы зафиксировать каждую ошибку надо отказаться от CASE и все переписать на IF ?

Я думаю, лучше начать именно с этого варианта.

AndrewR
23.03.2023, 12:35
Добрый день.
Есть ли возможность сделать так, чтобы для каждого элемента массива при просмотре переменных в онлайн-режиме был свой комментарий?
Пример (сами комментарии дорисованы)
66689

Евгений Кислов
23.03.2023, 12:58
Добрый день.
Есть ли возможность сделать так, чтобы для каждого элемента массива при просмотре переменных в онлайн-режиме был свой комментарий?
Пример (сами комментарии дорисованы)
66689

Добрый день.
Насколько я помню - такой возможности нет.

proxy
23.03.2023, 18:29
Здравствуйте. Подскажите пожалуйста, возможно ли программно обнулить переменную импульсов инкрементного АВ энкодера (codesys 3.5, плк210)? Суть задачи заключается в использовании энкодера в качестве измерительного элемента. Скорость измерения (перемещения заготовки) где-то 40м/мин. Спасибо за ответ.

Евгений Кислов
23.03.2023, 18:47
Здравствуйте. Подскажите пожалуйста, возможно ли программно обнулить переменную импульсов инкрементного АВ энкодера (codesys 3.5, плк210)? Суть задачи заключается в использовании энкодера в качестве измерительного элемента. Скорость измерения (перемещения заготовки) где-то 40м/мин. Спасибо за ответ.

Добрый день.
См. пример:
https://owen.ru/forum/showthread.php?t=28167&p=374785&viewfull=1#post374785

Newcomer
24.03.2023, 12:23
Добрый день

Как сделать интерфейс среды как на первой картинке. У меня сейчас как на второй.

Евгений Кислов
24.03.2023, 12:25
Добрый день.
Окно - Сбросить параметры окна

Newcomer
24.03.2023, 12:33
Добрый день.
Окно - Сбросить параметры окна

Спасибо. Вы моя палочка-выручалочка.

sco-scorpion
27.03.2023, 02:47
Подскажите как можно обработать массив что бы от одной переменной установились значения в других
например:

astErrorData[1].xAlarm := TRUE ;
и в функции или где-то была обработка

astErrorData[1].wsMessage // это обязательно
astErrorData[1].iCode // это по необходимости
https://disk.yandex.ru/d/TAOpGqTmbVYXVw

Евгений Кислов
27.03.2023, 06:24
Опишите, пожалуйста, задачу, которую вы хотите решить (а не выбранное вами решение).

sco-scorpion
27.03.2023, 08:52
Опишите, пожалуйста, задачу, которую вы хотите решить (а не выбранное вами решение).

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

Евгений Кислов
27.03.2023, 08:58
В теле программы при появлении ошибки должна зафиксироваться ошибка и вывестись в менеджере тревог с названием, ошибки могут быть разные.

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

sco-scorpion
27.03.2023, 09:52
А зачем для этого какой-то дополнительный код? Всё это можно настроить в конфигурации тревог.

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

Евгений Кислов
27.03.2023, 09:54
Вы правы, для простоты кода это будет более логично.
Но хотелось бы понять как можно было бы привязать другие значения к переменным в масиве.

В принципе, вы выше это и показали фактически:

astErrorData[1].wsMessage := "Текст тревоги";

Или я не понял ваш вопрос?

sco-scorpion
27.03.2023, 10:05
В принципе, вы выше это и показали фактически:

astErrorData[1].wsMessage := "Текст тревоги";

Или я не понял ваш вопрос?

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

astErrorData: ARRAY [0..5] OF ErrorData;

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

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


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

В таких случаях лучше использовать в качестве верхней границы массива константу (VAR CONSTANT).
https://stepik.org/lesson/781375/step/2?unit=783979

sco-scorpion
27.03.2023, 11:24
Это я все прописывал в самом коде, при выполнении условия, а если код длинный прийдется выискивать где это находится, а хотелось бы в одном месте.

А что насчет 1 части вопроса?

Евгений Кислов
27.03.2023, 11:36
А что насчет 1 части вопроса?

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

sco-scorpion
27.03.2023, 12:14
Вы же сами структурируете программу и можете разместить весь код обработки тревог в одном месте.
Или я опять чего-то не понимаю?
Возможно что-то я пытаюсь на выдумывать))

Дмитрий Хороменков
27.03.2023, 15:12
Добрый день, скажите пожалуйста , а где можно почитать про SFC , а может уроки какие есть именно 3.5. Про МЭК в особенности.

Евгений Кислов
27.03.2023, 15:55
Добрый день, скажите пожалуйста , а где можно почитать про SFC , а может уроки какие есть именно 3.5. Про МЭК в особенности.

Добрый день.
См. справку CODESYS (https://content.helpme-codesys.com/en/CODESYS%20SFC/index.html) и это руководство (https://ftp.owen.ru/CoDeSys3/98_Books/plcopen_sfc_v10_ru.pdf).

proxy
28.03.2023, 13:11
Добрый день. Подскажите пожалуйста какое указывать значение параметра usiUnitId (ocl.MB_TcpRequest) опрашиваю СП307Р или оставить по умолчанию? И второй вопрос, какую минимальную периодичность опроса слейва рекомендуете использовать? Или как правильно ее подобрать, на что ориентироваться? В системе 2 ПЧ и панель оператора. Спасибо за ответ.

Евгений Кислов
28.03.2023, 13:14
Добрый день. Подскажите пожалуйста какое указывать значение параметра usiUnitId (ocl.MB_TcpRequest) опрашиваю СП307Р или оставить по умолчанию? И второй вопрос, какую минимальную периодичность опроса слейва рекомендуете использовать? Или как правильно ее подобрать, на что ориентироваться? В системе 2 ПЧ и панель оператора. Спасибо за ответ.

Добрый день.
Можно оставить по умолчанию.

Дмитрий Хороменков
28.03.2023, 14:35
66817 66818 В переходе Tance0 GT не хочет работать.

Евгений Кислов
28.03.2023, 16:02
66817 66818 В переходе Tance0 GT не хочет работать.

Почему вы так считаете?

Николай Суриков
28.03.2023, 16:33
66817 66818 В переходе Tance0 GT не хочет работать.

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

Дмитрий Хороменков
28.03.2023, 16:39
Может с программой чего не так? Вот ещё 6682266823 Не работает. А если оставляю всего один оператор допустим АND то работает.6682466825 То есть не хочет работать с несколькими операторами.

Дмитрий Хороменков
28.03.2023, 16:45
Спасибо. Поэкспериментирую.

Дмитрий Хороменков
28.03.2023, 18:38
6682766828 И не так не хочет , 6682966830 И не так . Чего то не понимаю, подскажите.

Евгений Кислов
28.03.2023, 18:39
Подскажите, пожалуйста, чего именно вы хотите добиться?
Активации перехода между шагами?
Тогда нужно внутри перехода (на вашем скрине это, например, Trans0) присвоить условию перехода значение TRUE.
Условие перехода - это неявная булевская переменная, имя которой совпадает с именем перехода.
Т.е. если вы на ваших скриншотах выход OR привязали бы к Trans0 - то условие перехода бы выполнилось, и вы бы перешли в следующий шаг.
Рекомендую также порядок блоков на холсте сделать более логичным (ПКМ на холст - Порядок выполнения - Упорядочить в соответствии с потоком данных).

Дмитрий Хороменков
28.03.2023, 18:45
Если OR выдает TRUE , то и снаружи переход должен работать, а он не работает. Только если использую один операнд. Если несколько в условиях, то ничего не работает.

Дмитрий Хороменков
28.03.2023, 19:13
Подскажите, пожалуйста, чего именно вы хотите добиться?
Активации перехода между шагами?
Тогда нужно внутри перехода (на вашем скрине это, например, Trans0) присвоить условию перехода значение TRUE.
Условие перехода - это неявная булевская переменная, имя которой совпадает с именем перехода.
Т.е. если вы на ваших скриншотах выход OR привязали бы к Trans0 - то условие перехода бы выполнилось, и вы бы перешли в следующий шаг.
Рекомендую также порядок блоков на холсте сделать более логичным (ПКМ на холст - Порядок выполнения - Упорядочить в соответствии с потоком данных).

Огромное спасибо!!! Заработало.

Jerniks
29.03.2023, 13:32
Добрый день!
Установил CodeSys v3.5 SP17 Patch3, при запуске программы выдает следующее сообщение(см.рис).66846
Пробовал запускать установку (.exe) от имени администратора - проблему не решило
Один раз удалось установить и данная ошибка не появлялась, но возникли проблемы с переносом проекта из SP16. При запуске проекта отсутствовал "Менеджер визуализации" (даже самостоятельно добавить не мог,не было соответствующего пункта в всплывающем окне при нажатии на ПКМ)
Решил снова попробовать переустановить приложение и опять начала возникать ошибка описанная вначале обращения.
Каким образом возможно установить программу? Спасибо.

георгий@1001
29.03.2023, 16:31
Добрый день, я новичок в программировании. Поставлена задача контролировать скорость вращения нории либо конвейера, как это реализовать в CODESYS 3.5, на языке FBD или CFC, с примером. За ранее благодарен.

Jerniks
30.03.2023, 13:40
делали так? https://owen.ru/forum/showthread.php?t=37070&p=394410&viewfull=1#post394410

Проделал, не помогло

Евгений Кислов
30.03.2023, 13:45
Проделал, не помогло

Добрый день.
Вам нужно вернуться в состояние "Один раз удалось установить и данная ошибка не появлялась, но возникли проблемы с переносом проекта из SP16." и в этот момент написать мне на почту (в подписи) или на support@owen.ru, указав ваш контактный телефон и данные для доступа по AeroAdmin.

razv
31.03.2023, 12:02
Здравствуйте.
Столкнулся с не правильной нумерацией порядка выполнения блоков в постраничном CFC.
66917
Видно что блок 68 выполняется раньше чем станет известен результат на его третьем входе после выполнения блоков 69-71
66918
А здесь видно что блок 77 выполняется раньше чем поменяется результат на входе InNameEvent после выполнения блока 78

Включен режим потока данных - то есть порядок расставляется автоматически
Отключение этого режима и применение команды Упорядочить в соответствии с потом данных ни чего не меняет.
66919

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

Что делать в этом случае? Как заставить кодесис правильно расставлять порядок выполнения?

Евгений Кислов
31.03.2023, 12:08
Добрый день.
Выложите, пожалуйста, простейший из возможных проектов, в котором эта ошибка продолжит воспроизводиться (с минимумом объектов в дереве проекта, минимумом элементов на холсте и т.д.).
Я постараюсь найти обходное решение или, по крайней мере, передам информацию об ошибке разработчикам CODESYS.

razv
31.03.2023, 13:01
Добрый день.
Выложите, пожалуйста, простейший из возможных проектов, в котором эта ошибка продолжит воспроизводиться (с минимумом объектов в дереве проекта, минимумом элементов на холсте и т.д.).
Я постараюсь найти обходное решение или, по крайней мере, передам информацию об ошибке разработчикам CODESYS.

Архив проекта по ссылке
https://cloud.mail.ru/public/sANB/BBwzqFreH

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

Нужно смотреть ФБ Lamp_Work вкладки Выход (элемент 49) и Оповещение (элемент 58)

Работа над проектом остановилась. С нетерпением жду Вашей помощи

Евгений Кислов
31.03.2023, 13:09
Архив проекта по ссылке
https://cloud.mail.ru/public/sANB/BBwzqFreH

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

Нужно смотреть ФБ Lamp_Work вкладки Выход (элемент 49) и Оповещение (элемент 58)

Работа над проектом остановилась. С нетерпением жду Вашей помощи

Спасибо.
К сожалению, я смогу посмотреть проект только в понедельник и нет уверенности что "быстрое решение" найдется.
Я бы рекомендовал все же расставлять порядок элементов вручную или же отказаться от постраничного CFC в пользу "обычного" и выполнять группировку элементов с помощью превращения их в функции и ФБ.

Николай Суриков
31.03.2023, 15:38
Архив проекта по ссылке
https://cloud.mail.ru/public/sANB/BBwzqFreH

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

Нужно смотреть ФБ Lamp_Work вкладки Выход (элемент 49) и Оповещение (элемент 58)

Работа над проектом остановилась. С нетерпением жду Вашей помощи

Такая ошибка может возникать, если вы что-то редактируете на разных страницах. Добавили блок на второй странице, потом на пятой, потом на первой. Вот CoDeSys и сходит с ума и не может на разных страницах правильно выровнять поток. Как ответил Евгений, или перепишите без постраничного CFC или перепишите ФБ заново только редактируя страницы полностью и по порядку. И не копированием из старого проекта, а именно выбирая блоки из панели инструментов.

Евгений Кислов
03.04.2023, 06:29
Спасибо.
К сожалению, я смогу посмотреть проект только в понедельник и нет уверенности что "быстрое решение" найдется.
Я бы рекомендовал все же расставлять порядок элементов вручную или же отказаться от постраничного CFC в пользу "обычного" и выполнять группировку элементов с помощью превращения их в функции и ФБ.

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

66954 66955

Дмитрий Хороменков
03.04.2023, 20:24
66989 Здравствуйте, а где найти этот узел OwenRTC?

Дмитрий Хороменков
03.04.2023, 20:26
Или может что то другое подскажете для отображения даты и времени.

kondor3000
03.04.2023, 20:37
Здравствуйте, а где найти этот узел OwenRTC?

Смотри скрин 66990

Дмитрий Хороменков
03.04.2023, 21:57
Да в том то и дело что нигде я его не могу найти эти часики. у меня не плк200 стоит. поставил как в овене в справочнике панель, тоже нет. 66991. Вот что сейчас стоит. Пытаюсь менять ничего не выходит.

Дмитрий Хороменков
03.04.2023, 22:05
Ну наконец то , через панель пробил 6699266993 А где ПЛК то набрать , как у вас у меня только панель, и то только вот через эту работает

kondor3000
03.04.2023, 22:27
Ну наконец то , через панель пробил А где ПЛК то набрать , как у вас у меня только панель, и то только вот через эту работает
Вот проект с панелью СПК110.
У панели, блок OwenRTC, там же слева внизу, прокрутите вниз. Откройте блок OwenRTC, щёлкнув мышью, присвойте переменные Времени и датам , 66994
а потом в Визуализации выводите переменные, через %s

sco-scorpion
03.04.2023, 22:30
Евгений Кислов, подскажите, пытаюсь повторить код который вы показывали в видео 4. Создание и загрузка рецептов с автоматическим обновлением списка текстов на ютубе
при компиляции выскакивает ошибка, это может быть связано с тем что у меня виртуальный контроллер?

Евгений Кислов
04.04.2023, 06:14
Евгений Кислов, подскажите, пытаюсь повторить код который вы показывали в видео 4. Создание и загрузка рецептов с автоматическим обновлением списка текстов на ютубе
при компиляции выскакивает ошибка, это может быть связано с тем что у меня виртуальный контроллер?

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

Дмитрий Хороменков
04.04.2023, 08:59
Вот проект с панелью СПК110.
У панели, блок OwenRTC, там же слева внизу, прокрутите вниз. Откройте блок OwenRTC, щёлкнув мышью, присвойте переменные Времени и датам , 66994
а потом в Визуализации выводите переменные, через %s

Спасибо, с этим то я разобрался. Но попробуйте меня понять чего я хочу, может я слишком загоняюсь. Но у меня только с одной овеновскою панелью это работает. То есть по простому выскакивает нужный узел. А у Вас я увидел , что есть еще и ПЛК 200. Вот где мне найти ПЛК 200 и поставить в Девайс. Есть вот список открываю овен а там пусто. А допустим будет какая нибудь другая панель допустим вайнтековская будет ли работать? Извините я только учусь.66999

Евгений Кислов
04.04.2023, 09:34
Вот где мне найти ПЛК 200 и поставить в Девайс.

Если пользуетесь фильтрами по производителям - нужно выбирать не Owen (это наследие былых времен), а Production Association OWEN.


А допустим будет какая нибудь другая панель допустим вайнтековская будет ли работать

Будет, если установить таргет-файл для нее.

kondor3000
04.04.2023, 09:41
Спасибо, с этим то я разобрался. Но попробуйте меня понять чего я хочу, может я слишком загоняюсь. Но у меня только с одной овеновскою панелью это работает. То есть по простому выскакивает нужный узел. А у Вас я увидел , что есть еще и ПЛК 200. Вот где мне найти ПЛК 200 и поставить в Девайс. Есть вот список открываю овен а там пусто. А допустим будет какая нибудь другая панель допустим вайнтековская будет ли работать? Извините я только учусь.

В готовом проекте, правой кнопкой по СПК, выбрать ОБНОВИТЬ устройство, в таблице находите нужный ПЛК200 или ПЛК210 и применяете.
Версия таргета, должна соответствовать версии Codesys.
Новый проект просто создаёте для ПЛК200 или 210.

Дмитрий Хороменков
04.04.2023, 11:50
В готовом проекте, правой кнопкой по СПК, выбрать ОБНОВИТЬ устройство, в таблице находите нужный ПЛК200 или ПЛК210 и применяете.
Версия таргета, должна соответствовать версии Codesys.
Новый проект просто создаёте для ПЛК200 или 210.

У меня только две панели , а где таргеты брать? 67002

Евгений Кислов
04.04.2023, 12:04
У меня только две панели , а где таргеты брать? 67002

Вам надо растянуть фрагмент этого окна с таргетами - на самом деле, там больше устройств.

Дмитрий Хороменков
04.04.2023, 12:17
Вам надо растянуть фрагмент этого окна с таргетами - на самом деле, там больше устройств.

Растянул67003

Евгений Кислов
04.04.2023, 12:30
Растянул67003

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

kondor3000
04.04.2023, 12:49
У меня только две панели , а где таргеты брать?

Тут все таргеты есть, скачайте нужные и установите, для Codesys 3.5.14 SP3, скачивайте таргеты 3.5.14.30-10 или ниже (11.30, 5.5), если нет таких.
https://owen.ru/product/codesys_v3/software

Возможно у вас установлена не полная версия Codesys 3.5.14 SP3, должны быть ещё виртуальные ПЛК, типа Codesys WIN NT 3

Дмитрий Хороменков
04.04.2023, 13:17
67007 Слава Богу! Победил.

Serg52
05.04.2023, 15:24
ПЛК200-04-CS
Версия прошивки 2.4.0516.1618
Таргет 3.5.17.31
CodeSys V3.5.17 Path 3
При каждой попытке подключиться к контроллеру выскакивает сообщение: Невозможно открыть библиотеку '#IoDrvEthernet'. (Причина: Невозможно разрешить библиотеку плейсхолдера 'IoDrvEthernet')
... то же с библиотекой CmpTargetVisu.

Евгений Кислов
05.04.2023, 15:26
ПЛК200-04-CS
Версия прошивки 2.4.0516.1618
Таргет 3.5.17.31
CodeSys V3.5.17 Path 3
При каждой попытке подключиться к контроллеру выскакивает сообщение: Невозможно открыть библиотеку '#IoDrvEthernet'. (Причина: Невозможно разрешить библиотеку плейсхолдера 'IoDrvEthernet')
... то же с библиотекой CmpTargetVisu.

Добрый день.
Выложите ссылку на архив вашего проекта (.projectarchive) - посмотрим, в чем дело.

Евгений Кислов
05.04.2023, 16:03
Посмотрел проект - в нем библиотека IoDrvEthernet не нужна.
Удалите ее из менеджера библиотек.

Serg52
05.04.2023, 16:06
Спасибо, Евгений!
Как всегда, быстро и качественно!

Дмитрий Хороменков
05.04.2023, 16:08
67042 На виртуальном контроллере должны узлы Main Task и Visu Task гореть зеленым , а они не горят хотя все работает. И второй вопрос куда поставить адрес чтобы проверить web визуализацию, где это место.

Евгений Кислов
05.04.2023, 16:18
67042 На виртуальном контроллере должны узлы Main Task и Visu Task гореть зеленым , а они не горят хотя все работает. И второй вопрос куда поставить адрес чтобы проверить web визуализацию, где это место.

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

По второму вопросу - в web-браузере наберите localhost:8080

Дмитрий Хороменков
05.04.2023, 16:36
67045 Это статистика? Тогда все меняется.

Дмитрий Хороменков
05.04.2023, 17:08
То, что узлы не горят зеленым - похоже на визуальный баг.
Откройте узел Конфигурация задач - если цифры в статистике меняются, то все работает корректно.

По второму вопросу - в web-браузере наберите localhost:8080

буквально поработал 20 секунд и слетел в 67046

Евгений Кислов
05.04.2023, 17:12
буквально поработал 20 секунд и слетел в 67046

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

werawe
06.04.2023, 10:06
Добрый день. Могут ли ваши контроллеры быть OPC UA клиентами? Поддерживается ли библиотека CmpOPCUAClient, если да, то может быть у вас есть пример ее использования?