Jump to content

James McAnanama

Members
  • Posts

    46
  • Joined

  • Last visited

    Never

Posts posted by James McAnanama

  1. Hi James all good with you?  I looked at the example that you ordered me but not to understood as it can help me, what I am trying to make I am while the program wheel and I to want to increase the rotation of the stepmotor I I obtain without having that it program and to place a new speed and to twirl again, since now very thanks and  forgives for my English

    3458[/snapback]

    Sorry Zeus, I do not understand. You write in English far better than I could write in Portuguese or Spanish! However, your problem is still unclear to me. I do not understand the following:

    "what I am trying to make I am while the program wheel and I to want to increase the rotation of the stepmotor I I obtain without having that it program and to place a new speed and to twirl again"

    Can you reword the above statement (maybe I will be able to better understand).

    Also, perhaps it would be better if I knew where you were having trouble. Are you having trouble with LabView, or are you having trouble with the 3540i board?

  2. THANKS SO MUCH DUDE ......NOW ITS VERY NICE.....IF YOU DONT BE TOO BUSY IF YOU WANT TAKE A LOOK IN ANOTHER PROJECT MY...I WANT  LITTLE HELP...I DO A VI TO CONTROL A STEP MOTOR OK...AND THIS WORK FINE...BUT NOW I NEED INCREASY VELOCITY BUT I CANT STOP A MOTOR....WITH YOU WANT SEE MY VI...ILL PUT HE HERE...AND SORRY FOR MY ENGLISH...IM FROM BRZIL AND IM LEARN YOU LANGUAGE...OK SEE YOU

    3129[/snapback]

    Zeus,

    If I understand correctly, you want to be able to send updates to your motor indexer without stopping & starting your program? What I think would help is to divide your program into multiple processes. One process would be responsible for motor communications, while another would be responsible for getting commands from a user interface. You could use a queue to pass messages between the different parts of your program. I have attached a trivial example where a que is used to update indicators on the screen. One process sends commands to update a binary counter, while another process responds to the user request to turn on and off a LED. A main process monitors the queue and reacts to new commands. Let me know if this helps, or let me know if your problem is different than I understand it to be.

    Regards,

    James

    Download File:post-365-1105458512.llb

  3. andgan,

    If your camera has a composite video output, you can get the image into LV using a frame grabber (but that will still require $$$). Maybe someone else can come up with a cheaper solution...

    At any rate, if you can figure out how get the images into memory, the edge detection can be done by creating your own algos. A simple approach is as follows: get the region of interest of your image and populate a 2-d array with the grayscale pixel values. Create a histogram of the image and look at the difference between the dark region and light region. If there is >20% difference between these two regions, then edge detection should be easy & robust. If you lack this contrast, try playing with the lighting.

    Now binerize the image by select a threshold roughly halfway between the dark and light grayscale values (i.e. all pixels < threshold =0, all pixels > threshold =1). If your edge runs top-to-bottom, sum all columns into a 1-d array, and take the maximum of the derivative as the location of the edge. If your edge runs left-to-right, sum all rows and look for the max in the derivative. If your edge can have any orientation, then you will have to look for the transition from light to dark in each row, and then do a linear fit to the result to figure out location and angle.

    Once you calibrate your camera to some real world dimensions you can express the location of the edge in these real world terms.

    Cheers,

    James

    [EDIT]

    PS> If you find you require an industrial solution, you might want to take a look at DVT - their total cost of ownership is lower than most for the quality of the product IMHO. I have no vested interest in the company - I just like their product. You would be looking at a few thousand bucks.

    [\EDIT]

  4. Has anyone played around with the "Diagram Disable Structure"? You can create this struct using the New VI Object primitive. Create it in a target vi (vi cannot be running to create), then copy it to your application. You can 'comment out' code, or add several flavours of a code snippet, and disable all but one version of it. Is this the same as the 'conditional disable struct' in the sense that it is only supported on the PDA version?

    post-365-1097846399.gif?width=400

  5. You should consider logging to an SQL database. MySQL is very powerful and you can't beat the cost. You could log your status and define another column in the db table as a timestamp. Every time you write a status message, the timestamp gets added for free. You can access the db remotely, and can of course query it for specific message etc. Once you start using a SQL db, I believe you will find more and more uses for it.

    :2cents:

    James

  6. Does anyone know how to add a shift register to a For Loop using the scripting features? I want to programmatically create a new For Loop on a specified block diagram, and then I want to add a shift register.

    Cheers,

    James

    [EDIT]

    :lightbulb: Okay, never mind, I got it.... Invoke node on Loop, select method="add shift register". Huh, go figure... I'm glad I spent so much time trying to get the New VI Object primative to do this for me! :-(

    :headbang: stupid :headbang: stupid :headbang: stupid!

    [/EDIT]

  7. Ruben,

    If you need torque at high speed, then servo is better than step. However, in your case I suspect you want torque at lower speeds, and holding torque, so a stepper motor is a better choice. You do not need an encoder for a stepper motor. Stepper motors have a typical resolution of 1.8deg per step, but can obtain better resolution using 'microstepping'. You can use an encoder if you want (if you overpower the stepper motor during a move, it stalls loses track of its position) but typically it is not necessary for a properly designed system.

    In terms of control, your system will consist of the following:

    -motor

    -amplifier (converts logic volts to motor volts & current)

    -indexer (takes commands from your software and translates them to meaningful pulses for your motor).

    -limit switches, EPO, other inputs.

    I use delta tau indexers and Compumotor amps and motors. That is, I don't have experience with NI's equipment, but it looks like they have user friendly equipment that should handle your needs.

  8. but i'd studied more in that. :headbang:

    2177[/snapback]

    I recommend picking up a book: Conway & Watts, " A Software Engineering Approach to LabVIEW" ISBN 0-13-009365-3. The book describes more advanced usage of queues. For example, sending a cluster as the queue type. In this cluster you have a component (e.g. a string) describing the intent of the message, or who should use the message, a component that is the command to execute (e.g. clear, run, stop, etc), and a component that contains any numerical setting required by the command. I think this approach would help in your client<->server communications. The client would send a formatted message over TCP/IP to the server, the server would then submit this to a queue for the rest of its application. Everything from adjusting PID gains to controlling data in memory could thus be administered remotely.

    Good luck,

    James

  9. But server don't send anything for his clients. the time which is sending is on the DateServerHandler and the user can't controller. How can i put a string control in a server and type anything and send for all clients

    2138[/snapback]

    I think what you want to do is use a named queue. In your data acquisition process, you will populate this queue with your data. The application that runs your data acquisition process must also launch the TCP server. For each instance of your reentrant server you will access this named queue and will send the data down the tcp port to your client. You will need to add some two-way communication between your client and the server to tell the server when to flush the queue. You could even add the capability for each client to broadcast messages to each other by writing and reading a separate queue on the server. Keep in mind that the clients cannot see the queue directly (only the server PC has access to the queue -it adds data, removes data, and can then transmit this data back to the clients).

    I have attached an example - A VERY QUICKLY WRITTEN EXAMPLE - to get the idea across. Launch the Number Generation vi in the llb. Next launch the client vi (these vi's are all modifications from Michael's example 4 - I hope that is okay Michael). Basically the number generation vi launches the server and then enters a while loop where it continually adds random numbers to a named queue. When the client vi makes a connection, the server reads the entire contents of the queue, deliminates each reading with a pipe (|) and sends this deliminated string to your client. Notice that the data is added to the queue faster than it is read (i.e. no loss of data). Keep in mind that nothing removes data from the queue at this point - you will have to add that feature. If you were to make another connection, you will get all of the data from the start of the process. You can break the string into the numbers by using the pipe (|) as your deliminator.

    Okay, I hope this helps - I haven't spent a lot of time on it, so I am sorry if I have missed something - let me know.

    Cheers

    James

    Download File:post-365-1097178076.llb

    Remember :beer: doesn't keep you warm at night, but LV sure does.... :wub:

    :oops: was that out loud?

  10. Paulo,

    I don't know the details of your application, but based on the fact that you have one server and many clients, and the fact that you want to keep all data, I am thinking that you are using your DAQ vi as a data logger and the client vi's as remote analysis tools(?). If this is the case, perhaps you should use an SQL database. The DAQ vi would insert the data to the database, and the client apps would pull from the database. This way the DAQ vi doesn't have to keep track of what data is still pending transmission, the data is not volatile (lost in power outage etc) , large amounts of data are easily handled, and the SQL data can be accessed remotely by everything from LabView to Excel to web pages.

    :2cents:

    James

  11. Hey Paulo,

    Another suggestion might be to use DataSockets. Your server is a datasocket writer, and your clients are datasocket readers. DataSockets are abstract enough that you don't have to worry about handling multiple connections - you just subscribe to the url of the data source and read when ready (or read, waiting for data). See LV examples.

    If you like the TCP/IP approach, then I believe Jean-Pierre's suggestions are best.

    Cheers,

    James

  12. One more topic for nobody reply.

    2088[/snapback]

    Hey now... We're all listening Paulo. :D

    I have a array which i want to send by tcpip. that array is building in a independetly while loop and i have other while loop to send information by tcpip. i use a local property to transport information of  one loop to other.

    Have you taken a look at LV examples? (in LV, Help>Find Examples). Search on TCPIP. They have examples on sending an array of data over TCP/IP.

    post-365-1096918753.gif?width=400

    Also, Mike's asynch process presentation has a clear example of serving data across multiple TCP/IP connections.

    http://lavausergroup.org/niweek2004/meetin...niweek_2004.zip

    but i only want to send by tcpip, the information of array when it have one number of elements.

    I am not clear on what you want.... You want it to make a connection when you have >=1 elements? You want to make a connection if and only if you have 1 element? Please explain for me.

    Cheers,

    James

  13. alvarito,

    I am not sure I understand what you need.... What I think you are asking about is how to design a multi-threaded application.(?) That is, I think you want an application that takes care of the scanner in one process, and runs the ICT in another process. At some point, you want the scanner process to communicate with the ICT process. If this is what you want, then take a look at this presentation by Michael Aivaliotis:

    Mike's Asynchronous Process presentation.

    and see app note 114 from NI.com:

    AN114

    I hope this helps,

    James

  14. Here it is:

    post-365-1096036185.gif?width=400

    We still have a old Mac running LV 2.1.?. Some apps are at 5.1, but most are at 6.1. I am using 7.0 for all new projects (all I need are some new LV projects!). Probably the neatest thing is that some our current apps (running at 6.1) have source code from their LV 2.1, Macintosh days (small changes to upgrade). I can't imagine running a DOS program that accesses hardware under Win2K (never mind Mac to PC).

    I have a version of Matrox Imaging library that somebody bought for $5k a few years ago, and so I use Labwindows CVI for my machine vision projects (C libs). This where I spend most of my time currently.

    See DLPX on Nasdaq... No secret that money is tight right now where I work. To this end, I use Linux systems to do web hosting of data logged elsewhere using LV DAQ, or Rabbit SBCs. I really like the cost of ownership aspect of Linux,MySQL, JSP. Moreover, I like the ability to remotely administer a Linux system. We have two servers built on old Pentium PCs at two different locations. These systems run headless, and I can administer them from my PC (I can also run critical applications -like xeyes - on the Linux box, while outputting the Display on my PC...) :shifty: What I would really like is a LV cross compiler so that I could have even more fun with a Linux system (see DLPX on Nasdaq to learn why we don't just buy a LV-Linux license... :headbang: ).

    Okay, here I am, in the raw.... :unsure:

    post-365-1096037598.gif?width=400

    This image is from Silver Peak in Killarney Provincial Park (Ontario, Canada). A group of us go into the backcountry every September for some camping - this is from last year's trip. This year we went to Algonquin Park. This park is 'near' Ottawa, and as a bit of trivia for our German friends, is apparently well known in Germany. Apparently, many Germans come to Canada and vacation by camping in Algonquin Park. Urban myth or no, I have heard that at times there is more German spoken in Algonquin than English!

  15. I like the watchdog approach. However, some of the devices I am looking at are SBCs that are streaming data to another application, and they don't support multiple connections.

    Thanks for reference to the NI Knowledge base. I guess I am stuck with sytem exec. This is fine - I am just surprised that LV doesn't have built in support for Ping.

    Cheers,

    James

×
×
  • Create New...

Important Information

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