Search talk: find function

 
<< < 1 .. 41 42 43 44 45 46 > >> (Page 43 of 46)

Post by kaotic2499 on Upgraded Raspberry 2b to Raspberry 5, Trends Broken? CODESYS Forge talk (Post)
Hello! Raspberry pi 2b just is getting a bit slow so decided to go for a Raspberry 5. Project is now upgraded to suit Pi 64 SL... so, now although everything runs perfectly... for some reason my trends will not save! its driving me nuts... ^Tried merging tasks with main program & trends ^tried re-prioritizing tasks (shifting 1 - 31 etc) ^Recreated the Trend Recording manager from scratch ^Tried swapping persisitant vars to GVL Retains then non-retains... (Project attached is as per before trial&error) Raspberry Pi 2b still runs "perfectly" though its very chuggy (Still saves the trends, note this is of an pretty much identical project minus the device compatibility) Does anyone have any advice to offer? project attached.... I feel it could be outside of Codesys itself causing the issues, but cant see/find anything on the internet to assist (or anyone else with the same problem as me...) Can attach project in another format (non archive) any assistance is much appreciated!
Last updated: 2025-10-19

Post by rk-gaw on Unhandled exception and refactoring error CODESYS Forge talk (Post)
Hello everyone. I hope this is the right place to ask for help, this error is causing me a great amount of time loss and I really would like to end this nightmare. I don't know why but at times if I try to Browse -> Display Cross Reference on a variable Codesys just crashes. I'll attach the file with the complete crash report hoping someone can figure why it happend. I think that the unhandled exception comes from the PersisranceManager Module and is connected with the other big problem I'm facing: I cannot refactor in my project, if I'll try to refactor a POU name the whole POU will become "frozen", it's like its desynchronizing from the project and the project cannot find the pointer to the POU once I refactor it. And when I open the project a warning pop-up will show up with the frozen POUs name, but I cannot figure out what the warning is telling me. I'll attach every warning and error pop up the project is showing me, and thanks in advance to anyone who can figure something out.
Last updated: 6 hours ago

