Passing Engine Handle to LabWindows CVI

Hi All,
I have run into a situation in test stand where I want to use it in conjunction with a DLL that I have developed in CVI.  In order have them interact properly, I wanted to pass the current TestStand Engine handle into my CVI DLL.  Afterwards, the plan is to use that engine handle along with the tsapicvi activeX control to do what I need to do.
However, I cannot seem to get this working correctly, as I keep getting an invalid handle error from my CVI activeX controls with the handle I have passed into it from teststand.  Here is what I have so far.
In TestStand Sequence A calls the CVI DLL:
Sequence A has a single parameter called Engine.
Parameter Engine has the teststand Category TSObject with type TS::IEngine passed By Value.
The value passed into the parameter Engine is RunState.Engine
The CVI DLL has a single function GetHandle
GetHandle has a single parameter which is TSObj_Engine *ts_engine.
This function calls TS_EngineGetLicenseDescription (*ts_engine, NULL, 0, &desc); (just a random function that I use to test it).
Any suggestions on where I might have gone wrong with this?
CVI 7.0
TestStand 3.1

Hi Ray,
Thanks for the quick response! 
To answer your question, yes, I do set the Engine parameter in TestStand to RunState.Engine.
 However, all I know about the TS:IEngine containter is that it has one (or more) data fields that get passed to my DLL.  I don't know what those fields are, so on the DLL end I am not sure what I should be getting.  i.e. the function prototype in my DLL should probably contain some struct, but I don't know what the struct is.  The only guess I can make is that teststand is passing me a TS_IID_Engine type struct (defined in tsapicvi.h).  However there are 4 data fields in this struct convienently labeled Data1 - Data4, all of which i tried using as a handle, and none of which worked.

