Просмотр полной версии : Не передаются параметры функции
Здравствуйте!!!Хотел уточнить.
Есть Функц.блок Block() в нем есть условие:
IF Условие THEN
Func(Source);
END_IF;
У этого блока есть входная переменная, и она как раз передается в функцию.
Условие истинно, т.е.должна вызваться функция и ей должен передаться параметр Source.Но параметр почему то не передается, но функция вызывается и напротив переменной знаки вопроса.Куда копать надо?
для подстраховки, можете Func(Source) заменить на Func(IN:=Source), где IN это имя объявленной входной переменной в функции, а вообще знаки вопросов и должны быть, это же функция, она не сохраняет своих внутренних значений, выполнилась и потерялась сразу же. А если хотите все же посмотреть, то попробуйте не передавать переменную в функцию, а в функции использовать глобальную переменную и перед вызовом функции присваивать глобальной переменной, то что пытаетесь передать в функцию
Когда после такого тестирования, работа функции Вас удовлетворит, вернетесь к прежнему исполнению
Я уже пробывал Func(IN:Source) результатов не дало(
точка останова в функции ?
IN:Source так точно не даст, даже не откомпилится
используйте глобальную
сейчас по подробнее объясню:
FUNCTION SetAlarmMessage : INT
VAR_INPUT
Source: BYTE := 0;
AlarmNum: BYTE := 0;
Priority: BYTE := 0;
Data: REAL := 0;
END_VAR
VAR
Alarm_Msg: State_Message;
END_VAR
State_Message-это структура:
Тело функции:
Alarm_Msg.Source := Source;
Alarm_Msg.VarNum := AlarmNum;
Alarm_Msg.VarType := 1;
Alarm_Msg.Data := Data;
Alarm_Msg._time := tick_PLC;
Alarm_Buffer(In:=Alarm_Msg, WD:=TRUE);
TYPE State_Message :
STRUCT
Source,
VarNum,
VarType: BYTE;
Data: REAL;
_time : DWORD;
END_STRUCT
END_TYPE
а вызывается эта функция из ФБ:
IF VE1.DataInt[V_Open].New = 1 AND VE1.DataInt[V_Open].Current = 1 THEN
SetAlarmMessage(Automate_Num,101,0,1);
END_IF;
Условие выполняется и Automate_Num равен 2.Но в Alarm_Buffer не передаются параметры т.е. Source должен быть равен Automte_Num,но почему то он равен 0.
точка останова в функции ?
Я вообще всю прогрмму отладчиком проходил, и когда дходил до вызова функции, она вызывалась,но там были одни лишь знаки "?"
там были одни лишь знаки "?"Это потому что вы смотрели на объявление, а не на экземпляр. Чтобы посмотреть экземпляр, закройте окно со знаками вопросов и попробуйте открыть снова из дерева проекта — появится окно, где в списке слева будет Instances, а в списке справа — все экземпляры функционального блока.
У функций нет же экземпляров
Чудес не бывает, Ильнур сам себя запутал.
Код выкладывайте если хотите найти таракана
Чудес не бывает, Ильнур сам себя запутал.
Код выкладывайте если хотите найти таракана
Попробывал в режиме эмуляции прокатило,интересно)))Завтра есчо раз попробую на ПЛК.О результате обязательно сообщу, если что выложу код:)
Попробывал в режиме эмуляции прокатило,интересно)))Завтра есчо раз попробую на ПЛК.О результате обязательно сообщу, если что выложу код:)
Что-то не пошло на ПЛК.Скидываю прогру
ПЛК 160
Хотел бы спросить.Вот это программку загрузил в ПЛК, т.е. создал загрузочный вариант и попробывал отдельно без CodeSys.Все нормально отрабатывает.Может это в отладчике так и должно быть?
Хотел бы спросить.Вот это программку загрузил в ПЛК, т.е. создал загрузочный вариант и попробывал отдельно без CodeSys.Все нормально отрабатывает.Может это в отладчике так и должно быть?
во втором посте я и написал, что должны быть знаки вопросов в функции, да и на видео уже конечный результат вывел в глобальную переменную, чтоб можно было убедиться что через функцию все проходит, потому что в самой что то посмотреть неимеет смысла
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot