This is topic КОНТР_1 in forum Драйверы / Device Drivers at Форум TRACE MODE: техническая поддержка.


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

Posted by Dmitry Alexandrovich (Участник № / Member № 371) on :
 
драйвер для КОНТР_1 одиночные запросы.

1. один СОМ порт и несколько контролеров, для каналов Input запросы проxодят нормально, но если
'Входу' канала присвоить скажем 5, то (RSDATA *p в Setxxx)
p[0].V.v==1 , a p[0].V.i[0]==25772 и при дальнеших изменениях "Входа" канала увеличивается p[0].V.i[0], а p[0].V.v==1 всегда.
Как определить значение "Входа" канала, нужно скажем оформить разные запросы для разных "состояний" одного канала

2.Если type_cnv==1 || type_cnv==0 в Get_xxx, то наблюдаем ситуацию (1), а если type_cnv==10 || type_cnv==8, то p[0].V.v==0 всегда

Нет возможности узнать значение канала, как его "вычислить"
[Улыбка / Smile]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1) Канал может быть либо Input либо Output, что-нибудь одно. Соответственно для канала Input значение читать бессмысленно, в него драйвер может только посылать значение. Тип канала определяется флажком p[0].F.fmt[3].
Например так:
code:
bool bInput = (p[0].F.fmt[3] == 0);

Если Вам нужно "...оформить разные запросы для разных "состояний"...", то можно либо запоминать текущее состояние в драйвере (для этого нужно предварительно сделать запрос состояния), либо передавать эти состояния через параметры канала, которых максимум 6 байт (структура IA), причем при блоковых запросах доступны только 5.

2) В Get_xxx() нужно ЗАПИСЫВАТЬ значение в канал а не пытаться читать. Параметр type_cnv определяет алгоритм разбора при блоковых запросах:

 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2