Jump to content
OMRON Forums


  • Posts

  • Joined

  • Last visited


  • Website

rhombusvs's Achievements


Apprentice (3/14)

  • Conversation Starter
  • First Post
  • Collaborator Rare
  • Week One Done
  • One Month Later

Recent Badges



  1. Hi Sina I'm working on a site that uses a PC104 stack consisting of Turbo PMAC2A CPU + PMAC2a ACC-1P + PMAC2A ACC-2P. the CPU and ACC-1P are both rev 109. All their systems use renishaw differential encoders. They are trying to implement a hardware encoder loss system as they are sure you can not do it within the PMAC I have read the encoder loss detection pdf and I am sure they can. I am having a few problems understanding what need to change on their stack to get it to work. I beleive I need to invert the resistor pack on the ACC-1P, but do I need to change the E20-23 jumpers on the CPU board, or have I completely miss understood things. Graeme
  2. Hi Is there a register I can look at to determine the number of program lines remaining in a buffer running on CS1? I am creating a custom block of data to copy over DPRAM and this is the only number I can not find a register for. If you use background data copying it is done for you (copied to $60000) so I assume it must exist somewhere Can anybody point me to it?
  3. rhombusvs


    Hi Mike I am running PEWIN ver on vista. I had a suspicion it might be ivars but I could not spot the offending one in my config, so yes I would be most greatful to see if I have something strikingly different. I am actually trying to solve a high speed data transmission issue, Tony Jacobs from DT UK was in the states trying to find a solution the other week. We have discovered that the PCOMServer is not a very efficient way for me to send my data to the Brick. I have about 100 bytes of data to send which corresponds to a coordinate in six degrees of freedom that I must move to with the minimal delay. From what I have discussed with Tony and Farooq the PComServer transmits 1024 byt packets and either waits for this many bytes or pads the data. my Data is as follows:- X0.0000 Y0.0000 Z0.0000 A0.000 B0.000 C0.000 U00.0 Note the 7th data point is an open loop torque for another motor. They suggested that I should be able to make my application quicker if I send my data via my own winsock interface and use an Ascii rotary buffer to control the motion, (they beleive I should be able to acheive better than 2ms per coordinate with this concept) I am trying to find methods of getting data back from the brick so that I monitor the state of the tool (including the PR of the buffer). I also need to get the rotational angle of one of the motors back as this is an input to the coordinate generator (it is actually going to be a steeringwheel with force feedback). If you think you can help I am happy to go offline. Graeme
  4. rhombusvs


    Hi Sina Thanks for the quick reply At least I now know it is something my end that is stopping it. I am running PEWin version on Vista (in this instance). I am not running any modbus firmware as far as I know.
  5. rhombusvs


    Hi I am trying to send get a PLC to send a few values of data back to a vb.net applicaiton. I want to do this via unsolicited messages for two reasons, I am not intending to use pcommserver, and I can have the listening thread isolated from other comms. I'm using a geobrick with ethernet comms and from other threads here I have seen that I should use SENDP "string to send". To test this I wrote a small plc which should send "A string" once every second (see below) OPEN PLC 29 CLEAR I5412=1000*8388608/I10 While (I5412 > 0) EndWhile P2900=P2900+1 SENDP"A String" CLOSE In the PEwinExe32Pro2 in a watch window I monitor P2900 and I also have the the unsolicited tab open. I do not see my message come even once and the P2900 increments once, the plc is still running which suggests that it is hanging on the sendP command. So I have 2 questions, 1: why is it hanging - ie what have I done wrong and what params have I possibly not set 2: Is it even possible to construct a string with Pvar data in it. If I can not then I am scuppered
  6. rhombusvs


    Hi I need to set a block of 12 floating point values in the DPRRam of a geobrick simultaneously. I have been told that the best thing I should use is DPRSetMem from my vb.net 2005 program I have loaded a double array with the 12 values that I need to write and the offset is &hFE*4 but I cannot understand the function Can someone please give me an example block of code on how to use it.
  7. [quote='Unit101' pid='685' dateline='1283964269'] Hello, I have not looked closely at what motion profile you are trying to create and I suspect the problem is either in your profile or how your telling the pmac to execute the motion... e.g blending on/off, lookahead... But using simple divide and conquer method.. first lets be sure that the Rot Buf and working with the streaming from you HMI is not the issue.... so I suggest that you simply create the entire profile as hard coded motion program, or enough of the profile to test the section of motion that is Juddering. Then just download this to PMAC, and execute in manually in the PMAC... no HMI or rotary buffers involved... Now see if the motion is still not good... assuming it is we have at least narrowed it down... next we look at the CS setup in the PMAC and the actual commanded profile itself. [/quote] Hi Unit I have attached my brick cfg file as of a few minutes ago. It is pretty complex but basically PLC10 controls the "state" of the tool. I have 3 CS systems, Cs3 used when moving system into fixed locations, CS2 I modify at will to test applications but still basically linear kinematics, then I have a complex IK for CS1 which I know works (I have had to edit the details out for confidentiality). I am actually using your bin rot buffer as defined in your pcomm2 application you sent to me a couple of weeks ago and I have sent regular position commands through this and it works OK, apart from a habit of pausing for long periods of time which I have to resolve. I have also attached a large section of the commands i am sending. In PLC10 I have to put the state machine into (p2000 = 100) state for CS1 to be setup, this then moves the state into p2000=110 where the rot buffer is defined and subsequently started, at this point I can then stream data from pcomm2 (or my equivalent). I think I have done something wrong in the CS setup which is prevent my PVT stuff from working. I do appreciate your input.
  8. Hi I am generating a block of PVT motion from the psuedo C# funtion below. angle=0; pCount=0; mystr[pCount]="PVT(20)"; do { pCount++; Apos = Math.Sin(Angle * Math.PI / 180) * 5; Avel = Math.Cos(Angle * Math.PI / 180) * 0.1; mystr[pCount]="A" + Apos + ":" + avel + " B0:0 C0:0 X0:0 Y0:0 Z0:0"; Angle++; }while (angle
  9. [quote='Unit101' pid='676' dateline='1283353135'] Great... you are very welcome. Let us know if need more ideas or support. Cheers... [/quote] Why is life never simple! I now totally get how to talk to the DPRam but I'm now getting an issue with the program I'm trying to get it to process. To see it it was how I've implemented it, I modified the PComm2 Application so that instead of loading an NC file I create a sinusoid for one of my axes and loaded this into the ncCodeArray, I am using a binary rot buffer... string myString = "PVT(20)"; ncCodeArray.Add(myString); do { myString = " "; pdApos = (Math.Sin(piAngle * Math.PI / 180) * 5); pdAvel = (Math.Cos(piAngle * Math.PI / 180) * 0.1); psApos = pdApos.ToString("0.00"); psAvel = pdAvel.ToString("0.00"); myString = myString + "A" + psApos + ":" +psAvel; myString = myString + "B0:0"; myString = myString + "C0:0"; myString = myString + "X0:0"; myString = myString + "Y0:0"; myString = myString + "Z0:0"; BufferTextBox.Items.Add(myString); ncCodeArray.Add(myString); piAngle++; } while (piAngle < 361); Effectively my A axis is a Roll goniometer, I also have a pitch and yaw axis plus XYZ linear. What I am seeing is a continuous judder in the motion, instead of a nice smooth sinusoid. The Judder appears to be a result of the axis stopping at the end of each move rather than moving seemlesly into the next PVT move in the buffer. If I increase the max speed of the move from 0.1 to 0.5 I can see the axis backing up to give itself room to get up to the end speed I have specified for the PVT move. I also obsever that after sin(90) i.e. the the axis starts its first return towards 0, I get a status=1 reply from Pmac.DPRAsciiStrToRotEx() which never clears. Any Ideas?
  10. [quote='Unit101' pid='669' dateline='1282938977'] First no dim question for sure... only dim or dumb question is the one you don't ask... in fact this is a good one. One way to achieve what I think you want is like this: -setup Binary Rotary Buffer - this uses the DPram for the rotary buffer -on the PMAC side have some PLC that initializes the buffer, opens it and sets the CS to RUN -Now the buffer is OPEN and ready to run, nothing is happening because there is nothing in the buffer -Now on the HMI side you can start to put data in the buffer -as you put each line in the CS will execute the moves -obviously if you put the moves in quicker then it can execute the buffer will fill up, you can watch this and control on your HMI when you add more lines to execute -if the HMI stops sending data... the CS will simply stop at end of last move and wait for more... -this will continue until you tell the CS to Abort running the program and close the buffer .... I have done this exact application on several CNC type machines and it works perfectly... it allows you to stream the data and have in my case NC files that are huge with 100,000's lines to execute Attached is a VS2005 C# sample application that shows how to setup and use the Binary Rotary Buffer, it also shows how to watch the buffer and stop sending when it fills up. Run the example, select the Binary buffer type and select the Large CNC file for example... it has 1000's of lines... from this example you should be able to do as I mentioned above... If you need more help let us know. You can contact me directly at mesposito@deltatau.com [/quote] Thanks Unit101 This gives me loads of info. A perfect example of how to use the DPRAM I'm not going to use the binary buffer but this has helped me understand how to set the Mvars up and send both floats and bit data to and from the DPRAM Graeme
  11. Hi I am being a bit Dim here but... This is what I am trying to achieve... I have a host PC running a pcomserver User HMI This application controls the "operational state" of a geobrick with 4K of DPRAM. After running several set up and test applications, the user can put the system in to a "streaming" mode. In this mode the Geobrick waits for upto 6 axes of PVT data to be streamed at it (ABCXYZ) - from a different application on a different PC. I also need to monitor the input demand so that I can clip any outrageous demands The user inteface and the geobrick code for all the utility functions is fine. However I am struggling to find a working method for the streaming. My initial concept was to open a rot buf on the geobrick, set up the PVT and then send data to it using pmacGetResponse from the stream PC. This does not work. I think I need to use the DPRAM and here I show my ignorance as I am not sure how. Ideally I think on the geobrick side I would set up some M variables (2 per axis - P & V) which pointed to the DPRAM. I would then have a motion buffer monitoring for a full set of data in these M vars and parse these values into some q vars which are used as the P & V in the PVT eg in psuedo code Prog 1 clear p1000=1 PVT(10) While p1000=1 if (new Mdata available) QvarPos =clip(MvarPos) QvarVel =clip(MvarVel) X(QvarPos ):(QvarVel ) endif .. End while dwell 0 Close This would mean from the User HMI I can do all my house keeping and then to put it into Streaming mode by running the above program when I set p1000=0 from the user HMI I can drop out of the motion buffer. What I am not clear about is how I put the data into the DPRam from the Pcomserver Streaming application and then make sure I access the correct DPRam space in the Geobrick. I have Read the manual and I am still struggling.
  12. Hi I've got a geobrick with 6 axes used (out of 8) #1..4,#7,#8 and I am having problems getting the motors to home to the PLIMx flag All the limits work when I have 1xx24=$1 so I know the limits are OK. I have used one of the homing routines from the user manual as a template and come up with this CLOSE OPEN PROG 102 CLEAR //Home Z1 down I224=$20001 ; Disable hardware limits I223=5 ; Home speed 5 cts/msec negative direction I226=-15360 ; home offset to get off switch I7022=2 ; Capture High level flag I7023=1 ; Use PLim2 as trigger flag #2HM ; Do actual homing move I324=$1 ; Re-enable hardware limits CLOSE With Imn22=2 the axis starts to move and then stops, as if it instantly sees the limit flag (even though it is nowhere near it) With Imn22=10 (low Flag Level) it moves continuously to the correct limit but does not see the flag. What am I over looking? Graeme
  13. [quote='Richard' pid='550' dateline='1279829142'] If the motor status has no errors, then the abort input error is triggered in the Global Status, and you might need to bring in the 24V abort input in to allow enabling/moving motors. [/quote] Hi Richard I am an idiot, I realised what I had not done that evening, you were absolutely right I had forgot to put the 24V onto the Abort input!
  14. [quote='Richard' pid='541' dateline='1279726613'] This file allows the user to control 8 virtual motors on a Geo Brick Drive. [/quote] Thanks Richard, it looks like I was at least halfway there. I am getting an err018 when ever I try to move a motor.
  15. Hi I'm programming an 8 axis tool on a geobrick My customer has loaned me a second geobrick to do offsite development and I need to set the motors up as virtual drives on the second unit so I can develop my code. I have tried to follow the technical note on "simulated servo loop" and the forum article "Phatom motor" but for some reason I can not even get the first motor to behave. Graeme
  • Create New...