Добрый день, я немного покалечил ПЛК 323 своим кодом, решил разобраться с динамической памятью, после чего в один из прекрасных моментов как залил программу и нажал "запустить" у меня сразу ПЛК вылетел с "Ошибка сети : сетевой вызов не удался" и теперь так все время. При этом счетчик висит в локалке по адресу 192.168.0.77 и пингуется без проблем. НО все время "Ошибка сети : сетевой вызов не удался" создавал новый проект, нажимал "очистить все", отключал от питания ничего не помогает. Как его ресетнуть? Только перепрошивать заново?
PS при этом все лампочки (ошибка - она всегда горела и до и после, связь, питание) кроме РАБОТА - горят.
UPD: пришлось перепрошить, помогло.
Последний раз редактировалось ntro123; 07.01.2016 в 19:26.
Можно ли в одни ФБ передать другой ФБ, но любого типа?
вот что-то типо того есть в codesys 3.5?FUNCTION_BLOCK first_fb
VAR_INPUT
anyfb:ANY_FB;
...
Про указатели я знаю, и использую очень активно, вот выдержка из мануала для cds 2.5:
И как мне указатель использовать для объявления ЛЮБОГО типа?Указатели позволяют работать с адресами переменных или функциональных блоков.
Синтаксис:
<Имя_указателя>: POINTER TO <Тип данных/Функциональный блок>;
Может быть я не так выразился, приведу еще один пример того, что мне требуется:
VAR
var1:fb1;
var2:fb2;
cmd:execution;
END_VAR
КОД:
cmd(var1); // или через указатели т.е. передать адрес ФБ, каким-то хитрым образом передать адрес ФБ и потом узнать что за ФБ через его SIZEOF и как-то вызвать?
cmd(var2);
PS просто вариант:
VAR_INPUT
in_fb:POINTER TO BYTE;
VAR_END
КОД:
in_fb^();
Если он и работает то похож на костыль, не?
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Есть функция, скажем запись времени в счетчик:
write_meterDT(addr:=123123, datetime:=DT#2016-1-1-1:1:1);
Запишет время DT#2016-1-1-1:1:1 в счетчик с номером 123123, т.е. подготовит запрос и отправит его через ФБ send()
Если addr=0 то значит широковещательная команда, и подготовит запрос и отправит его через send_broadcast()
Сейчас это реализовано так, минусы:
Используя другие ФБ для записи/чтения в счетчики у меня куча избыточных повторяющихся операций/кода которые не получается все полностью вынести в отдельные функции и действия, а хотелось бы в таких ФБ как запись врмени, тарифов и тп, сделать просто самый обычный send, без условий "IF addr=0 THEN send_broadcast() ELSE send() END_IF" - т.к. в связи с особенностями библиотеки (она универсальная для всех моделей), не получить сделать вот такой простое и красивое условие, обязательно нужно еще кучу кода добавить, а хотелось бы все это дело убрать от туда и отправлять все тупо на 1 счетчик, и пусть send_broadcast() сама подставляет addr других счетчиков.
Поэтому я решил сделать так:
VAR
wdt:write_meterDT;
END_VAR
КОД:
Есть ФБ для отправки широковещательного запроса, send_broadcast
wdt.datetime:=DT#2016-1-1-1:1:1;
send_broadcast(any_action:=wdt);
И тогда он по циклу из всего списка счетчиков в addr будет автоматом подставлять и выполнять этот запрос для всех счетчиков. Т.е. у всех ФБ был бы одинаковый входной параметр addr, а все другие параметры инициализировались до отправки в send_broadcast().
PS ну если нельзя, то нельзя, просто очень интересно стало =)
Последний раз редактировалось ntro123; 14.01.2016 в 12:56.
подходов куча, если пришли из других языков, то можно через ООП один родитель, а реализация методов разная в каждом конкретном случае, если по стандартному, то наличие множества блоков ни как не должно мешать, повторяющийся код укладывайте в функцию и используете одну везде
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Да пришел из с/с++ и конечно же как вы указали JS +прочии веб языки. Да использую ООП, читал на тему ООП в codesys, пришел к выводу, что не нужно его использовать + очень мало документации по синтаксису ООП в codesys, вообще ладно оставлю все как есть, разумеется повторяющийся код уже давно по максимуму запихнул в функции.
Спасибо за ответ!
добрый день!
Подскажите, с FBD никогда не сталкивался и возник вопрос:
например на st код
Элементарный код.... как его оформить на FBD?if mv.rRead1 > 25 then
mv.wOut1:=TRUE;
ELSE
mv.wOut1:=FALSE;