Is it possible to profile builds?
CODESYS Forge
talk
(Thread)
Is it possible to profile builds?
Last updated: 2024-06-05
Is it possible to profile builds?
CODESYS Forge
talk
(Thread)
Is it possible to profile builds?
Last updated: 2024-06-06
how to use UseDataExpanding() in datasource
CODESYS Forge
talk
(Thread)
how to use UseDataExpanding() in datasource
Last updated: 2024-06-17
Post by exkrim19 on Unable to connect to this device
CODESYS Forge
talk
(Post)
What worked for me with this error was to go to Tools -> Update Raspberry Pi, select Install, and from the popup screen, there are options to change your installation (I changed it to single core, instead of multicore), and I was then able to connect to my Rpi 4.
Last updated: 2024-06-28
Access to user group IDs
CODESYS Forge
talk
(Thread)
Access to user group IDs
Last updated: 2024-07-10
Cannot connect to webvisu on localhost
CODESYS Forge
talk
(Thread)
Cannot connect to webvisu on localhost
Last updated: 2024-07-11
help to get codesys understand
CODESYS Forge
talk
(Thread)
help to get codesys understand
Last updated: 2024-07-22
How to implement an interface (IElement)?
CODESYS Forge
talk
(Thread)
How to implement an interface (IElement)?
Last updated: 2024-07-22
CNC - How to manipulate SMC_GeoInfo objects
CODESYS Forge
talk
(Thread)
CNC - How to manipulate SMC_GeoInfo objects
Last updated: 2024-07-26
How to generate an "ENI" file
CODESYS Forge
talk
(Thread)
How to generate an "ENI" file
Last updated: 2024-08-09
SMC_NCDecoder very slow to decode lines
CODESYS Forge
talk
(Thread)
SMC_NCDecoder very slow to decode lines
Last updated: 2024-08-23
How to set unit in Axis
CODESYS Forge
talk
(Thread)
How to set unit in Axis
Last updated: 2024-09-02
How to change OPC NodeId IdentifierType
CODESYS Forge
talk
(Thread)
How to change OPC NodeId IdentifierType
Last updated: 2024-09-20
Migration from ISaGRAF to CODESYS
CODESYS Forge
talk
(Thread)
Migration from ISaGRAF to CODESYS
Last updated: 2024-10-03
REFERENCE TO in an array
CODESYS Forge
talk
(Thread)
REFERENCE TO in an array
Last updated: 2024-10-14
RS485 CAN HAT to Cosesys
CODESYS Forge
talk
(Thread)
RS485 CAN HAT to Cosesys
Last updated: 2024-10-28
SysLibMem.lib Where To Download?
CODESYS Forge
talk
(Thread)
SysLibMem.lib Where To Download?
Last updated: 6 days ago
Post by rohitk on CoDeSys libraries for BECKHOFF EL7332/EL7342
CODESYS Forge
talk
(Post)
Hi, step 1 : go to beckhoff website, go to required IO card, go to download option in that, go to XML donlowad and download the file Step2 : Go to codesys software, go to tools - deviceRepository - install that downloaded file.
Last updated: 2023-08-24
Post by riccardo on How to allow a user to handle certificates without access to sourcecode?
CODESYS Forge
talk
(Post)
It would be usefull to me too, I would need to manage HTTPS and OPC UA certificate without perform the access to the whole sorce code project
Last updated: 2023-11-27
Is it possible to link an array of bits to an alarm group to show a lot of alarms at once?
CODESYS Forge
talk
(Thread)
Is it possible to link an array of bits to an alarm group to show a lot of alarms at once?
Last updated: 2021-07-08
How to transfer data from DINT to Union(16 Bools) which I need to use in Few FBs
CODESYS Forge
talk
(Thread)
How to transfer data from DINT to Union(16 Bools) which I need to use in Few FBs
Last updated: 2023-12-14
Post by schorge on Modbus RTU Slave
CODESYS Forge
talk
(Post)
Ich wΓΌrde gerne bestimmt Modbus RTU Slave Adressen auslesen, leider bekomme ich keine Werte vom Bus. Verbindung erfolgt ΓΌber einen Raspberry mit Modbus RS485 Adapter, welcher erfolgreich verbunden ist. Mit einem IOBroker kann ich die Daten erfolgreich auslesen. In der Modbus_COM_Port => Modbus_Serial_Device habe ich Input Register 4000 %QW und Startadressen auf Input Register 3000, als Variable ein Array[0..2999] of Word, kann aber keine Werte auslesen.
Last updated: 2023-12-06
Post by rajesh008 on i can't declear the address in GVL - codesys SP19 Patch5
CODESYS Forge
talk
(Post)
The β_AB AT %IW0:word; β if i called the value then im getting this error. like below "the declartion of the variable with an address assignment cannot be used in a PRG or GVL with the attribute 'subsequent'" This is happening when the GVL is selected in Redundancy Configuration. if i un-select the address declaration is working fine
Last updated: 2024-05-13
Post by timvh on Configuring a 2's compliment
CODESYS Forge
talk
(Post)
You could create a DUT of the Type Union and add an array of 2 bytes + an Int. Then write the byte values in the array of the Union and read the Int. Or VAR iInt : INT; byHigh : BYTE := 2#1111_1111; byLow : BYTE := 2#1111_1111; END_VAR iInt := TO_INT(byHigh*16#100 + byLow);
Last updated: 2024-09-28
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
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
.