AxisInterface works fine for me when I add the template to the project. But if try to add AxisInterface to an empty project it is not working. MB_AxisInit appears to complete successfully (Done = TRUE) and MB_AxisInterfaceBase is being called cyclically, but I cannot write to any of the control structure elements. For example the OpMode is always stuck at ModeAb and PosMode.Position always shows 0 when I try to Write Values or do a MOVE move to load a target position. I have tried my own data structures as well as the pre-defined data structures of CXA_MotionInterfaceUser but it makes no difference. The blocks look the same how they looked in MLC but I must be missing something. Since since the template is now part of a compiled libary I can't see what's going inside, otherwise maybe I could figure out what else I need.
Solved! Go to Solution.
regarding: since the template is now part of a compiled libary I can't see what's going inside, otherwise maybe I could figure out what else I need.
The part, that was imported on the MLC is in CXA_MotionInterfaceUser.library and you can open it and have a look. You can also adapt this library to your needs. See documentation: https://docs.automation.boschrexroth.com/doc/158732724/introduction-and-overview/latest/en/
I am seeing the same issue when trying to use Axis Interface without the template. I would like to be able to use the MB_AxisInit and MB_AxisInterfaceBase independant of the template to allow converting some existing MLC projects. I would like to have them be as close as possible to the current layout and existing code. I get the same results where the MB_AxisInit appears to complete successfully with a done output and no errors. The MB_AxisInterfaceBase is being called cyclically, but I am not able to change any of the data. It acts like something else has control of all the parameters and it is locked from being changed. I can see some data and certain active items. It gives the appearance that the init and function block calls are doing something, but it is not allowing parameter access like I would expect. Any help would be appreciated.
I looked into the code for the template and could not find anything of significance that is different. It just looks like the template ultimately calls the same two function blocks via a loop to handle multiple axis and the MB_AxisInterfaceBase is extended to include a routine for retriggering. Nothing was jumping out at me that would provide a different path to make this work independently. Again any ideas or suggestions would be appreciated.
i still recommend to use the CXA_MotionInterfaceUser.library. Maybe something like a CXA_MotionInterfaceMLC_User.library would be helpfull for customers coming from the MLC?
I think, what you are missing is a part of the method TE_AxisInterface.mInitExtension() from the CXA_MotionInterfaceUser.library.
Background: the AxisCtrl and AxisStatus are no longer "normal" structures. They are build up by function blocks that are connected to the FB MB_AxisInterfaceBase. This allows the usage of properties and variables in AxisCtrl and AxisStatus.
Why so complex? This is more performant and allows to react direct on user inputs, e.g. CmdDone can be checked direct after an _OpMode assingment.
Hope this helps,
Your information was helpful. By doing this:
AI_AdminCtrl.FB_REF REF= MB_AxisInterfaceBase_0;
for each structure, MB_AxisInterfaceBase is now working on its own without using the template. Now we are trying with TE_AxisInterface. I don’t understand why it has two sets of structures. For example AdminCtrl and AdminCtrlExt. I would expect it only needs the extended structures - this is how it looks in MLC/IndraWorks. In any case it doesn’t seem to matter if I use FB_REF on one or both those sets of structures, I can’t get it to work. Just wondering if you had any further advice about this.