Jump to content
OMRON Forums

David Jan

Members
  • Posts

    17
  • Joined

  • Last visited

Everything posted by David Jan

  1. I seem to understand what you mean, according to what you mean, I can set up a virtual motor 1, and then let the actual motor 2 and the actual motor 3 follow the position of the virtual motor 1. The way you implement the conversion of the offset velocity to position information is by using the encoder conversion table, and I don't particularly understand how you implement it, you implement it by assigning the pshm->Motor[1].IqCmd- Mtr2VelOffset*4 to pushm[100], where pshm->Motor[1].IqCmd is EncTable[1].pEnc , the 4 in Mtr2VelOffset*4 is because EncTable[1].type=11, which is 32 bytes, so it's a multiplication by 4, and the pushm is Motor[1].pDac, so what does pushm[100] stand for? Why assign the address offset of EncTable[1].pEnc to pushm[100]? Also is there another way to implement the conversion of offset velocity to position information?
  2. Another problem is that I am using CSV (Cyclic Synchronous velocity) mode and my motor configuration file is as follows: Motor[1].pDac = ECAT[0].IO[2].Data.a EncTable[1].pEnc = ECAT[0].IO[92].Data.a Where ECAT[0].IO[2].Data is the desired speed value of the motor and ECAT[0].IO[92].Data is the actual position value of the motor, can this still use pDAc = pEnc + Mtr2VelOffset from your rticplc? In your programme pDAc(pushm, motor desired speed) = pEnc(motor command current) + Mtr2VelOffset In my programme pDAc(motor desired speed) = pEnc(motor actual position) + Mtr2VelOffset Does this make sense? Why your desired speed can be obtained from the motor command current + Mtr2VelOffset, can you tell me the principle? Then I want to modify the speed in CSV mode, what should I do?
  3. hi,MoMo I got the following initial conclusions and questions by understanding your programme: Your program is a real-time cplc program written in rticplc by defining some functions in the header file of pp_proj.h. The meaning of the cplc program is to add or subtract Mtr2VelOffset*4 when Motor[1].IqCmd is greater than 0 or less than 0, where 4 is because type=11 is a single-precision Floating point number, occupies 4 bytes, and Mtr2VelOffset you define in pp_proj.h. #define Mtr2VelOffset pshm->P[8192] So how did you get the number 8192? Also EncTable[2].type=11 EncTable[2].pEnc=Motor[2].IqCmd.a. For simulating servo loops, it is good to set pEnc to the address of the motor servo command output IqCmd register, and I am using the CK3E+Ethercat communication protocol to control the motor, and I have the following EncTable in my motor configuration file: EncTable[1].Type = 1 EncTable[1].pEnc = ECAT[0].IO[92].Data.a This is how the manual describes it: For data received from the EtherCAT network, this specifies the register in the EtherCAT holding register that maps to the EtherCAT drive's actual position register: So I don't need to multiply by 4, right? mptr2_tmp=pshm->ECAT[0].IO[92].Data-Mtr2VelOffset;
  4. Allow me to understand your CPLC program first。
  5. I would like to set the velocity bias as a parameter and then modify the velocity deviation by modifying the parameter. I understand that there will be a velocity change as the motors move to modify the speed, even if it is necessary to re-fit the velocity transition curve When motor #1 is moving in the forward direction, its speed minus the bias is less than zero, motor #2 and motor #3 are moving in the reverse direction.
  6. Can you help me with my problem? If I want the speed of axis 1 to be 50, then the speed of axis 2 is equal to the speed of axis 1 minus 10. the speed of axis 3 is equal to the speed of axis 1 plus 10. how can I achieve this? I don't want to set the speeds of motor 2 and motor 3 in the motion programme, i just want to find motor 2 and motor 3 by the speed of motor 1. it can be understood that the speeds of motor 2 and motor 3 are coupled with the speed of motor 1.
  7. If I want the speed of axis 1 to be 50, and then the speed of axis 2 to be equal to the speed of axis 1 minus 10, and the speed of axis 3 to be equal to the speed of axis 1 plus 10, how do I achieve this? I don't want to set the speed of motor 2 and motor 3 in the motion programme, I just want to get the speed of motor 2 and motor 3 from the speed of motor 1, which can be interpreted as the speed of motor 2 and motor 3 is coupled with the speed of motor 1.
  8. According to what you said, it is not possible to complete the modification of the speed. I used the cmd command in the PLC program, and my idea was to use a variable "offset" to change the speed of the motor at any time, which is cmd "% offset". However, currently, neither of the two methods you mentioned is effective. Some cannot be compiled, while others do not change the speed of the PLC program after compilation. Do you think this is why?
  9. Another problem is that I want to implement the function in the PLC, cmd "% Percentage", where percentage is a global variable that I defined earlier. But since % already has its own usage in cmd's commands, for example "- %d Signed integer, decimal format - %u Unsigned integer, decimal format - %x Unsigned integer, hexadecimal format, use lower case". So how do I use % for speed changes
  10. Okay, Steve. Following the method you mentioned above, I have performed the relevant experiments, when the speed changes from %100 to %200, the process is slower, is there any relevant parameter to modify the time of this change? For example acceleration?
  11. Does that mean there is no way to change the value of Ethercat? What I understand is that the values of parameters like ECAT[0].IO[1].Data are at our disposal. But according to you I can't modify the existing Ethercat, I can only use % to modify the speed. I will try to modify the speed using % and give you feedback!
  12. I understand that the command position and command speed in PMAC are calculated by internal servo algorithms. So, how can I modify the actual speed value without changing the command position, so that the motor speed has an actual bias? Can PMAC achieve this? Do you have any relevant parameters? Option 1: Enable Motor [1] DacBais=20 seems to be unable to implement my idea. Option 2: Can I directly add or subtract from the output address corresponding to Motor [1]. pDac? For example, Motor [1]. pDac=sys Udata [1]. a, I can directly set sys Udata [1]=sys Udata [1]+200, but the speed remains unchanged. Why is this?
  13. Steve,I understand that the command position and command speed in PMAC are calculated by internal servo algorithms. So, how can I modify the actual speed value without changing the command position, so that the motor speed has an actual bias? Can PMAC achieve this? Do you have any relevant parameters? Option 1: Enable Motor [1] DacBais=20 seems to be unable to implement my idea. Option 2: Can I directly add or subtract from the output address corresponding to Motor [1]. pDac? For example, Motor [1]. pDac=sys Udata [1]. a, I can directly set sys Udata [1]=sys Udata [1]+200, but the speed remains unchanged. Why is this?
  14. Thank you, Steve. I'll download the new version and try again
  15. Actually, I don't particularly understand why changing the speed setting value directly in the Ethercat address doesn't work, I'll keep an eye on your question.
  16. I am following the steps in the IDE manual to configure the motors, both motors run fine in CSP mode and in CSV mode at the same time, but when one is in CSP mode and the other is in CSV mode, the motors have problems. My PMAC is a CK3E, the drive is a CDHD2, and the power PMAC IDE is version 4.5.2.9! The configuration file is below: Sys.WpKey = $AAAAAAAA Motor[1].pAmpEnable = Motor[1].AmpEnableBit = 0 Motor[1].pLimits = 0 Motor[1].pDac = EncTable[1].pEnc = EncTable[1].pEnc1 = Sys.pushm EncTable[1].ScaleFactor = 1 EncTable[1].Type = 1 Motor[1].pEnc = EncTable[1].a Motor[1].pEnc2 = EncTable[1].a Motor[1].pAmpFault = Motor[1].AmpFaultBit = 3 Motor[1].AmpFaultLevel = 3 Motor[1].MaxDac = 28000 Motor[1].DacShift = 0 Motor[1].ctrl = Sys.PosCtrl Motor[1].FatalFeLimit =0 Motor[1].MaxSpeed= 200 Motor[1].JogSpeed=100 EncTable[2].type=1 EncTable[2].index1=0 EncTable[2].index2=0 EncTable[2].index3=0 EncTable[2].index4=0 EncTable[2].index5=0 EncTable[2].index6=0 EncTable[2].MaxDelta=0 EncTable[2].ScaleFactor=1 EncTable[2].pEnc = EncTable[2].pEnc1 = Sys.pushm Motor[2].pAmpEnable = Motor[2].AmpEnableBit = 0 Motor[2].pLimits = 0 Motor[2].pDac = Motor[2].pEnc = EncTable[1].a Motor[2].pEnc2 = EncTable[1].a Motor[2].pAmpFault = Motor[2].AmpFaultBit = 3 Motor[2].AmpFaultLevel = 3 Motor[2].MaxDac = 1000 Motor[2].DacShift = 0 Motor[2].ctrl = Sys.servoctrl Motor[2].ServoCtrl = 1 Motor[2].FatalFeLimit =0 Motor[2].MaxSpeed= 200 Motor[2].JogSpeed=100 Sys.WpKey = $0
  17. I want to use PMAC and Ethercat to control two identical motors, one in CSP mode and the other in CSV mode,After configuring the configuration file, there are issues with both motor jogs. The CSP motor jog does not move, while the CSV motor jog accelerates directly to the maximum speed, which is very dangerous.
×
×
  • Create New...