Просмотр полной версии : CODESYS V3.5. Вопросы и ответы
Евгений Кислов
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 начинаются перемигиваться.
В чем может быть проблема?
Доброго времени суток.
Возникла проблема в написании программы по включению одной кнопки.
При написании на языке 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
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:
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.
Правильно я понимаю, что для объявления глобальных 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
А вот это в точку. Спасибо.
Ничего я сам не устанавливал. Это шаблон.
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
День добрый.
Подскажите пожалуйста, как в 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. Может, вы другую ссылку отправить хотели?
Принято, проработаем этот вопрос в следующих прошивках.
Потому что, похоже, канал 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
Спасибо, тогда буду пробовать их тормошить.
Добрый день! Ваше обращение находится в работе, ожидайте, специалист Вам ответит.
Добрый день.
У меня в этой версии прошивки описанная проблема не воспроизводится.
См. скриншоты:
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, во всяком случае.
Справедливо. Поправил свой пост.
Добрый день.
Пытаюсь читать значения из рецептов функцией 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 начинается.
Спасибо подробно и понятно. И отдельное спасибо за оперативный ответ
Кстати наблюдение которое удалось выяснить - через метод 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
Да уж я опять напутал вход с переменной, но все таки хотелось бы без всякой писанины ограничить вход, а не переменную. Может есть такая возможность. Потому как блок он и есть, что то отдельное он должен сам себя защищать. Если подскажете прям спасете.
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
Добрый день. 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, которая должна быть зарелизена в апреле.
Здравствуйте Евгений. Удалил CODESYS и почистил реестр (насколько смог). После повторной установки присутствует только язык ST, если создавать проект по шаблону то появляется такое сообщение 66611, нажимая на ОК - закрывается проект. (мне кажется вы упоминали что-то об этом на вебинаре «CODESYS V3.5: ответы на вопросы пользователей»).
Евгений Кислов
18.03.2023, 21:23
Здравствуйте Евгений. Удалил CODESYS и почистил реестр (насколько смог). После повторной установки присутствует только язык ST, если создавать проект по шаблону то появляется такое сообщение 66611, нажимая на ОК - закрывается проект. (мне кажется вы упоминали что-то об этом на вебинаре «CODESYS V3.5: ответы на вопросы пользователей»).
Добрый день.
Удалите CODESYS и установите заново в точности по инструкции:
https://youtu.be/3KcJWZEVXCg
Дмитрий Хороменков
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 строка
Здравствуйте. ПЛК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 ?
Я думаю, лучше начать именно с этого варианта.
Добрый день.
Есть ли возможность сделать так, чтобы для каждого элемента массива при просмотре переменных в онлайн-режиме был свой комментарий?
Пример (сами комментарии дорисованы)
66689
Евгений Кислов
23.03.2023, 12:58
Добрый день.
Есть ли возможность сделать так, чтобы для каждого элемента массива при просмотре переменных в онлайн-режиме был свой комментарий?
Пример (сами комментарии дорисованы)
66689
Добрый день.
Насколько я помню - такой возможности нет.
Здравствуйте. Подскажите пожалуйста, возможно ли программно обнулить переменную импульсов инкрементного АВ энкодера (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).
Добрый день. Подскажите пожалуйста какое указывать значение параметра 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 - то условие перехода бы выполнилось, и вы бы перешли в следующий шаг.
Рекомендую также порядок блоков на холсте сделать более логичным (ПКМ на холст - Порядок выполнения - Упорядочить в соответствии с потоком данных).
Огромное спасибо!!! Заработало.
Добрый день!
Установил CodeSys v3.5 SP17 Patch3, при запуске программы выдает следующее сообщение(см.рис).66846
Пробовал запускать установку (.exe) от имени администратора - проблему не решило
Один раз удалось установить и данная ошибка не появлялась, но возникли проблемы с переносом проекта из SP16. При запуске проекта отсутствовал "Менеджер визуализации" (даже самостоятельно добавить не мог,не было соответствующего пункта в всплывающем окне при нажатии на ПКМ)
Решил снова попробовать переустановить приложение и опять начала возникать ошибка описанная вначале обращения.
Каким образом возможно установить программу? Спасибо.
георгий@1001
29.03.2023, 16:31
Добрый день, я новичок в программировании. Поставлена задача контролировать скорость вращения нории либо конвейера, как это реализовать в CODESYS 3.5, на языке FBD или CFC, с примером. За ранее благодарен.
делали так? https://owen.ru/forum/showthread.php?t=37070&p=394410&viewfull=1#post394410
Проделал, не помогло
Евгений Кислов
30.03.2023, 13:45
Проделал, не помогло
Добрый день.
Вам нужно вернуться в состояние "Один раз удалось установить и данная ошибка не появлялась, но возникли проблемы с переносом проекта из SP16." и в этот момент написать мне на почту (в подписи) или на support@owen.ru, указав ваш контактный телефон и данные для доступа по AeroAdmin.
Здравствуйте.
Столкнулся с не правильной нумерацией порядка выполнения блоков в постраничном CFC.
66917
Видно что блок 68 выполняется раньше чем станет известен результат на его третьем входе после выполнения блоков 69-71
66918
А здесь видно что блок 77 выполняется раньше чем поменяется результат на входе InNameEvent после выполнения блока 78
Включен режим потока данных - то есть порядок расставляется автоматически
Отключение этого режима и применение команды Упорядочить в соответствии с потом данных ни чего не меняет.
66919
Естественно при таком порядке все работает не правильно.
Можно конечно вручную изменить порядок но это совсем не простая задача, к тому же это придется проделывать каждый раз когда функциональный блок будет изменяться.
Что делать в этом случае? Как заставить кодесис правильно расставлять порядок выполнения?
Евгений Кислов
31.03.2023, 12:08
Добрый день.
Выложите, пожалуйста, простейший из возможных проектов, в котором эта ошибка продолжит воспроизводиться (с минимумом объектов в дереве проекта, минимумом элементов на холсте и т.д.).
Я постараюсь найти обходное решение или, по крайней мере, передам информацию об ошибке разработчикам CODESYS.
Добрый день.
Выложите, пожалуйста, простейший из возможных проектов, в котором эта ошибка продолжит воспроизводиться (с минимумом объектов в дереве проекта, минимумом элементов на холсте и т.д.).
Я постараюсь найти обходное решение или, по крайней мере, передам информацию об ошибке разработчикам 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 Слава Богу! Победил.
ПЛК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 не нужна.
Удалите ее из менеджера библиотек.
Спасибо, Евгений!
Как всегда, быстро и качественно!
Дмитрий Хороменков
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-визу.
Просто перезапустите его - и все будет работать еще полчаса.
Добрый день. Могут ли ваши контроллеры быть OPC UA клиентами? Поддерживается ли библиотека CmpOPCUAClient, если да, то может быть у вас есть пример ее использования?
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot