Actor framework strictly typed message queues?
I'm just getting to grasps with the Actor framework. I have implemented "similar" stuff in the past but I've approached it differently.
One thing I noticed was how easy it is to send a message to an incompatible actor core which results in a nasty run-time "to more specific class" error.
In the example project included with LV 2012, if I make the change shown below (OK, I am purposely senidng a wrong message on the given queue) I get no feedback from the IDE that an incompatible message is being sent ont he queue. I think this has to do with the Message queues being for the base actor class.
Is there no way to have the actual queues more strictly typed so that we can say that Launching Actor Beta will result in a Queue reference which is only compatible with Beta (or children) objects or does this ruin the entire concept? If possible, it would prevent the ability oto send incompatible messages completely which IMHO would be an enormous benefit.
The presentations on the Actor framework have shown huge benefits in strict typing of state machines (I'm referring to a couple of videos I've seen ont he NI website) but this element of things seems to be just a pokey as a string flatten and unflatten. Send the wrong message to the wrong receiver and >bang< run-time error.
Just thinking out loud.
Shane.
Say hello to my little friend.
RFC 2323 FHE-Compliant
So two days and no reply...
I'm referring in essense to this part of the actor framework white paper as included with the template in LV 2012.
Messages from Callee to Caller
When a caller wants to send a message to the callee, the caller knows the type of the actor that it launched, so caller can easily choose the right type of message to send. But when an actor wants to send a message to its caller, the actor does not necessarily know what type of caller it has, so it does not know what type of message to send. Ideally, actors should be usable by many different callers. That maximizes code reuse. But making the actor truly independent of the caller requires more effort than is warranted for the situation. There are three techniques for defining messages that an actor sends to its caller
The High Coupling Solution—In this solution, the callee actor is written specifically for one type of caller, and can never be used with any other type of caller. In this case, the callee knows details about the caller's interface, so it may simply call the Send Message VI of the appropriate message. The message type is thus hardcoded into the actor.
The Low Coupling Solution—This solution works best when you have a known inheritance hierarchy of callers. In this solution, you create a matching hierarchy of callee actors. So suppose you have callers Hard Drive, Air Conditioner, and Fire Suppression, each of which needs to launch a Fan actor. You would create the Fan class, and then inherit from it Fan For Hard Drive, Fan For Air Conditioner, and Fan For Fire Suppression. Each caller launches its specific callee actor. All of the main Fan class' code is shared, but when it comes time to send messages, the Fan class has a dynamic dispatch method for doing the sending, and each of the children overrides that method to send the message appropriate for its caller. Each callee is still coupled to a specific caller, but the system as a whole is flexible to accommodate new caller types.
The Zero Coupling Solution—In order to make the callee actor independent from the caller, the caller must tell the callee what types of messages to send so the callee avoids picking a type itself. The best implementation of this solution has the caller record a message into the callee at the time the callee is launched. The callee provides a Set <Type> Message.vi method, where <Type> is the particular event that will trigger the message to be sent. The caller sets the exact message it wants to receive when this event occurs. When the event happens, the callee sends the chosen message, without any knowledge of what kind of caller is receiving that message.
Often the callee will define an abstract Message class that it uses as the input type for Set <Type> Message.vi. Callers create their own specific child of this abstract class. This setup gives the callee a way to set data into the message through the API defined by the abstract class, and gives the message a way to deliver that data in a form the caller can consume through the various overload and extension VIs.
Would it be possible to get some examples of the three different approaches to typing of the messages? I'm aiming for the high coupling solution (with the option of slipping to option 2 through common ancestors) in order to provide the ability to detect wrong messages on wrong queues at edit time.
Shane
Say hello to my little friend.
RFC 2323 FHE-Compliant
Similar Messages
-
Actor Framework Message Maker Icons
I’d like to suggest a small change to the way the actor framework message maker works.
At present - regardless of the icon of the method for which the message class is being produced - the following VI icons are created:
Do.vi
Send <Method>.vi
<Method> Msg.ctl
How about if instead the message class takes its VI icons from the method (with the existing glyphs layered on top). So if the method icon is:
The following icons will be produced:
Do.vi
Send <Method>.vi
<Method> Msg.ctl
OK, its not gorgous and may need a bit of tweeking but I think this might make the Actor Framework quicker and more intuitive to use.
Dan
Dan
CLAMight be useful to bring it to the attention of the Actor Framework enthusiasts: ni.com/actorframework
- Cheers, Ed -
Best way to transfer large datasets between actors (Actor framework)
Hi everyone
I am in the planning / design phase of a larger application for which I wish to use the Actor Framework. It seems like a good "design pattern", easy for multiple developers to work on, easy to expand and easy to maintain.
In this application I need to transfer data betweeen actors/modules at a considerable rate. The data is the continous measurements from a DAQ device (or multiple devices) sampling at 200kHz. That's 200 kHz * 8 byte = 1.5 Mb/s per device.
There is no way this is done using the messages of the actor framework - those messages are designed to signal start, stop, select tasks etc. within the application. So how to transfer that amount of data between actors?
I've thought about using TCP/IP on localhost - this could also easily be expanded to allow different parts of the program to run on different machines on a network. I've even tested it and it works quite well. But I would like to hear some opinions or alternatives before I decide to go with this solution. Any thoughts or alternatives?
Thanks
JonasJonasCJ wrote:
Could this be done without TCP/IP and just a LABVIEW queue? Passing the queue in a message from one actor to another?
If it's in the same process then yes, and it would be more efficient, because with TCP you have to create a copy when converting the data to a string, another copy when receiving and a third one when converting back. Unless you really are planning on distribtuing it, I would suggest avoiding that. Sidebar - AQ has been talking about networked actors and I believe there should even be an experimental branch in the AF group in the community area. You might want to check that out.
Incidentally, if you are planning on splitting it and don't actually need the real time processing, you might consider saving the data to a network drive and then simply having the other side loading the data from the file. It should be simpler.
Try to take over the world! -
I've used earlier versions of the actor framework just fine. Then I installed LabVIEW 2014, and I do not know how the new framework is supposed to function. Is there some example of how nested actors are supposed to work? I've been looking around but actor examples are strangely absent.
Lars Melander
Uppsala Database Laboratory, Uppsala University> You don't need to call two extra VIs to launch an actor.
Sorry, I don't see how the number of VIs changes.
> Launching becomes easier to understand, because the concept now is that each actor creates its own queue and nested actors have implicit access to their caller's queue. The naming of the enqueuer terminals on the subVI also confused some people (including me) about which enqueuer belongs to which actor and this solves that.
Unfortunately, it seriously mucks up my design. I have a network of actors, and that does not translate to the new VIs. It's not obvious in any case.
> In general, if you want AF discussions, the AF group is the best place, as that also includes the NI people working on it. Here's one example thread also requesting an example - https://decibel.ni.com/content/message/94190#94190
I will look there, thank you.
Lars Melander
Uppsala Database Laboratory, Uppsala University -
Clearing JAVA Message Queue in PI 7.1
Hi Experts
I am working on a file to File Scenario, and file has been picked up on the sender CC and mesaages have been sent to JAVA queues, But the messages are stuck on the JAVA queues,
Java Queue name: File_http://sap.com/xi/XI/SystemRecv
How can I clear the JAVA message queue in PI 7.1
Thanks
PRIf the messages are on the queue, usually one of the actions must be performed: a) Fix the related scenario and restart the messages or b) Manually cancel the messages. This is also advised on the note below under item "3. Troubleshooting Archiving / Deletion in the Adapter Framework"
[Note 872388 - Troubleshooting Archiving and Deletion in PI|https://service.sap.com/sap/support/notes/872388]
If you are having performance problems, please check if the messages are taking long time in TBDL/Holding status. Let us know if this is the case. -
Message Queue Blocking / MSGMNI Setting
Hi All,
Firstly, many thanks to all that can assists. I am currently getting Message Queue
Blocking messages in my ULOG files in my Tuxedo Application. (Tux ver 7.1 in Unix).
I am not sure what is causing this, but started to look into the Tux Config (UBB.MP)
and System message queue setting. Detailed as follows:
1)
Listed below is the system message queue setting:
set msgsys:msginfo_msgmni=2000
set msgsys:msginfo_msgmax=128000
set msgsys:msginfo_msgmnb=100000
set msgsys:msginfo_msgssz=256
set msgsys:msginfo_msgseg=25088
set msgsys:msginfo_msgtql=1550
set msgsys:msginfo_msgmap=1000
According to the BEA site, the MSGMNI is determined by this formula:
MSGMNI = MAXACCESSERS + 7 + (no. of servers with REPLYQ) + (no. MSSQ sets) - (no.
of servers with MSSQ sets)
The following is my current Tux. Config (UBB.MP) is set as :
- MAXACCESSERS = 2300
- Each servers (4 types in total) has its own REPLYQ and RQADDR.
- The same type of servers are set the same across 4 application servers.
Hence, my MSGMNI should be a minimum 2339 (ie. MSGMNI = 2300 + 16 + 16 - 0 = 2339).
But my current MSGMNI is 2000.
Would this contribute to my Message Queue Blocking?
Is my understanding correct and is this something I should change to avoid Message
Queue Blocking? Any helps and advice is much appreciated.Malcolm,
Your information and explanations behind these error messages are very useful.
It allow me to further understand Tuxedo internal processing and at the same time
give me a chance to start analysing these fields.
I am reluctant to ask further questions at the mean time. I will use your suggestions
as a starting point.
I will certainly keep you posted of the outcome when I have made the changes in
my UBB config and machine parameters.
Many thanks with your help/explanations Malcolm. It helps alot!
Cheers.
David.
"Malcolm Freeman" <[email protected]> wrote:
>
Hi David,
The MSGTQL reference you give (Solution S-00488) refers to the BEA MessageQ
product
and is not relevant to Tuxedo.
The error messages indicate that the queue buildup is probably due to
a restartable
server failing. What happens is this:
When a restartable server fails its IPC queue remains in place and continues
to
receive messages (which will be processed when the server restarts).
Depending
on the time taken to restart, the queue could become full and unable
to receive
any more messages, and this is probably why you got the message CMDTUX_CAT:1380
indicating that the BRIDGE process was unable to put a message on the
server's
queue.
A server is only restarted when the BBL does a SANITYSCAN check. If,
for example,
your SANITYSCAN interval is 300 seconds and your server fails immediately
after
the previous scan, then there will be a delay of almost 5 minutes before
the failure
is detected and the server restarted - plenty of time for the queue to
fill up.
There are a few things you could do:
The key thing would be to find out why the server is failing, and fix
the problem.
If this is not possible immediately, consider some of the other ideas
below.
Have several servers form an MSSQ to service this queue; then if one
fails the
others will continue processing the messages while the failed server
restarts
(this assumes, of course, that your application does not require the
messages
to be processed in strict order through the server).
Reduce the SANITYSCAN interval (but don't make it too small). This would
reduce
the average time taken to restart the server.
Increase the size of the IPC queue (MSGMNB) so that it can hold more
messages.
I'm not sure why you got a LIBTUX_CAT:1485 message, but this could be
due to a
BRIDGE failure as a result of the congestion.
The NETLOAD parameter would reduce the number of messages going to the
remote
machine, but only if the local machine offers the same service. If the
remote
machine is the only source of the service then NETLOAD will have no effect.
I
recommend you do a search of this newsgroup for postings on "load balancing"
there's some good stuff which will explain how load balancing works.
Depending how things go, it might not be a bad idea to open a case with
BEA Support
and ask for guidance (remember to submit your ubbconfig (or preferably
do a tmunloadcf)
together with the complete ULOGs from both the master and the slave machine).
Hope this helps some.
Regards,
Malcolm.
"Dave" <[email protected]> wrote:
Hi Malcolm,
Thank you for your reply. Interesting point you have made about theMSGTQL
value.
Based on your suggestion I went hunting around the BEA site and found
the following
snipplet:
"- The MSGTQL parameter must be set to a value greater than or
equal to the MSGMNI setting."
(http://support.bea.com/application?namespace=askbea&origin=ask_bea_answer.jsp&event=link.view_answer_page_solution&answerpage=solution&page=msq/S-00488.htm)
If the above point is valid, then my MSGTQL is definitely way too low.
IF this
be the case, would you know of a method to work out what my MSGTQL bytes
value
should be?
Additionally, I have looked at other parameters which I could tune,and
would
adding a NETLOAD parameter in the *MACHINES section will reduce remote
servers
call? Which potentially, maybe reduce message queue blocking?
FYI:
The error messages I am seeing in my ULOG file are:
"LIBTUX_CAT: 1477 : ERROR .SysServerDied
LIBTUX_CAT: 1476 : ERROR: .SysServerRestarting"
Which then leads to message queue blocking
"CMDTUX_CAT: 1380 : ERROR: Message queue blocking prevented delivery,
Qaddr=..."
and potentially "LIBTUX_CAT: 1485 .SysNetworkDropped."
Many Thanks. Hope to hear from you (Malcolm) or other parties out there
that can
assists.
Thanks.
David -
Where do I find 'MQ Cluster Monitor' and 'Message Queue Universal Client' ?
This video on mq.dev.java.net uses two utilities called the 'MQ Cluster Monitor' and the 'Message Queue Universal Client'. The narrator says that these are 'shipped with the Message Queue product'.
I dont see the utilities in my Open MQ installation. What am I missing ?
- Hemant Bedekar
RedSeal SolutionsCluster Monitor can be launched by typing these commands -
cd /MessageQueue/mq/examples/jmx
java -classpath /MessageQueue/mq/lib/imqjmx.jar:. MQClusterMonitor
Universal Client can be launched by typing these commands -
cd /MessageQueue/mq/examples/applications/uclient
java -classpath /MessageQueue/mq/lib/imqjmx.jar:. UniversalClient
- Hemant Bedekar
RedSeal Solutions -
App Builder produces "Not Executable" error with Strictly Typed VI Refs
There is a very frustrating problem with the app builder in LV 8.0.1. Certain VIs compile and run fine in labview, but the app builder
refuses to make them into applications.
The error message is very long and ends with something like "The VI is not
executable". Standard advice for this problem is to force LV to recompile
everything you're building by either mass compiling or ctrl-shift clicking the
run arrow, but this hasn't worked for me in two separate cases (completely
different projects).
It seems that this problem is caused by wiring a strictly typed VI reference to
an invoke node with the FP.open method selected. In both cases I resolved
the issue by changing the Static VI Reference to be weakly typed (right-click
the static vi reference and make sure "Strictly Typed VI Reference"
is unchecked). After that, the project build successfully.
This is very hard for a user to track down for several reasons:
- The error message in the application builder does not give any
indication as to what the real problem is
- The app builder reports that the top-level VI is broken, even when the
strictly typed reference and invoke node may occur in a sub VI
- Nothing (that I can
find at least) in the documentation suggests that strictly typed references
won't work with the Open.FP method.
There is a page that says "some of the properties and methods do
not work when you configure this function to output a strictly typed VI
reference," but no indication is given of which methods fail
Note that in one case I was also able to make the project
build by deleting an instance of "IMAQ Create.vi" from the top-level
VI. I
have no explanation for this.
Hopefully this post will save some other users the trouble
of tracking this down and maybe even get NI to correct the issue for future
versions.
Adam BrewsterHello Adam,
Thank you for sharing your experience and insight. Your post was well thought-out and offered a
good description of the problem as well as some possible workarounds. I believe that the issue has been filed and
is under investigation (3TU8T8V9). Feel
free to post back after the next LabVIEW release and inquire as to its status.
Thanks again,
Travis M
LabVIEW R&D
National Instruments -
Correct use of the actor framework?
Hi all,
I was hoping for some advice before I start developing an application. I want to try using the actor framework so I thought I would give it a go for this project.
It is a relatively simple application:
Update rates are at 1Khz max so the cRIO is in scan mode. The cRIO will communicate with the host using 2 network streams. One for sending and one for receiving data.
I want to use actor because there will be 3 screens used. One to display the digital inputs, one to display the analogue inputs and one to set the digital outputs. I thought this would be a good chance to have a go at using the framework because I could have 3 IO actors with one on each screen.. My initial ideas are as follows.
Host Application
Handle all the communication to the cRIO
Send any data it receives from the cRIO to the:
Digital out actor as a message
analogue out actor as a message
Input Data Logger actor as a message
Send any data it receives from the digital out actor to the:
cRIO
Ouput Data Logger actor as a message
I have attached the project file I am working with. I have knocked something up using tabs which gives an idea of how the UI will look for each screen.
I’m really not sure if this is even remotely close to the way to do it. Help please.
Lewis Gear CLD
Check out my LabVIEW UAV
Attachments:
Working Code.zip 93 KBI'm not sure you need to split all of the outputs into separate actors. You could potentially wrap those up into one actor and create a method or small set of methods for each output type. Or, you could create a "Physical I/O" actor, and have that talk to the AO, DO, AI, and DI...then your top level application only needs to send messages like "DO : True" to the Physical I/O actor. Essentially, it abstracts it one more level, and might make things easier in the future if you decided to add other physical I/O (other cards, USB devices, etc.). This way, the Phsical I/O actor could handle the changes, and your top level application remains intact.
Wes P
Certified LabVIEW Developer -
Selecting VI Server.Strictly Typed VIs in Class Browser crashes LabView
Hi!
My LabView 8.0 Pro on WinXP crashes in the following way:
0. Opening Blank VI.
1. Placing VI ref num on the front panel.
2. Going to "Select VI Server Class -> Strictly Typed VIs -> Browse..."
3. Loading any VI (say, "myVI").
4. Then going to menu: View -> Class Browser
5. Selecting Object Library: VI Server.
6. Selecting Class: Strictly Typed VIs - "myVI" icon.
Result: LabView crashes saying that there's error and application will be closed.
Besides there's a little question:
Did I get it right that if I change myVI connector layout or pins it's not refreshed in my
VI ref num and I have to load VI again (see step 2)?
Thanks in advance for any help.
Rashid.Message Edited by Rashid on 02-22-2006 11:17 AMHello,
I have reproduced this, but I think the menu navigation you indicated in step 2 has a mistake. I reproduce it with the following steps, and have filed a corrective action request to R&D on the matter:
0. Open a Blank VI.
1. Place a VI Refnum on the front panel.
2. Right-click on the VI Refnum and choose: Select VI Server Class -> Browse...
3. Select any VI (say MyVI.vi).
4. In LabVIEW click: View -> Class Browser
5. Select Object Library: VI Server.
6. Select Class: Strictly Typed VIs -> MyVI.vi connector pane icon.
Sorry for any inconvenience - the problem should be addressed in a future version of LabVIEW.
For your question, "Did I get it right that if I change myVI connector layout or pins it's not refreshed in my VI ref num and I have to load VI again (see step 2)?" - yes, I see the same behavior - you should save the VI and then select it again in the VI Refnum.
Best Regards,
JLS
Best,
JLS
Sixclear -
GUI - Actor Framework - Decisions
"Hi there,
I think I am pretty clear about how to use the Actor framwork's and I would like to
have some guidance about to use the framework in my project.
This VI is a very simplified version of the actual layout.
Basically, there is only one hardware performing different types of measurements, send TX and RX messages through CAN and LIN.
My development strategy is
I intend to create an actor for everything related to the hardware measurements that I consider as the measurement bench.
This hardware will have to perform some asynchronous operations and will eventually send some messages / commands to others actors.
Those commands will contain for instance, the stuff (value type of course, I'm not willing to message everything with references) related to the information do display to the end-user in different VI.
The other actors representing different VI in some containers will send commands to this actors
In short, I was thinking about creating about 10 actors and more:
1) The most important one: the Bench (containing the settings and parameters in the class cluster) and performing the actions related to the hardware, inputs and outputs and inform other actors about what it just (if doing performing actions synchronously) or what is available (if some things are asynchronously in a loop). [Not sure if splitting the concerns of the Bench purposes into additional actions is really wise or not (especially since it will embed a VISA reference), it will probably require to additional lock accros the different Bench related actors with something like below:
- Bench Master Actor (to send and receive message to the enduser actors and dispatch the work with the two other Bench related actors)
- Bench Synchronous Actions Actor
- Bench Asyncrhonous Actions Actor
It's also in charge of receiving orders to start, stop, notify, performing actions asynchronously and / or synchronously.
2) Actor (especially the core as): VI ML
3) Same strategy for VI BRC
4) Same strategy for VI TRC
5) Same strategy for VI 1
6) Same strategy for VI 2
7) Same strategy for VI 3
8) Same strategy for VI 4
9) Optional: VI TM ... not really necessary I guess except to go with full actor everywhere..
Thank you."
Attachments:
GUI Actor Framwork.jpg 137 KB
GUI Actor Framwork(2012).vi 21 KB
Actor Architecture.jpg 83 KBI would post this question to Actor Framework community rather than here, as active Actor Framework users are likely to be subscribed for discussions happening there.
https://decibel.ni.com/content/groups/actor-framework-2011
I am also interested in what people say about it.
TailOfGon
Certified LabVIEW Architect 2013 -
Hi
Where can i se the version of Actor Framework that I have on my PC?
regards Bjarne
Solved!
Go to Solution.Hi Manu
First I will really encourage you to post you questions in a new thread. By doing that you will post your question to the hole forum and not only to the few people that actually attended here. Very few people will monitor the post when it is marked as resolved.
As for you question I looked over you code. Seems like you get your issue here:
In Gamma Actor -> Messages for Gamma -> Do.vi
You convert you Gamma Actor to a Type of Beta. Where you should have converted it to type Gamma.
If you look at the do message for alpha and beta that should show you how it is done correctly.
It could also be that you think Gamma Actor is a child of Beta actor and you therefor would like to convert it to the Type of Beta Actor (which is allowed), if this is what you want then the inheritance hirachi should state that Gamma Actor inherits from Beta Actor and not from Actor.
Both things could be valid depending on what you actually want. Right now you are trying to convert a car to a banana and that is what LabVIEW tells you is wrong.
Best Regards
Anders Rohde | CLD | Platinum Applications Engineer | National Instruments Denmark -
Actor Framework auto generate actor
Hello,
I'm starting to use the actor framework for a large application. I am wondering if there is a way to auto generate a new Actor?
I understand I can auto generate messages for an actor using Tools -> Actor Framework Message Maker...
I make an Actor by making a new Labview class say:
Test Actor.lvclass
Then set the inheritance of this class to Actor.lvclass
Make the Actor Core.vi Method
Make a Write waveform method
Set the scope of Actor core to protected, and other methods to public (just like the Simple Actor example) and make actor core reentrant
I am making the structure EXACTLY like the Simple Actor example, but I get the following errors in my new Actor Core.vi:
"This VI doesn't match other VIs in the method, Connector Pane Terminal(s) are different. All VIs that implement a method of a LabVIEW class must match Connector Panes. To correct this, compare Connector Pane of both this VI and the VI of an ancestor class that implements this method."
and
"The owning VI is not a dynamic member VI of a LabVIEW class. The Call Parent Method node should only be used in a dynamic member VI of a LabVIEW class."
I tried to read into this message, but it appears my connector pane is the name. I'm not sure whats going on.
(1) Can someone show me what I am doing wrong here?
(2) Is there a way to auto generate the Actor?
Every time I try to construct an actor from scratch I get the above errors. I have attached my project (LV2012).
Any help is greatly appreciated!
Solved!
Go to Solution.
Attachments:
Simple Actor Example Mod.zip 179 KBI know this is old, but just to update this thread with info to others that are starting with Actor Framework and LabVIEW 2013.
The GOOP Development Suite is free now, free to download from NI's website.
With this you can make an actor. It is described here how to use GOOP to do it. -
Using Microsoft Message Queues (MSMQ) with LabVIEW
I want to use the Microsoft Message Queue to communicate between applications on different machines. Does anybody have experience in using the MSMQ with Labview (in the .NET framework)? How do I send messages? The MessageQueue.Send method requires an object, and I don't know how to create this object format.
This question was asked several years ago on this forum and no answer was given.
I would appreciate any examples of Create a Queue, Delete a Queue, Send a Message, and Read a Message in LabVIEW 7 or earlier.
Thanks,P.C.
I'm a little confused by what you mean. I thought you were sending messages through the MSMQ, but the code there would receive a message, get the body, then display the body of the message. The Object that the invoke node refers to is the Body of the Message, which has no properties, but has a few methods like ToString that you can use to get the string from the Body.
You need to wire up the references into the invoke and property nodes to get the selection of the methods or properties that are available. Do they just not appear when you are using the invoke node with a reference to the body?
Message Edited by Coal Man on 06-04-2007 01:56 PM
Brian Coalson
Software Engineer
National Instruments
Attachments:
msmq.Jpg 40 KB -
Cast generic VI to strictly typed VI
Is there a way of casting a generic VI to a strictly typed VI through something other than from the Open VI icon? I'm trying to make a generic VI to handle the open and cast it where I need it.
Thanks,
Adrian
PS. I should mention that I am using LV 7.0 and have tried to use the "To More Specific Class" icon without success.
Message Edited by Been bitten by LabVIEW on 10-10-2007 03:18 PMYes, but it won't do you much good. You can't use a type cast (that's not
allowed), but you can use flatten to string and unflatten to string. That
way, you basically have what you've asked for.
All normal properties will work (only tried Panel Open). But the only reason
to do this, is so you can call the Call By Reference Node. And that will
fail. The node says something about the vi not being reserved. If you put
this code inside a sub vi, LabVIEW (8.2.1) will crash (R6025 - pure virtual
function call). This is not something that you'd want to use.
There are probably other ways to solve your problem, but you have to explain
what your higher goal is.
Regards,
Wiebe.
Maybe you are looking for
-
Getting the Request Object in the EJB published as a Web Service
Hi experts, I have a Portal Service that call a BAPI in a back-end system with the Connector Framework. I have a Portal Component that calls the Portal Service, passing the Locale (request.getLocale()) and the User (request.getUser()) object. It's wo
-
whenever i plug my phone into my computer it says this iphone cannot be used because the apple moble device is not started. what does that mean?
-
13" MacBook Pro - Where to store the remote?
Well, On my old black MacBook, there were magnets around the top frame around the screen and when I was at my desk, I would store my Apple Remote on the top corner of my screen. It was great because it would just "stick" there. On the new 13" MacBook
-
Why when I sync photos to my phone, do I get two albums with the same photos??
-
Hello May be basic question but not sure, I have table with 20 column, In plsql i an using in for loop. 1. for x in (select * from tab) -- all 20 column 2. for x in (select col1,col2,col3...col10 from tab) ---10 column out of 20 Which one ine better