Boolean reference is strict in Event Callback
In my LabVIEW app, I havea an ActiveX webBrowser for which I've created an Event Handler for the DocumentComplete event (Fired when the document being navigated reaches the ReadyState_Complete). To the UserParameter I pass a cluster of references - two are string indicators and one is boolean. In the callback's User Parameter, the string references show up, but the boolean reference has an orange asterisk next to it that says 'strict', so then it doesn't show up when I try to unbundle the cluster. Why is the boolean 'strict' ?
I don't see that problem here. The boolean reference is a strict type, but I can unbundle it just fine and use a property node on it.
Open the two vi's attached. Run the main.
- tbob
Inventor of the WORM Global
Attachments:
ClusterOfRefsMainVi.vi 8 KB
ClusterOfRefsSubvi.vi 9 KB
Similar Messages
-
References won't close in UserMessage Event Callback example.
I download the following example:
http://zone.ni.com/devzone/cda/epd/p/id/2606.
I was going to use some of the features of this example to pass variables from my OI to TestStand. Well unfortunately, this example with the modified UserMessageCallback locks up everything with an R6025 error. Well, it actually will also give me the Property Object warning dialog ONLY if I have the Debug Options set within the Station Options->Preferences tab set to report Object Leaks, otherwise I get the R6025 error. Only solution is to go to Task Manager and close out LabVIEW.
I attached a picture of the callback, I believe I am closing ALL possible references. I don't understand why TestStand still thinks that the SequenceContext reference is open? Is there something I have to do special to close the SequenceContext reference because of the Variant to Data function?
I am running TestStand 4.2.1 and LabVIEW 2010.
Thanks,
PH
Attachments:
UserMessage Event Callback.png 53 KB
Debug Warnings.PNG 19 KB
R6025 Error.JPG 12 KBThe original example failed, hence it did not work Again, it did not work with TS 4.2 and LV 2010.
All I was trying to do is use that example, to pass data from my Operator Interface to TestStand using the SequenceContext. It was mentioned as an example in a previous post here:
http://forums.ni.com/t5/NI-TestStand/Passing-Variable-from-Operator-Interface-to-Process-Model/td-p/...
I attempted to add a fix for the Variant to Data function per reference to the KB, proposed by Anand Jain, in the previous posts!
In the long run, I will have to go with the method proposed by Ray Farmer. 'The simplest way is just store it in the StationGlobals.' Not exactly the method I prefer to use, but it seems to be working.
Thanks,
PH -
Problem with register event callback in use of instrument control
now, i use the register event callback to register a value change of a boolean control on the front panel, and wire the cluster's ref of the instrument control parameters to the user parameter input, then create the callback vi. In the callback vi, i select the pump-control subvi, and pass the user parameter to the subvi. The problem is that, when i press the boolean control, the instrument (here is pump) can act, but immediately, the code crashes.
I use labview 8.6
Attachments:
callback vi.png 8 KB
register event callback.png 8 KBYou would wire the event registration wire that comes out of the Register for Events node into an event structure. You will need to right click on the event structure and check off "Show Dynamic Event Terminals" and it into that. Then you can create a new Event Case that uses the dynamic event. You can place your subVI in that event in whatever way you want. (Just drop the subVI in or do a Call by Reference there, or whatever.) Look in the Example Finder for "Dynamically Register for Events.vi".
-
How to place event callback components and "main-VI" components in the same Front Panel?
What I'm trying to accomplish:
Place a .NET component, which generates events, and other standard LabVIEW components in the same Front Panel. The standard LabVIEW components should be updated when events are being generated in the .NET component.
How I tried to solve it:
Problem:
The event callback code must reside in a separate event callback VI. In order to "pass the event up" to the main VI I tried to use a global variable. The interrupt does occur:
but I was hoping that the string indicator would be updated when the event occurred, but it wasn't.
Questions:
What's the best way to solve what I try to accomplish? If I want to solve the problem on the picture above, how would I do it (it may not be the best solution, but I'm still curious what's wrong)? Please feel free to be over-explicit when replying as I am novice LabVIEW programmer. Thanks in advance for any help.There are two bundle functions for creating clusters. The function simply called Bundle operates almost exactly like the Build Array function I showed. The type of the output cluster depends on whatever you wire in as inputs. You don't have to supply a specific type parameter.
The function called Bundle by Name takes in a specific type of cluster in the top input and allows you to fill in the values of that specific type of cluster. To create the specific type of cluster you want, you need to create a cluster of string references. Here's how to do that:
Go to the Front panel and drop down an empty cluster shell.
Go to the Refnum palette and drop down a Generic Control Refnum. Now here's a cool trick to turn that generic refnum into a string-specific refnum (a so-called strictly-typed refnum). Grab a string from the controls palette and drag it into the Generic Control Refnum. Once you drop it, you'll see the refnum change its icon to display a string picture.
Make copies of this string refnum (as many as you need) and add it to the cluster shell.
Now, if you're making specific types of clusters to work with, now is the absolute best time to learn about typedefs if you haven't already. It will save you hours and hours (if not days) of development time in the future. Trust me!
Jarrod S.
National Instruments -
Data is not updating in calss & Convert vi reference to strictly type reference vi
Hi,
In the attached project file there is a Class called 'ClassSample.lvclass' having 3 different data types Boolean, Numeric and Variant(not really sure, Variant can be use for strict data type reference). From this three we careated the 'VIs for data member access' you can see them in project file
My questions are,(Please refer attached screenshot)
1. Though member of same class, why value is not updating at probe 16 ?
2. How to convert vi reference to strictly type reference vi ?
Thank you.
Attachments:
Capture.JPG 426 KB
ClassSample Project.zip 116 KBIt depends a bit on your final intention. Bascially you have a shared state that you want to access asynchronously from different places. If you know that the actual object is only created once (terminilogie here is a bit shaky as every wire split would create a copy of the LVOOP object but I hope you know what I mean), you could use a global or Action Engine to store the state. Using a DVR for this state and adding the DVR to your object class data is however a more scalable approach as it will allow you to instantiate more than one object of that class and each one will contain its own DVR that will reference the same value for the specific object instance even if you split the object wire, creating actually two copies of that object (but for the purpose of this discussion they would be still the same object instance).
Queues could work if you create a single element queue but you would always need to use Preview Queue rather than Dequeue in order to maintain the value in there.
Rolf Kalbermatter
CIT Engineering Netherlands
a division of Test & Measurement Solutions -
Event Callback Problems during compilation
Hi
I try to register a callback vi with the "Register Event Callback"-node. I
pass a reference of an array as user parameter into to the "Register Event
Callback"-node. Everything works well in the development environment. But
when I try to build an executable I get the Error "1003 . The vi is not
executable".
What is wrong?
MareikeHello Mareike,
you can surch in the http://www.ni.com/support/ for "error" and "1003". There you will find a lot of links where this error is discussed. With a little luck, there will be an answer.
Regards ThomasD -
Event Callback from a Reentrant VI Recursion Error
Greetings,
I am using Register Event Callback with an ActiveX object to respond to user mouse events. The problem is that when I run the VI (the main, calling vi) as reentrant, Labview gives an error that the "Callback.vi" is attempting to recursively call "Main.vi".
Is there a way around this problem? I intend to run two copies of "Main.vi", so reentrant execution seems necessary.
- Colin HolbrookHi Colin,
Are you placing the Register Event Callback inside of the Main VI and then wiring the same Main VI to the VI Reference terminal? If so, then that explains why you are getting an error. You cannot use the Register Event Callback to call a VI within itself. If this is not the case, then please post a simple VI that demonstrates the problem. -
Recursive ActiveX register event callback VI
Hi!
I am trying to control a motor in LV2013 using the ActiveX concept. When I use a "register event callback VI" function, can I call the same VI that calls a VI (with the "stop rule" controlled be the user data terminal, of course, inside)? By default, callback Vis that one can create for this are all reentrant (preallocated clone) and synchronious (according to help). However, both when I use the "server VI reference" ("This VI") and when I create a reference and browse for the same file - "register event callback" shows me a broken wire._Basil_ wrote:
As far as I understood, putting a movement method in the loop will not give any result, so I tought in the direction of the recursive callback. However, I found this post. Would you in general agree that the callback VI cannot be recursive? I attach my code in LV13 (if you need me to convert, I will)
Sorry, I'm still on LabVIEW 2012 here, so can't look at your VIs. I don't understand your comments in these sentences though. What do you mean by putting a movement method in a loop will not give any result? And why would you ever want a recursive callback? The callback is called each time the event occurs. There's no sense in making it recursive, nor would you want to re-register for a callback on an event inside a callback VI. Normally a callback should contain very little logic; it should primarily pass some piece of information (through a queue, user event, etc) back to the main thread and let the main logic handle it. -
Configure Event Callbacks in test stand using labview
Hi,
I was going through Full OI - Configure Event Callbacks.vi in the test stand example. Can you please explain me how the vi works and what is techniwue behind it?
When i open the individual VI's in the reference, I could see more that 1 control in the front panel. But Only the user parameter is wired in the vi? Why is it so?
Regards
GopalHi Gopal,
When the TestStand Engine fires events, this VI specifies how your Operator Interface will respond. For example, let's examine the first event callback registered in Full OI - Configure Event Callbacks.vi , Exit Application. When the TestStand Engine receives the message to shutdown, and then finishes its neccessary shutdown procedures, it will send a message to the Operator Interface. For the Operator Interface to receive this message, it must "listen" for it. In LabVIEW, this is done by Registering an Event Callback. See the links below for details on how to implement this.
The answer to your specific question is in step 7 of the first link below. When TestStand sends the message to LabVIEW, there is information that is always passed. The other input controls contain this information. To create a VI that always includes these controls, right-click on the VI Ref input to the Reg Event Callback Property Node, and then select Create Callback VI.
Here are two references that talk about handling ActiveX callbacks in LabVIEW in general:
Registering and Handling .NET and ActiveX Events
Register Event Callback (Not in Base Package)
Cheers,
David Goldberg
National Instruments
Software R&D -
i created boolean references in my main vi block diagram and copied them to my sub vi front panel. when wire my reference in my main vi to one the input node of the sub vi the wire is broken. the error says its a class conflict why?
Expanding and clarifying what BJD said;
After you create the temporary sub-VI that BJD mentioned, open its front panel and copy the reference control that LV created when it created the sub-VI.
This reference control will be correct class etc that you need. Use the control to replace the original control that you were attempting to wire up.
The technique of "create sub-VI...copy" always works for me.
There is one more thing that you should watch out for.
The mechanical action of the boolean can not be set for latch action when attempting to read the value using a value property node.
Trying to help,
Ben
Ben Rayner
I am currently active on.. MainStream Preppers
Rayner's Ridge is under construction -
Is there any event callback for "pre/post-register/unregister" object?
Dear all,
We noticed that there are rich set of event callback provided by TopLink, including "pre/post-Refresh/Build/Clone/Merge". However, we cannot found any callback method for "pre/post-register/unregister" events. They will be very useful, if we to manage the internal status of register/unregister to indicate whether it is still under the control of TopLink.
Thanks and regards,
WilliamWilliam,
Those specific events do not exist. The postClone event is called after an object is registered. This is frequently used to copy non-persistent values from the cached original into the working copy.
There is also the ability to customize the clone/copy policy used by TopLink in creating the working copies in the UnitOfWork.
http://download-west.oracle.com/otn_hosted_doc/toplink/1013/DP4/_html/descfg028.htm#sthref3950
Doug -
How to access new data in User Message Event Callback?
I am using the Simple LabVIEW OI as the model for my TestStand user interface.
The sequence sends a User Message to the OI to request the string array of tests to run.
But I am having great difficulty making this string array data available to the event callback VI.
I do not want to use a global variable and so my unsuccessful method so far has been as follows:
1. Use a Refnum to the Array and pass it into the Config Event Callbacks VI via the cluster
2. The "Selected Tests" in the input cluster in the Config Event Callbacks VI is a generic Control Refnum
3. This Selected Tests (at the bottom) is then bundled and passed into the User Parameter
4. But how do I convert the Selected Tests Control refnum back into the original string array in the actual callback?
Also if there is anyone that can suggest a better way of doing this then please let me know.
The bottom line is - how to get the latest data into the event callback function when it is called?
Many thanks,
Ronnie
TestStand 4.2.1, LabVIEW 2009, LabWindows/CVI 2009
Solved!
Go to Solution.Hi Ray,
The 'Selected Tests' array refnum is #4 in the cluster order and matches all the way through - so I think that's OK.
In the final diagram above, I can get the Selected Tests cluster from the 'User Parameter', but it is still in the form of a refnum.
My problem is a lack of understanding in how to convert this 'Selected Tests' refnum back to the original data type (a string array).
Basically I want to get the string array from the 'Selected Tests' refnum.
As you can see from above I tried to use a property node. I've also tried to 'cast' the refnum to a 'more specific class' by choosing 'Array' but it's still ends up as a refnum.
I hope you see what I mean?
Thanks,
Ronnie
TestStand 4.2.1, LabVIEW 2009, LabWindows/CVI 2009 -
Active x and event callback in Labview
I have an active x written by Aanderaa Instruments (makes
weather and hydrology sensors), it contain various methods and events to get
the next line of records from a sensory scanning unit. The connection is
through the COM1, so far i have wired it up only using the methods to get next
record level, but then I have found that sometimes it does not get the complete
record from the COM port. So to solve that I have to use an event in the active
x to check for new record available. So what I want to do is send the event
(when complete record available) to VI that uses the get next record method to
pick up the data from the COM1 port and then send the data back to the main VI
for processing, plotting and writing.
My problem is that when I connect the output from the GetNextRecord method to a
indicator that I then wire on the connector pane to be an output from this
VI get an error that there is a wire function conflict. I have tried to
explain a bit better in the attached pdf file with diagrams.
The reason why I want to export the data back in the main VI is because it runs
continuously collecting data every 2 min and I plot them on a graph and write
them to a file so it will no work to have all that done in the event callback
VI that will only run ever 2 min, then it will reset the graph the whole time
and I want continuous data plotting for 10 days of historic data records. I
also have a few other sensors that come in through a connector board that are
written o the same file.
hope somebody can give me some hints
Attachments:
labview question.pdf 721 KBDuplicate post, click here for the original: http://forums.ni.com/ni/board/message?board.id=170&message.id=135639#M135639
LabVIEW Champion . Do more with less code and in less time . -
Event callback with active x in labview
I have an active x written by Aanderaa Instruments (makes
weather and hydrology sensors), it contain various methods and events to get
the next line of records from a sensory scanning unit. The connection is
through the COM1, so far i have wired it up only using the methods to get next
record level, but then I have found that sometimes it does not get the complete
record from the COM port. So to solve that I have to use an event in the active
x to check for new record available. So what I want to do is send the event
(when complete record available) to VI that uses the get next record method to
pick up the data from the COM1 port and then send the data back to the main VI
for processing, plotting and writing.
My problem is that when I connect the output from the GetNextRecord method to a
indicator that I then wire on the connector pane to be an output from this
VI get an error that there is a wire function conflict. I have tried to
explain a bit better in the attached pdf file with diagrams.
The reason why I want to export the data back in the main VI is because it runs
continuously collecting data every 2 min and I plot them on a graph and write
them to a file so it will no work to have all that done in the event callback
VI that will only run ever 2 min, then it will reset the graph the whole time
and I want continuous data plotting for 10 days of historic data records. I
also have a few other sensors that come in through a connector board that are
written o the same file.
hope somebody can give me some hints
Attachments:
labview question.pdf 721 KBHello!
I checked the PDF file with snippets of your code and it looks alright, no issues or comments regarding that from my side. However it is really difficult for us to troubleshoot when we don’t have the ActiveX control available and even though we had access to the control it would still be quite tricky to find the cause of the problems you are experiencing since we don’t have the hardware and so on.
I found one link only that mentioned wire conflicts when talking about COM objects and ActiveX and you can find it here:
http://digital.ni.com/public.nsf/websearch/0CED780C5D5EDCD5862569D9005AE1FA?OpenDocument
Regards,
Jimmie A.
Applications Engineer, National Instruments
Regards,
Jimmie Adolph
Systems Engineer Manager, National Instruments Northern Region
Bring Me The Horizon - Sempiternal -
Photoshop crash on mac in 'slct' event callback
Hi,
I am getting consistent Photoshop crash on mac (12.0.4) when handling 'slct' event callback in my extension
The crash itself produce the same repor (see bellow) t as described here: http://forums.adobe.com/message/3473893#3473893
I narrowed it down to the case when you have 2 or more documents in "consolidate all to tabs" mode and you try to pull out one of them.
If you have a callback registered like this for 'slct' ExternalInterface.addCallback("PhotoshopCallback" + CSXSInterface.instance.getExtensionId(), eventCallback) and you try to access Photoshop.app.activeDocument Photoshop crashes with the bellow report
It's hapening onlyon mac.
Do you have any advice how to workaround it or even better a fix?
Regards
Lukas
Process: Adobe Photoshop CS5 [2734] Path: /Applications/Adobe Photoshop CS5/Adobe Photoshop CS5.app/Contents/MacOS/Adobe Photoshop CS5 Identifier: com.adobe.Photoshop Version: 12.0.4 (12.0.4x20110407.r.1265) (12.0.4) Code Type: X86-64 (Native) Parent Process: Adobe Flash Builder 4.5 [1259] Date/Time: 2012-04-03 17:57:37.438 +0200 OS Version: Mac OS X 10.6.8 (10K549) Report Version: 6 Interval Since Last Report: -2676258 sec Crashes Since Last Report: 36 Per-App Interval Since Last Report: -1577868 sec Per-App Crashes Since Last Report: 36 Anonymous UUID: 3253FFFA-8C14-41BE-B83D-82BE373CCD9F Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000 Crashed Thread: 0 Dispatch queue: com.apple.main-thread Thread 0 Crashed: Dispatch queue: com.apple.main-thread 0 com.adobe.owl 0x000000010371d186 OWLDockGetAnchor + 8186 1 com.adobe.owl 0x0000000103683bc2 0x103652000 + 203714 2 com.adobe.owl 0x000000010368acb6 OWLHandleNSApplicationEvent + 40 3 com.adobe.Photoshop 0x000000010024e831 0x100000000 + 2418737 4 com.adobe.Photoshop 0x0000000100278615 0x100000000 + 2590229 5 com.adobe.PSAutomate 0x0000000121ccfbcf CPsWActionControl::Get(CPsWActionReference const&, CPsWActionDescriptor&) + 31 6 com.adobe.PSAutomate 0x0000000121cac44b CPsDocuments::DocumentCount() + 85 7 com.adobe.PSAutomate 0x0000000121c93b3f CPsApplication::GetActiveDocument(MultiScript::InterfacePtr&) const + 77 8 com.adobe.PSAutomate 0x0000000121c47ffe CPsApplication::HostGet(int, ScCore::Variant&) const + 2606 9 com.adobe.PSAutomate 0x0000000121ce72d8 MultiScript::TProxyBase::get(int, ScCore::Variant&, ScCore::Error*) const + 240 10 com.adobe.AdobeScCore 0x00000001221d72e2 ScCore::LiveObject::get(ScCore::String const&, ScCore::Variant&, ScCore::Error*) + 242 11 com.adobe.AdobeScCore 0x000000012222c4a1 _getProperty(APEDOMObjectRef*, ScCore::Variant const&, ScCore::Variant&, ScCore::Error&) + 113 12 com.adobe.AdobeScCore 0x000000012222dad7 APEObjectGetPropertyCB(Opaque_APEPlayer*, void*, void*, APEOpaqueAtom*) + 263 13 com.adobe.adobeswfl 0x0000000122932cf3 APXGetHostAPI + 21603 14 com.adobe.adobeswfl 0x0000000122fa4914 SWFLPlayer_Initialize + 2208548 15 ??? 0x000000012ab64e0e 0 + 5011557902 16 ??? 0x000000012ab652ec 0 + 5011559148 17 ??? 0x000000012abc2883 0 + 5011941507 18 com.adobe.adobeswfl 0x0000000122fa2915 SWFLPlayer_Initialize + 2200357 19 com.adobe.adobeswfl 0x0000000122f85d6d SWFLPlayer_Initialize + 2082685 20 com.adobe.adobeswfl 0x0000000122fa4914 SWFLPlayer_Initialize + 2208548 21 ??? 0x00000001267cb5e3 0 + 4940674531 22 ??? 0x00000001267cbc43 0 + 4940676163 23 ??? 0x000000012a04b807 0 + 4999919623 24 com.adobe.adobeswfl 0x0000000122a273b7 APXGetHostAPI + 1022759 25 com.adobe.adobeswfl 0x0000000122a28a83 APXGetHostAPI + 1028595 26 com.adobe.adobeswfl 0x0000000122d317dc APXGetHostAPI + 4210508 27 com.adobe.adobeswfl 0x0000000122d91276 SWFLPlayer_Initialize + 31878 28 com.adobe.ape 0x00000001207c7946 APEInitialize + 1398Sure, I know about PSEvenScrubber. This on is different beast though. When activeDocument is null it's just it and you get an exception in the script if you try to use it, but in this case code like this:
var ho:HostObject=app.activeDocument.hostObjectDelegate or
var d:int=Photoshop.app.documents.length;
cause the crash of the whole Photoshop
Keep in mind that if i just switch between the documents without pulling them out of the dock everything works fine.
But it can be releated though as it seems that something is not initialized properly, but in this case on deeper level than actionScript
Maybe you are looking for
-
How do i enable my phone once it has been disabled and told to connect to itunes?
My daughter entered the wrong passcode and now her phone is disabled and is telling us to connect to itunes. What do I do because it wont sync?
-
Repaint problem while clicking the popup menuitem
Hi all, iam facing repainting problem in my application. User can initiate a single action from different options such as JButton, double-click of mouse and clicking the menu item form the JPopupMenu. All these will execute the same code. But when ia
-
Problem with creating an account
my internet (safari) working well.but the connection doctor fails when to detect the network.and i canot getting the new mail also.help me
-
I'm currently with Sky paying over £40pcm. Half of the stations I get I never watch. Due to losing my job I need to make cutbacks so I'm looking to see what other TV packages are out there. Sky can give me the basic package for £20.00. Somebody I use
-
Update problem resulted in settings changes
After accepting a software update for the Desktop Manager something malfunctioned and the phone locked up during a sync. I was able to get it working, however all the settings have changed (ringtones, call waiting settings, etc.). I want to go back t