Добрый вечер. Подскажите где можно подробно почитать про Алармы? как настраивать, как сбрасывать и т.д.
Вид для печати
Добрый вечер. Подскажите где можно подробно почитать про Алармы? как настраивать, как сбрасывать и т.д.
Добрый день.
Начать можно с этого видео:
https://youtu.be/LlLMSElG59I
Подробнее здесь в п. 7.8:
https://ftp.owen.ru/CoDeSys3/11_Docu..._Visu_v3.0.pdf
Добрый день. Подскажите есть код:
к astErrorData[1-50].xAlarm присваивается ошибка, а xResetErrorMessage соответственно сброс. Как или с помощью чего можно сделать проверку на исключение чтобы astErrorData[0].xAlarm присвоить значение которое сообщает что нету ошибок?Цитата:
//Сброс ошибки
IF xResetErrorMessage THEN
FOR i := 0 TO c_ierrorCount DO
astErrorData[i].xAlarm := FALSE;
END_FOR
END_IF
FOR i := 1 TO c_ierrorCount DO
IF NOT astErrorData[i].xAlarm THEN
astErrorData[0].xAlarm := TRUE;
astErrorData[0].wsMessage := MB_ERROR_PLC_TO_WSTRING(ErrorCode.Error00);
END_IF
END_FOR
Добрый день.
Нужно, чтобы astErrorData[0].xAlarm имело значение TRUE только в том случае, если все astErrorData[1-50].xAlarm равны FALSE?
Или в чем именно задача?
Код://Сброс ошибки
IF xResetErrorMessage THEN
FOR i := 0 TO c_ierrorCount DO
astErrorData[i].xAlarm := FALSE;
END_FOR
END_IF
FOR i := 1 TO c_ierrorCount DO
IF NOT astErrorData[i].xAlarm THEN
astErrorData[0].xAlarm := TRUE;
astErrorData[0].wsMessage := MB_ERROR_PLC_TO_WSTRING(ErrorCode.Error00);
ELSE
// есть ошибка
astErrorData[0].xAlarm := FALSE;
astErrorData[0].wsMessage := MB_ERROR_PLC_TO_WSTRING(...); // укажите код нужной ошибки
END_IF
END_FOR
До проверки всего массива вы не можете однозначно утверждать, какое значение должен иметь astErrorData[0].xAlarm.
Так что, на мой взгляд, обработчик должен быть не в начале кода.
Заменил весь код на это (воспринимаю xError1, xError2, xError3 как сигналы возникновения тревог):
Код:astErrorData[1].xAlarm := xError1;
astErrorData[2].xAlarm := xError2;
astErrorData[3].xAlarm := xError3;
// изначально предполагаем, что ошибок нет
astErrorData[0].xAlarm := TRUE;
FOR i := 1 TO c_ierrorCount DO
IF astErrorData[i].xAlarm THEN
astErrorData[0].xAlarm := FALSE;
// при наличии хотя бы одной ошибки - проверять дальше нет смысла
// так что выходим из цикла
EXIT;
END_IF
END_FOR
Добрый день.
Проект разрабатывается на CODESYS 3.5.17.3.
Каждый раз при загрузке проекта предлагается обновить библиотеку Mx110 Assistant с 3.5.4.17 на 3.5.4.18. Обновлял, но все повторяется: в проекте Mx110 Assistant с 3.5.4.17 и предлагается обновление.
Добрый день.
Проще всего нажимать "Нет" на предложение обновления.
Если вы хотите, чтобы это предложение не появлялось в принципе - то нужно удалить из дерева проекта все шаблоны Mx110 и добавить их заново, но уже с версией 3.5.11.10.
Соответственно, потребуется перепривязать к их каналам все переменные.
Здравствуйте, скажите пожалуйста, а можно ли как-то узнать о долгосрочных планах компании ОВЕН касательно разработки ПО? Планируется ли выход прошивок ПЛК c поддержкой Codesys SP18, SP19, если да, то какие ориентировочные даты выхода? Или может быть планируется переход на другой runtime и среду разработки?
Добрый день.
Могу только сказать, что этом году выход таких прошивок точно не произойдет.Цитата:
Планируется ли выход прошивок ПЛК c поддержкой Codesys SP18, SP19, если да, то какие ориентировочные даты выхода?
Что касается 2024 и далее - сейчас нет возможности сказать что-то определенное.
У нас и так есть вариант ПЛК210 с другим рантаймом:Цитата:
Или может быть планируется переход на другой runtime и среду разработки?
https://owen.ru/product/plk210_kr
В целом, мы рассматриваем различные варианты по поддержке других рантаймов и сред разработки.
К сожалению, опять же, ничего определенного в данный момент сказать не могу по этому поводу.
Добрый день! Подскажите, пожалуйста. Ситуация следующая. Имеем ПЛК200.
1. При настройке обмена по RS485 ModBus RTU средствами библиотеки OwenCommunication при попытке считывания больше 28 регистров появляются ошибки (ошибка контрольной суммы).
2. При конфигурировании обмена стандартными средствами Codesys обмен идёт без ошибок.
3. На СПК этот же программный код (с настройкой средствами библиотеки OwenCommunication) также обменивается данными без ошибок при большом количестве считываемых данных.
Где-то я упустил какую-то настройку, относящуюся к ПЛК200?
Контроллер - ПЛК200-02-CS
Заводской №: 107026230232082967
Каких-то временных разделений специально не делаю. Вызов идёт каждый раз, когда проходит цикл исполнения программы ПЛК.
Подтяжка сейчас отключена. При включении подтяжки удачных чтений становится чуть больше. Но в основном ФБ возвращает ошибку. Со стороны считываемого устройства подтяжка стоит.
При конфигурировании стандартными средствами пауза между вызовами была настроена на 10 мс. Сначала контроллер в диагностике показывал ошибки, после, как я нажал кнопку прочитать диагностику, ошибки перестали появляться, чтение пошло нормально. Подтяжка также была отключена.
Укажите, пожалуйста, чем равен интервал вызова задачи.Цитата:
Вызов идёт каждый раз, когда проходит цикл исполнения программы ПЛК.
Помогите пожалуйста разобраться со структурами. Вложение 67607. Дайте толчок простыми словами.
Дмитрий Хороменков Хотелось бы больше описания.
Как я понял, ты пытается сделать как на Visual Basic было: через имя диалога (тут - визуализации) обратиться к переменной.
Тут так не прокатит. Самое простое - объявить xButton и dwColor глобальными переменными и привязать их к элеменам визуализаций.
Вот что то заработало, но не могу дотумкать как с структурой панели связать.Вложение 67611Вложение 67612Вложение 67613
Вложение 67614 последнюю какую туо не ту картинку отправил. Вот эта правильная.
Я учусь разбираться со структурами и фреймами, осознать их смысл. И вот есть панель, на панели кнопки, и у каждой кнопки соответсвующий индикатор. Вот хочу что бы при нажатии кнопки включался индикатор одним цветом , а при отключении другим. Не могу фреймы и структуры между собой состыковать. Точнее даже с массивом не могу разобраться.
Вложение 67615 вот лесенка.
чтоб при нажатии менялся цвет, в код программы вообще не надо лезть Вложение 67616
Цвет кнопки или индикатора можно изменить по биту. Если напрямую из структуры не получается,
присвойте бит из структуры обычному биту и им переключайте.
У меня из бита структуры всё переключается и обычный индикатор и нарисованный Вложение 67625
Вложение 67626Вложение 67627 Спасибо это я сделал, но теперь вопрос, как разделить. То есть есть 6 панелей и в каждой панели по 5 кнопок и 5 индикаторов. Не понимаю как теперь все это поделить? Сейчас нажимаю любую кнопку и загораются все индикаторы. Понятно что я привязал переменную xButt ко всему сразу. Как исправить?
Может тоже какой массив сделать надо?
У меня вот так, массив у вас уже есть, подправьте для своегоНе совсем понятно, зачем вам вообще структуры тут, может проще было сделать 6 масок в каждой по 5 бит и включать Маск1.1, Маск1.2 ........Маск6.5Код:IF Pan.SetBatton[1].XBool THEN
Pan.SetIndikator[1].IndBool:=TRUE ;
ELSE
Pan.SetIndikator[1].IndBool:=FALSE ;
END_IF
IF Pan.SetBatton[2].XBool THEN
Pan.SetIndikator[2].IndBool:=TRUE ;
ELSE
Pan.SetIndikator[2].IndBool:=FALSE ;
END_IF
Вложение 67629 Всем огромное спасибо, кто помогал, разъяснял, участвовал пусть для кого то простом примере, но мне Вы очень помогли осознать начальное понятие структур. массивов. Все понял осознал, получилось. Даже не пришлось применять второстепенную переменную. Может есть вариант по более простому заполнению таблицы, извините за наглость.