-
Posts
410 -
Joined
-
Last visited
-
Days Won
13
Content Type
Profiles
Forums
Downloads
Gallery
Everything posted by Black Pearl
-
Crelf, I think superheros would like to wear hats like this: Felix
-
And if you convert the stacked sequences in the nicer flat sequences, you propably need to break some walls to line all the monitors... Felix
-
What's inside case 63? Felix
-
asbo: You mean using the Quotient & Remainder? That's elegant! Felix
-
If you have a string (otherwise just convert the number to a string), you can split the string after the first character and then convert it back to a number. Felix
-
Displaying data in an variant tree
Black Pearl replied to John Lokanis's topic in Application Design & Architecture
Implement recursion by using a stack (not too difficult and faster than native recursion and much faster than VI Server recursion). Propably you'd like to have it saved as xml so you can read it with SW like excel. I did post some stuff for reverse order (xml to tree) on the dark side. At the end of the thread I show some code. Felix -
My requirements are to measure a DUT up to 650 V. I'd like to use standard M-series DAQ for PCI (10 V). As far as I know NI only has some SCC 1/10 amplifier for up to 60 V. Any recommendations? Felix
-
The temperature rise of the last 3 days is not due to global warming but due to spring. We just had a nice cold winter. Global warming on the other hand would cool us down due to the gulf stream going somewhere else or nowhere at all. But if weather is the issue, the 'famous' weather-forecaster in germany was accused for rape the last days and is in jail at the moment. Maybe chinese hackers are trying to free him. But due to translation problems they missed the jail administrative network and randomly crashed some wikipedia servers. And tomorrow when they will find out what went wrong (don't forget they live in a different time zone!), they will manipulate world news channels with all that 'google' stories. Cat, my brain gets fuzzy when I read your posts. Are you sure your infection isn't transmittable on the digital level? Felix
-
I remember one spring our cat had to defend the territory. The next morning our cat was mowing like a sheep... Felix
-
Overheated servers? or a DOS-attack? Felix
-
I'm still experimenting with the folder structure. This is how it might look using SVN on a local machine: ProjectRoot: |Repository |Build |Working Directory And the Repo get's checked out to the Working Directory (Build contains the exe that is not under SCC) And the Working Directory (in sync with the repo): |Code |External Documentation |Internal Documentation |Recources Code documentation such as State Machine Diagrams go in the same location as the code. As said, I don't have this set as a fixed pattern yet, and it is neither consistent among my projects. Felix
-
Cross-Poster come out of the Closet
Black Pearl replied to Grampa_of_Oliva_n_Eden's topic in LAVA Lounge
There is a Blackpearl on NI, but that's not me. Blackpearl (LAVA) = F.Schubert (NI) Felix -
I exclude the exe's from my repository, but I consider it a valid practice to do so. (disc space is cheaper than the time lost just in case I had to get that old exe!). All the documents go into SCC. External documents won't get changed, so that isn't important to have them under SCC. But design documents (they might not only relate to code but also to electronics, mechanics), roadmaps, user manuals, screenshots are all subject to change, hence they should be SCC'ed. Felix
-
It's a very good text. There are many on that topic that show good and bad examples, but few like this one that discuss the concepts behind. A clear message: how much abstraction from reality should we aim for... Felix
-
If you have a fixed number of channels, you could use the decimate array function. For dynamic size of channels, you would need to use a 2D array (clusters are also static). If you have 1D data, you could try with the reshape array function if you get a 2D array with the right order. Otherwise you will need to do it by coding on your own... (for-loop or nested for-loops) Felix
-
I guess it's a matter of taste. I havn't run into issues of scaling, as I connect modules over the bus that have very little communication (like a temperature monitor that publishes the latest reading over the bus and some GUIs are displaying it and in some situations the GUI VIs themself send a new setpoint. Because of the loose coupling due to the string-type commands, the modules are pretty reusable (I've done it). An older app was using queues to communicate between 3 GUIs with a central 'handler'. That made 3 queues to send commands to the modules and 1 shared queue for the modules to call the handler (this in turn sends commands to the other modules). I feel that this architecture is on the limit with 3 modules, as one more queue would ask for one to many terminals on the ConPane of the central handler. Using a huge ComCluster to keep all kinds of queues, notifiers, events and event refnums resulted in spaghetti with a lot of stupid manual updating when I changed some of the Com Types. But from your posts I could read that you prefer several wires and not a bus as I do. Maybe LVOOP makes a big difference (I have just seen one OOP app using this bus so far). Felix
-
To unregister an user event dynamically, use the event registration refnum and wire the not a refnum constant to the appropiate event terminal. I havn't used that, so I can't detail the issues this might lead to. But there is an example either coming with the installation or online on ni.com, which uses several of the Mouse Events to draw lines on a picture control with unregistering/registering inside each of the event frames. Felix
-
Instead of the destroy to disconnect, you should use the unregister event prim. For some more ideas, check that nugget of mine on the dark side. I've got some more ideas concerning an LVOOP implementation. I propably find the time to write them down/model them tomorrow evening. Felix
-
The destroy user event seems completly wrong to me. In LV7.1, you get a crash when calling a Unregister for Event after the User Event is destroyed. I guess that LV is now checking if the refnum is still active and discarding the destroy. Furthermore I get error 1 when generating an Event that is already destroyed, which I use for my producer template as 'good' stop condition. Felix
-
Position a SubVI relative to a wire in a container
Black Pearl replied to jcarmody's topic in VI Scripting
You could use the move method, it has an input 'owner' and uses the coordinate of that owner if it's wired (so use case structure as the owner). Felix -
I also want to focus on real world work and not exams. For me the most challenging part was to get a software engineering around the code. I rely a lot on hardware, with failures, delays and so on while getting presented must-have-specs last minute. Here some ideas: * Design patterns as noted above, not only OOP but also 'LV-native' solutions (plug-ins, subpanels, AEs). At takes a lot of time and a lot of failures to really get into that. But once you have it, it makes your day. You will start modelling/designing instead of just coding out the specs. And at first, you will produce not working code but 'abstract code' (the classes where you will derive from, or a set of templates). Which of course enriches your reusable library. The other side of this, when the tide of workload is low, you are still busy getting all well documented for the next project. I don't think that this is easy, it's the art. And I'm still an adept... * All kind of methods come in here, from 'uml' to 'test driven developement'... * Have your code accessible. A big range with many open questions to me. The issues range from accessing the nice reusable concepts when I'm on customer site to tracking back which delivered projects might suffer from a certain bug. Have this data accessible when management asks... SVN is a helper here, bug trackers as well, have some server access is also important. *Bug trackers are cool anyhow. They give you a tracability of problems, can produce paper for some meetings. Most important for me was that they help me to jump from one project to the next (and they are team-wide) * Automating your process: you can have a greate time coding all kind of tools to speed up your process. Automatic unit tests are a success story. There is so many ways for an engineer to go further. And the ultimate goal is to get the boring jobs done as fast as possible. Enjoy... Felix
-
I discovered some mistakes in my statements above. StarUml is using the xmi specs V 1.3 from 2001. Current version is V2.1.1 If I remember correctly, they also can export in 1.1 Because even the link has changed since: UML 1_3 Seems like there are more specs than tools that care about them... I will keep updating this thread when I found out more about it. Maybe others can also give a brief comment about the xmi versions other tools claim to be able. Even better, let's share some dummy uml exports and try to import them... That way we would at least have a list of compatibility issues. Felix
-
I was digging through the XMI export generated by StarUML for a StateMachine and cross-checking it with the XMI specs to broaden the scope for my uml to lv state machine compiler. Both the xmi and the xmi specs (they are a syntax definition) are written in xml, so readable for both machine and human. So I guess there is a compliance check available. I havn't yet compared it to other XMI files, so I have now experience about the real compliance limits. If someone is just exploring some tool for generating state machines, it would be nice to PM me a xmi export, so I can compare the flavours... Generally, I think that importing xmi files won't always work. You can nest several general container objects, here the root layer of an StarUML file: model(this is the project)->namespace->model(this is the diagram)->namespace->statemachine. It might be very specific to the tool how this can be handled. The next issue I expect is that the uml/xmi scope is describing very detailed bits most developers won't care, hence there is no real need to implement it into an uml tool. As an example the trigger of a transition might be resolved further as TimeEvent->TimeExpresssion where TimeExpression will be already in the form of your final code. I have the follwing 'stop' found in StarUml that the DoActivity of a state will only be converted into UML:UninterpretedAction where there is a choice of maybe 7 different 'Action types'. As a short summary, the xmi specs gives a lot of flexibility to implement it. I therefore doubt that importing xmi will always work, both in general and considering details. Felix
-
I went deeper into this field (it became my hobby staring on the OMG's spec), and I just want to share my latest insight. There is a standard for saving the uml diagrams in xml called 'XMI', the syntax can be found on the OMG page. This is pretty much important, when you want to shar data between two or more uml tools or want some code autogeneration. So far, a big down of dia (I proposed it) is, that it doesn't support XMI. Furthermore the developers assigned that issue a low priority, meaning that they won't fix it. I will switch over to StarUML as well... Felix
-
You also could use a two staged event consumer: * Register the event structure 1 for the abort event and use a timeout (0 or 1 ms), register event structure 2 for the messages and the abort event (use seperate Register for event nodes!) Way1: Place both event structures inside one While loop, force execution flow that event structure 2 only executes after event structure 1 went through timeout OR Way 2: place event structure 2 inside the timeout case of event structure 1 Way one allows to make the event structure 1 a SubVI, I guess it's better to make that one reentrant. But you need a case around structure 2 anyhow (either a boolean from the subVI or throw an error and use that to inhibit execution). What happens (or should happen): * If there is an abort event prior to the loop iteration (fired befor entering the code or during processing an event in structure 2), the structure 1 will catch it, structure two will not be executed and you terminate the loop ELSE * Structure 2 is now waiting to process any events. If this is an abort event, terminate the loop Sounds a bit crazy, but I propably try that pattern myself... Felix