Страница 1 из 1

Косвенные теги

СообщениеДобавлено: Вт авг 26, 2008 2:37 pm
vinnipux
Есть нобходимость инициализировать кучу кос. тэгов. другими тэгами
тоесть:
num1,num2 - косвенные тэги.
ionum1,ionum2 - тэги I/O

вопрос будет так работать
numAll - косвенный тег
for i-1 to 2
numAll.Name="num"+StringFromIntg(i,10);
numAll.Value="ionum"+StringFromIntg(i,10);
next;

или нельзя таким образом инициализировать тэги.

СообщениеДобавлено: Ср авг 27, 2008 5:50 pm
DoTT
Пусть у вас IOTags все IOInteger, тогда косвенные теги у вас IndirectAnlog. Тогда AllNum.Name может содержать только имя аналогового тега, тогда ваша строка
numAll.Name="num"+StringFromIntg(i,10);

не будет работать.
полю AllNum.Value нельзя будет присвоить строку, ибо оно у нас типа Integer.
Идея ваша интересна, т.к. массивов иногда действительно не хватает. Но не будет работать.
Корректно будет работать numall.name = num1.name, но тогда гибкость теряется.

СообщениеДобавлено: Ср авг 27, 2008 6:22 pm
vinnipux
DoTT писал(а):Пусть у вас IOTags все IOInteger, тогда косвенные теги у вас IndirectAnlog. Тогда AllNum.Name может содержать только имя аналогового тега, тогда ваша строка
numAll.Name="num"+StringFromIntg(i,10);

не будет работать.
полю AllNum.Value нельзя будет присвоить строку, ибо оно у нас типа Integer.
Идея ваша интересна, т.к. массивов иногда действительно не хватает. Но не будет работать.
Корректно будет работать numall.name = num1.name, но тогда гибкость теряется.

спасибо.

но возник другой вопрос
есть такая функция IOSetItem( )
так вот вопрос у нас используется для обмена с ПЛК всего 300 регистров по мотбасу, а сигналов передается порядка 2.5 тыщ.
поэтому все сигналы решили разбить на блоки по 295 сигналов, и просим контролер дать нам определенный блок.
естественно для тегов используем IOSetItem( ).
И вот я подумал, что происходит с тегами которым я назначил таким способом адрес, они взяли значение, потом я вызываю другую функцию она так же назначает другим тегам эти адреса, только там уже лежат значения для этих тегов....
вобщем получается что в один момент времени у меня теги всех блоков в интаче буду смотреть на адреса в которых хранятся данные для других тегов.
вот пример

функция 1. Взять данные из 1 го блока.
Код: Выделить всё
for i=0 to 295
 IntegerAddress=IntegerAddress+1;
 Str=StringFromIntg(IntegerAddress,10);
 Var="block1_"+Text(i,"#");
 IOSetItem( Var,"Con",Str);
next;

в другом скрипте когда данная функция будет завершена, я вызываю
функцию 2. Взять данные из 2 го блока.
Код: Выделить всё
for i=0 to 295
 IntegerAddress=IntegerAddress+1;
 Str=StringFromIntg(IntegerAddress,10);
 Var="block2_"+Text(i,"#");
 IOSetItem( Var,"Con",Str);
next;


По логике получается что тэг block2_1 и block1_1 ссылаются на общий регистр данных и когда я буду читать данные для 3 блока в тэгах block2_1 и block1_1 отобразится инфа для block3_1.
Что бы этого небыло по идее мне необходимо считывать данные с блоков в другие теги, тоесть по сути произвести 1 инициализацию блоков I/O и потом отдавать контролеру инф. какой блок записать в регистры и читать эти данные в через тэги блоков во внутренние тэги.
Код: Выделить всё