Post by struccc on Inheritence of struct, CODESYS Forge talk (Post)
Strangely reminds me to my struggles... Want to do something "Elegant", reusable, universal, practical... In CODESYS??? 🙃 First of all, before you get too deep into this: If you could find a way, to make a "universal" log entry object, containing the variable length data itself, you wouldn't be able to store them in an array, or access them like an array, or pass them by value as a type. (please correct me, if I'm wrong, incorrect, or not precise). Because... Basically you can't declare a type with variable memory footprint. This is a very deeply embedded characteristic of CODESYS, and all IEC 61131-3 systems, and it has many reasons behind. And yes, it is a very common trap / mistake, to forget about. So, with a log entry - I guess - it's pretty much the purpose: store data and metadata together, and then handle it in a uniform way. There are ways to handle this, really depends on what is the purpose. For example: 1. Entries with fixed length (Maybe it is not as evil as it looks for the first time. Depends on the situation, but definitely the fastest and easiest code) You can have your base object, with an internal, fixed length string or byte array variable. I would go with a string, and call it _Data.; And then you can make properties, like As_Bool, As_Int, As_Real... In the 'set' accessors, you can do like: pReal := ADR(_Data); // POINTER TO REAL As_Real := pReal^; In the 'get' accessors, evidently: pReal := ADR(_Data); // POINTER TO REAL pReal^ := AS_Real; Or, can use ANY type, if you are not obsessed with variable / property like access: 2. Fixed length, but nicer First, some disadvantage to any values: - You can only assign values with write access. No literals, constants, etc... - Can only be used as input variable of function or function_block - Therefore, stg you could reach: LogEntry.Initialize (stVariable|rVariable|iVariable|xVariable); Just a quick example (it's funny to play with ANY): Be careful it was not tested. I'm sure can be done better, please feel free to comment FUNCTION_BLOCK FB_LogEntry VAR_INPUT MsgClass : UDINT; // Like DEBUG, WARN, ERR... MsgCode : UDINT; // Like Errors.ERR_FAILED MsgTS : DT; // The timestamp END_VAR VAR _Data : STRING(80); // Our data container... _Descr : __SYSTEM.AnyType; // A standard descriptor for our data, containing TYPE_CLASS, address and size END_VAR METHOD SET_Value : BOOL VAR_INPUT anyValue : ANY; END_VAR VAR I : DINT; diSize : DINT; pStr : POINTER TO STRING; END_VAR // Check what did we receive in anyValue. diSize := anyValue.diSize; // We use constant __SYSTEM.TYPE_CLASS to identify the received data type CASE anyValue.TypeClass OF // Maybe we don't want to store references, pointers... and who knows what else... __SYSTEM.TYPE_CLASS.TYPE_REFERENCE, __SYSTEM.TYPE_CLASS.TYPE_POINTER : SET_Value := FALSE; // For the planned types we will be just fine. TYPE_CLASS.TYPE_BOOL, TYPE_CLASS.TYPE_INT, TYPE_CLASS.TYPE_REAL : SET_Value := TRUE; // Optionally string can be handled separately, maybe we have received STRING(255), but practically it is shorter than 80 bytes... TYPE_CLASS.TYPE_STRING : pStr := anyValue.pValue; diSize := MIN(anyValue.diSize, LEN(pStr^) + 1); // Get the actual size, and rewrite the received structure member diSize := MIN(SIZEOF(_Data), diSize); // Can chop down the received string to our length... SET_Value := TRUE; // Maybe want to play a little bit more here, to narrow down or convert datatypes, etc... // Or just reject any other datatype ELSE SET_Value := FALSE; RETURN; END_CASE // Fail, if the received value is still larger than our container... IF diSize > SIZEOF(_Data) THEN SET_Value := FALSE; END_IF // Here we should be ok, just set up the _DataType structure, and copy store the data IF SET_Value THEN THIS^._Descr.TypeClass := anyValue.TypeClass; // The typeclass is already filtered THIS^._Descr.diSize := diSize; // Set the (adjusted) size THIS^._Descr.pValue := ADR(_Data); // This will not change, just to be sure {IF defined (pou:SysMem.SysMemCpy)} SysMem.SysMemCpy(_DataType.pValue, anyValue.pValue, TO_UDINT(anyValue.diSize)); {ELSE} // An ugly replacement MemCpy FOR I:=0 TO diSize - 1 DO _Descr.pValue[I] := anyValue.pValue[i]; END_FOR {END_IF} // Otherwise, in case of failure maybe better set an empty value (overwrite the former data descriptor) ELSE THIS^._Descr.TypeClass := TYPE_CLASS.TYPE_NONE; THIS^._Descr.pValue := ADR(_Data); THIS^._Descr.diSize := 0; END_IF METHOD GET_Value : BOOL VAR_INPUT anyValue : ANY; END_VAR VAR I : DINT; END_VAR // We just have to serve the data, using the __System.AnyType structure received // Roughly we can say: IF anyValue.TypeClass = _Descr.TypeClass AND anyValue.pValue <> 0 // This should not be possible, already taken care of by Codesys (?) THEN {IF defined (pou:SysMem.SysMemCpy)} SysMem.SysMemCpy(anyValue.pValue, _DataType.pValue, TO_UDINT(MIN(anyValue.diSize, _Descr.diSize))); {ELSE} // An ugly replacement MemCpy FOR I:=0 TO MIN(anyValue.diSize -1, _Descr.diSize - 1) DO anyValue.pValue[I] := _Descr.pValue[I]; END_FOR {END_IF} // Just to make sure, that our string is terminated... IF anyValue.TypeClass = TYPE_CLASS.TYPE_STRING THEN anyValue.pValue[anyValue.diSize -1] := 0; END_IF GET_Value := TRUE; RETURN; END_IF // ... But can play more CASE anyValue.TypeClass OF TYPE_CLASS.TYPE_WSTRING : ; // Could do conversion TYPE_CLASS.TYPE_XSTRING : ; // Wow, I have to figure this out TYPE_CLASS.TYPE_PARAMS : ; // BTW, what is this, how to use? TYPE_CLASS.TYPE_ANYNUM : ; // ... END_CASE Be careful it was not tested. I'm sure can be done better, please feel free to comment 3. If you really want to do entries with variable size In a standard environment, it would be similar to the previous, except you dont have the container variable _Data, just use a pointer, practically _Descr.pValue At Initialize (SET_Value), you have to allocate the memory, would be easy with SysMem.SysMemAlloc - nowadays with SysMem.SysMemAllocData -, and you make sure to release it after use with SysMem.SysMemFreeData... SysMemAlloc was already hidden. The problem with this, that sooner or later your application will totally fragment the dynamic memory, and fail... So should look for some form of dynMaybe MemUtils.MemoryManager (I am not sure what is the status and the future of it). 4. You will end up by a LogEntry Factory ... 5. You could still have a look at this IEC Snippets BTW, Standard Codesys Logger is not a bad choice either. If you are really interested, I share some more code / library.
Last updated: 2025-03-09

