Чтение состояния LabView controls (С++)

ActiveX, .NET, DLL
Ответить
Andy
interested
interested
Сообщения: 5
Зарегистрирован: 10 июл 2014, 17:15
Версия LabVIEW: 2013
Контактная информация:

Чтение состояния LabView controls (С++)

Сообщение Andy »

Здравствуйте!

Пишу С++ код, управляющий LabView программой. Управление производится через ActiveX, а именно:

Код: Выделить всё

   _ApplicationPtr pLV;
    VirtualInstrumentPtr pVI;
    
   _bstr_t lvPath(VI_PATH);
    _bstr_t lvPassword("");

   _variant_t lv_ctrl;

    CoInitialize(NULL);

   // Create Reference to LabVIEW ActiveX COM object

    pLV.CreateInstance("LabVIEW.Application");
   
   // Create Reference to VI (LabView source Object)

    pVI.CreateInstance("LabVIEW.VirtualInstrument");
    	                         
    // assign an object reference to the pVI.
     
     pVI = pLV->GetVIReference(lvPath, lvPassword, FALSE, 0x01);

     // configure the VI to show its front panel on Call.
       pVI->ShowFPOnCall = TRUE;

      pVI->Run(TRUE);

Далее я пытаюсь опросить значения контролов LabView проги (окошек, опций и т.д.) через GetControlValue().
И если состояния кнопок типа Push Button (типа TRUE-нажато и FALSE-не нажато) и даже строки из окошек читаются вполне нормально, то при попытке узнать состояние кнопки типа Radio Button возникает ошибка.
Иными словами, "затык" происходит вот здесь:

lv_ctrl = pVI->GetControlValue(_bstr_t("RadioButton Name"));

Прошу "ткнуть носом" в причину ошибки ;)
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Чтение состояния LabView controls (С++)

Сообщение dadreamer »

А на что конкретно ругается? Какое сообщение об ошибке?
Ради интереса попробовал, только не на C, а в Дельфях, т.к. там пример чуть переделать... Всё работает, единственное, метод VI.GetControlValue нужно применять к имени группы радио-кнопок:

Код: Выделить всё

control := VI.GetControlValue('Radio Buttons');
2014-07-10_23-06-34.jpg
Если у вас радио-кнопки находятся не в группе, а сами по себе, тогда их нужно "определять" по имени, в этом случае вернётся True / False.
Andy
interested
interested
Сообщения: 5
Зарегистрирован: 10 июл 2014, 17:15
Версия LabVIEW: 2013
Контактная информация:

Re: Чтение состояния LabView controls (С++)

Сообщение Andy »

Если у вас радио-кнопки находятся не в группе...
В моём случае они находились как раз в группе. Так что поправил, глядя на Ваш пример, и всё заработало :drink:

Код: Выделить всё

_variant_t lv_ctrl_cluster;

lv_ctrl_cluster = pVI->GetControlValue(_bstr_t("Radio Buttons"));
int iii = lv_ctrl_cluster.intVal;
iii = iii ^ 1;
pVI->SetControlValue(_bstr_t("Radio Buttons"),iii);
Sleep(200);
lv_ctrl_cluster = pVI->GetControlValue(_bstr_t("Radio Buttons"));
iii = lv_ctrl.intVal;
В данном примере происходит программное переключение между двумя радиокнопками, находящимися в группе.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приложениями»