Post by rmaas on Direct Pointers in IOMapping for EtherCAT with IoDrvEthercatLib.ETCSlave_Dia
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hi, Im not sure if this is what you mean, but i do succesfully use the IoDrvEthercatLib.ETCSlave.InputData and IoDrvEthercatLib.ETCSlave.OutputData to read from and write to beckhoff DI and DO cards. Very convenient as you can make an FB with an VAR_IN_OUT of type IoDrvEthercatLib.ETCSlave and only have to pass the slave reference... So i am not using .ETCSlave_Diag but .ETCSlave...
    
    Last updated: 2024-02-13
    
    
      
        Post by liepgp on Script for batch printing 
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      I'm searching a way to print several projects to PDF, in order to correct student exercises. I'm able to open the printing dialog box using system.commands["print", "print"].execute(). But I can't find the prompt names in order to complete the printing with the dialogs Do you have any way to do that?
    
    Last updated: 2024-02-13
    
    
      
        Post by nmcc on Toggling Visualizations using HMI Physical Buttons
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Here is a screenshot. I really do not know how to format the variable exchange you are talking about.
    
    Last updated: 2024-02-13
    
    
      
        Post by nmcc on Toggling Visualizations using HMI Physical Buttons
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Here is a screenshot. I really do not know how to format the variable exchange you are talking about.
    
    Last updated: 2024-02-13
    
    
      
        Post by dkugler on Direct Pointers in IOMapping for EtherCAT with IoDrvEthercatLib.ETCSlave_Dia
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      rmaas: how do you get the reference of the slave?
    
    Last updated: 2024-02-13
    
    
      
        Post by liepgp on Batch printing
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      I'm searching a way to print several projects to PDF, in order to correct student exercises. I'm able to open the printing dialog box using system.commands["print", "print"].execute(). But I can't find the prompt names in order to complete the printing with the dialogs Do you have any way to do that?
    
    Last updated: 2024-02-13
    
    
      
        Post by mondinmr on Direct Pointers in IOMapping for EtherCAT with IoDrvEthercatLib.ETCSlave_Dia
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
    Last updated: 2024-02-13
    
    
      
        Post by mondinmr on Direct Pointers in IOMapping for EtherCAT with IoDrvEthercatLib.ETCSlave_Dia
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Thank you for the response! It's a path I had already considered, however, while it has always worked for me on inputs, it doesn't on outputs, because if I enable the option to update all IOs at every scan, the IO tasks overwrite each other. However, I have found something very interesting which I am posting below.
    
    Last updated: 2024-02-13
    
    
      
        Post by davidbo on Does CODESYS use its own native driver for I2c?
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      CODESYS Control for Raspberry Pi MC Does CODESYS use its own native driver for I2c? I have a python script communicating with a device simultaneously with a CODESYS doing the same. The bus is not saturated. But I get many read errors
    
    Last updated: 2024-02-13
    
    
      
        Does CODESYS use its own native driver for I2c?
    
    
       CODESYS Forge
    
    
      talk
    
    (Thread)
    
    
      Does CODESYS use its own native driver for I2c?
    
    Last updated: 2024-02-13
    
    
      
        Post by mondinmr on Direct Pointers in IOMapping for EtherCAT with IoDrvEthercatLib.ETCSlave_Dia
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      I have found a very interesting solution using: IoConfigTaskMap IoConfigConnectorMap IoConfigChannelMap The first is the list of IO tasks. The second is the connector for each IO module in the IOMap. The third is the individual input or output on the IOMap. One of the properties of the connector is another pointer to a connector, which corresponds with the connector of the EtherCAT slave. Through this information, it is possible to understand to which EtherCAT slave an IO connectormap corresponds. I am attaching an FB that allows for the construction of an IO map and finding the pointer to the actual IOs in the IOMap based on the bitoffset. FUNCTION_BLOCK IOExplorer VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR inputChannels: COL.LinkedList; outputChannels: COL.LinkedList; ulintFactory: COL.UlintElementFactory; END_VAR METHOD inputAtBitOffsetOfConnector : POINTER TO BYTE VAR_INPUT conn: POINTER TO IoConfigConnectorMap; bitOffset: UDINT; END_VAR VAR it: COL.LinkedListIterator; itf: COL.IElement; elem: COL.iUlintElement; channelInfo: POINTER TO ADVChannelInfo; bitOffsetR: UDINT; END_VAR inputChannels.ElementIterator(it); WHILE it.HasNext() DO it.Next(itfElement => itf); __QUERYINTERFACE(itf, elem); {warning disable C0033} channelInfo := TO___UXINT(elem.UlintValue); {warning restire C0033} IF channelInfo^.connectorField = conn THEN IF bitOffsetR = bitOffset THEN inputAtBitOffsetOfConnector := channelInfo^.addr; RETURN; END_IF bitOffsetR := bitOffsetR + channelInfo^.size; ELSE bitOffsetR := 0; END_IF END_WHILE inputAtBitOffsetOfConnector := 0; END_METHOD METHOD outputAtBitOffsetOfConnector : POINTER TO BYTE VAR_INPUT conn: POINTER TO IoConfigConnectorMap; bitOffset: UDINT; END_VAR VAR it: COL.LinkedListIterator; itf: COL.IElement; elem: COL.iUlintElement; channelInfo: POINTER TO ADVChannelInfo; bitOffsetR: UDINT; END_VAR outputChannels.ElementIterator(it); WHILE it.HasNext() DO it.Next(itfElement => itf); __QUERYINTERFACE(itf, elem); {warning disable C0033} channelInfo := TO___UXINT(elem.UlintValue); {warning restire C0033} IF channelInfo^.connectorField = conn THEN IF bitOffsetR = bitOffset THEN outputAtBitOffsetOfConnector := channelInfo^.addr; RETURN; END_IF bitOffsetR := bitOffsetR + channelInfo^.size; ELSE bitOffsetR := 0; END_IF END_WHILE outputAtBitOffsetOfConnector := 0; END_METHOD METHOD scanIO VAR_INPUT END_VAR VAR numTasks: DINT := IoConfig_Globals.nIoConfigTaskMapCount; tType: WORD; ioTask: POINTER TO IoConfigTaskMap; numCon: WORD; connector: POINTER TO IoConfigConnectorMap; numCh: DWORD; channelInfo: POINTER TO ADVChannelInfo; iTsk: DINT; iCon: WORD; iCh: DWORD; i: DINT; _tmpConnList: COL.IList; elem: COL.IUlintElement; itf: COL.IElement; tmpCh: POINTER TO ADVChannelInfo; lastE: DINT; e: COL.COLLECTION_ERROR; e1: Error; END_VAR VAR_INST lF: COL.ListFactory; END_VAR IF outputChannels.CountElements() > 0 OR inputChannels.CountElements() > 0 THEN RETURN; END_IF _tmpConnList := lF.CreateDynamicList(16, 16); //Iterate through all IO tasks FOR iTsk := 0 TO numTasks - 1 DO ioTask := ADR(IoConfig_Globals.pIoConfigTaskMap[iTsk]); //Store the type of the task (Input or Output) tType := ioTask^.wType; numCon := ioTask^.wNumOfConnectorMap; //Iterate through all connectors of the task FOR iCon := 0 TO numCon - 1 DO connector := ADR(ioTask^.pConnectorMapList[iCon]); numCh := connector^.dwNumOfChannels; //Iterate through all channels of the connector FOR iCh := 0 TO numCh - 1 DO //Create a new channel info object and fill it with the address, connector and size of the channel //Connectors is address of field connector in this case like EtherCAT slave //Address is the address of the IOMap //Size is the size of channel data in bits in IOMap channelInfo := __NEW(ADVChannelInfo); channelInfo^.addr := connector^.pChannelMapList[iCh].pbyIecAddress; channelInfo^.connectorField := connector^.pConnector; channelInfo^.size := connector^.pChannelMapList[iCh].wSize; //We put the channel info a temporary ordered list //Order is based on the address of IOMap lastE := TO_DINT(_tmpConnList.CountElements()) - 1; FOR i := 0 TO lastE DO _tmpConnList.GetElementAt(udiPosition := TO_UDINT(i), itfElement => itf); __QUERYINTERFACE(itf, elem); {warning disable C0033} tmpCh := TO___UXINT(elem.UlintValue); {warning restire C0033} //If the address of the channel is smaller than the address of the channel in the list IF tmpCh^.addr > channelInfo^.addr THEN //Insert the channel in the list at the current position _tmpConnList.InsertElementAt(TO_UDINT(i), ulintFactory.Create(TO_ULINT(channelInfo))); //Clear the channel info pointer channelInfo := 0; //Exit the loop i := lastE + 1; END_IF END_FOR //If the channel info is not 0, it means that the channel was not inserted in the list IF channelInfo <> 0 THEN //Add the channel to the end of the list elem := ulintFactory.Create(TO_ULINT(channelInfo)); _tmpConnList.AddElement(elem); END_IF END_FOR //Iterate temporary list and add the channels to the input or output list lastE := TO_DINT(_tmpConnList.CountElements()) - 1; FOR i := 0 TO lastE DO _tmpConnList.GetElementAt(udiPosition := TO_UDINT(i), itfElement => itf); __QUERYINTERFACE(itf, elem); {warning disable C0033} tmpCh := TO___UXINT(elem.UlintValue); {warning restire C0033} //If type is input, add the channel to the input list IF tType = TaskMapTypes.TMT_INPUTS THEN e := inputChannels.AddElement(ulintFactory.Create(TO_ULINT(tmpCh))); //If type is output, add the channel to the output list ELSIF tType = TaskMapTypes.TMT_OUTPUTS THEN e := outputChannels.AddElement(ulintFactory.Create(TO_ULINT(tmpCh))); ELSE __DELETE(tmpCh); END_IF END_FOR //Clear the temporary list _tmpConnList.RemoveAllElements(); END_FOR END_FOR END_METHOD
    
    Last updated: 2024-02-13
    
    
      
        Post by rmaas on Direct Pointers in IOMapping for EtherCAT with IoDrvEthercatLib.ETCSlave_Dia
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Wow, this is next level for me, very impressive! glad you found a solution, thanks for sharing!
    
    Last updated: 2024-02-13
    
    
      
        Direct Pointers in IOMapping for EtherCAT with IoDrvEthercatLib.ETCSlave_Dia
    
    
       CODESYS Forge
    
    
      talk
    
    (Thread)
    
    
      Direct Pointers in IOMapping for EtherCAT with IoDrvEthercatLib.ETCSlave_Dia
    
    Last updated: 2024-02-13
    
    
      
        Post by rmaas on Direct Pointers in IOMapping for EtherCAT with IoDrvEthercatLib.ETCSlave_Dia
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      The reference used is the ethercat slave name. For example in this screenshot the reference would be: EL1809_1
    
    Last updated: 2024-02-13
    
    
      
        Post by totorovic on Project loses 'Download time' information
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hello, It happens that the offline project (the IDE one) loses the Download information. Because of this the code has to be download again. Is it possible to force this info somewhere? Is it possible to ignore it? How can I solve this ? Thank you
    
    Last updated: 2024-02-13
    
    
      
        How to address visualization change with button press...
    
    
       CODESYS Forge
    
    
      talk
    
    (Thread)
    
    
      How to address visualization change with button press...
    
    Last updated: 2024-02-13
    
    
      
        Ethercat Dynamic Configuration : Clear all slaves
    
    
       CODESYS Forge
    
    
      talk
    
    (Thread)
    
    
      Ethercat Dynamic Configuration : Clear all slaves
    
    Last updated: 2024-02-13
    
    
      
        Post by nmcc on How to address visualization change with button press...
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hello all, I am extremely new to Codesys and to programming with these languages in general. I have an HMI panel with 8 physical buttons to the right side of it. I am trying to have these set to change the visualization to a specific screen which I have designed 8 of. I currently have "use CurrentVisu" enabled in the visualization manager. I also have input blocks with all of the buttons being directed to output blocks which I want to have as the switcher for the visualization. Picture is attached for what I have currently. This could be the wrong approach to this issue. Any help is much appreciated.
    
    Last updated: 2024-02-13
    
    
      
        Post by sl0802 on Ethercat Dynamic Configuration : Clear all slaves
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hi, Can you please share some information how did you configure ethercat slaves dynamically with Ethercat stack library. It would be Great help!! Thank you, Regards.
    
    Last updated: 2024-02-13
    
    
      
        Post by arundara on OPC UA Server Stops after 5 consecutive disconnections of ethernet port
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hello Every one, During testing of OPC UA communication between UA Expert software and the CODESYS SoftPLC on a Linux environment, an observation was made. When the Ethernet cable was disconnected and reconnected with 2-minute intervals, on the 5th attempt, the OPC UA connection failed to establish in UA Expert software. At this juncture, restarting the CODESYS SoftPLC enabled the reestablishment of OPC UA communication. The same result was obtained when testing on a Raspberry Pi SoftPLC. What is the reason behind this phenomenon? and whether there are settings to stop this behavior? Please help. Thanks & Regards.
    
    Last updated: 2024-02-13
    
    
      
        Axis declare
    
    
       CODESYS Forge
    
    
      talk
    
    (Thread)
    
    
      Axis declare
    
    Last updated: 2024-02-13
    
    
      
        Post by nmcc on How to address visualization change with button press...
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hello all, I am extremely new to Codesys and to programming with these languages in general. I have an HMI panel with 8 physical buttons to the right side of it. I am trying to have these set to change the visualization to a specific screen which I have designed 8 of. I currently have "use CurrentVisu" enabled in the visualization manager. I also have input blocks with all of the buttons being directed to output blocks which I want to have as the switcher for the visualization. Picture is attached for what I have currently. This could be the wrong approach to this issue. Any help is much appreciated.
    
    Last updated: 2024-02-13
    
    
      
        Post by arundara on Variable Sync Issue In Soft Plc Redundancy
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      i understood that we have to use sync variable function. when i used this i was able to achieve on the requirements of our project.
    
    Last updated: 2024-02-13
    
    
      
        Post by reinier-geers on Axis declare
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      In motioncontrol every block start with Axis. How can i make a variable to make my own FB ? Somthink like : _Axe : pointer to Axis_Ref_MC := Axis_1 ;
    
    Last updated: 2024-02-13
    
    
      
        OPC UA Server Stops after 5 consecutive disconnections of ethernet port
    
    
       CODESYS Forge
    
    
      talk
    
    (Thread)
    
    
      OPC UA Server Stops after 5 consecutive disconnections of ethernet port
    
    Last updated: 2024-02-13
    
To search for an exact phrase, put it in quotes.  Example: "getting started docs"
To exclude a word or phrase, put a dash in front of it.  Example: docs -help
To search on specific fields, use these field names instead of a general text search.  You can group with AND or OR.