Post by rcaponi on Codesys Control RTE V3. Remote Control CODESYS Forge talk (Post)
Hello, I would like to have, if possible, some clarification on this function. That is, I would like to understand if it is useful for managing, fom my development PC, the RTE runtime executed on a remote control. This is what the help says: Remote PLC: Opens the Remote Configuration dialog. By enabling or disabling the Control remote PC, not local option, you determine whether a PLC is used that is on a remote or local PC. Accordingly, the menu commands Start PLC, Stop PLC, and PLC Configuration refer to the local PC or a PC reached on the network. For the remote PC, specify the Target PC address, Port number, and a Timeout value (in ms) for the connection (Remote Timeout [ms]). But does this mean that I also need to install the RTE runtime on my development PC? Is it possible to have some more information? Best regards Roberto Caponi
Last updated: 2023-09-22

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 abinvest579 on TCP Client CODESYS Forge talk (Post)
Hi All, I am using codesys based plc to read and control magna power DC supply over LXI protocol using SCPI command. To connect device required socket programming for that i am using Net base service library function block TCP_Client to establish connection over TCP/IP , TCP_Write to write SCPI commands and TCP_Read to read data from Magna power DC supply. I have attached screenshot for logic developed. I am able to connect and write commands to device but i not receiving any information from device. For writing Commands i also tried various end of line character like \n,<nl>, A, D, 10, 13, 0x0A, 0x0D but not received any status from device. For testing purpose i am using simple command '*IDN?' to read data. Also if tried to check on hercules software what data actually plc read, first it read correct data after that is read wrong data as see in screen shot. 'Hello World' was correct read and after that Codesys in replaced with 'Codesysorld' that is not correct way. Same issue also appeared for send data. Any one have face same issue how i can read data directly from device correctly and send data please suggest solution on this.</nl>
Last updated: 2024-07-01

Post by timvh on How to implement an interface (IElement)? CODESYS Forge talk (Post)
See: https://forge.codesys.com/prj/codesys-example/element-collect/home/Home/ This contains an application "OnlineChangeSafeLinkedListExample". What you should do is create a new interface which has your "Priority" property. Then your FB should extend the base element function block and implement your own interface: E.g. FUNCTION_BLOCK MyElement EXTENDS COL.LinkedListElementBase IMPLEMENTS I_MyInterface Then the __QUERYINTERFACE does the magic to check if your "element" also implements your interface. Something like this: // Compares this element with itfElement. // Returns 0 if the elements are equal, < 0 if the element is less than itfElement, // > 0 if the element is greater than itfElement. // This method will be called from sorted collections (e.g. |COL.SortedList|) to sort the elements. // IMPORTANT: The underlying value to be compared with MUST NOT be changed during the lifecycle of the object. METHOD ElementCompareTo : INT VAR_INPUT (* The element to compare*) itfElement : COL.IElement; END_VAR VAR itfIntElement : I_MyInterface; xResult : BOOL; END_VAR // We use integer iInt1 for sorting. xResult := __QUERYINTERFACE(itfElement, itfIntElement); IF xResult THEN IF iInt1 < itfIntElement.Priority THEN ElementCompareTo := -1; ELSIF iInt1 > itfIntElement.Priority THEN ElementCompareTo := 1; ELSE ElementCompareTo := 0; END_IF ELSE ElementCompareTo := -1; END_IF
Last updated: 2024-07-22