Similar Messages

  • Announcement: LabWindows/CVI 2010 SP1 Run-Time Engine Updated

    A new version of the LabWindows/CVI 2010 SP1 Run-Time Engine (10.0.1.434) is now available for download. The new version includes Security Update 5Q5FJ4QW which resolves security vulnerabilities in components installed with LabWindows/CVI 2010 SP1 and earlier and LabVIEW 2011 and earlier. Further details can be found at KnowledgeBase Article 5Q5FJ4QW: How Does National Instruments Security Update 5Q5FJ4QW Affect Me? Installing the security update will have the same effect as installing the new version of the Run-Time Engine.
    The update can be downloaded from the Drivers and Updates page. The LabWindows/CVIRun-Time Engine is a free download.
    National Instruments
    Product Support Engineer

    The correct link should be this one
    Proud to use LW/CVI from 3.1 on.
    My contributions to the Developer Zone Community
    If I have helped you, why not giving me a kudos?

  • Passing a struct from TestStand to LabWindows/CVI

    I am passing a struct to a dll written in CVI.
    Here is the problem: The code is written in CVI (c code) if I use "struct MyStruct *MyData" as the parameter definition in the dll TestStand works fine. But if I define my struct using a typedef (i.e. typdef struct MyStruct) then use MyStruct *MyData as the parameter TestStand throws a warning. 
    I an using the C\C++ adaptor.
    It is too late in the programming effort to go back and remove the typedef.
    So, how do I get TestStand to accept the typedef?
    Thanks
    Carmine
    Solved!
    Go to Solution.

    In ANSI C, the struct names and type names belong to separate namespaces. You can declare structs several different ways:
    1) struct structName { int x; };
    2) typedef struct { int x; } typedefName;
    3) typedef struct structName { int x; } typedefName; // Note: structName can be same as typedefName.
    I'm assuming you are using the 2nd example above in which case LabWindows/CVI automatically generates a struct name (something like __unknown_1) that Testand uses.
    Although you said it is too late to remove the typedef, can you add a struct name as in example 3 above? You can use the same name as the typedefName and TestStand will recognize it.

  • LabWindows/CVI 2009 Run-Time Engine update

    I wanted to let everyone know that NI has released an udpated CVI 2009 Run-Time Engine. Information on what bug(s) this update fixes can be found here. If you are currently not using the CVI 2009 Run-Time Engine, you do not need to install this update.
    This is an updated installation of the CVI Run-Time Engine, not a patch. If you download and install this update it will upgrade whichever version of the CVI Run-Time Engine you currently have to version 9.1.0.428 (CVI 2009 released with version 9.1.0.427). One way to find out which version of the CVI Run-Time Engine you have installed is to view the version number of c:\windows\system32\cvirte.dll. If you install version 9.1.0.428, any installer distributions that you create from any version of the CVI ADE will include version 9.1.0.428.
    If you have not yet installed LabWindows/CVI 2009, it's recommended that you install this update, either before or after you install CVI 2009.
    Luis

    To be clear, the original problem that you reported ("Attempt to free pointer to memory not allocated by malloc() or calloc()") might very have been the problem that this patch fixed, which was in fact new to 2009. But that problem only happens if there were actual plots in the graph.
    However, after looking at the "dynamic memory is corrupt" isse some more, it turns out that it is actually expected behavior, believe it or not. This is a limitation of easytab controls, caused by how they use callback chaining in their implementation. Whenever a panel or a control has its callback chained, you cannot change the callback, or make a copy of it after the chaining takes place. This is described in the EasyTab_ConvertFromCanvas function help ("...For the same reasons, do not call DuplicatePanel or DuplicateCtrl on any of these panels or controls after the Easy Tab control has been created.").
    As you probably have read elsewhere, easytab controls are quite obsolete. They were a stopgap "solution" to the problem of there not being a native tab control in the CVI user interface library. Native tab controls were finally added in CVI 8.0, and so we recommend that, if possible, users update their code to use these instead.
    Luis

  • How to discard or release mutex in labwindow CVI.

    Hi,
    How to  release mutex  in labwindow CVI.
    I have one existing DLL . This DLL  using method 'CreateMutex(NULL, TRUE, "USBDriverRunning");' . 
    We need  to create another dll , this DLL be  release Mutex   'USBDriverRunning'.  
    Thanks
    Mukesh Kumar

    CreateMutex returns an handle that is to be passed to ReleaseMutex for releasing the resource. After that you must call CloseHandle on the same handle to clean up everytging.
    I don't know whether the handle of a mutex created with NULL in the first parameter can be passed to another DLL; I have never tried to do something similar but be careful with the following note int he function help:
        If this parameter is NULL, the handle cannot be inherited by child processes.
    You will need to carefully read the Remarks section of the function help and make your own tests.
    Proud to use LW/CVI from 3.1 on.
    My contributions to the Developer Zone Community
    If I have helped you, why not giving me a kudos?

  • Always getting errors when trying to control YOKOGAWA 7651 power supply on Labwindows/CVI

    Hi,
    I'm trying to set the voltage on the YOKOGAWA 7651 power supply through labwindows/cvi. I've set up a numeric slide on my userinterface with callback function "yoko7651dcvolts" and constant name "YOKO7651DCVOLTS".
    I always get this error when I run my program:
    "FATAL RUN-TIME ERROR: "DcSource.c", line 53, col 65, thread id 0x00001F3C: Invalid argument type: found 'pointer to double', expected 'pointer to int'."
    This error points to the third argument of the GetCtrlVal function below. The program/compiler wants me pass the variable "yoko1volts" as integer, but I want to (and should) be able to set voltages as floating numbers.
    Plus, even when I declare "yoko1volts" as integer, it stills doesn't work. All I get is zero, zero, and zero...on the power supply meter everytime I press the numeric slide.
    This is the section of the C code that is problemic:
    int CVICALLBACK yoko7651dcvolts (int panel, int control, int event,
    void *callbackData, int eventData1, int eventData2)
    double yoko1volts;
    switch (event)
    case EVENT_COMMIT:
    GetCtrlVal (yoko76511Panel, YOKO7651_1_YOKO7651DCVOLTS, &yoko1volts); // to read the values entered on the numerical meter on the user interface
    yk7651_set_volts (yoko76511Panel, yoko1volts); // set the entered values as voltage on the instrument
    break;
    return 0;
    This is the related h-file:
    #define YOKO7651_1 4
    #define YOKO7651_1_YOKO7651SWITCH 2 /* control type: binary, callback function: yoko7651switch */
    #define YOKO7651_1_YOKO7651DCVOLTS 3 /* control type: scale, callback function: yoko7651dcvolts */
    Please help, how can I fix this issue?
    All the drivers (including the YOKOGAWA 7651 power supply) are properly installed and mounted. As a matter of fact, I can successfully turn the power supply on and off with the code below:
    int CVICALLBACK yoko7651switch (int panel, int control, int event,
    void *callbackData, int eventData1, int eventData2)
    int yoko7651switchstate;
    switch (event)
    case EVENT_COMMIT:
    GetCtrlVal (yoko76511Panel, YOKO7651_1_YOKO7651SWITCH, &yoko7651switchstate);
    SetCtrlVal (yoko76511Panel, YOKO7651_1_YOKO7651SWITCH, !yoko7651switchstate);
    yk7651_output (yoko76511Panel, !yoko7651switchstate);
    break;
    return 0;
    It's just setting the voltage on the power supply that is very problematic. Any help is appreciated...Thanks.
    Solved!
    Go to Solution.

    I second Al opinion of a disconnection between the UIR and the variable that holds the panel handle.
    As a side note, I noted that the problematic line is reading the value of the controll whose callback is executed:
    #define YOKO7651_1_YOKO7651DCVOLTS 3 /* control type: scale, callback function: yoko7651dcvolts */
    int CVICALLBACK yoko7651dcvolts (int panel, int control, int event,
    void *callbackData, int eventData1, int eventData2)
    double yoko1volts;
    switch (event)
    case EVENT_COMMIT:
    GetCtrlVal (yoko76511Panel, YOKO7651_1_YOKO7651DCVOLTS, &yoko1volts); // to read the values entered on the numerical meter on the user interface
    yk7651_set_volts (yoko76511Panel, yoko1volts); // set the entered values as voltage on the instrument
    break;
    return 0;
    In a situation like this, I would try using GetCtrlVal (panel, control, &yoko1volts); instead, that should get rid of all problems in panel handle / control ID.
    Despite this solution is working, in any case I would deep into the problem as an incorrect panel handle can lead to erratical behaviour in other places of the program.
    Proud to use LW/CVI from 3.1 on.
    My contributions to the Developer Zone Community
    If I have helped you, why not giving me a kudos?

  • Book: LabWindows/CVI Programming for Beginners

    Has anyone read the followong book LabWindows/CVI Programming for Beginners LabWby Shahid F. Khalid ?
    This book in not in print anymore and  inpossible to find.
    Does anyone know of any similar source material?
    I have both LabWindows/CVI Basics I&II but the content is extremely limited and not enogh details.
    Does NI offer anything better than the embedded Help?
    A Programmers Reference would be nice.
    Thanks.

    Hello NI Nubie,
    I have that book, and also its "advanced" sequel by the same author.  They both went out of print a long time ago.  The books are OK, but they are only available on the secondary market for ridiculous prices now, and that is assuming that you can even find them.
    If I could pass on some advice that might be more helpful to you in learning CVI: pretend those books do not exist for now.  Instead, I think that for learning CVI, there is nothing better than looking at other people's CVI project-level code and really understanding it, inside and out, and then making your own modifications to it to enforce what you just learned from it.  There are several places to start looking for project-level CVI code, which I will list in (what I think) are the highest-to-lowest priority of your training.
    The first place I recommend is the examples that ship with CVI (located in the "samples" directory under the CVI installation directory).  I say this because these are supported by the NI developers and support crew.  In fact, back in 1995 when I was learning CVI 3.1, I dove into the "Icon Editor" application, for several reasons: it was a *complete* application (as opposed to the other, mostly point-solution "academic" examples under the samples directory), it showed how to segment your code into multiple source and header files, and it showed many advanced user interface features (menus, cut-and-paste).  There is now an "example finder" to help locate examples that "fit" to what you are currently trying to accomplish.  I also use the freeware "grep-like" tool called "Agent Ransack" (URL is below) to hunt down specific CVI functions and identifiers (such as certain EVENTS and how these examples use them).
    Agent Ransack on MythicSoft.com
    The second place I recommend is the other "support" locations on the NI web site.  There are knowledgebase articles, tutorials, submitted examples, community examples, and also extra "academic" examples from NI engineers that aren't the same as the ones that ship with CVI.  There are also whitepapers scattered in there as well, and a few that have hidden sample code that is embedded at the bottom of the article.  You really have to hunt for this stuff, and it would be great if the NI folks could try to index this a bit better somehow.  I sometimes even resort to using Google's search engine to find them on the NI web site, because the NI search engine may not find them.
    The third place I recommend are user-based web sites created by power-users of CVI who like to share their code.  Two that I found long ago that remain at the top of the list (in my opinion).  One is Guillaume Dargaud's site, where he has lots of CVI examples and freeware.  The other is Philippe Baucour's "Rebel" CVI site (but you will need to use an online translator if you don't speak French, though).
    Guillaume Dargaud's web site (drill down for CVI examples and freeware)
    Philippe Baucour's "Rebel" CVI web site
    Finally, you might find it interesting to know that there is a tremendous repository of C source code scattered all around the Internet, mostly as part of free and open-source software projects, many of which are supported on sites such as SourceForge.net, and many other locations.  Many of these places are filled with people (in forums or mailing list servers) who live in the C programming world on a full-time basis, and can help you through some of the advanced techniques.  Some of these projects might be targeted to Windows, some use cross-platform techniques, so they have a chance of being applied to your CVI efforts.  There is also an entire universe of programming "libraries" and capabilities that you can use to augment your CVI projects as well.  All of this because of the open-source revolution, riding on the back of GNU/Linux and the community and corporate entities that are backing it all.  Examples that come to mind are Cygwin and MinGW.  If you only have the time to just look up these two items on Wikipedia, you will see that this is just the tip of the iceberg of the possibilities that are available to you as a C and CVI programmer on Windows.
    I hope this was helpful to you.
    JB
    To whom it may concern: My alias is also my nickname, I've had it since I was a (very) skinny basketball-playing teen. OK, so I've got a 38 inch waist now, but my hometown friends haven't shaken that appellation for me. I trust that you will someday be OK with that alias, as I have been with that nickname.

  • Software Development Engineer positions at Hysitron, Inc. in Minneapolis (LabWindows CVI exp preferred)

    Software Development Engineer
    Hysitron, Inc. is a premier scientific instrument manufacturer. Founded in 1992 with headquarters located in Eden Prairie, MN we are committed to promoting nanotechnology by developing advanced transducer and control technology. This leadership has made Hysitron the world leader in nanomechanical test instruments. The TriboIndenter®, TriboScope®, Ubi, and other Hysitron innovations have opened new horizons for scientists interested in investigating and understanding mechanical properties of materials at nano-scale. Hysitron fosters an environment and culture where innovation flourishes, teamwork is encouraged, and superior performance is rewarded.
    Hysitron invites applications for multiple software development engineer positions from those aspiring to explore and succeed in the nano world. Hysitron, Inc. is an Equal Opportunity Employer M/F/D/V
    Job responsibilities
    The software development engineers would be responsible for developing test and measurement software applications for nano-mechanical testing instrumentation. Job deliverables would include:
    -          Develop software applications in C based Labwindows CVI for Hysitron Instrumentation
    -          Support the development of applications to address challenges in instrument automation and control
    -          Test software applications using debugging and simulation tools
    -          Perform software releases and software quality assurance activities
    -          Participate in the design of new software products
    -          Perform maintenance activities for existing products
    -          Adapt and deliver on quality software development practices
    Minimum qualifications
    -          BS in Computer Science/ Computer Engineering/ Equivalent Scientific or engineering discipline
    -          Min of 3 yrs experience in Instrumentation software development in an industrial or R&D environment
    -          Expert at programming language C, knowledge of C++
    -          Working knowledge of various communication protocols, e.g. USB, RS232, IEEE, RS485, TCP/IP, Modbus
    -          Knowledge of general software design/documentation processes in test and measurement systems
    -          Proficient problem solving skills
    -          Strong analytical and technical skills
    -          Excellent communication and interpersonal skills
    Preferred Qualifications
    -          Proficient with LabWindows CVI and XML
    -          Working experience with DSP(Code Composer Studio) and/or FPGA level programming
    -          Exposure to digital electronics and instrumentation
    -          Working experience in Robotics interface programming
    -          Experience with Controls/Automation engineering
    Application and Information
    Qualified candidates should send a letter of application and their resumes to (please include ‘SW Engineer’ in subject line):
    Hysitron, Inc.
    10025 Valley View Rd
    Eden Prairie, MN 55344 USA
    Phone: (952) 835-6366
    Fax: (952) 835-6166
    E-MAIL: [email protected]
    Web: www.hysitron.com

    This position is still accepting resumes/CVs.

  • How to use CAN256 and CAN257 in Labwindows CVI?

    I am trying to learn about CAN programming in LabWindows CVI. None of the samples do anything other than generate cryptic error messages. I do not have a card or interface device yet, but reading in the help files I found this:
    "NI-CAN provides a virtual CAN card with two interfaces, CAN256 and CAN257. The two virtual interfaces are connected by a virtual bus. When you write CAN frames to one virtual interface, those frames are received by the other virtual interface, and can be read as channels. This feature allows you to read and write CAN data in the same manner as two real CAN interfaces connected by a real CAN cable. The conversion does not require real NI CAN hardware, and your application is not required to check for specific CAN IDs."
    I modified the Waveform ouput project and add CAN256 to the dropdown in the uir file. However when I run it, I get the same error message as always, error -1074388725.
    Is there an example CVI code someplace to demonstrate the use of these virtual channels?

    Thanks Drew.
    Ultimately, my customer provided me with a WriteCAN256.vi and ReadCAN257.vi that were perfect for my needs. The WriteCAN256.vi along with my NI USB 8473s allowed me to provide data collection on multiple CAN devices and to verify that my Software can handle all data types from CAN devices.
    Note: My customer allowed me to share his .vi's. They are enclosed ...
    Best Regards,
    Don W
    Attachments:
    CanBus Read (Frames)_85.vi ‏55 KB
    CanBus Write (Frames)_85.vi ‏48 KB

  • How to access the result list in teststand after execution using labwindows​/cvi

    I am developing a user interface in labwindows/cvi that runs multiple teststand sequence files and would like to combine their reports (generated in teststand) into a single file at the end of a UUT. What is the best way to do this? At the moment, I'm trying to access the result list local variable after the execution has ended using API calls from labwindows/cvi and an end-of-execution callback event but those run-time variables do not exist anymore. How do I get a hold of the result list array at the end of an execution? I would like to grab this variable and pass it along from sequence to sequence using labwindows/cvi and not teststand itself. Is this possible? Any help would be great.
    Thanks in advance,
    Luis

    Hey Luis,
    Check out the response to this thread at the NI TestStand board here!

  • Using the SVDEx function in LabWindows​CVI

    Hello,
    I am writing an application in LabWindows CVI to display and analize data that we obtain in an optical experiment.  The data is a matrix where the subsequent rows represent spectra collected a different times. There are about 200 columns and 100 rows in each matrix. I want to use singular value decomposition using the  SVDEx function. I get an error every time i try to execute the code in debugguing mode:
    FATAL RUN-TIME ERROR:    The program has caused a 'General Protection' fault at 0x0342BC16.
    I believe that I am passing the incorrect arrays to SVDEx. I  was wondering if there is any example code available, so I can learn how tro do do this.
    Here is a fragment of the code where I call the function SVDEx:
    //declare the arrays to hold S U V
    double *U,*S,*V;
    int isizeS=Y_DATA_POINTS;
    int i;
    int AnalisisError=0;
    if (X_DATA_POINTS<Y_DATA_POINTS) {isizeS=X_DATA_POINTS;}
    //Allocate arrays
    U=malloc(Y_DATA_POINTS*X_DATA_POINTS*sizeof(double​));
    S=malloc(2*isizeS*sizeof(double));
    V=malloc(Y_DATA_POINTS*X_DATA_POINTS*sizeof(double​));
    AnalisisError = SVDEx (adAbsMap, Y_DATA_POINTS, X_DATA_POINTS, FULL_SIZE, U, S+isizeS, V);
    FATAL RUN-TIME ERROR:   "Visualize_12.c", line 2451, col 17, thread id 0x00000E18:   The program has caused a 'General Protection' fault at 0x0342BC16.
    Any help will be very much appreciated.
    J. Hodak

    Hi,
    Thanks for trying to find an answer. I just realized now where the probem was. My mistake was when i allocated the arrays for holding the matrices. Because i was assking SVDEx to carry out FUL SIZE decomposition I must declare the arrays U and V to be , Y_DATA_POINTS*, Y_DATA_POINTS doubles and X_DATA_POINTS*, X_DATA_POINTS doubles respectively. My code was wrong, I was declaring the sizes to be smaller than necessary and  "Visualize_12.c", line 2451, was the call to SVDEx, and col 17 was pointing t that mistake. It took me a while to realize this because the error message did not exlicitly specify that the size or the array passed was too small. Now it is working well. But I believe that it will help to have an example to get started with this.
    Thanks again,
    Fundadero.

  • Does LabWindows/CVI: IVI Instrument Driver Development Course contain subject like Communicating with Instruments(SCPI commands)

    HI,  I am having query regarding; Does LabWindows/CVI: IVI Instrument Driver Development Course contain subject like Communicating with Instruments(SCPI commands)
    LabVIEW: LabVIEW Instrument Control Course Day 1 coves subject like Communicating with Instruments This lesson describes how you can use LabVIEW tocommunicate with instruments. You will learn how touse NI-VISA, NI Spy, SCPI commands, and theInstrument I/O Assistant to perform instrument I/O. My question is to you,Does LabWindows/CVI: IVI Instrument Driver Development Course covers similar kind of training like Communication with Instruments? I am more interested in learning How to use SCPI commands to perform instrument I/O. Will you please guide me? So I can choose correct training course. Thanks & Regards,Jay +91 90110 62790EXFO Electro Optical Engineering India Pvt. Ltd.701, 7th floor The Ceribrum IT Park,Kalyani nagar. Wadgaown Sheri India, Maharashtra, Pune 411014  

    stick to the original thread.

  • Dynamic memory is corrupt (Labwindows/cvi 2010)

    I have a multi threaded application....where I have a buffers allocated ineternally in the threads,,...A user interface is present to abort the therad execution.
    Here is the code in one of the threads (NOTE: status is set by a user button to EXIT the program):
    int EthernetDataStructureThread (void *functionData)
        CmtSetCurrentThreadPriority (2);
        EthernetData GetData={0}, *data=NULL;
        data = &GetData;
        /* Use a buffer to read the data from the queue which is coming from TCP read with fresh data */
        const void *BufferEth;
        int BytesRead=0;
        int BytesWritten=0;
        char ReadErrorMessage[256];
        BOOL bitset = FALSE;
        if ( (BufferEth = (EthernetData*)malloc(EthernetDataSize)) != NULL)
            while ( !status )
                BytesRead = CmtReadTSQData (Queue_TCPRead_EthernetData, BufferEth, EthernetDataSize, TSQ_INFINITE_TIMEOUT, 0);
                memcpy (data, BufferEth, EthernetDataSize);
                /* Empty the queue so that we don't have data in next time. */
                CmtFlushTSQ (Queue_TCPRead_EthernetData, TSQ_FLUSH_ALL, NULL);
                //Pass on the data to the Main thread
                BytesWritten = CmtWriteTSQData (Queue_EthernetData_Main, BufferEth , EthernetDataSize, 1, NULL);
                if ( BytesWritten != EthernetDataSize)
                     free(BufferEth);
                    BufferEth = NULL;
                    exit(0);
                Delay(0.02);
            if (status && !bitset)
                free(BufferEth);
                BufferEth = NULL;
                bitset = TRUE;
        return 0;
    My problem is: free(BuffEth) always says Dynamic Memory is corrupt......When I put a breakpoint and keep seeing the resource tracking window, I can see it getting executed fine as the resource tracking window greys out the memory block....but then suddenly free wants to exceute again...and causes the "dynamic memory is corrupt" error.
    I am using LABWINDOWS /CVI 2010 SP1 in WinXP.
    Please help me ASAP....very much appreciated.
    Regards
    NITIN
    -Nharish

    Thank you for your reply Jackie.
    I am calling Free only once...there is an If condition there.
    See the attched video for my problem...Free frees the memory block (see the greyed out portion in resource tracking window but still the statement controls remains there and free executes again, throwing error).
    Do you  think it is some sort of bug in LABWINDOWS.
    See the attached video.
    -Nharish
    Attachments:
    FreeproblemLabwindows.avi ‏4781 KB

  • Permission Denied Error when calling Matlab script from LabWindows​/CVI

    Hello,
    I am reading in data from a DAQ and am writing it to a .csv file in LabWindows/CVI.  I am then sending this data to Matlab to be filtered.  I would like the filtered data to be accessed by LabWindows/CVI so that I can display it as a strip chart.  I have gotten everything to work except the writing to a file in a Matlab script that is called from LabWindows/CVI.  I am basically using the shipped example in found in the activex demo. (http://zone.ni.com/devzone/cda/epd/p/id/2994). I select the script that I want to run and each time it tries to open a file with write permissions I get a "Permission Denied" error.  This occurs when using fopen() in Matlab.  I have also tried using csvwrite() as well as dlmwrite().  Each one gives me a similar error.  The script currently does not try to do any data processing.  It just opens the file, if it is successful it then prints "hello" and then closes it.  The script works well when it is run in Matlab, just not when it is called in LabWindows/CVI.  Below is the script.  Any thoughts, comments or suggestions are greatly appreciated.  I am also open to using other approaches for sending data between Matlab and LabWindows/CVI.  Thanks in advance!!
    fclose('all');
    [file, errmsg] = fopen('out.txt', 'w');
    if(file<0)
        disp(errmsg)
    else
        fprintf(file, 'hello');
        fclose('all');
    end;
    [file, errmsg] = fopen('out.txt', 'w');
    if(file<0)    
    disp(errmsg)
    else  
     fprintf(file, 'hello');    
    fclose('all');
    end;

    I am using Windows 7.  I am running CVI as an administrator and was able to get rid of the "Permission Denied" error by going into the User Account Controls in windows and changing it to "Never Notify".  However, this did not fix the problem of Matlab not being able to write to a file when the script is run from CVI.  In the Matlab code below, It now gets in to the "else", suggesting that fopen() returns a good file handle.  After getting in to the else statement, it will not actually write to the file, nor does it create it.  However, I can make changes to the plot settings and those appear.  Everything is functional when run from Matlab but when run from CVI, things get screwy with opening the file for writing.  It handles the read well.  It seems like there would have to be some file permission errors but, in the CVI program, I open and write to the file "in.csv".  Any help is greatly appreciated.
    clear;
    fclose('all');
    t = zeros(1000);
    t = csvread('in.csv');
    for i=1:1000
        t(i) = t(i)*4;
    end;
    [file, errmsg] = fopen('out.txt', 'w');
    if(file<0)
        disp(errmsg)
    else
        fprintf(file, 'goodbye');
        for i=1:1000
            %t(i) = t(i)*3;
            fprintf(file, '%f,', t(i));
        end;
        fclose(file);
        plot(t/3, t);
        ylabel('t');
        xlabel('Time (s)');
        title('Is this really working?!?');
    end;
    Thanks,
    Chris

  • Labwindows/CVI multitaches: acquisition et contrôle d'instrument

    Bonjour a tous,
    Dans le cadre d'un développement sous labwindows/CVI je suis amené à réaliser une acquisition tout en contrôlant autre un instrument. Je pense que la solution est le multi taches.
    Mon problème est que je ne connais pas du tout cette méthode, et je souhaiterais savoir si s'est une solution viable pour à la fois lancer une acquisition pendant que je contrôle un instrument (reset de son alimentation). Dans le cas contraire, pouvez vous m'indiquer une solution, avec la démarche a réaliser?
    Je sais réaliser une synchronisation entre une génération et une acquisition mais dans ce cas, il faut gérer une carte d'acquisition et un autre instrument. Comment faire??
    Je vous remercie
    Cordialement,
    Julien_B

    Hello,
    La bonne vieille recherche d'exemples (Help-> Find Examples) reste toujours efficace. Je vous suggère d'aller faire un tour dans la partie MultiThreading. On y trouve toutes les principales fonctions pour créer des threads et y exécuter du code (en parallèle, donc !).
    Cet article est aussi un bon départ.
    Cdt,
    Eric M. - Application Engineering Specialist
    Certified LabVIEW Architect
    Certified LabWindows™/CVI Developer

Maybe you are looking for