PDA

Просмотр полной версии : Помогите разобраться с подпрограмой



Andrey Tishakov
22.11.2012, 10:03
Помогите разобраться. Хочу вставить действие или подпрограмму в проект, вставляю а у меня при компилировании не видится эта подпрограмма. Подскажите как правильно сделать.

Gans
22.11.2012, 10:42
Здравствуйте, Andrey Tishakov.

Помогите разобраться. Хочу вставить действие или подпрограмму в проект, вставляю а у меня при компилировании не видится эта подпрограмма. Подскажите как правильно сделать.
Подпрограмму надо еще и вызвать из основной программы :-)
и конечно сам проект очень поможет отвечать на Ваши вопросы.

SBER
22.11.2012, 10:53
Надо про нее в PLC_PRG написать и будет вам счастье.

Andrey Tishakov
22.11.2012, 13:48
как написать про нее. я писал в языке fbd мне нужно вставить подпрограмму на ST которая будет проверять условие. Я создаю подпрограмму выбираю язык, у меня слева появляется дерево в котором отображается PLC _PRG и моя подпрограмма. Я описую условие. А дальше как указать что она должна работать при проверки достигнутой скорости. Пробовал через менеджер задач, толком так и не разобрался. В основном теле надо как то явно указать что то а что не понял, пытался присваивать переменные. Нифига не получается основная прога работает как будто бы я и не писал подпрограмму . Что я делаю не так.

Andrey Tishakov
22.11.2012, 13:49
Здравствуйте, Andrey Tishakov.

Подпрограмму надо еще и вызвать из основной программы :-)
и конечно сам проект очень поможет отвечать на Ваши вопросы.
а как это сделать то. Я ж в таком вот контексте вопрос задал.

vasylye
22.11.2012, 14:59
как написать про нее. я писал в языке fbd мне нужно вставить подпрограмму на ST которая будет проверять условие.

Если вы создали новый функциональный блок (неважно, на каком языке)

в основной подпрограмме вы должны объявить экземпляр этой подпрограммы, ну и далее вставлять этот экземпляр как блок.

petera
22.11.2012, 15:02
Ну хотя бы справку (F1) почитали.
Если Вы пишите программу на языке fbd, а свой FB или подпрограмму написали на ST, то в общем случае в разделе описания переменных у них должны быть описаны
VAR_INPUT - это входные переменные;
VAR_OUTPUT- это выходные переменные.
вставляйте свой FB или подпрограмму в нужное место строки основной программы, так же как и другие (стандартные элементы). Используйте ассистент ввода (F2) и выбирайте свой FB в разделе "Пользовательские функц. блоки" или подпрограмму в разделе "Пользовательские программы".
Получите элемент со входами и выходами, как Вы их описали. Подключайте ко входам и выходам переменные или другие функц.блоки

Gans
22.11.2012, 15:02
Взгляните примерчик во вложении
Если не поможет то выложите программу с указанием что не получилось

Andrey Tishakov
22.11.2012, 18:27
Я создавал функциональный блок в fbd потом сделал из него внутреннею библиотеку и вставил в основную программу. Таким способом у меня получилось создать блок и там я действительно задавал входные и выходные переменные но самое странное когда я это делал подпрограммой то у меня ничего не вызывалось я хелп излазил весь вдоль и поперек наверное что то пропустил переменные обьявлял глобальными так ничего и не запустил. Посмотрю ваш пример может пойму что я не так делал.

Andrey Tishakov
22.11.2012, 18:28
Еще вопрос вставлять это имеется ввиду имя подпрограммы.

petera
23.11.2012, 08:07
Я создавал функциональный блок в fbd потом сделал из него внутреннею библиотеку и вставил в основную программу. Таким способом у меня получилось создать блок и там я действительно задавал входные и выходные переменные но самое странное когда я это делал подпрограммой то у меня ничего не вызывалось я хелп излазил весь вдоль и поперек наверное что то пропустил переменные обьявлял глобальными так ничего и не запустил. Посмотрю ваш пример может пойму что я не так делал.
Зачем такие сложности? Внутренняя библиотека зачем?
Вы ассистентом ввода пользуетесь? В нем можно выбирать элементы разных классов и в том числе подпрограммы (программы) и функц. блоки созданные Вами.