Post by breiter on Frustration-Fueled Feedback on Project File Management and Git Integration CODESYS Forge talk (Post)
Hi, supporting a text based storage format is on our roadmap, see https://www.codesys.com/the-system/releases-updates-lifecycle/release-plan-roadmap.html It will be an Add-On feature called "File Based Storage" for the professional developer edition. Structured text POUs will be stored as plain text. Other graphical languages will remain in an xml format. You will be able to switch the storage type for projects. Certain workflows will become easier this way. Nevertheless restrictions will remain because of CODESYS specific storage logic (for example how methods below function blocks are stored as file). So merging using our Git Integration Add-On remains the recommended workflow. A workflow involving Visual Studio Code as the main IDE is not supported. Simply because many topics like library management, task configuration or fieldbus configurators are not available for VS Code. A PLC project is a lot more than just some ST POUs. Best Regards
Last updated: 2024-10-16

Post by ellocco on XOR with four Inputs with OR-, NON- and AND-Operators CODESYS Forge talk (Post)
My topic is more of academic nature, I would like to implement an XOR-operation with four inputs on my own (without the predefined XOR-operator) in a function block diagram (FBD). I have two proposals. One works fine and the other one is just an idea, but I do not know, if it is possible to code it in CODESYS V3.5 SP18 in form of a FBD. Here the one that works: And here an idea, which I have not managed to code it as an FBD: Any ideas? Is the 2nd diagram a correct interpretation of the coding task? And is there a way to implement it in form of an FBD in CODESYS V3.5 SP18? Followup (08-Nov-2024): Also in the current version of CODESYS (V3.5SP20Patch3) I have not managed to connect the existing blocks. In the alternative SPS-IDE PLCnext Engineer it is possible.
Last updated: 2024-11-08

Post by dominggus on FileDialog - OnDialogClosed not called anymore CODESYS Forge talk (Post)
Hi, since the latest update it seems the OnDialogClosed is not called anymore?? using CODESYS SP20 Patch 3 with CODESYS Visualization 4.6.0.0 I am using LoadWriteRecipe to load a recipe file from disk (with some custom dialog settings), and I need to run a function (Recipes_LoadFromRecipeData()) afterwards which I execute when OnDialogClosed is closed with OK button. See attached screenshot and code below: *** OnDialogClosed : Recipes_OnLoadFileDialogClosed(pClientData): *** // the DialogManager is provided via the implicitly available VisuManager dialogMan := VisuElems.g_VisuManager.GetDialogManager(); IF dialogMan <> 0 AND pClientData <> 0 THEN FileOpenCloseDialog := dialogMan.GetDialog('VisuDialogs.FileOpenSave'); // gets the FileOpenSave dialog IF FileOpenCloseDialog <> 0 THEN result := FileOpenCloseDialog.GetResult(); // gets the result (OK, Cancel) of the dialog IF result = VisuElems.Visu_DialogResult.OK THEN Recipes_LoadFromRecipeData(); END_IF END_IF END_IF *** OnMouseClick: Execute ST-Code *** // override FileOpenSave Dialog settings // Visu_FbFileListProvider.Initialize(stDirectory, stFilter, stFileIn, stTitle, iRowCount, bBrowseDirectory, bTouch) VisuDialogs.g_FileListProvider.Initialize('./', '*.bunkerrecipe', '', 'Load recipe', 20, TRUE, FALSE); VisuDialogs.g_FileListProvider(); This used to work in CODESYS v3.5 SP20 Patch 1, but it seems it doesn't work anymore unfortunately? The OnDialogClosed just never seems to be called anymore....
Last updated: 2024-12-18

Post by pikebuster on Help for a newbie CODESYS Forge talk (Post)
Can somebody help me with this? I have problem with the button! This task must be solved using Sequential Function Chart (SFC), IEC 61131-3. TASK Create an SFC program to control a traffic light at an intersection. Description: You will program a traffic light that has three phases: Green, Yellow, and Red. The traffic light must follow these rules: Green light is on for 10 seconds. Yellow light is on for 3 seconds. Red light is on for 10 seconds. If the pedestrian button is pressed, the system must keep the red light on for 20 seconds during the next cycle. After the pedestrian has “crossed,” the system should return to its normal cycle. Basic Steps: Initialization: Start by setting the traffic light to Red. Green Phase: After 10 seconds, switch to Green. Yellow Phase: After 10 seconds in the Green phase, switch to Yellow. Red Phase: After 3 seconds in the Yellow phase, switch back to Red. Loop: Repeat the cycle. Use, for example, lamp symbols in the visualization module to simulate the traffic light. You may also add a simple pedestrian light if desired.
Last updated: 2025-03-11

