Воспользуйтесь библиотекой CAA DTutil Extern (входит в состав CODESYS).
Конкретно вам понадобится ФБ GetDateAndTime.
Посмотреть пример можно тут:
http://www.owen.ru/forum/showthread.php?t=21476
Вид для печати
Воспользуйтесь библиотекой CAA DTutil Extern (входит в состав CODESYS).
Конкретно вам понадобится ФБ GetDateAndTime.
Посмотреть пример можно тут:
http://www.owen.ru/forum/showthread.php?t=21476
с помощью асистента ввода Написал следующее (назвал da)
data_time : DATE_AND_TIME;
da: RTCLK;
da.GetDateAndTime(
// xExecute:= ,
// xDone=> ,
// xBusy=> ,
// xError=> ,
// eError=> ,
dtDateAndTime=> data_time);
// eTimezone=> );
Компилятор пишет ошибки
RTCLK неизвестный тип
функциональный блок должен иметь экземпляр устройства
Победил AlarmManager. Научился вытаскивать флаг наличия Alarm-ов. Если кого заинтересовало, вот код Вложение 23297 В примере анализируется наличие активных или не квитированных аварий в менеджере аварий и при их наличии загорается красный прямоугольник.
Пока не нашел простых путей отделить активные аварии от не квитированных. Да мне это и не требовалось. Через одно место можно и это сделать - путем перебора всех имеющихся аварий.
Можно при желании разделить аварии на группы и анализировать их по отдельности или в сочетании (мне так же не требовалось).
P.S. Пример в CS3.5 SP8.1
Здравствуйте Евгений, помогите пожалуйста, вот в таком деле. Я делаю проект где на СПК есть кнопка, нажатие этой кнопки нужно передать в контроллер, я раньше сделал так два проекта и все работало, а вот здесь почему то не работает, гляньте что я там не так сделал. Я уверен что опять мелочь просто. Спасибо.
Нет, это я просто забыл выключить. СПК 107
ААА сорри, уже устал, ПЛК 110-26.60 Р-М
Настройки правильные. Нужно проверить, что вы используете нужный COM-порт СПК (в проекте CODESYS указан COM-порт номер 2 - физически это соответствует первому COM-порту в СПК, т.к. в CODESYS номера портов смещены на +1). Убедитесь, что для порта выбран режим RS-485 в конфигураторе.
Еще, если я правильно понимаю, то у вас ошибка в адресации. Вы записываете press_button в регистр 1 ПЛК - т.е. в его Lamps 2. Вам нужно писать во второй регистр (16#0002), чтобы попасть в Button.
Доброго дня! Подскажите, можно ли сделать так чтоб ФБ вызывался с определенной цикличностью (например, раз в 3 секунды) везде где он используется, а не каждый цикл?
Какую библиотеку следует применять для архивирования данных? В частности для СПК105.
Как получить в codesys 3.5 заводской номер ПЛК323?
Добрый день.
У меня СПК207, пишу первый проект на языке ST.
Опыт программирования хороший, а вот с СПК - два месяца с нуля.
Вкратце, проект представляет из себя монитор состояния станка с общением с сервером посредством сокета.
Требуется при отключении питания СПК произвести некоторые действия (послать сообщение об отключении).
Поиском нашел решения только для ПЛК - "в кофигураторе" включить модуль статистики и использовать параметр power status.
В конфигураторе СПК я не нашел место подключения этого модуля.
Еще одно решение - подключение модуля дискретного ввода и пропажу питания определять при пропадании сигнала на нем.
Подскажите пожалуйста, можно ли реализовать обнаружение отключения питания СПК средствами самого СПК.
Спасибо.
Вопрос как раз про это - реализуемо или нет.
Гаснет-то не сразу - не хватит времени чтобы "крикнуть в последний раз"?
Извиняюсь если уже было, но 76 страниц просмотреть нелегко. У меня такая проблема:
arr : ARRAY [0..1] OF WORD
t1 : REAL;
ptr : POINTER TO REAL;
arr[0]:=%IW1;
arr[1]:=%IW2;
ptr:=ADR(arr);
t1:=ptr^;
Выдает ошибку AccessViolation при разыменовывании указателя. Не подскажете в чем проблема?
Указатели разыменовываются только по кратным своему типу адресам. Массив с элементами WORD с большой вероятностью оказывается на некратном 4 байтам (REAL) адресе. Используйте SysMemCpy из SysLibMem.
Скажите, кто знает как сделать так, чтобы на экране СПК двумя кнопками + - листать визуализации, одной вперед, другой назад. Нашел в конфигурации ввода изменить отображаемую визуализацию, там можно выбрать "предыдущая визуализация" и "следующая визуализация" Что то никак не освоить как они работают и являются ли они тем, что мне нужно.
Это не то, что вам нужно. Можно привязать к кнопке переход на конкретный экран.
Или у вас в проекте несколько десятков экранов, и вы не хотите настраивать на каждом из них кнопки отдельно?
Тогда можно привязать к кнопке переменную типа String, которая будет собираться из имени экрана визуализации и значения счетчика.
Т.е. у вас в проекте на всех экранах будет одна пара кнопок, по нажатию на которые (через действие Выполнить ST-код) будет происходить инкремент/декремент счетчика (i), потом вы собираете имя экрана визуализации в стиле CONCAT('Visu', INT_TO_STRING(i) ) и переходите на этот экран. Соответственно, экраны визуализации в проекте должны называться 'Visu1', 'Visu2' и т.д.
Кроме того, в ST-коде нужно учесть, что на последнем экране нажатие на кнопку "+" должно возвращать пользователя на первый экран, а нажатие на "-" на первом экране - отправлять на последний.
Большое спасибо, попробую как Вы сказали.
товарищи, как программно перезапустить ПЛК323?
Евгений, спасибо, сделал как Вы написали, все получилось, за исключение того, что когда нажимаю на "+" визуализации перелистываются по нарастанию при достижении последней, переключается на первую. С кнопкой "-" все то же самое. При этом счет начинает сбиваться, когда листаю сначала в + а затем в -. Посмотрите, если не сложно.
ST-код надо исполнять не в цикле, а вешать прямо на кнопку.
Зададим переменным начальные значения - пусть по умолчанию мы находимся на первом экране:
Вложение 23394
По нажатию на кнопку сначала выполняем код - проверяем, не находимся ли мы на последнем (для кнопки "+") / на первом (для кнопки "-") экране. Если мы на нем, то сбрасываем счетчик на минимум / максимум и склеиваем имя экрана, после чего переходим на него. Если мы не на этом экране, то делаем инкремент/декремент, склеиваем имя экрана, переходим.
Таким образом, по текущему значению i вы четко будете понимать, на каком экране находитесь в данный момент.
Вот код для кнопки "+" в случае четырех экранов визуализации в проекте.
Вложение 23395
Нужно понимать, что действия, привязанные к кнопке, выполняются последовательно сверху вниз.
Извиняюсь, немного неточно написал, при переключении с "+" на "-" и наоборот фактический счет не сбивается, склеивается Vis1 Vis2 Vis3 Vis4 и наоборот Vis4 Vis3 Vis2 Vis1 а с отображаемыми визуализациями происходит такая штука при нажатии на "+" отображается 1-я 2-я 3-я затем когда нажимаю на минус вместо обратного счета отображается 4-я потом 3-я 2-я и тд.
Это происходит потому, что по нажатию на кнопку вы сначала переходите на экран, а потом что-то делаете со счетчиком. Надо - наоборот. Прочитайте внимательно мой предыдущий пост.
Возможно, вам будет понятнее, если вы выведете на экраны значения переменных i и Vis, чтобы видеть, чему они равны в начальный момент времени и что с ними происходит после нажатия на кнопки.
Все сделал как Вы сказали, но ничего не изменилось. i и Vis принимают нужные значения, не сбиваются. А визуализации при переходе с "-" на "+" отображается 1-я 2-я 3-я затем когда нажимаю на минус вместо обратного счета отображается 4-я потом 3-я 2-я и тд.
Евгений, в очередной раз спасибо, что ткнули носом. Я только сейчас до конца понял содержимое Ваших прошлых постов.
Добрый день. Создал диалог для управления насосом. В результате при нажатии на кнопку Пуск программа уходит в ошибку-исключение.
Вложение 23481
Причем проблема появилась при добавлении R-триггера.
Товарищи, написал код, и забыл поставить p:=p^.next, в результате бесконечный цикл получился, и кодесус с плк его не распознают, и ПЛК как кирпич лежит, как мне его сбросить? перепрошивать не хочется, пускает в putty, но очень медленно. Батарейка на корпусе ресетнит только время?
Отключите питание, подождите 30 секунд, нажмите и держите кнопку стоп, и включите питание.
Визуализация. В свойствах кнопки отсутствует функция OnMouseClick и многие другие. В чём дело? См. скриншот.
Вложение 23503
Набросал проект, CS3.5 SP5
Вложение 23506