Search talk: object type interface

 
<< < 1 .. 17 18 19 20 21 .. 26 > >> (Page 19 of 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 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 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 fdmartello on Unable to compare projects containing alarm manager 4.5.0.0 CODESYS Forge talk (Post)
Hello. In Codesys version 3.5.19.50 when comparing two projects that have an "Alarm Configuration" obj from the Alarm Manager library vers. 4.5.0.0 the attached error pops up. This originally happened with two projects that I converted from vers. 3.5.17.30 so, thinking it was some conversion issue, I created two clean projects directly in 3.5.19.50 using the Standard Project template and only added the Alarm Configuration objects in them. The result is the same and the only way I found that allowed me to compare them is by deleting the incriminated object in one of the two projects. Has anyone else encountered this issue? Best regards
Last updated: 2024-01-19

Post by alexgooi on Function Blocks and arrays of function blocks CODESYS Forge talk (Post)
Hi Jack, I think you have to look at a FB in a different way. A Function block (Class) can contain its own data. In other words don't define loose data in your GVL, but define a instance of a FB (Object) in your GVL: Example: Function_Block Basic_Class VAR_INPUT Open_Command: BOOL; END_VAR VAR_OUTPUT Opened: BOOL; END_VAR if Open_Command then Opened := TRUE; ELSE Opened := FALSE; END_IF Global Variables Objects: ARRAY[1..100] OF Basic_Class; //Here you ar defining you objects END_VAR In your code you can directly acces the data and couple it to the IO: GVL.Objects[1].Open_Command := %IX0.0; %QX0.0 := GVL.Objects[1].Opened; //To call the code itself use: GVL.Objects[1](); If you want to take this a step further you are also able to add methods and properties to the FB/Class end thereby creating a OOIP program
Last updated: 2024-02-15

Post by gseidel on CNC / G01 Speed is very slow (or go-stop motion) in Continuous short segment . CODESYS Forge talk (Post)
Hi k2saki, I would recommend to have a look at SMC_SmoothMerge, followed by SMC_SmoothPath. SmoothMerge will combine the small G1 elements to longer splines, SmoothPath will avoid stops between the splines. https://content.helpme-codesys.com/en/libs/SM3_CNC/Current/SM_CNC_POUs/SoftMotion-CNC/SoftMotion-Function-Blocks/SMC_SmoothMerge.html For SmoothMerge to work, you have to configure a tolerance, i.e. by how much it may deviate from the lines. To graph the output of the interpolator, you can use the trace. (Add a trace object below the application, and add the variables you are interested in to the trace.) Best regards, Georg
Last updated: 2024-04-30

Post by tayhim on WAGO HMI Device not found CODESYS Forge talk (Post)
Hello, I'm trying to connect with a Wago TP600 HMI but without success. I'm using codysis 3.5 SP19 patch 7 (SP20 block all the time) and the official wago package is installed. However, when I scan and select my device, I get a message saying that the device doesn't match the project's device object with the possibility to update the device (as shown in the attached picture). however, after choosing to update i got a message that the device is not found. I've tried with a new empty project but the same results. do you have any ideas? Thanks.
Last updated: 2024-06-25

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

Post by jonathan1321351 on IO-Link read/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-04

Post by trusty-squire on How to revert to previous version library CODESYS Forge talk (Post)
Hi, I'm experiencing a bug with the latest version of SoftMotion CNC library (4.17), where the 3DPath object in Visu is missing all the important properties. I've verified that a previous app I was working on with library version 4.16 did not have this issue and the issue is duplicated in that project when I update it to 4.17. I've already submitted a bug report, but for the time being I need to revert the project I'm currently working on back a revision. I've tried right clicking on the library but the option to select the version is greyed out. Can anyone help me?
Last updated: 2024-09-05

Post by khaledkhalil on Question about the hairaichy of UaExpert CODESYS Forge talk (Post)
Hello, I am Examining this Example from Codesys Tutorial about OPC-UA server here https://www.youtube.com/watch?v=aJhzN3Uk-Do&list=PLWtD08CpmZcSV26aWh1axCAef5c5HxX-3&index=1&t=1167s. Now i am running to problem, when i create instances and i want them to appear directly under the object directory, However, it always appear with me under Objects >> Device set >> Device Name in CODESYS. I need to know how i can change the directory of my instances 'inst_3' and so on. So they can be under objects directly. I tried to modify the settings, but couldn't find any leads till now. Thanks in advance for helping
Last updated: 2024-09-12

Post by timvh on FB string and naming CODESYS Forge talk (Post)
I see, you want to initialize the FB. To be able to initialise it like you described, you need to add the FB_Init method to your FB. (right click on the FB, select add object --> method). Then press the arrow down, to select the FB_Init (overwrite default implementation). In the VAR_INPUT section of this method, add the variable --> Tag : STRING; Then in the code section of this method add: THIS^.Tag := Tag; // copy initial value to local variable in FB Search Google if you want to know more about FB_Init. PS, reflection + instance path, is also an option if you want to get the full name of the instance (path) of the Function Block. See: https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_pragma_attribute_instance_path.html
Last updated: 2024-09-30

Post by wistaro on How to use PLC_Open FBs with PROFINET servodrive (PROFIdrive layer) CODESYS Forge talk (Post)
Hello, I would like to know if there is a PROFIdrive layer in CODESYS. I am already familliar with Codesys's SoftMotion on CANOpen/EtherCAT (to control PLC Open FBs), and I need the same kind of stuff for PROFINET-IO devices; In my configuration, I have a CIFX board from Hischer to enable IRT, the SoftPLC "Codesys Control RTE V3 x64", and a servo-drive from INFRANOR that implements PROFINET / PROFIdrive (with IRT) protocol. This drive works well with the Object Technology of Tia Portal, but some customers use Codesys. Do you have an idea how to do that? Thanks in advance. Regards, William ROMIGUIERES INFRANOR France
Last updated: 2024-10-29

Post by hclai on Maximum Array Index Issue CODESYS Forge talk (Post)
I was trying to use a table object in visualization. I want to dynamically show the valid rows in the table. However, it does not work when there is 1 row. i put the maximum array index to 1. it does not show the 1st row. when i change to 2, it show the second row only. my project with older visualization profile version is working perfectly fine. I did some test and realized that i must use a Row Selection variable to change from 0 to 1. With this change of Row selection, then the row 1 will show up.
Last updated: 2025-06-19

Post by laurits on Max lines of code, codesys CNC ? CODESYS Forge talk (Post)
Hi, yes now its working, to get "QUEUE.bFull" to work, I've had to set the "QUEUE.nNumReservedEntries" to 3. (I tried different values here, only effect for larger values i can see is the the queue capacity gets smaller.) I've noticed the movement is slowing down when it reaches the end of the "fill Up", must be because of the "checkVelocity" can only see the current "QUEUE". Any way of solving this ? BUF : ARRAY[0..20000] OF SMC_GEOINFO; xp : ARRAY[1..100000] OF REAL; yp : ARRAY[1..100000] OF REAL; CASE iState OF 000: IF R_TRIG_bStart.Q THEN iState := iState + 1; END_IF bReady := FALSE; //initialize Queue GEO.dT1:=0; GEO.dT2:=1; GEO.dToolRadius := 0; GEO.dVel := 15000; GEO.dVelEnd := 15000; GEO.dAccel := 2000; GEO.dDecel := 2000; GEO.iObjNo := 0; GEO.piDestPos.dX := 0; GEO.piDestPos.dY := 0; QUEUE.bEndOfList := FALSE; QUEUE.nPastMarker := -1; QUEUE.nWritePos := 0; QUEUE.pbyBuffer := ADR(BUF[0]); n := 0; sMC_CheckVelocities(bExecute:= FALSE); SM3_CNC.SMC_SetQueueCapacity(ADR(QUEUE), SIZEOF(BUF)); QUEUE.nNumReservedEntries := 3; 001: FOR i := 1 TO SIZEOF(xp)/SIZEOF(xp[1]) DO xp[i] := UDINT_TO_REAL(i) * 0.01; yp[i] := UDINT_TO_REAL(i) * 0.01; END_FOR iState := iState + 1; 002: WHILE NOT QUEUE.bFull DO // when the Queue is full, wait until it has been processed by the following FBs n := n + 1; GEO.iSourceLine_No := n; GEO.piStartPos := GEO.piDestPos; // copy last destination GEO.iMoveType := LIN; // generate linear movement GEO.iObjNo := GEO.iObjNo + 1; // calculate number GEO.piDestPos.dX := xp[n]; // generate position GEO.piDestPos.dY := yp[n]; SMC_CalcLengthGeo(pg := ADR(GEO)); // calculate length of object with the help of the standard function SMC_AppendObj(poq:=ADR(QUEUE), pgi:=ADR(GEO)); //append object to queue IF n = UDINT_TO_DINT( SIZEOF(xp)/SIZEOF(xp[1])) THEN // all target positions processed QUEUE.bEndOfList := TRUE; iState := iState + 1; EXIT; END_IF END_WHILE sMC_CheckVelocities(bExecute:= TRUE, poqDataIn:= ADR(QUEUE)); bReady := TRUE; // Send message to smc_interpolator to start 003:
Last updated: 2025-06-04

<< < 1 .. 17 18 19 20 21 .. 26 > >> (Page 19 of 26)

Showing results of 640

Sort by relevance or date