Post by pistola on C0357: "GetNextClient" is obsolete, use VisuUtils instead CODESYS Forge talk (Post)
I'm having some troubles with this same issue and I'm wondering if someone can help me out. On a settings visual I allow the operator to enter some values however if they activate the page change button it will change the change with the Numpad dialog open. Since I'm using Visuelems.CURRENTVISU to change the pages I came across this code noted below for determining if the Numpad dialog was active. This code worked great however now in 3.5.19 it's now obsolete. I've tried following the directions in the attached program above however I can't see to get it to work in my program. Can anyone provide some help to determine if a dialog is open? FUNCTION Check_Dialog_Open : Bool VAR_INPUT sDialogName : STRING; // Input variable for the name of the dialog END_VAR VAR pstClientData : POINTER TO VisuElems.VisuStructClientData; // Pointer to the client data structure itfDialogManager : VisuElems.IDialogManager; // Interface for the dialog manager itfMyDialog : VisuElems.IVisualisationDialog; // Interface for the specific visualisation dialog END_VAR // Begin the iteration over the client manager VisuElems.g_ClientManager.BeginIteration(); // Loop through each client until no more clients are found WHILE (pstClientData := VisuElems.VisuElemBase.g_ClientManager.GetNextClient()) <> 0 DO // Get the dialog manager interface itfDialogManager := VisuElems.g_VisuManager.GetDialogManager(); // Get the specific dialog interface using the dialog name itfMyDialog := itfDialogManager.GetDialog(sDialogName); // Check if the dialog is open for the current client Check_Dialog_Open := VisuDialogs.VisuDlgUtil_IsDialogOpen(itfMyDialog, pstClientData, itfDialogManager); // If the dialog is open, exit the loop IF Check_Dialog_Open THEN EXIT; END_IF END_WHILE
Last updated: 2025-03-27

Post by razebones on sdo read write codesys 3.5 CODESYS Forge talk (Post)
ENG For some reason, I can't bind a variable to the data parameter. Also, why does only the sdo_read4 function work for me? I also can't write through sdo_write4. I can only view the received values via sdo_read4. Please help me with this task. Moreover, I tried to write the values through sdo write 4 and for a while the data stopped being written and I overwritten it manually and sdo read4 started working again and at the same time they do not want to work in the main task. RU Я не могу почему то привязать переменную к параметру data. Так же у меня почему работает только функция sdo_read4 так же не могу записать через sdo_write4. Могу только просматривать полученные значения через sdo_read4. Помогите пожалуйста с этой задачей. Причём я попытался записать значения через sdo write 4 и у меня на какое то время перестали записываться данные и перезаписал вручную и sdo read4 начал работать снова и одновременно они не хотят работать в main task.
Last updated: 2025-04-01

Post by laurits on Max lines of code, codesys CNC ? CODESYS Forge talk (Post)
Hi, okay here's the project, it's a modified version of "CNC Example 10: Programming Dynamic CNC Paths", no need for G Code text file (i have also tried with G code text file, same problem) in "PROGRAM PLC_PRG" you can set bStart to true, and the program should start running, go to "PROGRAM CNC" and you can see axis moving. lrXpos := IoConfig_Globals.XAixs.fSetPosition; lrYpos := IoConfig_Globals.YAxis.fSetPosition; Now you can can change the number of movements in the the "PROGRAM PLC_PRG" From this number of movements in "program PLC_PRG" BUF : ARRAY[0..32010] OF SMC_GEOINFO; xp : ARRAY[1..32000] OF REAL; yp : ARRAY[1..32000] OF REAL; to this number to this number of movements BUF : ARRAY[0..132010] OF SMC_GEOINFO; xp : ARRAY[1..132000] OF REAL; yp : ARRAY[1..132000] OF REAL; Now if you start the program again you should see an error in the "sMC_Interpolator: SM3_CNC.SMC_Interpolator;" function block Let me know if you can not get it running.
Last updated: 2025-06-03

