Jump to content
OMRON Forums

AnthonyLH

Members
  • Posts

    77
  • Joined

  • Last visited

Everything posted by AnthonyLH

  1. Thanks a lot Kejr. No sure yet which solution i will take.. i will let you know when we will have started it.
  2. I also would like to use realtime FIFOs in the next months to manage errors and to do some logging. Realtime because i want it to run also in the Deltatau RTI CPLC. Do you guys found a solution to your "mode switches" issues? Which libraries/functions do you use? I currently use shared variable (P and Q variables) bitmasking to transmit applications errors. It is heavy to manage. I would like to improve my error management and found that using a queue would be very flexible. I would be very nice of you if you could share your methods, habits, in application errors transmission and logging. Thank you! Anthony
  3. Thank you Kejr, For my standard projects i add the line "/dev/sdb1 /media/disk-0 auto defaults 0 0" in the "fstab" file. I used the automounter only this time to test. Recall of the issue: as soon as the SD card is mound, the block device change, the first change goes from sdb1 becomes sdc1. Without the autolounter, it stop there, so i have "sdb1" mounted but not present anymore. The device is present on "sdc1". Using the automounter, the new sdc1 is detected and mounded and then directly changed to sdd1, and so one... until sdf1... It is the first time i have the issue, it might be hardware, i sent the CPU back to Deltatau. Thanks again Kejr! Anthony
  4. Hello, I cannot correctly mount an SD card on my current PPMAC. It the first time it is happening, i start a PPMAC every months... From my understanding, a FAT32 SD card, with no USB stick connected on the PPMAC, should be found at "/dev/sdb#" (the b of sdb# is important) and mounted automatically to "/media/disk-0" at start up thanks to the "/.readonly/etc/usbmount/usbmount.conf" file. On this specific PPMAC, the SD card seems to change of block name after or during the mounting: on the example screen shot, it is changing from "/dev/sdb5" to "/dev/sdc5" to "/dev/sdd5" and so on.. Does someone see a potential reason/origin for/to this behaviour? Thank you!! The explication below is how i placed the finger on the issue... on our standard application we use an ext3 SD card. ------- To mount an ext3 SD card on the PPMAC, i modify the "fstab" file (with "mount -o remount,rw /" cmd before and "mount -o remount,ro /" after). The line i added is "/dev/sdb1 /media/disk-0 auto defaults 0 0". On this specific PPMAC, the device block seems to change during the boot (changing from "/dev/sdb1" to "/dev/sdc1"). When i look in "mtab" ("cat /etc/mtab") i see that "/dev/sdb1" was mounted. When i send "blkid" is see that the device is now "/dev/sdc1". I did few other tests: -changed the "fstab" line to "LABEL=SD /media/disk-0 auto defaults 0 0" : i still see the "sdb1" in "cat /etc/mtab" and the "sdc1" using "blkid". -removed the line in "fstab" and modify "/.readonly/etc/usbmount/usbmount.conf" file. I added the ext3 to the line: "FILESYSTEMS="ext3 vfat"". After doing this i observed a multi-mount of the same device... it mount it, the device change (sdb1 to sdc1), it try to mount the new one and so on..
  5. Thank you Charles, thank you Curt, In fact using TM="t" * Sys.Servoperiod*(Sys.RtIntPeriod+1) did solve my issue... i had an additionnal cadencing issue in my RTCPLC during my tests. Charles, I fill the rotary using the command "Command(...)". I also post a question on this part: "http://forums.deltatau.com/showthread.php?tid=1855". I also asked once how to be more real-time than using the command "Command" which seems to use a gpascii-2. Curt, thank you for the explainations on move calculation from buffer. Would you have some documentation on it? I would like to be sure to really understand what the PPMAC does. Let's take few configuration exemple: - Case1 : RTI=1, SegMoveTime=1ms, TM 1ms, TA=TM - Case2 : RTI=2, SegMoveTime=1.4ms, TM 1.4ms, TA=TM - Case3 : RTI=1, SegMoveTime=1.4ms, TM 1.4ms, TA=TM - Case4 : RTI=1, SegMoveTime=1.4ms, TM 1ms, TA=TM From my understanding, every RTI, the following task are called: Segmentation calculation (coarse interp, kinematic calls, lookahead), motion prog, foreground script plc, foreground c plc. What is the execution order (sequential time order) in the RTI task? For the RTI<->SegMoveTime interraction: - Can 2 or more SegMoveTime calculation be done in 1 RTI call ? - Or maybe my question should be : what if RTI cycle time > SegMoveTime ? The SegMoveTime<->TM interraction seems clear: The software documentation gives: ""While it is possible to execute programmed moves (“blocks”) of a shorter time than this segmentation time, the segmentation algorithm will automatically skip over these blocks, effectively performing a smoothing function over multiple blocks."" The documentation also says : ""If Coord[x].SegMoveTime is 0.0, ......, inverse-kinematic calculations are only performed at move-end positions"". What are the "move-end position" here? Is SegMoveTime necessary when we use linear mode with TM <= the SegMoveTime i would like to set? About Coord[x].Nsync... Yes i use it. I incremenent a counter in the RTI when i send a line in the rotary and then check that the difference "RTI_RotarySendCounter - Nsync" stay stable. The issue was precisely that the difference was not stable. I can not use Nsync to trigger a new point sending because : 1/ i need constant time between acquisitions, 2/ i want to send a position every single RTI (every 1ms). Thank you!!
  6. Dear all, I fill a rotary buffer from the RTICPLC, 1 rotary position line every N RTI cycle (our goal is to set a rotary position every RTICPLC). My issue: my RTI and my rotary "unfilling" (Coord.TM) seems to use different clocks as the number of lines in the rotary keeps decreasing or increasing when it should stay stable. Side (decreasing or increasing) depends on the hardware. From my understanding, the rotary is read every RTI interrupt before the RTICPLC. Moves in the rotary use the following parameters "Linear TM=t TA=t TS=0" (TM=TA) where "t" can take value from 2ms to 20ms. Our RTI is setted to run at 1KHz, so every 1ms. I use a counter in the RTI and send a line in the rotary every 2.. to 20 cycles depending on the "t". I use Coord[].SegMoveTime=1 (ms). I do not use the lookahead. ((Just for info, we need such high frequencies not for trajectory quality but for control reactivity, as our system can be part of a higher lever external position control-looped system)) I said it depends on the hardware... My theoretical servo cycle is 0.250ms When i have a real Sys.Servoperiod > 0.250 (for example 0.2500152587890625), the number of lines in the rotary keeps decreasing. When i have a real Sys.Servoperiod < 0.250 (for example 0.249986455578319972), the number of lines in the rotary keeps increasing. So it seems that rotary unfill, which also depends on TM, use the CPU clock to act, even if the rotary unfill task is called every RTI interrupt. To avoid this, i tried to set a TM="t" * Sys.Servoperiod*(Sys.RtIntPeriod+1). It seems to work for systems using a Sys.Servoperiod < 0.250, but it gets worse for systems using a Sys.Servoperiod > 0.250. Could someone help me understanding which clock are used in the rotary to act every TM ? Does someone see another way of synchronising RTI and rotary? We are able to the value we want in TM, without regards of SegMoveTime or RTI interrupt time... How is the link done between TM and SegMoveTime calculations? The only information i found (training slides) says: If move time < Sys.ServoPeriod servo update time, move will be calculated, but then skipped over by trajectory servo interpolation. In segmentation mode, if move time < Coord[x].SegMoveTime, move will be calculated, but then skipped over by trajectory segment interpolation. But this does not explain me, when it is skipped, what will be the target position for SegMoveTime calculation... Thank you all
  7. Thank you Steve, Sorry, I don't understand how looking at the Sys.time can help to detect the "rti interrupt". I know that the RTI will not execute until the servo has finished and that excatly what i want to use... I want the acquisition to be done in the first servo call after the "RTI interrupt", and before the "RTI execusion". I have the following frequencies :servo at 4KHz, RTI at 1KHz, so i need to find the right servo call between the 4 calls made. Do you have a way to detect RTI interrupts? (not the RTI execusion). If there is no direct way using deltatau/xenomai available status/structures, i guess i will increment a count the beginning of the RTI task, then count servo calls so that i execute my code on the 4th servo call after my RTI execusion increment (this work if we assume the RTI task always starts its execusion between the first and the second servo calls. This should be the case, but, theoretically it depends on MotionProg and other Deltatau tasks executed every RTI interrupt before the RTI task).
  8. Dear all, How can i know, in a servo task, if the corresponding servo interrupt is the one starting a new rti cycle (rti interrupt) ? I need to acquire data from a 59E3 card with the minimum jitter (use of servo task) and i need a data every rti (i would like to do the acquisition in the servo task call made between to the rti interrupt and the rti task call) Also, from servo task, how can i know which motor is currently calling the task? Can i find the Motor index in the Motor structure (Mptr->?) ? Thank you
  9. Dear all, I have a security issue using "Command(...)". In the Rticplc, it seems that the "Command(...)" use a unique gpascii thread for all "Command(...)" requests (i don't know for others: capps, bgcplc..). I use the "Command(...)" for a lot of interraction with PPMAC (jog, abort, disable...), in one application i even fill up a rotary buffer. When you send an "open rotary" from a "Command(...)", all the next "Command(...)" will be send in the rotary. To avoid this, i always send the "open rotary" and "close" in a single command not to leave the gpascii thread opened in a rotary. Even taking this precausion, i something get stock in an opened rotary, all my next commands are rejected (abort, kill...) So my questions: In C programming (Capp, Bgcplc, Rticplc, Usrcode...), what are Deltatau preconisation to interact with the PPMAC world for stop command (abord, disable...): - we can use predefined C PPMAC Commands (AbordCoord, KillAllMotors..) but there are not all available. - we can use the standard "Command(...)" - other method? Does predefined C PPMAC Commands (AbordCoord, KillAllMotors..) use the same gpascii thread than the command "Command(...)" ? Does it exist a documentation listing and explaining the C PPMAC commands (AbortCoord, GetResponse) ? Thank you all
  10. I got a sys.status=$200 on a PowerBrickAC. $200 is bit9. The software manual indicates "bits 9–31 : (Reserved)". What does bit9 means?
  11. Dear all, I have perturbations on BrickAC status (BrickAC.PowerFault, BrickAC.LineOk) which toggle even when no error is present. It might be linked.. i am also facing BrickAC.BusVoltage perturbations even when there is no power present. It might come from the Monitoring feature, it might be real.. how can i find the origine of thoses pertubrations?
  12. Dear all, I have perturbations on BrickAC status (BrickAC.PowerFault, BrickAC.LineOk) which toggle even when no error is present. It might be linked.. i am also facing BrickAC.BusVoltage perturbations even when there is no power present. It might come from the Monitoring feature, it might be real.. how can i find the origine of thoses pertubrations?
  13. Dear all, I have some difficulties understanding exaclty what are the differences between "BrickAC.STO0" and the "BrickAC.STO1". I have only 1 wire connected to the STO connector. It goes to the pin3 "STO IN". The wire supplies 24v when the Emergency Stop is not pressed. From what i observe: BrickAC.STO0 is always at 0. BrickAC.STO1 is at 0 when 24v is supplied, at 1 when emergency stop is pressed. The documentation talks about: STO0 : “Safe torque off” STO0 input state STO1 : STO1 disable condition control input state It seems like there is a link with the DYN Brake input.
  14. Dear all, I have some difficulties understanding exaclty what are the differences between "BrickAC.STO0" and the "BrickAC.STO1". I have only 1 wire connected to the STO connector. It goes to the pin3 "STO IN". The wire supplies 24v when the Emergency Stop is not pressed. From what i observe: BrickAC.STO0 is always at 0. BrickAC.STO1 is at 0 when 24v is supplied, at 1 when emergency stop is pressed. The documentation talks about: STO0 : “Safe torque off” STO0 input state STO1 : STO1 disable condition control input state It seems like there is a link with the DYN Brake input.
  15. Dear all, Is there a way of reseting an AmpFault status without enabling the motor? The only way i found to reset a "Coord.RunTimeError" is to do a "&i enable". Is there another way? I would have like to reset errors without enabling axes (if possible)
  16. Dear all, Is there a way of reseting an AmpFault status without enabling the motor? The only way i found to reset a "Coord.RunTimeError" is to do a "&i enable". Is there another way? I would have like to reset errors without enabling axes (if possible)
  17. Dear all, After a windows "blue" screen, i was not able to get my IDE running correctly. I tried to uninstall-reinstall it with in between deleting all PPMAC folder and register keys. After the new installation i still have the same issue: When i open a projet i get the message: "The #### project is too old for conversion, please upgrade your project manually, by creating a new project....." When i create a new project i get the same message: "The #### project is too old for conversion...." At IDE launch, in the windows "View/Output", i get 5 times the message: "The DeltaTauDataSystem.dtPackage1.dtPackage1, dtPackage1, Version=1.0.4604.25729, Culture=neutral, PublicKeyToken=99ee5871fdbbd69a ({B413144F-4916-4BF5-A458-94A61C359552}) did not load because of previous errors. For assistance, contact the package vendor. To attempt to load this package again, type 'appenv /resetskippkgs' at the command prompt." My IDE version is currently the 1.5.0.21. Thank you
  18. Dear all, After a windows "blue" screen, i was not able to get my IDE running correctly. I tried to uninstall-reinstall it with in between deleting all PPMAC folder and register keys. After the new installation i still have the same issue: When i open a projet i get the message: "The #### project is too old for conversion, please upgrade your project manually, by creating a new project....." When i create a new project i get the same message: "The #### project is too old for conversion...." At IDE launch, in the windows "View/Output", i get 5 times the message: "The DeltaTauDataSystem.dtPackage1.dtPackage1, dtPackage1, Version=1.0.4604.25729, Culture=neutral, PublicKeyToken=99ee5871fdbbd69a ({B413144F-4916-4BF5-A458-94A61C359552}) did not load because of previous errors. For assistance, contact the package vendor. To attempt to load this package again, type 'appenv /resetskippkgs' at the command prompt." My IDE version is currently the 1.5.0.21. Thank you
  19. I would like to continu on the subjet. We also would like to send "rotary buffer" command lines from a RTICPLC more directly. Currently we send this type of command: sprintf(L_sTemp,"&%d open Rotary N%d X%.6le Y%.6le Z%.6le A%.6le B%.6le C%.6le Q_Par1==%ld Q_Par1==%d close", <> ); L_iReturn=Command(L_sTemp); "Command" from my understanding give access to a GPASCII, so from my understanding we loose the real-time. Also the "GASPII" session accessed by command is shared by all calls in the RTI. So if an error occurs, the buffer can stay opened and all other command by rejected (sent in the rotary...). Do you have another "rotary buffer" direct access we could used ? Our goal: We have a trajectory generator running in RTI which fills the rotary buffer. Our current objective is a TM of 5ms, so to send a command in the rotary every 5ms. We also want to reduce as much as possible time between the command send and its traitment (as less lines as possible in the rotary) so that calculated trajectory is played "as fast as possible" An ideal command will be: N (Sys.nsync), 6 positions (X,Y,Z,A,B,C), 2 Q variables for internal use. I will also be interested if you have a faster solution when sending only the 6 positions (X,Y,Z,A,B,C). Thank you
  20. Thank you Curtwilson, From my understanding of the documentation i was expecting the "SoftLimits" bit on a "SW" limit, not the "LimitStop" bit.
  21. Hello, I have an unexpected behavior while doing an homing on a negative hard limit switch. The issue: the bit "LimitStop" (stop due to hard limit) is triggered even if "Motor[x].pLimits" is set to 0, this when the software limits are enables ("Motor[x].MinPos/MaxPos" with correct values). I don't have the probleme when i set "Motor[x].MinPos=0" and "Motor[x].MaxPos=0" The bit "SoftLimits" stay at 0. The "hm" move is stopped on the hardswitch. When soft limits are disabled ("Motor[x].MinPos/MaxPos=0"), the second part of the homing (move to my "Motor[x].HomeOffset") is done correctly. I also tried with a soft limit lower the HomeOffset ( Motor[x].MinPos< - Motor[x].HomeOffset ). In this case it works. Do i have to disable the softlimits during "hm"? Or might i have a parameter not correctly configured? Parameters: Gate1[4].Chan[2].CaptFlagSel=2 Gate1[4].Chan[2].CaptCtrl =2 Gate1[4].Chan[2].GatedIndexSel=0 Motor[3].HomeOffset=10000 Motor[3].HomeVel=-10 Motor[3].pLimits=0 Thanks
  22. Is there something new on the automatic brake-control function? I also had some issue with brakes, see below. M_Sys_IO_DO_Drive_ResetError=1 // Drive reset // Wait some sec M_Sys_IO_DO_Drive_ResetError=0 &1 enable // It switchs to AmpEna==1 and it removes the brakes: ok &1 disable // It switchs to AmpEna==0 and it put on the brakes: ok &1 enable // It switchs to AmpEna==1 and it removes the brakes: ok // Here I do an emergency stop (whitch remove power on drives) : AmpEna==0 , brake are on, AmpFault==1 : ok // I put back power on drives but I do not reset the drives, AmpFault is still ==1 &1 enable // AmpFault==1 but anyway the brakes are removed !!!
  23. Thank you Agovande, I am trying to start a KEB (manufacturer) F5 (drive type) Ethercat drive. I jointed the XML of the drive. Website: http://www.keb.de/en/products/servo-technology/combivert-f5-servo.html http://www.keb.de/en/products/communication/ethernet-ethercat-powerlink-profinet.html The reply to the sdo x1000 is: For a servotronic drive (one i got yesterday for comparison, not the drive i need to start): system ethercat -m0 -p0 upload 0x1000 0 -t uint32 0x00420192 4325778 I don't see the 402? For a KEB F5 drive (the one i need to start) : system ethercat -m0 -p1 upload 0x1000 0 -t uint32 0x00000000 0 I am starting the Servotronic today to get a second example. Thank you KEB2248F5ETG4d.zip
×
×
  • Create New...