Jump to content

Mark Yedinak

Members
  • Posts

    429
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by Mark Yedinak

  1. Before anyone else says it: prepare to be disappointed. tongue.gif I'm a slightly overweight bearded man in his mid thirties. Well, at least my wife liles the way I look - sometimes I wonder what's wrong with her, but never enough to actually ask her...

    You forgot to add short. Add ten years to your description and you could have been describing me, including the short part.

    At one time the running joke at my company was that you had to be short to be a test engineer. I was the tallest one at a whopping 5' 6".

  2. I hope I didn't come off sounding like some sort of dictator wanna-be in my original post but we have a real issue here that I need to get my hands around somehow (and really no power to do it).

    There are people using something like "pwr_wdw_down" for an ignition input signal. People make subvi's for no apparent reason. I have tried to get everyone to use SCC but they are too lazy to learn/use it and I'm sure most of you are familiar with what you end up with if you are not well organized. We have many copies of projects all over different drives and no one can say what is the latest version or what the difference between project "AAAA123" and project "AAA123" is. (yes, they keep tacking more A's to the front to get it to the top of a folder when browsing in explorer.) I couldnt tell you what a project or a file is just by looking at the name of it. In some projects, everything is crosslinked to different folders/projects and it is way out of hand. I could go on all day long describing some of these horrors.

    The real problem is, they took a group of engineers and said - you are now part of an eCAE team responsible for testing, simulation, and rapid prototyping (of ECU modules) These engineers (and I use that term loosley) have no software engineering background and too stubborn to admit they dont know the correct way to do something or ask for help. We use many different softwares including Labview. I have the most experience with Labview and my hope is to at least get this portion of my groups responsibilites in order hoping that it will "rub off" into the other areas and software projects. I need to find one little corner to start in and hope it will spread but its like talking to a wall. :frusty:

    Ok, I'm done venting for now.:wacko:

    Yes, that is a tough situation that you are in. As others have said try to get some training for everyone centered around software engineering techniques. Another thing you can do is try to persuade by example. Start implementing changes on the code that you work on. Chances are good that your code will start to improve, have less bugs, be more stable and get completed faster. As others start to see the benefits of doing things differently they may start to adopt the things you are doing. Unfortunately this can be a very slow process but over time it generally works. You do need to present your managers with solid information as to why changes need to be made.

  3. Honestly though, I don't think its all important that everybody origanize their code the same way. There are 6 developers on my team and not a single one of us codes the same way, much less organizes files the same way.

    I think its much more important that you are consistant in what you do. As long as a developer is consistant (does the same things in similar fashion throughout the project) it will work out so I can navigate the project after the few minutes it takes to get my bearings.

    *I really like Virtual Folders since they allow me order the files any way I want, move stuff around, or remove obsolete code without have to mess with disk or source control content.

    I think it is important for a single project to keep things consist. So if you have multiple developers on a single project everyone should agree how things are done on that project. If everyone is working individually then there isn't an issue if everyone has their own style but it can be problematic if there are multiple styles on a single project.

  4. The singleton pattern is one folks have talked about a lot on this forum and others. I keep coming back to the thought that a singleton object in LabVIEW is simply an LV2-style global (aka uninitialized shift register) with some defined operations. It is mutex safe, optimized for dataflow, and easily written. With some clever expansions to how you pass parameters (i.e., operations as class objects instead of raw data), you can make a very robust singleton object without defining a class specific to the singleton data itself. And you can find all the places where it is being used, a trickier proposition with the DVR solution. I recognize that the infastructure that you have to put around an LV2-style global is heavier than many of us would like, but that's in some ways more of an editor problem than a language problem. We made a big deal of building a singleton object example that ships with LV, mostly because everyone expected us to have a solution there, but over time, I have become less satisfied with that answer. The concept of "singleton" means "pointing all operations to a particular address in memory." In a dataflow language, that can be better optimized and (hopefully) better implemented by centralizing calls to a particular set of wires, not pointing many different bunches of wires at the same data.

    I completely understand why you would insist on using data flow. It is an extremely powerful programming paradigm. However, there needs to be a good way for parallel tasks to access a shared resource. This seems to be very difficult to do using native LVOOP. I admit I haven't played too much with DVR yet but I can think of many examples of the need to access a single entity or instance of an object in parallel tasks. For instance, an applications log file. In a traditional producer/consumer architecture you would have one loop with an event structure handling the UI events and another loop containing a state machine for the consumer. Let's say I want to allow the user to enter a message into the log while the application is running. It would be nice for both loops to have access to the single log object to allow this. However if I branch the wires I can't do this. Yes both loops would be able to actually write something to the log but what if I change some attributes on the log object. Using strict data flow I have two instances of the log object (where the wire gets branched) and an action such as enabling or disabling the logging of events will only work for one instance, not the entire log itself. I see this as a perfect use of OOP programming but something that LabVIEW's data flow paradigm restricts. An object should not be viewed the same as a wire in my opinion. If I instantiate a chair I don't want two chairs a little later simply because I branched the wire. My object design expects this to be the same chair, not a clone.

  5. Can I have multiple subpanels (on the same 'main' vi) show the same opened vi? Each representing its own instance (and access to its own data)?

    Say forinstance that I have a VI that shows a word from a list. I have three lists - one each for subject, verb and object. I know how to set the value of a front panel item, so I can set a VI's data in that respect. I just cannot seem to InsertVI into multiple subpanels.

    Any suggestions?

    I haven't tried this specifically but I suspect that if you make your subVIs re-entrant it would work.

  6. I wish the new versions of Labview were just that simple to include what I want.

    How do I even add the INF to the project? I can't find anything in this new tool. After making a project file, I go under the installer properties and Select source files. I would expect to be able to go to any location to select the files I want to add and add them. The tool will not let me.

    I have the VISA runtime selected as well as NI-488 under additional installers. In the case of the GPIB, I use the ENET1000. It's a similar problem where I seem to have to install the full version Labview, then run the GPIB wizard to find the ENET1000 to get it working. A whole different problem I am sure.

    I am amazed with as much as Labview has changed that tools like the builder are not smarter and more user friendly.

    Simply add the inf file to your project and in the build installer drag the file to its desired location. Generally you will want this in Windows inf directory.

    post-4959-125363637746_thumb.png

  7. Thanks MArk,

    I could not reply since we had a long week end out here.

    I actaullay saw these VI's before posting the thread. But i would like to know is it possible to send set of "FILES" using these vi's?

    If yes how.. ( I am looking at selecting the existing files and sending it to the destination Path. And to make it a little complex, the target is a H/W running linux)

    The llb that is attached does support the XMODEM send. You should be able to use those VI's to transfer your files. You may have to modify the send VI's to support the XMODEM-1K transfer if you are going to use it. The CRC VI's will work fine for calculating your CRC's. However you will need to read your file and send it is chunks according to the XMODEM protocol. You can find more information about it here and here.

  8. Thanks Mark and Ned. I took the Security System example exam today. I read the question wrong and had to do a major rewrite, so by the time I finished, I had taken 5 1/2 hours. It will definitely be challenging to finish within four hours. I need to learn how to use the quick drop menu to get more speed.

    Time management is a must when you are taking the test. The four hours they give you fly by. When you take the exam you have to make sure you are always making some progress otherwise you will probably run out of time. Take a few minutes in the beginning to form your strategy and basic design of the application and then start coding. You will not have time to do things over during the exam.

    Good luck.

  9. One thing that I've started doing with the DVR-inside-LVOOP scheme is using an IPE Structure to (un)bundle the DVR reference outside of the IPE that (de)references the private data. I like this a lot because it keeps the object/reference/data wire in straight line without any branching -- it seems to have the best "style". Note that I named the DVR "ref" to keep the (un)bundle nodes small in width.

    What do you think?

    post-17-125304052438_thumb.png

    I also like the look of that.

    Does anyone have a basic example of DVR LVOOP object?

    • Like 1
  10. Overall it looks pretty good. As Eric mentioned you definitely want to add more documentation. I would also look pay attention to the alignment of your controls and indicators on your front panels. Also some of the controls and indicators on your subVI were not completely visible on the front panel. You should avoid using the "Use default value if unwired" on the terminals of structures. Avoid wires that flow backwards. I am not sure if NI cares or not but I noticed when I opened a few of the block diagrams for some of your subVIs the code was not center or fully visible. I had to scroll the block diagram. I would avoid doing this too.

    Good luck with your exam.

    • Like 1
  11. Quit trying to be diplomatic - it's an open forum, so open up. What *exactly* is the problem. If there's anything you could change, what would it be? Sum it up in one sentance per change.

    I would venture to guess that he feels that the cost of a license should be more affordable for the one man shops or part time (on the side) consultants. I would love to have my own personal license for LabVIEW but I know that I can't afford or justify the cost. I am employed full-time and am not really doing any side work so I would have a hard time justifying the cost of my own personal license. With that said I can understand NI's licensing fees and structure.

    • Like 1
  12. What sort of DHCP/BOOTP server do you run?

    I tried (A LONG TIME AGO) to write a simple DHCP server in LabVIEW. I can't find the code now :(

    I recall that some DHCP servers maintain a disk version of the lease table. After a few Google searches I found the name of the file was dhcpd.leases

    The DHCP/BOOTP server on the network is a Windows 2003 server. It doesn't provide easy access to its address lease tables.

    It would seem you have run into a big problem here. :rolleyes: The only instance that knows about the IP address mapping of a dynamically assigned IP adress is the DHCP server that issued that address. The way this is usually solved is, that the specific client is known under a DNS name that it provides to the DHCP server when asking for an IP address. The DHCP server then will inform the DNS server about this new address.

    I can't rely on DNS since the server can't update DNS tables when BOOTP is used. Our printer's (actually the print server's) default setting is to come up and attempt to obtain its address using any one of the following methods: DHCP, BOOTP, RARP (yes, ancient and obsolete technology), or a method we call GLEANING (which is effectively the ping method you suggested below). It will generally get the BOOTP address first, hence the probelm with the DNS lookup.

    1) adding some address recovery support to the devices yourself.

    Basically this would be some UDP broadcast message that your devices reacts too. The device will expect a specifically formatted packet on a well defined port. The package could contain a specific MAC address or a place holder to let all devices that receive it respond with a packet that contains the MAC address and the current IP address. This is obviously something most device manufacturers do not make public but since you are to test devices that your company manufacturers this should not be the problem.

    Since UDP braodcasts are usually not routed, you can get in trouble with this in a setup with multiple IP subnets and would need to use TCP instead but that does not have an universal broadcast mechanisme like UDP.

    As you noted, the multiple subnets is an issue with this approach. BTW, our printers already support a specific discovery message on a UDP port.

    2) Another solution is to simply add some remote IP update mechanisme. Things I have seen are for instance where the device will react on a specific size ping message to update its own IP address with whatever address that ping contains. This may seem a bit useless since you usually simply specify the IP address in the ping command. But this works in such a way that you first manipulate the local arp table in your computer. You can do that with the arp command line program (or calling into low level Windows network APIs, but this solution is very cumbersome).

    First you make sure to delete any reference to the desired MAC address from the arp tables. Then you add a new arp entry with the specific MAC address and the desired IP address. When you now issue the ping command to that IP address (using the data packet load size your device is setup to recognize as the magic change my IP command), the device receives that ping packet and changes its internal IP address to whatever IP address the IP header of the ping packet contains.

    This obviously will only work in the local subnet since the arp tables are not used when contacting a device in a different subnet but instead that request is passed on to the subnet gateaway.

    Again, the multiple subnet problem is an issue. In addition, I would have to worry about address contention using this approach. I doubt I can reserve the number of addresses needed to support this on the subnet. This is one of the most active subnets on the test network.

    Another theoretical solution would be maybe the use of InARP which is the Inverse ARP protocol. How to set that up and make it work I do however not know.

    Rolf Kalbermatter

    I have been searching for such a protocol. I haven't found it yet. It would be nice if it worked though.

  13. I test the network functionality of the embedded firmware for the various bar code and labeling printers my company makes. As for asking the admin for an IP address I am the admin and I manage a test network with 25 VLANs, multiple switches, multiple wireless access points and every possible WiFi security. When testing network securities every security is assigned to its own VLAN (subnet) and when testing securities you are not guaranteed the same address each time you test a given printer. We have too many devices to statically assign all the addresses. In addition, the major problem that we have is that individual printers can run different types of firmware. When a printer is switched from one type of firmware (generally a different printer control language) to another its network settings are defaulted and which can mean it switches in normal network security to the default of no security resulting in a new IP address. I am trying to write an utility that would scrub the network for these printers that changed and reconfigure them to their properly assigned network security. These printers are part of a lab that runs long term network stability tests. Manually reconfiguring every printer is very time consuming and a pain in the butt.

    Since I am the admin I am actually looking at the possibility of querying the network switches for this information. I was hoping to avoid this if possible. However that is the path that I am currently investigating.

    Side note: The printers do support a broadcast query to identify themselves on the network however there are issues with having this work reliably across subnets, at least when doing the query as a broadcast. Broadcast UDP traffic is not routed across subnets.

  14. if you are running windows then you can go to a command prompt and type in "arp -a".

    It will give you the IP to MAC mapping that your PC knows about.

    THis only works if the PC has communicated with the device. In the situation I am working the devices will not only be changing their IP addresses but also changing subnets as well. The local ARP tables will not work since the IP address is required to build the ARP table. The ARP protocol is used to obtain the MAC address when you have the IP Address or the device. Unfortunately it is not designed to work the other way. Besides, there is no way in LabVIEW to force an ARP packet to be sent and receive the reply.

  15. The boldest I've ever gotten with meat was eating grilled bambi. It wasn't too bad. of course, that could have had something to do with the moonshine I was washing it down with (quite literally; I was in the mountains of West Virginia at the time).

    Cat

    Let's see, I have tried all of the following and am always open to trying new things too: beef, pork, chicken, turkey, veal, (the normal stuff), venison (deer), elk, moose, buffalo, squirrel, wild boar, rattle snake, alligator, frog, dog, duck, pheasant, Cornish hen and crickets. There may be a few others that I have forgotten. Then of course there is a whole host of seafood as well.

    Mmmmmmmm bambi....

    There's a great resturant in Marrickville (Sydney) that has a very long menu of different dishes, and then when it comes to select the meat that you want you can have chicken, pork, beef, several types of fish, veal, emu, kangaroo, crocodile, camel... If you're ever in town, try the honey-pepper crocodile - it's most-excellent.

    Sounds like my kind of place. If its meat I will generally give it a try. The alligator that I had in Florida was delicious. I need to find some place in Chicago that has it. There is a place in the burbs that usually has a wide offering of game meats but the place is really expensive so I haven't given it a try yet.

  16. The operative word is "had"? biggrin.gif

    I've eaten many kinds of animals, and that might have included canine and/or feline (I spent some time in the golden triangle, and I couldn't speak much of the local lingo nor could the locals speak much English, and that culminated in several "mystery meat" meals). I don't think I have anything against eating what we westerners consider as pets if it were offered...

    Actually is was pretty tasty. I would have no problem eating it again. Besides, in Korea the dogs they eat are farm raised much like our cattle, pigs or chickens. I too have eaten a wide variety of animals.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.