Activity for manuknecht

  • manuknecht manuknecht posted a comment on discussion Motion πŸ‡¬πŸ‡§

    Hello all I use an axis group with two linear axes in a kinematic system. Using MC_MoveLinearAbsolute and MC_MoveLinearRelative, I am trying to realise dynamic movements (set velocity: 1 m/s, set acceleration: 30 m/s^2) with the highest possible jerk, as I want to compare this with a movement with a trapezoidal velocity profile. However, my measurements show that the axes accelerate with a maximum jerk of approx. 800 m/s^3, even if the value in the function block was set to 10,000 m/s^3. I have already...

  • manuknecht manuknecht posted a comment on discussion Motion πŸ‡¬πŸ‡§

    Hi, thanks a lot for the response. I did check all these parameters, but if the PlanningTask takes up to 60 ms, I can't increase the Buffer to such values. I contacted the Codesys support with a projectarchive. Let's see if they can help. Thanks again for your great support!

  • manuknecht manuknecht posted a comment on discussion Motion πŸ‡¬πŸ‡§

    Hi, we did install the real-time kernel patch on the RPI and also performed the additional optimizations including isolating the cores. Changing the configuration of the planning task e.g. running it on a separate core, changing the cycle times and mode from cyclic to freewheeling did not show any improvements.

  • manuknecht manuknecht posted a comment on discussion Motion πŸ‡¬πŸ‡§

    Hi These issues occured using a Raspberry Pi 4. I also repeated the experiment with codesys control for Windows, which results in much lower cycle times. With up to 3 ms, I still think they are fairly high given they should run at 2 ms and don't require complicated kinematics. The effect of higher cycle times for slower movements also prevails.

  • manuknecht manuknecht modified a comment on discussion Motion πŸ‡¬πŸ‡§

    Hello all I am using an AxisGroup with the Gantry2 Kinematics to move a 2D-Gantry system. When creating the AxisGroup, the SoftMotion_PlanningTask is created automatically with a cycle time of 2 ms in my case. I realized that the maximum cycle time of this task can spike to very high values (up to 60 ms) at lower speeds of the motion, leading to synchronization issues and errors on the axes. The same behaviour - though not as drastic - can be observed with virtual axes too. Is this behaviour intended...

  • manuknecht manuknecht modified a comment on discussion Motion πŸ‡¬πŸ‡§

    Hello all I am using an AxisGroup with the Gantry2 Kinematics to move a 2D-Gantry system. When creating the AxisGroup, the SoftMotion_PlanningTask is created automatically with a cycle time of 2 ms in my case. I realized that the maximum cycle time of this task can spike to very high values (up to 60 ms) at lower speeds of the motion, leading to synchronization issues and errors on the axes. The same behaviour - though not as drastic - can be observed with virtual axes too. Is this behaviour intended...

  • manuknecht manuknecht posted a comment on discussion Motion πŸ‡¬πŸ‡§

    Hello all I am using an AxisGroup with the Gantry2 Kinematics to move a 2D-Gantry system. When creating the AxisGroup, the SoftMotion_PlanningTask is created automatically with a cycle time of 2 ms in my case. I realized that the maximum cycle time of this task can spike to very high values (up to 20 ms) at lower speeds of the motion, leading to synchronization issues and errors on the axes. The same behaviour - though not as drastic - can be observed with virtual axes too. Is this behaviour intended...

  • manuknecht manuknecht posted a comment on discussion Runtime πŸ‡¬πŸ‡§

    Hi I was wondering the same thing. I managed to dynamically add an EtherCat Slave but I could not find out how to add a softmotion axis to it. Does anyone have an answer to this? Thanks in advance!

  • manuknecht manuknecht posted a comment on discussion Motion πŸ‡¬πŸ‡§

    I am using the object SMC_GEOINFO to generate a trajectory and move a system accordingly using the SMC_INTERPOLATOR function block similar to the sample project CNC10_DynamicPath.project. According to the documentation, the movement type INITPOS does not require a start position in the SMC_GEOINFO object, which is confirmed in the documentation of the SMC_GEOINFO object. When using the movement type INITPOS however, the motion will still start from the starting point defined in the SMC_GEOINFO object...

  • manuknecht manuknecht posted a comment on a wiki page

    Thanks a lot for the update! So my project worked with the old version of the library for you? That is very strange. Need to check it from my side then.

  • manuknecht manuknecht modified a comment on a wiki page

    I'll attach a project to this message. I am using the HTTPClient library to read a JSON string through a HTTP request. I left you a sample string that I want to parse in the code to demonstrate the issue. You can see that the key-value pairs do not match up between the string and the JSON struct. Hope that helps.

  • manuknecht manuknecht posted a comment on a wiki page

    I'll attach a project to this message. I am using the HTTPClient library to read a JSON string through a HTTP request. I left you a sample string in the code to demonstrate the issue. Hope that helps.

  • manuknecht manuknecht posted a comment on a wiki page

    If you will tackle it again, here's another issue I discovered. The JSON string I want to parse contains some nested arrays and objects. It came to my attention, that proper parsing only works when the key-value pairs on the lowest level (inside arrays) are sorted alphabetically. Otherwise, the values can be assigned to the wrong keys. I didn't check the code further to find what causes this, but maybe you will have an idea? Otherwise it seems to do what it does, so thanks a lot for sharing!

  • manuknecht manuknecht modified a comment on a wiki page

    I am aware that this thread is three years old, but I ran into the same issue and could not resolve it. Does anyone know what can cause this? Thanks in advance! Edit: After some more tinkering, I found the issue preventing proper parsing of the JSON string. For this the library function JSON_TO_STRUCT (FB) has to be adjusted from row 100. The original implementation is as follows: //Match name and array index. Array index will be 0 if the current name:value is not part of an array IF MATCH_NAMES(JSONVars^[jsonvarindex].Names[nameindex],...

  • manuknecht manuknecht posted a comment on a wiki page

    I am aware that this thread is three years old, but I ran into the same issue and could not resolve it. Does anyone know what can cause this? Thanks in advance!

  • manuknecht manuknecht modified a comment on discussion Engineering πŸ‡¬πŸ‡§

    After some more digging I realized that I get an error on the PLC Logger saying PersistenceChannel: 150 (invalid type in data: SimpleLibrary). I suppose the issue could be found in the ConfigData, which is automatically generated and which looks like this: 1 9##83 SimpleLibrary#GVL.aMoreZeros.[1]#0#64512#15#0 <[2]#0#64520#15#0 <[3]#0#64528#15#0 <[4]#0#64536#15#0 <#0#64544#15#0 <[6]#0#64552#15#0 <<lrVar#0#64560#15#0 <strVar#0#64428#16#80 <uiDummy#0#64370#11#0 Perhaps the fact that the variable is...

  • manuknecht manuknecht posted a comment on discussion Engineering πŸ‡¬πŸ‡§

    After some more digging I realized that I get an error on the PLC Logger saying PersistenceChannel: 150 (invalid type in data: SimpleLibrary). I suppose the issue could be found in the ConfigData, which is automatically generated and which looks like this: 1 9##83 SimpleLibrary#GVL.aMoreZeros.[1]#0#64512#15#0 <[2]#0#64520#15#0 <[3]#0#64528#15#0 <[4]#0#64536#15#0 <[5]#0#64544#15#0 <[6]#0#64552#15#0 <<lrVar#0#64560#15#0 <strVar#0#64428#16#80 <uiDummy#0#64370#11#0 Perhaps the fact that the variable...

  • manuknecht manuknecht posted a comment on discussion Engineering πŸ‡¬πŸ‡§

    I have several libraries which contain values that should be saved on a PLC. As apparently no Persistent Variable List is available within Libraries, I use the Persistence Manager to create a Persistence Channel in the Project which imports the library. I then specify the persistence channel in the library using the {attribute 'ac_persist':='PersistenceChannel_CT'} specifier. This generally works very well and gives me exactly the properties I require. However, it came to my attention that the (alphabetially)...

  • manuknecht manuknecht posted a comment on discussion Visualization πŸ‡¬πŸ‡§

    Thanks for your responses. The close listener sounds like an interesting approach, will have to see what I can do with it. I actually solved it as suggested by sturmghost by setting an enum variable to a certain state as soon as I open a dialog. This way I always know which dialog was opened last.

  • manuknecht manuknecht posted a comment on discussion Visualization πŸ‡¬πŸ‡§

    I managed to find a solution that seems to work reliably. As the VU.Globals.CurrentClient-filter accesses the CURRENTCLIENTID or at least a similar, internal variable it can only be used if called from a certain client (e.g. from a button in a visualization). My solution works by implementing a new client filter that compares the client ID of all clients to the ID of the last client that was used. The variable containing the data of the last client is defined as: G_LastClient : VU.IVisualizationClient;...

  • manuknecht manuknecht posted a comment on discussion Visualization πŸ‡¬πŸ‡§

    I have a project with several buttons and dialogs. Most of the dialogs are opened using the Open Dialog action of the Input configuration of the buttons. Some dialogs are openend using the FbOpenDialogExtended FB of the Visu Utils library and the FbOpenDialogExtended FB is called in the Execute ST-Code action. I am also using the FileOpenSave dialog from Visu Dialogs which requires an OnDialogClosed action to read out. I realized that the OnDialogClosed action which is meant for the FileOpenSave...

  • manuknecht manuknecht posted a comment on discussion Visualization πŸ‡¬πŸ‡§

    Thanks for your response! It seems like the VisuElems library has updated functions to the ones you used but apparently these older ones still work, even if I couldn't find them in the library documentation and they are also not suggested automatically by Codesys (when using Ctrl + Space). However, its precisely what I was looking for and it works. Thanks!

  • manuknecht manuknecht posted a comment on discussion Visualization πŸ‡¬πŸ‡§

    When using the FileOpenSave dialog and using the Visu_FbFileListProvider FB as an In/Output I could not manage to detect the difference of pressing the "Load" button on the dialog vs. pressing the "Cancel" button. In both cases, the selected file is updated if the dialog is closed when checking using the Visu_FbFileListProvider.GetSelectedFileName() command. How can I prevent reading or writing of a file when the "Cancel" button was pressed?

  • manuknecht manuknecht modified a comment on discussion Visualization πŸ‡¬πŸ‡§

    I would like the following to happen: Upon pressing a button, one of several dialogs shall be opened, depending on the state of other variables. I managed to realize this by either using the "Execute ST-Code" Option in the Input Configuration or by setting a BOOL Variable on button tap and executing the same code elsewhere. The code is something like this: CASE eCmdType OF E_COMMAND_TYPE.E_MOTION: fbOpenMotionDialog(itfClientFilter:=VU.Globals.CurrentClient,xExecute:=TRUE,sDialogName:='VIS_InsertMotion_DLG');...

  • manuknecht manuknecht posted a comment on discussion Visualization πŸ‡¬πŸ‡§

    I would like the following to happen: Upon pressing a button, one of several dialogs shall be opened, depending on the state of other variables. I managed to realize this by either using the "Execute ST-Code" Option in the Input Configuration or by setting a BOOL Variable on button tap and executing the same code elsewhere. The code is something like this: CASE eCmdType OF E_COMMAND_TYPE.E_MOTION: fbOpenMotionDialog(itfClientFilter:=VU.Globals.CurrentClient,xExecute:=TRUE,sDialogName:='VIS_InsertMotion_DLG');...

1