I’m “synchronizing” to a virtual axis that is controlled using MpAxisBasic. I perform a Move Absolute, and when the position of the virtual axis changes, I update the position accordingly—so the position is updated while in motion.
This worked quite well, but after a recent update, I’ve started receiving a strange message a couple of times a day:
“Read access for write_only parameter; ParID: 115”
Previously, I was using MappMotion 5.24.1, and now I’ve upgraded to 5.28.2. Could this be causing the issue? I noticed that 5.29.0 is also available.
I updated because I needed to use MpAxisBasicConfig, which became available starting from version 5.27.
MpAxisBasic: Combination of the commands “MoveAbsolute” and “Update” can lead to a PageFault
MpAxisBasic: Combination of the commands “MoveAbsolute” and “Update” can lead to a PageFault
Under the following conditions, MpAxisBasic may cause a PageFault:
The function block MpAxisBasic is called in a task class that is slower than the task class mappMotion
The “MoveAbsolute” command is reset during the active movement and causes a halt.
The “Update” command is called independently of all commands if a parameter changes,
The change rate of the “MoveAbsolute” command is very high, i.e. the command is constantly set and reset and the parameters are changed in parallel.
Can this be the reason, it’s not clear for me what they mean by PageFault.
On the 4 conditions these are my comments.
MpAxisBasic I’m calling in task 1 in 4ms.
The “MoveAbsolute” command is reset during the active movement and causes a halt, is not what i’m seeing.
update i’m only sending when position is changing, not already an update is busy and the axis is in mcAXIS_DISCRETE_MOTION state.
The change rate of the “MoveAbsolute” command is very high, i.e. the command is constantly set and reset and the parameters are changed in parallel. This can be when it’s reaches position i will check.
I think the function you looking for is MC_BR_MoveCyclicPosition, which allow you to update the position of the axis on cyclic basic. see here for more information
I think you will not have used a ReadParID function to do that, so it means that the MotionSystem itself maybe did this by mistake.
@wenbo.ruan Thanks for your Hint!
Out of the Logger we can see that you hit the MoveAbsolut very often in short intervalls. This should not be a problem of the system, it should be able to handle it.
But in general this “coupling” use-case should not be implemented in this way. There are different possibilites to do it, like cyclic-position or gear-in.
If you know it is reproduceable in simulation (ARsim) it would be geate. Because if it is good protable it should be investigated by B&R support. It could be an not intended affect of an other Bugfix.
@Rene_Jansen
And as the Question came up … A “PageFault” is a situation were the system makes an MemoryAccess error. For example by using a pointer without setting an address to it, or an address which became invalid.
A PageFault will result in a reboot of the PLC and the message “PageFault” in the system logger. It is a fatal error in the program execution.
I will look into MC_BR_MoveCyclicPosition. Does it work in combination with MpAxisBasic? So I would only use this block for synchronization, and handle the rest with MpAxisBasic.
Michael, I found the same message. I’m not reading the ParID, so I do think MpAxisBasic might be causing it.
Regarding ARSim and simulating the virtual axis—I’ll try to create something myself, since simulating a virtual axis isn’t supported. I already requested this feature in the community last week.
I don’t think the “PageFault” is the issue here. I haven’t seen any memory violations in the logger yet, but I’ll look into it further.
I was able to capture a trace when the error occurred.
There is no reason for MC_BR_MoveCyclicPosition not working withh MpAxisBasic, but agreeing with what Michael said, using it as a way to synchronize with another aixs is rather odd. When the simple solution would be using MC_GearIn.
Regarding ARSim and simulating the virtual axis—I’ll try to create something myself, since simulating a virtual axis isn’t supported. I already requested this feature in the community last week.:sweat_smile:
Ah i remember it was i think this one… External Encoder …