This is topic t13 драйвер in forum TRACE MODE 5 бесплатная версия / TRACE MODE 5 Free version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/18/t/000284.html

Posted by dark (Участник № / Member № 1430) on :
 
Здравствуйте.
У меня есть драйвер t13(тип:фиксированное подключение).Можно ли в функции fread производить запись и чтение,например, с внешнего порта. Ещё посылать какое-нибудь число в эту функцию.
Спасибо.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В функции t13_fread можно выполнять любые операции. Только надо учитывать, что этот вызов реализуется в режиме online. Значит, любые операции, которые будут занимать продолжительное время, будут задерживать цикл обработки базы каналов.
 
Posted by nizinkinD (Участник № / Member № 1706) on :
 
Добрый день.
Существует небходимость отправлять в драйвер сразу 3 числа(управление манипулятором по 3 координатам).Но функции в драйвере имеют 1 параметр для переменной,да и каналы перают 1 значение.
Можно это как-то сделать?
Например описать функцию 3 переменных и 3 канала,чтоб каждый передал в свою переменную.
Спасибо.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Только через отдельные каналы (с указанием типа координаты в настройке удаленного адреса каждого из них).
 
Posted by nizinkinD (Участник № / Member № 1706) on :
 
Я не понял,можно на примере?
Есть 3 канала,
функция выглядит примерно так:
MyFunction(int x,int y , int z);

f_write(???здесь что??)
{
MyFunction(значение_канала_1,значение_канала_2, значение_канала_3);
}
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Для каждой координаты (X, Y и Z) нужно будет создать отдельный канал. А один из параметров структуры IA выделить под указание, какой именно параметр по этому каналу передается, чтобы драйвер из всех трех значений этих каналов мог составить координаты для функции.
В одном канале передать это нельзя.
 
Posted by nizinkinD (Участник № / Member № 1706) on :
 
Спасибо.
 
Posted by nizinkinD (Участник № / Member № 1706) on :
 
Добрый день!

1)
quote:

typedef union
{
unsigned char c[6];
unsigned short int i[3];
}IA;
\ia – шестибайтовое число, составленное из настроек канала I0 (слово), I1(слово), C2 (байт) и C3 (байт);

Интересно то, что эти настройки принимают только числа,символы не сохраняются.Зачем же тогда в объединении есть массив символов?
unsigned char c[6];

2) Так как даполнение к подтипу in_null наверное можно I0 , I1, C2 и C3 назначить произвольные для идентификации каналов?
Причем одновременно можно использовать только 3 настройки так как у нас есть всего 6 байт(если это максимум возможной длины).
Спасибо.
 
Posted by nizinkinD (Участник № / Member № 1706) on :
 
Извините , с количеством настроек я переборщил [Улыбка / Smile]
Там все верно.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1) unsigned char - обозначает тип данных BYTE (1 байт), он не был никогда "буквенным символом".
 
Posted by nizinkinD (Участник № / Member № 1706) on :
 
Добрый день
code:
 

switch(ia.i[0])
{
case 1:
{
ChangeXYZ((int)v,0,0);
break;
}
case 2:
{
ChangeXYZ(0,(int)v,0);
break;
}
case 3:
{
ChangeXYZ(0,0,(int)v);
break;
}

}

Создал 3 канала .настройку I0 определил для каждого канала разную(1,2,3) срабатывает. перемещение только по оси Х(case 1)даже когда я посылаю значения в другие каналы.Тоже самое если заменить ia.i[0] на ia.i .Функция ChangeXYZ верна на 100%.
Как мне определять адреса наналов по настройкам и сравнивать их!!
Можно на моем примере.
спасибо.
 
Posted by nizinkinD (Участник № / Member № 1706) on :
 
Добрый день.
Почему нельзя "различать" каналы по его имени??
Что нибудь вроде этого:
if(name=="name1")
{work1();}
if(name=="name2")
{work2();}
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1) В какой функции производится проверка по switch()?
2) У нескольких каналов может быть одно и тоже имя.
 
Posted by nizinkinD (Участник № / Member № 1706) on :
 
1)f_write(char* name,IA ia,float v)
2)понял,но имена каналов разные,канал разве не передает имя параметру функции.
3)как "составляется адрес канала" из настроек i0,i1,c0,c1?
например i0=1,i1=0,co=0,c1=0 ia=??
или i0=1,i1=1,co=0,c1=0 ia=?
а так i1=1,i1=1,co=1,c1=0 ia=?

Хотя бы принцип поясните.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1) Нужен Ваш проект в ТМ, DLL и исходник. На E-mail техподдержки.
2) А если что-либо в проекте менять будете, то каждый раз перекомпилировать драйвер?
3) Обратите внимание, что структура IA - это UNION, поэтому за принципом его формирования рекомендую обратиться к литературе по программированию, там есть определение типу union.
 
Posted by nizinkinD (Участник № / Member № 1706) on :
 
1)шлю
2)вопросов нет
3)нет уж формирует адрес канала ТМ.Мне только нужно "выудить" его.Я уже перепробовал кучу вариантов.К примеру Я брал и ia.i ,и ia.c суммировал по всем значениям и эту сумму сверял с 1,2,3 ,в результате полылки значений разными каналами-срабатывает только канал с настройкой(i0=1).Непонятно.Может он там маски какие накладывает и т.п.
Вы можете ответить мне,как разработчики,на конкретный вопрос(тип-пустой,подтип-fast r/w):i0=1,i1=0,co=0,c1=0 ia=??
или i0=2,i1=0,co=0,c1=0 ia=??

спасибо.
 
Posted by nizinkinD (Участник № / Member № 1706) on :
 
Проблема решилась [Улыбка / Smile]
Дело в том,что я кнопки привязывал в каналам(РПД)в настройках кнопки (Об,Кан,Атр),но реально канал указывается в кнопке "+" внизу. Конечно я виноват из-за своей невнимательности, но честно говоря это и ваш промах.Ненужные настройки путают.Топик закрыт.
Спасибо за помощь.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2