Post by gmau on RS232 Communication in CODESYS Control RTE V3 CODESYS Forge talk (Post)
Hello, I would like to implement RS232 communication into CODESYS Control RTE V3. I was writing the program testing it on CODESYS Control Win V3, where it worked fine. When I changed it to RTE, the communication was on, but I cannot send the data between PLC and scale - there is no or little response from scale - mostly one time receive and that is it. On Win V3 it was working fine. I read that I am supposed to configure CODESYSControl file for a proper communication using RTE, but even after that I can not get a stable and working communication. I am attaching my CODESYSControl and CODESYSControlUser data below, as well as I am sending the code from communication function. The communication should be through COM1 port of PC. CODESYS Version: CODESYS V3.5 SP21 + (64-bit) Runtime + Version: CODESYS Control RTE V3 Version 3.5.21.0 / CODESYS Gateway V3 - x64 Version 2.5.21.0 I would be much gratefull for any help. Sincerely,
Last updated: 2025-07-16

Post by pouyavakili on Execute Codesys Tests with python CODESYS Forge talk (Post)
Thank you for your input! What I'm ultimately trying to achieve is automated test execution as part of a CI/CD pipeline (e.g. in GitLab or Azure DevOps). For this, I need to: Open a CODESYS project via script Build the project Run the Test Manager tests from a .TestRepository.xml Collect test results (e.g., pass/fail + a report) Exit with a proper return code (for pipeline success/failure) To integrate this into automation, I’m using the CODESYS scripting engine via Python (headless), but the issue is that the get_testmanager() function isn't available on the project object — even though Test Manager is installed, licensed, and works interactively in the IDE. Are you suggesting that I should: Use the Test Manager GUI to script the logic with its internal scripting language? Or is there a way to launch the Test Manager in headless/scripted mode, while still being able to control things via Python? If there's a supported way to automate tests with the Test Manager using scripting, especially from pipelines or headless environments, I’d really appreciate any pointers or example workflows. Thanks again!
Last updated: 2025-07-24

Post by vipul on Multicast udp CODESYS Forge talk (Post)
Hi, Good afternoon can anybody help me with UDP Multicast code. I am not able to send or recieve data when code is dumped on linux device. Below is my code. Declaration: PROGRAM udp_multicast VAR oneTimeFlag :UINT :=0; state: INT:=0; driver: UDP.UDPDriver; //port : UDP.Port;//moved to GVL src_ipAddr_ud: UDINT; src_ipAddr_st:STRING := '192.168.127.155';//'192.168.1.155';//ipms ip address dst_ipAddr_ud:UDINT; group_ipAddr_st:STRING := '239.1.5.10'; //group_ipAddr_ud:UDINT; result: SysTypes.RTS_IEC_RESULT; //result of recieve function. bind: UDINT; //result of binding. resultCreate:SysTypes.RTS_IEC_RESULT;//result of port creation. timer:BLINK; temFlag :INT:= 0; post:INT :=0; checksumFunc:checksumXor; localStringBuf:STRING[500]; chksum:BYTE; dataBuffer:POINTER TO BYTE; checksumString:ARRAY[0..5] OF BYTE; recvSize:__XINT; errorCode:UDINT; joinGroupErrorCode:UDINT; END_VAR ************8 Implementation: IF oneTimeFlag <> 1 THEN oneTimeFlag:=1; resultCreate := driver.CreatePort(ADR(GVL.port)); src_ipAddr_ud := UDP.IPSTRING_TO_UDINT(sIPAddress:= src_ipAddr_st); GVL.group_ipAddr_ud := UDP.IPSTRING_TO_UDINT(sIpAddress:= group_ipAddr_st); GVL.port.IPAddress := src_ipAddr_ud; GVl.port.ReceivePort:= GVL.src_port;//port on which messages are expected. GVl.port.SendPort := GVL.dest_port; GVl.port.OperatingSystem := 0; //0- any system GVL.port.Socket :=3; //3- socket type is multicast bind := GVL.port.Bind(udiIPAddress:=src_ipAddr_ud,); GVl.port.JoinGroup(udiGroupAddress:= GVL.group_ipAddr_ud,udiInterfaceAddress:= src_ipAddr_ud,eLogCode=>joinGroupErrorCode); END_IF timer(ENABLE:=TRUE,TIMELOW:=T#100MS,TIMEHIGH:=T#100MS); IF timer.OUT = TRUE THEN GVL.port.Send(udiIPTo:=GVL.group_ipAddr_ud,GVL.dest_port,pbyData:=ADR(GVL.writeData),diDataSize:=SIZEOF(GVL.writeData)); ELSE SysMemSet(ADR(GVL.readData[0]),0,SIZEOF(GVL.readData)); result := GVl.port.Receive(ADR(GVL.readData),diDataSize:=SIZEOF(GVL.readData),udiIPFrom=>dst_ipAddr_ud,diRecvSize=>recvSize,eLogCode=>errorCode); SysMemMove(ADR(GVL.readDataBuf[0]),ADR(GVL.readData[0]),SIZEOF(GVL.readData)); END_IF post:=LEN(GVL.readDataBuf);
Last updated: 2024-01-14

