piefum Posted July 7, 2014 Posted July 7, 2014 Hi all I need to know the exact unit for Ixx88 (Motor xx In-Position Number of Scans) because my UMAC have to raise the InPosition flag after the actuator is inside the In Position Band for 0.5 s. I understand the Ixx88 frequency is function of the housekeeping... but is there a way to measure this frequency? Keep in mind that my PLCs do not have any fancy computation, meaning that the CPU load for each PLC is always the same. Thanks Gigi
Sina.Sattari Posted July 7, 2014 Posted July 7, 2014 Background in position check period as you mentioned is dependent on the housekeeping period which can vary depending on the CPU load. Since CPU load is not constant (even a query from PC can affect the CPU load) this will not provide you with exact timing. However, using I13 you can let the PMAC check for in-position in foreground and set a bit 13 of motor status word. However, this method does not support Ixx88 and you have to implement this code as an RTI code to check for Ixx88 consecutive cycles and set a custom flag for your process.
piefum Posted July 8, 2014 Author Posted July 8, 2014 Background in position check period as you mentioned is dependent on the housekeeping period which can vary depending on the CPU load. Since CPU load is not constant (even a query from PC can affect the CPU load) this will not provide you with exact timing. However, using I13 you can let the PMAC check for in-position in foreground and set a bit 13 of motor status word. However, this method does not support Ixx88 and you have to implement this code as an RTI code to check for Ixx88 consecutive cycles and set a custom flag for your process. Thanks Sina I understand the way it works I13, but I would prefer the use of Ixx88 instead of a higher load on servo-interrupt and a RTI to be written from scratches. I would choose then to set the In Position with a not-so-exact timing, I would say 0.5 < t < 1 s. Is there a way to have an idea of the housekeeping frequency? thanks gigi
Sina.Sattari Posted July 8, 2014 Posted July 8, 2014 I think we have a way of figuring this out using the "watchdog timer". The watchdog counter register (Y:$25) gets reset to I40 value at the end of each background cycle (or house keeping) and every Servo interrupt the counter is reduced by one until next house keeping occurs. The lowest value the watchdog counter ever reaches from a power up/reset is stored in X:$25 register. We can either: 1. Take the average of Average(I40 - Y:$25) for a certain period and find out how many Servo cycles it takes for the CPU to go through a background cycle. 2. Assume the worst case scenario and use I40 - X:$25 to assume the longest background cycle. I would suggest using the 1st method as you're trying to adjust a minimum Ixx88 required for your application.
piefum Posted July 8, 2014 Author Posted July 8, 2014 I think we have a way of figuring this out using the "watchdog timer". The watchdog counter register (Y:$25) gets reset to I40 value at the end of each background cycle (or house keeping) and every Servo interrupt the counter is reduced by one until next house keeping occurs. The lowest value the watchdog counter ever reaches from a power up/reset is stored in X:$25 register. We can either: 1. Take the average of Average(I40 - Y:$25) for a certain period and find out how many Servo cycles it takes for the CPU to go through a background cycle. 2. Assume the worst case scenario and use I40 - X:$25 to assume the longest background cycle. I would suggest using the 1st method as you're trying to adjust a minimum Ixx88 required for your application. this seems very intersting, thanks! tomorrow I will try to measure the cycle and see what I can get ciao gigi
Recommended Posts