Andrey Tishakov
23.11.2012, 11:44
На основании вашего примера я попробовал сделать в своей программе подпрограмму и понял что если я не укажу в подпрограмме явно входные и выходные переменные то у меня нечего не заработает . Я прав или как.

Andrey Tishakov
23.11.2012, 11:45
а насчет ассистента ввода то я им практически не пользуюсь. Иногда вызываю по шифт ф2. Это он или нет.

Gans
23.11.2012, 12:03
Здравствуйте, Andrey Tishakov.

Я попробовал сделать в своей программе подпрограмму и понял что если я не укажу в подпрограмме явно входные и выходные переменные то у меня нечего не заработает . Я прав или как.
Странно, в моем примере я не указывал входные и выходные переменные и у меня счетчик секунд работает (или я а5 вопроса не понял :-)
Возможно Вы имели ввиду вызов "функционального блока"? Так в моём примере есть и этот момент, там таймер помогает считать секунды.

Andrey Tishakov
23.11.2012, 12:52
Дело в том что на вашем примере я попробовал сделать у себя подпрограмму. Как я сделал , написал подпрограмму в основной выбрал создать элемент, обозвал его именем своей подпрограммы. Проверил симуляцией у меня подпрограмма стала светиться хотя раньше такого не было , как я понял я этим элементом вызвал подпрограмму. Но дальше у меня нечего не работало. То есть подпрограмма считала что то внутри себя и не более того. Тогда я в подпрограмме обозначил явно переменную входа и выхода у меня на элементе с именем подпрограммы(в основной программе) появились вход и выход после того как я их привязал к переменным в основной проге у меня начала работать основная используя подпрограмму. Я правильно сделал.

Andrey Tishakov
23.11.2012, 12:59
я приаттачил файл посмотрите что я неправильно сделал там конечно бардак вы просто посмотрите правильно ли я вызываю подпрограмму

petera
23.11.2012, 13:16
Дело в том что на вашем примере я попробовал сделать у себя подпрограмму. Как я сделал , написал подпрограмму в основной выбрал создать элемент, обозвал его именем своей подпрограммы. Проверил симуляцией у меня подпрограмма стала светиться хотя раньше такого не было , как я понял я этим элементом вызвал подпрограмму. Но дальше у меня нечего не работало. То есть подпрограмма считала что то внутри себя и не более того. Тогда я в подпрограмме обозначил явно переменную входа и выхода у меня на элементе с именем подпрограммы(в основной программе) появились вход и выход после того как я их привязал к переменным в основной проге у меня начала работать основная используя подпрограмму. Я правильно сделал.
Если у Вашей подпрограммы нет выходных переменных, то она живет собственной жизнью (что-то делает внутри себя) и основной программе ничего не известно, что делает Ваша подпрограмма, но результаты ее работы можно все таки использовать в основной программе:
1. Основная программа и подпрограмма используют глобальные переменные. Изменение глобальных переменных в подпрограмме будут видны и в основной программе и на оборот, изменение глобальных переменных в основной программе будут видны и в подпрограмме.
2. В основной программе использовать внутренние переменные подпрограммы, например подпрограмма называется My_PGG и имеет внутренние переменные Vol1, Vol2.
Тогда в основной программе к ним можно обращаться так
A:=My_PGG.Vol1 (*присвоили в основной программе, то что изменилось в подпрограмме*)
My_PGG.Vol2:=12345 (*передали в подпрограмму число 12345 *)

Andrey Tishakov
23.11.2012, 15:22
То есть в том файле что я прислал ненужно было обьявлять переменные для модуля который я назвал именем подпрограммы а достаточно было после указания модуля с именем подпрограммы потом присваивать переменные которые есть в подпрограмме предварительно обьявив их глобальными так что ли. У меня вот с этой тонкостью проблемы появляются. Ладно буду пробовать. Просто как то проблематично увязывается в голове связка двух языков учитывая что я паршиво знаю st а если точно то по моему мнению не знаю вообще.