Post by axilleas on SMC_Interpolator + SMC_controAxislbyPos CODESYS Forge talk (Post)
dear all I am working on a very generic gantry system (virtual drives + win v3 control) reading gcode from external file. In order to stop the interpolator function from running when gaps are detected, SMC_controlAxisByPos FB has the bStopIpo output which according to the manual is connected to the Interpolator's bEmergencyStop. Lets assume that the axis are parked in position X1000 Y1000 and the initial G code movement is G00 X500 Y500. The normal behavior is to travel from the actual x1000 y1000 to G00 X500 Y500. The SMC_Interpolator always gets the X0 Y0 as the initial position, meaning that the bStopIpo is active until the axis are in X0 Y0 and the release the interpolator to set the new positions to X500 Y500. Is there a suggested method to solve this behavior? bonus question: I get a lot of bStopIpo during standard interpolation movements (not gaps). While working with virtual axis this is not a problem but when real axis are installed this will be an issue. What exactly triggers the bStopIpo output? Slow axis accelerations compare to Gcode defaults? Kind Regards
Last updated: 2024-02-05

Post by brell on Automatic xExecute NBS.TCP_write CODESYS Forge talk (Post)
I've recently started experimenting with CODESYS for a project and am fairly new to it. I'm currently working with Function Block Diagrams (FBD) to set up TCP communication between a server and a client, where the client is implemented as a Python script. Once the communication is established, my connection status changes to True, which is the expected behavior. My challenge arises with the TCP write module, which requires the xEnable_write flag to toggle between True and False. If xEnable_write remains True, the module only performs a single write operation. To address this, I introduced a falling edge trigger (F_TRIG), expecting it to help in toggling xEnable_write and it does, However, I've encountered an issue where in the beginning after connxion established I need to manually set xEnable_write to True for the system to work as intended. I'm looking for a way to automate this process so that xEnable_write becomes True automatically upon establishing a connection . Initially, I tried setting xEnable_write to True from the start, but this approach didn't work well since it left the flag permanently True, preventing further toggling. I also experimented with using a TON timer, but I faced similar issues. I am seeking a solution that automatically toggles xEnable_write between True and False after a connection is established, ensuring continuous write operations without manual intervention. Any advice or guidance on how to achieve this would be greatly appreciated."
Last updated: 2024-03-05

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 zoronoa on J1939.ReceiveWatchdog & J1939.ReceiveParameterGroup CODESYS Forge talk (Post)
Hi, I'm trying to monitor a specific PGN which I have it sending a pulse every 500mS Problem: Using the Watchdog for the ECU does not really help me as I have multiple instances with separate PGNs, if a PGN goes ghost, the ECU watchdog won't be flagged as the others will be running. I found the J1939.ReceiveWatchdog & J1939.ReceiveParameterGroup function blocks and they seem like a good solution for my problem, I just can't get them to work from my understanding you just build the J1939.ReceiveParameterGroup once and then connect it's output to the J1939.ReceiveWatchdog, here's my CODE for the setup HEARTBEAT_TIMER(IN:= TRUE, PT:= T#1000MS); //turn-on delay because of initialization race IF HEARTBEAT_TIMER.Q= TRUE THEN Glob_Var.DisplayReceive.xExecute:= TRUE; Glob_Var.DisplayReceive.itfECU:= Valve_X; Glob_Var.DisplayReceive.dwPGN:= 65511; Glob_Var.DisplayWatchdog.xEnable:= TRUE; Glob_Var.DisplayWatchdog.itfParameterGroup:= Glob_Var.DisplayReceive.itfParameterGroup; Glob_Var.DisplayWatchdog.tTimeout:= T#1500MS; END_IF Notes: Glob_Var.DisplayReceive is of type J1939.ReceiveParameterGroup Glob_Var.DisplayWatchdog is of type J1939.ReceiveWatchdog The above code is done once and not cyclically I'm monitoring Glob_Var.DisplayWatchdog.xError cyclically
Last updated: 2024-03-13

