Post by svdpoint on Raspberry Pi Zero 2W with external Ethernet adapter
CODESYS Forge
talk
(Post)
Hello all, Somebody try to run the CodeSys at RPi Zero 2W with external ETHx device? I need to more information how youi do it, what need to it, ...etc. It is interesting to use it together with EtherCat-interface. For example I had try to connect W5500 over SPI. The eth0 is present, but does not found any EtherCat IO-device. BR
Last updated: 2024-05-25
Post by nulltrace on How change Unity-ID in TCP Modbus Slave
CODESYS Forge
talk
(Post)
Please explain how you configured that. Normaly, the Server should answer to all UID as long as gateway isn't activated. With activated gateway all UID will be forwarded to Serial-Interface, in taht case 255 has to be used for Gateway-Diagnostics. So that means, there is somethink wrong on your configuration. Which CDS-Version, Which Runtime-Version and so on are used.
Last updated: 2026-04-01
Post by climblinne on Calling OPC UA Methods from UaExpert
CODESYS Forge
talk
(Post)
Hello, I hope someone could help me. I installed the newest Codesys 3.5 SP 20 Patch 1. When loading the demo files from @i-campbell I can upgrade them to the latest version and everthing works on the OPC-UA client side as expected (object "a" is visible, I can use the "ExampleMethod"). Now I * remove the "Information Model", * delete the "OPC_UA_Symbols Objects", * Add "Information Model" again * add "TestRootObjectType" again and "Generate IEC declarations" * and search for mapped instances (to get instance "a" again) Very good still working as expected. Now I delete the OPC_UA_Symbols and add it again referring to the "objecttest" from 16.9.2020. Also I redo the steps from above. The result is now, that I can't see the "a" object in the "Root/Objects" folder. Why ist this and how can I make it running? I think, it could may be a different version of the UA configuration file. I tried to build my own model definition files and got the same problem (but I am really not an expert). When someone has a actual model, which is also running in the actual Codesys I would be very grateful. Or even better, how to make the correct model in e.g. UA Modeler SW (I followed the description https://documentation.unified-automation.com/uamodeler/1.6.0/html/howprojnet_sec.html).
Last updated: 2024-07-01
Post by chalk on No source code available
CODESYS Forge
talk
(Post)
Hello, This is my first time using Codesys, I am trying to add EtherNetIP communication to a Raspberry PI. I’ve added the EtherNetIP Adapter configured the network setting and added some modules to the pi but when I download the project it generates the following error: “There is no source code available for the object because it is in the compiled library ‘cip object, 4.5.1.0 (3s – smart software solution gmbh)’. Do you want to browse for the original library in order to display the source code? There are 2 errors in the log which are: SOURCEPOSITION App=[Application] area=3, offset=332760 EXCEPTION [Application] occurred: App=[Application], Task=[ENIPAdapterServiceTask] I can’t for the life of me work out how to get around this. I can’t find the source code anywhere or any information regarding this error. I’m using Codesys V3.5 SP19 Patch 3, the version of the Ethernet adapter is 4.5.1.0 and the version of the modules is 4.1.0.0. Any help on this will be greatly appreciated. Thanks
Last updated: 2024-02-02
Post by mtho on JSON Utilities - JSON file written with invalid structure
CODESYS Forge
talk
(Post)
I'm using the JSON Utilities SL library to write configurations in my program to a file. I'm generating the JSON data using the builder function block and all appears to work correctly. When I write the jsondata to file, I'm finding that some of the JSON elements are not being written in the right location in the file. Rather than writing they keys under the parent object, they get written outside the root JSON object at the end of the file. If I then try to read the file back into the program, I get an invalid_structure error. I don't get any errors when populating the JSON data or when writing the file. I attached an example of the JSON writer output. The problems begin with key P200. Each P200 should go under MBR1 through MBR3. Among the rest of the keys, they are supposed to be under different parent objects. I am using default values for wsLineBreak and encoding.
Last updated: 2024-03-06
Post by squiggleypuff on RemoteTargetVisu creates Unresolved Reference
CODESYS Forge
talk
(Post)
I have a project with a Festo CPX-E-CEC-C1-PN PLC (Run-time version 3.5.12.50) that I have been developing on just fine using Codesys V3.5 SP19 Patch 5 (64bit). I am at the stage where I wanted to use the Festo HMI screen, and have added a RemoteTargetVisu object to my application. After adding this object, I am no longer able to log in to the PLC as I get an Unresolved Reference warning for 'USERMGRUSERGETPROPERTY' towards the end of the download process. I was able to find this post (https://forge.codesys.com/forge/talk/Visualization/thread/fc686a6cb2/) where the two possible solutions are to "set the placeholder to emtpy" or update the runtime. Problem is, I don't know how to do either of these things, as I'm still very green in Codesys land. I'd be happy to update the Festo PLC runtime, as that seems like the better option, but have not had any luck in finding a tutorial for this online. If anyone could point me in the right direction I'd appreciate it.
Last updated: 2024-03-19
Post by nikgind on Codesys Communication Manger - Required information model version exists in the model repository but is not found
CODESYS Forge
talk
(Post)
Hi I am trying to import a custom information model that I created using UA Modeler. I have only added two new methods and two new object types. It is possible to add the information model to the Communication Manager and the two new object types are shown in the Information Model tab. After compiling i get the following error: Communication Manager [Device: PLC Logic: Application]: The information model http://opcfoundation.org/UA/ is required by http://yourorganisation.org/Bsp_3.1/ with a minimal publication date from 15.12.2023 but the device has only a model from 15.09.2021 installed. Probably the information model from 15.09.2021 is missing in the information model repository. The error message does not make sense to me. Should it not be “Probably the information model from 15/12/2023 is missing in the information model repository”? Anyway I have installed the information model from 15/12/2023 but not from 15/09/2021. Which makes the error message even stranger.
Last updated: 2024-06-09
Post by timvh on VisuElems.CurrentUserGroupId is not stable
CODESYS Forge
talk
(Post)
I'm not sure what you are trying to do, but getting the CurrentUserGroupID like this will not work, because there could be multiple Visualization Clients and each can have a different user that is logged in. Also when you go online with CODESYS and open an Visualization, this is counted as a client. Probably this is the reason you see it changing. What you can to is "iterate" over all clients and then see which user is logged in on which visualization Client. For this you need to add the Visu Utils library to the project and call the FbIterateClients. See https://content.helpme-codesys.com/en/libs/Visu%20Utils/4.4.0.0/VisuUtils/VisuActionUtilities/Function-Blocks/FbIterateClients.html fbClientIteration( xExecute := x_Execute, itfClientFilter := VU.Globals.AllClients, itfIterationCallback := fbIterator, xDone => x_Done, xBusy => x_Busy, xError => x_Error, eError => e_Error); The fbIterator, in the example above, should be an instance of an FB which you have created yourself and this must implement VU.IVisualizationClientIteration. For example: FUNCTION_BLOCK FB_ITERATOR IMPLEMENTS VU.IVisualizationClientIteration Then automatically the corresponding methods will be called. In the HandleClient Method, you will get an interface to the client(s) and then you can get the current user through this interface: itfClient.UserGroupId You can also get the UserName: itfClient.UserName
Last updated: 2023-11-14
Post by nizrahel on OpC UA server on Raspberry Pi 64 SL runtime
CODESYS Forge
talk
(Post)
Hi all! I'm working on an home project using a Raspberry Pi 3 device with Codesys for Raspberry Pi 64 SL runtime. I would like to create the HMI interface with Siemens WinCC Unified (or Advanced) configuring the Raspberry as OPC UA server. I tryed everything, but I didn't find the way to let the OPC UA connection works using UaExpert. I tryed to use anonymous connection, authenticated connection and the ip address instead of the server name in the path connection. There is no way to connect to the OPC UA server and I was asking myself if this feature is really supported for the runtime version used. Another strange thing I noted, is that is not possible to quickly create an OPC UA certificate in the Security Screen, as show in any tutorials. I have correctly created the Symbol Configuration enabling the OPC UA feature. I attach to this topic some printscreen of the actual configuration (sorry for the italian language interface, but I didn't find the way to switch to english). Thank you very much in advance for your support and advices!
Last updated: 2023-12-03
Post by thewizard8 on Raspberry PI4 Serial Port
CODESYS Forge
talk
(Post)
Hi Dear All, I'm using my raspberry PI4 as a CoDeSyS PLC (Build from scratch with custom electronics). I was able to implement all fieldbuses with the exception of Modbus Serial. I'm using the internal Port (GPIO) and I configured it in /etc/Codesyscontrol_user.cfg the following away: [SysCom] Linux.Devicefile.1=/dev/ttyUSB0 Linux.Devicefile.2=/dev/ttyS0 I'm using COM2 on Master configuration. I'm using a interface board from TTL/RS485 (bidirectional board), and it's works perfectly with other devices but not in CoDeSyS. I'm able to send data with python script and read it on my pc using putty, but when I use a modbus slave simulator to interface with codesys I always get red icons on master and slave. (Please find image attached). I'm pretty shure that this might be a bad parameter on my CoDeSyS runtime configurstion file. Can someone help me? I'm stuck and this is for my master degree certification.
Last updated: 2024-03-18
Post by taqamert on Codesys 2.3 & Peak PCAN
CODESYS Forge
talk
(Post)
Despite working on it for days, I haven't achieved any results. I followed the necessary steps one by one as mentioned in the file you sent, but there hasn't been the slightest change. I couldn't find the step you mentioned "Set the 'Can Board Type' to PCAN USB" in the Word document. There is no such setting anywhere I looked. Is there a more detailed explanation available, or can you explain it in more detail? What am I missing?
Last updated: 2024-07-16
Post by pmanuele on Beckhoff AS1060 and EL7041 configuration
CODESYS Forge
talk
(Post)
Hello everyone, i'm having some problems commanding AS1060 step motor with EL7041 (rev22) drive. With motor i've also the incremental encoder (05.2420.1230.0200.5009). I can correctly move the motor in "Position controller" operating mode with the internal counter. The problems start when i set the Encoder in feedback type or i change the operating mode. Does anyone have experience with these two terminals and can give me some advice of main parameters to check or change? Thanks everyone
Last updated: 2024-12-11
Post by smartcoco on Opaque NodeId in the OPC UA server
CODESYS Forge
talk
(Post)
This seems to be because when creating 'OPC UA' with 'Communication Manager', the 'IdentifierType' of 'NodeId' cannot be configured as' String 'type. This issue is not an isolated case. For this issue, CODESYS seems to have not provided guidance to users on how to proceed. We can provide feedback on this issue in the 'My Question' section of the 'CODESYS Store' to make CODESYS take it seriously.
Last updated: 2025-01-10
Post by rmaas on STRING conversions to DWORD
CODESYS Forge
talk
(Post)
Hi, The '' characters in Codesys are there only to indicate it is a STRING type. They are not actually added to the string, maybe you are adding them unintentionally in the concat function? You can send your data from Codesys to Hercules to verify... Another option is to send the data as an array of bytes instead of a string, with every byte representing 1 ASCII character. https://www.ascii-code.com/ This way you are 100% sure Codesys is not adding any unwanted characters.
Last updated: 2025-01-31
Post by imdatatas on Problem of assigning physical addresses to variables of type ARRAY OF ARRAY as MW and QW
CODESYS Forge
talk
(Post)
Hello, I am encountering an interesting problem as below in SP20patch5 variable definition area. I think this is a bug. As can be seen in the attached screenshot, it assigns the same %MW or %QW address to all elements of the array. I hope Codesys team can solve this problem in the next version. Best regards, Imdat
Last updated: 2025-03-17
Post by agentcousto on (no subject)
CODESYS Forge
talk
(Post)
Hello, I have developed a Python script that I run to import XML files into my project. For this, I use the Python function import_xml(). Everything was working fine when I was using Codesys platform plugins version 2.6.1.2320, but since I upgraded to versions 2.7 and even 2.8, some files are no longer imported correctly. After some research, I identified that all the files containing variables of the type "POINTER TO" are affected. I have attached a screenshot of the error I am encountering. Do you know about this bug? Do you plan to fix it?
Last updated: 2025-03-26
Post by eschwellinger on Edge Gateway online, but PLC is not online
CODESYS Forge
talk
(Post)
we need some logfiles from the edge gateway /etc/Gateway.cfg [CmpLog] CmpEdgeGateway.Filter=0xFFFFFFFF Logger.0.Name=/tmp/codesysedge.log Logger.0.Filter=0x0000000F Logger.0.Enable=1 Logger.0.MaxEntries=100000 Logger.0.MaxFileSize=5000000 Logger.0.MaxFiles=1 Logger.0.Backend.0.ClassId=0x00000104 ;writes logger messages in a file Logger.0.Type=0x314 ;Set the timestamp to RTC and does the scan via Automation Server show the plc?
Last updated: 2024-01-09
Post by felipemsgarcia on Edge Gateway online, but PLC is not online
CODESYS Forge
talk
(Post)
Hi Edwin, The PLC is already in the automation server so nothing happens when I scan the network, however the PLC show offline (not connected). Please see logs below. [CmpLog] Logger.0.Name=codesysedge.log Logger.0.Filter=0x0000000F Logger.0.Enable=1 Logger.0.MaxEntries=100000 Logger.0.MaxFileSize=1000000 Logger.0.MaxFiles=1 Logger.0.Backend.0.ClassId=0x00000104 ;writes logger messages in a file Logger.0.Type=0x314 ;Set the timestamp to RTC Thank you!
Last updated: 2024-01-09
Post by ndzied2 on Rounding error in simple addition
CODESYS Forge
talk
(Post)
This is a consequence of how computers store floating point numbers. 0.1 cannot be exactly represented in a computer. This is not a CoDeSys thing. Here is a link to a converter to show you the exact value that is represented when you use a REAL data type (which is a 32 bit float). https://baseconvert.com/ieee-754-floating-point If you really need to keep track of 0.1 increments. use INT OR DINT and then add 1 each time and assume that there is one decimal place.
Last updated: 2024-05-24
Post by fleaplc on CPU + EtherCAT redundancy
CODESYS Forge
talk
(Post)
Hi all, for a new project I'm looking for a redundant controller with EtherCAT fieldbus I/O. Actually I'm using Beckhoff and it works great! but there's not a solid redundancy yet... Does someone get experience for industrial application (not raspberry) for a redundant Codesys system? If yes please share some info (CPU / OS type, bus, number of managed I/O,... and especially feeling feedback (stability, bugs, performance)... Every suggestion is kindly appreciated!! Fabrizio
Last updated: 2026-01-27
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 orbis-tertius on 3.5 P20 hangs - no response
CODESYS Forge
talk
(Post)
Is there anybody can help me with the same problem? I have to migrate created project in ver.3.5.17.0 32BIT with runtime 4.7.0 to ver.3.5.20.0 64BIT with runtime 4.7.11.0 due to the new license. All the libraries and dependencies are updaded and there are no any errors. The first compilation and loading to the controller is being compleated well. After this being done and if I am forced to change any values or change any code in the current project, another compilation will be freezed. This problem can be solved if pressed Build/cleen or cleen all. There is another method to solve this; if project is loaded with excluded object (Alarm Configuration), repeated compilations will be done well.
Last updated: 2024-06-27
Post by mubeta on Some 'pathetic' errors in SoftMotion program
CODESYS Forge
talk
(Post)
Hello everyone, I have a very simple program for the process, but it's driving me crazy and I can't see the problems I'm left with: Short topological description: Dual Core Berghof controller with softmotion runtime version 3.5.19.30; Two axes with servodrive on canopen bus, clocked distributed from master; Ethercat I/O node; 2 ms ethercat task, 2 ms canopen bus cycle time; I/O objects of the canopen master and canopen drives connected to the ethercat task cycle; Problem 1: Two separate programs each manage their own axis and drive, with separate state machines. A first axis moves primarily in velocity, except having to position itself absolutely at a predetermined point at the end of the job; the second axis, on the other hand, is a paper unwinder that changes, for each job cycle, from actions in absolute, relative, and cam displacement with the master axis. Well, the state machine of both axes was written in such a way as to call running the useful FB and change it on state change in this way: CASE i_stateMachine OF 0: o_Power(Enable := TRUE, bRegulatorOn := FALSE, bDriveStart := FALSE, Axis := o_PaperUnwinderAxis); o_MoveAbs(Execute := FALSE, Axis := o_PaperUnwinderAxis); o_MoveRel(Execute := FALSE, Axis := o_PaperUnwinderAxis); o_CamSelect(Execute := FALSE, Master := o_MachineAxis, Slave := o_PaperUnwinderAxis, CamTable := cam_PaperUnwinder); o_CamIn(Execute := FALSE, Master := MachineEncoder, Slave := o_PaperUnwinderAxis); o_CamOut(Execute := FALSE, Slave := o_PaperUnwinderAxis); o_SetPosition(Execute := FALSE, Axis := o_PaperUnwinderAxis); IF ... THEN i_StateMachine := 10; END_IF; 10: o_Power( Enable := TRUE, bRegulatorOn := TRUE, bDriveStart := TRUE, Axis := o_PaperUnwinderAxis ); IF o_Power.Status THEN i_StateMachine := 20; END_IF; 20: (* Avanzamento carta *) o_MoveAbs( Execute := TRUE, Position := o_Somewhere, Velocity := 25.0, Acceleration := 3666.7, Deceleration := 3666.7, Jerk := 48000.0, Direction := MC_DIRECTION.positive, Axis := o_PaperUnwinderAxis ); IF o_MoveAbs.Done THEN o_MoveAbs(Execute := FALSE, Axis := o_PaperUnwinderAxis); i_StateMachine := 30; END_IF 30: d_HomingPosition := ...; o_SetPosition( Execute := TRUE, Position := d_HomingPosition, Mode := FALSE, Axis := o_PaperUnwinderAxis ); (* ... *) IF o_SetPosition.Done = TRUE THEN o_SetPosition(Execute := FALSE, Axis := o_PaperUnwinderAxis ); o_LogServer.Append(sMessage := '...', lscClass := LOGSERVER_CLASS.ALWAYS, sdt := o_CommonsMgrData.systime.sdtLocal); i_StateMachine := 40; END_IF; 50: ... The code above is a sketchy example of what I wanted to write. But it gives me a spot problem: in some, the state change results in a drive error, which is unrecoverable except with a reinitialization via SM3_ReinitDrive(). Things are improved a little if in the program I always run the call of all softmotion blocks in this way: o_Power(Axis := o_PaperUnwinderAxis); o_Jog(Axis := o_PaperUnwinderAxis); o_Halt(Axis := o_PaperUnwinderAxis); o_MoveAbs(Axis := o_PaperUnwinderAxis); o_MoveRel(Axis := o_PaperUnwinderAxis); o_CamIn(Master := MachineEncoder, Slave := o_PaperUnwinderAxis); o_CamOut(Slave := o_PaperUnwinderAxis); If I don't execute all the calls of all the motion FBs used, when exchanging machine state often (but not always), the axis goes into error with event id THE_FB_WASNT_CALL... Done a little diagnostics it seems that the FBs return the bDone, before they are completely terminated. I tried doing the machine state exchange not with the bDone bit of the FBs, but with the 'standstill' state of the axis. It didn't seem to change anything. Problem 2: During the use SM3_ReinitDrive() I get the erro in the log: "NetID 0: SDO read error for object 16#607C..." Assuming that the device involved it's one of the two servodrive, (no others device are present in the network), I don't found any object 0x607C in the 'possible object list in/out' of the two drive, and I don't understand where this object can be listed. So any ideas and suggestions regarding these two issues will be very, very welcome. If you need the source project, I am willing to send it.
Last updated: 2024-07-17
Post by micik on Python scripting - print whole project tree
CODESYS Forge
talk
(Post)
Hello, I have found a script for printing device tree in Codesys project. This script is available as code snippet as an exmaple for using Python in Codesys. However I feel main documentation is lacking. For example, where can I find that object has "is_device" attribute? Code examples are given here: https://content.helpme-codesys.com/en/CODESYS%20Scripting/_cds_access_cds_func_in_python_scripts.html However, I have a question how to print the whole Project tree and not just devices? Of course I need to remove check: if treeobj.is_device: But simply removing this test condition will not produce what I want. I need to print PLC Logic, Application, ad other nodes in the Project tree. Where to find this documentation?
Last updated: 2024-08-12
Post by jonathan1321351 on IO-Link write parameters Ethernet/IP
CODESYS Forge
talk
(Post)
I want to read and write parameters of an IO-Link device using acyclic messages. I have a Cube67+ in Ethernet/IP, connected to an IO-Link master. In the datasheet, I can find the parameters required for the message (Service, Class, Instance, etc.). I see the function block "Set_attribute_single" in the "EthernetIP Services" library, but I'm not sure how to correctly send the index and sub-index for the IO-Link device. The class in the datasheet is 0x80 for the IO-Link Parameter Object, but it’s not present in the CPIClass enum. Is there another function block more suitable for configuring IO-Link devices? (similar to "iol_call" in PROFINET or what’s used in EtherCAT).
Last updated: 2024-09-02
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.