Post by tomast on Codesys and Siemens SINAMICS 20 modbus RTU "Response CRC Fail" CODESYS Forge talk (Post)
Hi everyone, I'm currently working on a project involving the control of 5 VFDs via Modbus RTU, this time using the WAGO 750-8212 CPU. So far, I've managed to make progress, but I've encountered an issue. While I can successfully read and write to all the registers I need, I consistently encounter a "Response CRC Fail" error when attempting to write the value 1151 to the STW register at address 40100. I'm able to set the frequency via register 40101 and adjust all other parameters using different registers. Setting STW to 1150 results in the drive ready boolean from the ZSW-bit being received instantly. However, the moment I attempt to send 1151 to register 40100, I immediately receive the "Response CRC Fail" error for all channels. I've also attempted to use combined control, employing Modbus for frequency control and starting from a digital input. Everything seems to function properly until I send the start command to the VFD. Interestingly, I consistently encounter the same error the moment I send the start command, regardless of whether I use register 40006 (high) or 40100 (1151). Could someone please assist me in resolving this issue?
Last updated: 2024-03-21

Post by danieldiaz on Problem with FB execution CODESYS Forge talk (Post)
Hello everyone, I've been working on a system which needs an error function, with this purpose I've created a FB programmed in LD, after debugging I run the simulation. It seems that the variable linked to a coil doesn't change the value when the contacts are associated to input variables. When I use internal variables the logic works properly. I don't know if the problem is related to the variables definition or with the logic program. As you can see in the image, I1 and I2 are variables declared on the FB, the rest are input variables. If I force the eStop and Reset signals to TRUE the coil value should change, but it doesn't. However in the second network if I1 is TRUE the coil change to TRUE as it has to be. To sum up, my doubt is why that coil doesn't change its value? I would like someone to shed a light on this. Thanks!
Last updated: 2024-04-02

Post by alexgooi on Modbus writing on value change CODESYS Forge talk (Post)
Hi Duvan, You could make this in 1 single object (FB), Indeed don't use a function for this beacuse you need some memory to keep the old value. For i := 0 TO 200 BY 1 DO //Check if the value has been changed IF Old_Value[i] <> Value[i] THEN //Set the trigger to TRUE Trigger[i] := TRUE; Old_Value[i] := Value[i]; END_IF END_FOR If you define the Value array as an In_Out and the Trigger as an In_Out you arn't claiming any aditional memory to your system. You ofcourse then need to add some code arround it that does something with the trigger and writes it back to FALSE again. If you want more flexability you also could use pointers instead of using the IN_OUT FOR i := 0 TO 200 BY 1 DO address := address_Input + i * SIZEOF(*Put type here); IF Address^ <> Old_Value[i] THEN Trigger[i] := TRUE; Old_Value[i] := Address^; END_IF END_FOR
Last updated: 2024-04-02

Post by salvadegianluca on How to use TON inside an FB that is instanced within a Visu page CODESYS Forge talk (Post)
Hi everyone; I'm building a project in which the drag of the mouse over some controls (or the click event) changes the background color of the control items; this change of color is made with an FB that assignes a color code to the background with MUX command based on the value of an enumerator, this part is perfectly working but, when I'm using a touchpanel instead of a web visu (controlled by a mouse) I get into some issues as it seems that the touch operations are not triggering the MouseEnter and MouseLeave properties as it's done with the mouse.... For this reason I'm trying to add a TON to my FB and, if the enum that changes color remains at the same state for more then 3s I'm automatically resetting it to it's "0" so the item gets back the not selected color. Anyhow it looks like the TON function from library is not working in these FB that are instanced in the various visualizations, as instead they do if I create some instances within the POUS. Anyone has ideas of how to make them work?
Last updated: 2024-04-15

<< < 1 .. 41 42 43 44 45 46 > >> (Page 43 of 46)

Showing results of 1135

Sort by relevance or date