Search talk: declaration of variables

 
<< < 1 .. 51 52 53 54 55 .. 125 > >> (Page 53 of 125)

Post by dkugler on Project loses 'Download time' information CODESYS Forge talk (Post)
and if you copy or transfer a project to another place, copy not only the .project, copy .compileinfo .bootinfo and .bootinfo_guids then we figured out it is more often possible to go online without full download. If you build an archiv and extract it, some of this files are missing and login isn't possible without download. I work with V3.5 SP16 Patch 4. I don't know if this problem of the archiv is solved in newer Versions/SP's and I don't know what the problem of Codesys is to help out a lot of programers of this very annoying problem or at least help with a workaround
Last updated: 2025-09-18

Post by ranadheer on Implementation of IEC-104 CODESYS Forge talk (Post)
Hi Everyone, As we didn't have client for IEC - 104 - only server server is available , so because of that we are trying to make establish the communication between the external simulator as a Client and codesys itself as a server. We are looking for the variable behavior from CODESYS has to change according to the message triggered by the CLIENT (we are using simulator Application like Redisant). We are able to see the log data as the status of triggering the SCS from Client received to the Log data of the codesys device(attached screen shot of it) and in simulator panel we had set the details to trigger the data from Redisant to Codesys. Current Status: The project builds and runs successfully, but I need guidance on how to connect this to an external IEC-104 simulator for testing and visualization by using demo mode.
Last updated: 2025-10-14

Post by comingback4u on Memory Address Overlap CODESYS Forge talk (Post)
Hello, We use a controller that comes with a bunch of predefined faults. These faults are considered active and historic. They are a 32 byte array but only take up 26 bytes of data. Because of this the historic faults start at address 26 instead of 31. Active faults variable take up address location 0 to 31. Historic faults variable take up address location 26 to 57. Because of this overlap I get an error that these overlap and it wont allow me to download to my controller. This isn't an issue in 3.5.5.4 but becomes an issue in newer version. Is there a way to turn this off? If I change the address location, the historic faults then become broken without doing some manipulation in the code. The software will build just fine. Thank you for your time.
Last updated: 2024-03-07

Post by jaspergain on Non-existing identifiers CODESYS Forge talk (Post)
Hello, I got a bit of a weird issue going on which is kind of annoying. So recently we switched a lot of Modbus IO to EtherCAT, as we were having issues with stability. All works fine, which is great. But sometimes when I change the program I get errors claiming that identifiers are not defined. Meaning I can't go online. See the picture below. I believe this is because some of these identifiers were used with Modbus, and they weren't properly removed/deleted? A clean all temporary fixes the issue, but it comes back again after a while of changing the code, and building. Any way to fix these non-existing required identifiers, or even find out where they are required? Thanks for the help in advance. Jasper.
Last updated: 2024-05-29

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

Post by john-robinson on Limiting Memory Access of an Array to Within its Bounds CODESYS Forge talk (Post)
Recently we had an issue regarding some simple code to calculate a rolling average. The code indexes from zero to 199 to properly store the current input into a circular buffer which then allows us to calculate a rolling average: VAR input_5s : REAL; outs_arr : ARRAY[0..199] OF REAL; i : USINT := 0; END_VAR ___ //this code runs every five seconds, calculating a rolling average outs_arr[i] := input_5s; i := i + 1; output := OSCAT_BASIC.ARRAY_AVG(ADR(outs_arr), SIZEOF(outs_arr)); IF i >= SIZEOF(outs_arr) THEN i := 0; END_IF There is a simple bug in this code where the index will be set to 0 when it has surpassed the length of the array in bytes (800 in this case) rather than larger than the number of reals in the array (200). The solution here is simple, replacing i >= SIZEOF(outs_arr) with i >= SIZEOF(outs_arr)/SIZEOF(outs_arr[0]). In this example when the index increased to 201 and the line outs_arr[201] := input_5s was called, codesys arbitrarily wrote to the address in memory that is where outs_arr[201] would be if the array was that long. I would like to find a way to wrap the codesys array inside of a wrapper class that checks if an input is within the bounds of an array before writing to that value. I know how I would implement that for a specific array, I could create a method or class that takes an input of an array of variable length, ie. ARRAY[*] OF REAL, but I don't know how to make this for any data type. I am wondering if anyone has ever done anything similar to this, or has any better suggestions to ensure that none of the programmers on this application accidentally create code that can arbitrarily write to other locations in memory.
Last updated: 2024-03-05

Post by tk096 on High Cycle Times for SoftMotion_PlanningTask when using AxisGroup CODESYS Forge talk (Post)
Hi, under this circumstances the performance of a Raspberry Pi 4 should be sufficient to run a Softmotion robotics application. A closer look at the project would be required. Maybe you could contact the codesys support? Usually it is recommended to run the planning task cyclically every 2ms with task priority of 0 on a dedicated core. In the task configuration you can have a look at the average and maximum execution time of the planning task. You could use the function block SMC_TuneCPKernel (https://content.helpme-codesys.com/en/libs/SM3_Robotics/Current/SM3_Robotics/POUs/AdministrativeConfiguration/Computation/SMC_TuneCPKernel.html) to define suitable values for the parameters 'fSyncBufferDuration' and 'fPlanningInterval'. However, as previously mentioned, the performance of a Raspberry Pi 4 with realtime patch should be sufficient. The 'fPlanningInterval' parameter specifies the maximum planning step width in seconds. The cycle time of the planning task should not permanently exceed this value. A higher value reduces the computational effort, but can lead to a violation or no full utilization of the set limit values for velocity, acceleration and jerk. From a starting value of 0.016 seconds, the value should be increased gradually until the performance is acceptable. The parameter 'fSyncBufferDuration' specifies the size (in seconds) of the buffer between the planning and fieldbus task. The cycle time of the planning task must not exceed this value at peak times (this will lead to the error SMC_CP_QUEUE_UNDERRUN). A higher value can compensate for peaks in the cycle time of the planning task. At the same time, however, this also increases the latency for executing interrupts and aborting movements.
Last updated: 2024-03-22

Post by e13740e on Parameterized Property syntax for array element processing CODESYS Forge talk (Post)
Since parameterized (indexed) properties are not possible, I decided to use architectural approach "Indexing Property Adapter" to achieve the intended goal — avoiding code duplication for validated access to array elements. Essence: Create a Function Block Adapter (FB_PropertyAdapter) that encapsulates the logic for working with a single element of the target array (e.g., with one settings structure). Declare Properties inside the adapter block for accessing each individual field of the data structure. All validation logic is implemented within the Set accessors of these properties. Data Binding via VAR_IN_OUT: The adapter block receives a reference to a specific data element from the global array through its VAR_IN_OUT section, which ensures direct work with the original data without copying. Create an Array of Adapters: In the parent POU (e.g., FB_SettingsManager), an array of these adapter blocks is created — one for each element of the global array that needs to be managed. Initialize Bindings: In a FOR loop, each adapter instance from the array is given a reference to the corresponding data element. Result: This approach allows accessing the data via the index of the adapter array, and then through the property name, which simulates the behavior of an indexed property: MyAdapterArray[Index].MyProperty Thus, the validation and data access logic is written only once inside the adapter block and is then reused multiple times by creating instances of it in an array. This completely solves the problem of code duplication while providing a clean, scalable, and object-oriented architecture compatible with standard CODESYS features. Question closed.
Last updated: 2025-10-19

Post by timvh on Unable to Connect to Modbus RTU Device CODESYS Forge talk (Post)
If your Control Win is the Modbus "Master" then your configuration should be something like: Modbus_COM (Serial port) - Modbus Master (this is the Control Win SoftPLC actively setting up the communication) - Modbus Slave (this is then your WAGO 750-315) You need to add channels to the Modbus Slave configuration to inform the master which variables to read/write from the Wago module. The way you configured it now, the Control Win is also a slave. PS, don't forget to put the PLC (Control Win) in Run.
Last updated: 2024-09-03

Post by balazska2 on Position values with integer variables CODESYS Forge talk (Post)
Hello guys! https://content.helpme-codesys.com/en/CODESYS%20Visualization/_visu_elem_label.html My question: Could I give an integer variable to the Position records (in the Element list => Position => width / height)? If yes, how? I defined a TEST integer variable with 300 value. I tried to add this variable to the width record (.TEST or only TEST), but if I saved, the value jumps back to 0. Thanks for your help! :)
Last updated: 2024-10-03

Post by respl on IFM EXOR Network variable Error CODESYS Forge talk (Post)
We are connected IFM CR711S to Exor EX710. We are exchanging data using network variables. Both devices are configured on same project so no need to use file source. When tested application it works fine. But after 3 months same application not working. We are able to send data from CR711 to EX710 but data from Ex710 to CR711s works only for one scan when we cold reset CR 711S. Can somebody help to find out error.
Last updated: 2025-03-17

Post by camjam on BOOL variable in OPC UA and modbus simultaneously CODESYS Forge talk (Post)
I have come across this. The only way i could get it to work would be to define a word that is also the same address as the Bools. eg %MX600.0 through to %MX600.15 would be individually defined in the variables and them have another variable word defined at %MW300. You still need to break out the word in what ever program you are using to read/write the OPCUA tags.
Last updated: 2025-08-18

Post by nha451 on EIP Scanner not receiving data from adapter CODESYS Forge talk (Post)
Hello, I have an EtherNet IP adapter (GoPxL) running with a virtual PLC. I have successfully connected the adapter with green icons next to it. On WireShark I can see the data coming from GoPxL but on CODESYS it shows up as all 0. My firewall is turned off and I have enabled the device to always update variables. I tested my set up with Profinet and I can receive the data. Please let me know if you have any suggestions!
Last updated: 2025-09-12

Post by gatewail0 on Digital Clock CODESYS Forge talk (Post)
You can definitely pull the actual system time into CODESYS without too much trouble. Take a look at the SysTimeRtc or SysTime library—both let you read the current date and time from the Raspberry Pi. You can call SysTimeRtcGet() or SysTimeGetTime() in your PLC code and then format the hours, minutes, and seconds into variables that feed your 7-segment visualization. Once you’ve mapped those values, your Visu display will update automatically each cycle. It’s a pretty common approach for clocks in CODESYS, so you should be able to get it working quickly. golf hit
Last updated: 2025-12-04

Post by jari-koivuluoma on Problem trying Net Base Services 3.5.15.0 TCP connection CODESYS Forge talk (Post)
I have a need to send messages between 2 PLCs and I cant use network variables (because of size limit) so I tried writing this simple test program. This seems to work fine. I can send messages back and forth when a first "Start server" and then "Connect client". See the attached image. However, if I disconnect the client by setting ClientConnect to false and try to re-connect then the TCP_Client just gives me TIMEOUT error. When I stop and start the server again, then Im able to reconnect. How is this supposed to work? Why reconnecting wont work. There is not other way of disconnecting the client than setting xEnable of the TCP_Client to false. This is just a testing program and I will try it on 2 seperate devices once this works. PROGRAM PLC_PRG VAR CONSTANT mySize : UDINT := 255; END_VAR VAR Server: NBS.TCP_Server; ServerIpStr: STRING := '127.0.0.1'; ServerIP: NBS.IP_ADDR; ServerPort: UINT := 50000; ServerConnection: NBS.TCP_Connection; Client: NBS.TCP_Client; ServerRead: NBS.TCP_Read; ServerWrite: NBS.TCP_Write; ServerSend: STRING(mySize); ServerReceive: STRING(mySize); ServerConnect: BOOL; bServerSend: BOOL; IP: NBS.INADDR; ConnectedClientIP: STRING; ClientPort: UINT := 50000; ClientIpStr: STRING := '192.168.1.49'; ClientIP: NBS.IP_ADDR; ClientRead: NBS.TCP_Read; ClientWrite: NBS.TCP_Write; ClientSend: STRING(mySize); ClientReceive: STRING(mySize); ClientConnect: BOOL; bClientSend: BOOL; Error: BOOL; Message: BOOL; END_VAR // Server ServerIP.sAddr := ServerIpStr; Server( ipAddr := ServerIP, uiPort := ServerPort ); ServerConnection( xEnable := Server.xEnable, hServer := Server.hServer, ); IP := ServerConnection.IPAddress; ConnectedClientIP := F_Concat7( BYTE_TO_STRING(IP.S_un_b.s_b1),'.', BYTE_TO_STRING(IP.S_un_b.s_b2),'.', BYTE_TO_STRING(IP.S_un_b.s_b3),'.', BYTE_TO_STRING(IP.S_un_b.s_b4)); ServerRead( xEnable := ServerConnection.xActive, hConnection := ServerConnection.hConnection, szSize := SIZEOF(ServerReceive), pData := ADR(ServerReceive) ); IF ServerRead.xReady AND ServerRead.szCount > 0 THEN Message := TRUE; END_IF IF ServerRead.eError > 0 THEN Error := TRUE; END_IF ServerWrite( xExecute := ServerConnection.xActive AND bServerSend, hConnection := ServerConnection.hConnection, szSize := LEN(ServerSend)+1, pData := ADR(ServerSend) ); IF ServerWrite.xDone THEN bServerSend := FALSE; END_IF IF ServerWrite.eError > 0 THEN Error := TRUE; END_IF // Client ClientIP.sAddr := ClientIpStr; Client( xEnable := ClientConnect, ipAddr := ClientIP, uiPort := ServerPort, udiTimeOut := 10000000 ); ClientRead( xEnable := Client.xActive, hConnection := Client.hConnection, szSize := SIZEOF(ClientReceive), pData := ADR(ClientReceive) ); IF ClientRead.xReady AND ClientRead.szCount > 0 THEN Message := TRUE; END_IF IF ClientRead.eError > 0 THEN Error := TRUE; END_IF ClientWrite( xExecute := Client.xActive AND bClientSend, hConnection := Client.hConnection, szSize := LEN(ClientSend)+1, pData := ADR(ClientSend) ); IF ClientWrite.xDone THEN bClientSend := FALSE; END_IF IF ClientWrite.eError > 0 THEN Error := TRUE; END_IF
Last updated: 2024-10-03

Post by alessandro on SysMemCmp SysMemCpy CODESYS Forge talk (Post)
VAR Data1:ARRAY[1..10] OF SINT ; Data2:ARRAY[1..10] OF SINT ; Data3:ARRAY[1..10] OF SINT ; Data4:ARRAY[1..10] OF SINT ; ex_1 : BOOL ; ex_2 : BOOL ; enable : BOOL :=0 ; END_VAR // PROGRAM // The scope of this example is compare and copy the values of two ARRAY only if some value is different using SysMemCmp and SysMemCpy. // In this 2 example we don't use a FOR cicle for do this, and pBuffer1 and pBuffer2 is just a pointer to ARRAY. See details in Library util.SysMem of Codesys // The compare funcion util.SysMem.SysMemCmp is bidirectional if Data1 chanege respect Data2 ex_1 go to 1 and if Data2 change respect Data1 also // but the copy function util.SysMem.SysMemCpy work only from source ARRAY pSrc:=ADR(Data1) to destination ARRAY pDest:=ADR(Data2) // Example 1 Full ARRAY compare and copy // This compare 2 different equal ARRAY and if there is some difference ex_1 go to 1 and if you give enable he copy Data1 in Data2 ex_1 := TO_BOOL(util.SysMem.SysMemCmp(pBuffer1:=ADR(Data1), pBuffer2:=ADR(Data2), udiCount:=SIZEOF(Data1))); IF ex_1 AND enable THEN util.SysMem.SysMemCpy(pDest:=ADR(Data2), pSrc:=ADR(Data1), udiCount:=SIZEOF(Data1)); END_IF // Example 2 Only selected area of the ARRAY compare and copy // This compare 2 different equal ARRAY starting from position number [3] for 4 byte in this case start at position [3] and finish at position number [6] // and if there is some difference only in area [3..6] of the ARRAY ex_2 go to 1 if you give enalbe he copy Data3[3..6] in Data4[3..6] // if something change in other array position[0..2] or [7..10] are ingnored ex_2 := TO_BOOL(util.SysMem.SysMemCmp(pBuffer1:=ADR(Data3[3]), pBuffer2:=ADR(Data4[3]), udiCount:=4)); IF ex_2 AND enable THEN util.SysMem.SysMemCpy(pDest:=ADR(Data4[3]), pSrc:=ADR(Data3[3]), udiCount:=4); END_IF // Attention udiCount input is intended in <byte> in the example 1 I pass to udiCount:=SIZEOF(Data1) for compare and copy the intere ARRAY and // SIZEOF pass the size of intere ARRAY in byte to the function input, in this 2 examples I used variable type SINT each one occupie 1 byte and one position in the ARRAY // and in the example 2 I pass udiCount:=4 for compare and copy only 4 position of Data3/4[3..6] if you want to extend this example and use it for an ARRAY OF WORD // remember that each WORD will occupe 2 byte (16 bit) and you will have to pass udiCount:=SIZEOF(Data1) if you need to compare intere ARRAY example 1 // but need udiCount:=(42) for the example 2 because need to compare and copy 4 word each occupie 2 byte (16 bit). // For REAL (32 bit) need udiCount:=SIZEOF(44) for LREAL or (64 bit) need udiCount:=SIZEOF(416) // a good rule is calculate the dimension of the ARRAY in byte without empty space at the end, multiple of data type number for variable bigger then 8 bit // Example : If you want to create an ARRAY for 5 REAL (32 bit) each occupie 4 byte the correct size is ARRAY[0..19] OF REAL 54=20 position. // NOTE : In the example the position of compare function util.SysMem.SysMemCmp is first and the copy function util.SysMem.SysMemCpy inside the IF is after // in one cycle of the program the two array is compared and if there is some difference and enable are copied. // If you move util.SysMem.SysMemCmp after the IF cycle he will copare the ARRAY in the current cycle but the copy of the value will do in the next cycle.</byte>
Last updated: 2025-10-24

Post by garyl on Comments in arrays and assigning RST coil's to 600 outputs CODESYS Forge talk (Post)
Hello all, im working on a project that requires me to convert an old automation direct DirectSoft PLC d2-250-1. One of the problems im encountering is that all of the comments are attached to members of the different addresses. When i convert the addresses (1777 "C" registers, 777 X registers, and 20,0000 V registers) im running into difficulties keeping the inputs/outputs correct since they are missing documentation. Is there a good way to retain the comments of the indexes in the array? Secondly, initially i was declaring the "C" and "V" addresses individually and this worked to retain the comments as to which register did what, however i ran into a problem when one rung reset (or set to 0) approximately 600 C Addresses. Since each tag is separately declared this proved to be nearly impossible without a literal wall of code that attempted to crash the program. So i converted all of the registers (C,X,Y,V) into separate structs, declared them as arrays and pointed all of the original call outs in the program to the newly defined structs. However i have now lost comments and the program is very hard to follow. Thanks for any help with this issue.
Last updated: 2023-08-31

Post by s1ack on Request a dark mode for CODESYS CODESYS Forge talk (Post)
and other colors have to be licensed? Introducing Code-Based Licensing Code Basic S: White text w/ grey background (ST only) Code Basic M: White text w/ dark gray background (ST Only) Code Basic L: White test w/ black background (ST Only) Code Standard S: 2 Colors of light syntax highlight colors w/ black background. (ST Only) Code Standard M: 4 Colors of light syntax highlight colors w/ black background. (ST only) Code Standard L: 6 Colors of light syntax highlight colors w/ black background. (ST only) Code Performance S: 2 Colors of light syntax highlight colors w/ user definable background. (Entire IDE) Code Performance M: 4 Colors of light syntax highlight colors w/ user definable background. (Entire IDE) Code Performance L: 6 Colors of light syntax highlight colors w/ user definable background. (Entire IDE) You get the gist... I used to be a big fan of CoDeSys. Recent re-entry after 5 years away, not so much.
Last updated: 2024-11-15

Post by cihangur on C0138: No matching 'FB_Init' method found for instantiation of VisuClientObjectMgr CODESYS Forge talk (Post)
This "FB_Init" error has become very annoying lately. It's usually related to webvisu and is resolved by deleting all objects and related libraries. Of course, you need to re-add the deleted objects. Lately, we've generally been managing by not upgrading, but this problem persists in every version since SP20 and should be resolved. I updated a project from SP 19 to SP 21 and found 116 similar errors. [ERROR] alarmmanager, 4.7.0.0 (intern): ReplaceAlarmPlaceholdersConverted: C0138: No matching 'FB_Init' method found for instantiation of CharBufferString [ERROR] visuelemsalarm, 4.7.0.0 (system): protDrawRowHeader [VisuFbElemAlarmTable]: C0138: No matching 'FB_Init' method found for instantiation of CharBufferString [ERROR] alarmmanager, 4.7.0.0 (intern): AnalyzePlaceholders2 [Alarm]: C0138: No matching 'FB_Init' method found for instantiation of CharBufferString If you have an ERROR related VisuClientObjectMgr you can try to disable "Visualization Manager - Settings - Support client animations and overlay of native elements " selection "C0138: No matching 'FB_Init' method found for instantiation of VisuClientObjectMgr" etc
Last updated: 2025-10-10

Post by acc00 on Main Task cycle too long leading to PLC Fail CODESYS Forge talk (Post)
I have 2 Wago PFC200 PLC, running with Runtime SP19 Patch 5, with the Redundant application. The PLC communicates as Modbus Master with at this moment 15 Modbus Slaves -later there will be 28 in total- (Drives, Power management units,...). These devices are connected in 2 rings (1 ring of Drives, 1 ring of Power Management units), with 2 Managed Moxa Switches being part of the ring. Each PLC is connected to one of these switches. The issue I'm encountering is that the Cycle time of the Active PLC goes very high when I'm closing the Drive ring (simulating an issue on one Cabinet supply, resulting in that one Drive shut down, which can happen on field quite often). As a result of this long cycle, the PLC fails and goes to Exception, and the Passive PLC does not take control of the system. A normal cycle is around 30ms for the Main task, and a few ms for the Ethercat task. When I monitor with Profiler, I see that in this Maximum Cycle, the main Task is only taking 13ms, so I'm not sure where the PLC is hanging for so long. Is the remaining cycle time the Redundant management/sync or something else? Thank you in advance.
Last updated: 2024-03-08

Post by risele on Modbus connection via Qronox PCD3 M6893 CODESYS Forge talk (Post)
You are welcome. Also note, that it's valid only if you modbus-device use same real/float value representation (IEEE 754). That's true for most of systems. But some devices may have other representation, such as integer + position of the decimal point, for example 123.456 is integer = 123456 and position = 3 Also note, that, ones again, depending on endianess of each system, you may also need to swap not just words, but bytes. TYPE u_Real : UNION rVal:REAL; wVal:ARRAY[0..1] OF WORD; bVal:ARRAY[0..3] OF BYTE; dwVAL:DWORD; //same as previous, may be easier to specify the MB register END_UNION END_TYPE than swapping may be something as VAR A,B,C,D:BYTE; //Bytes of the real value uIn, uOut:u_Real; rVal:REAL; ModbusReg1,ModbusReg2:WORD; END_VAR uIn.rVal:=rVal; uOut.A:=uIn.D; uOut.B:=uIn.C; uOut.C:=uIn.B; uOut.D:=uIn.A; ModbusReg1:=uOut.wVal[0]; ModbusReg1:=uOut.wVal[2]; Or you even need to reorder bits... Ones again, sending float/real values is not defined by Modbus protocol itself, so it is hardware- and software-dependent. The Modbus Poll (and most of modbus tools) have configuration parameters that will properly swap bytes on their side. Ones again, that's very helpful: https://www.scadacore.com/tools/programming-calculators/online-hex-converter/
Last updated: 2026-02-19

Post by martinlithlith on Relay board / relays for raspberry pi 3 b+ CODESYS Forge talk (Post)
hi! im planning a project on a raspberry with Codesys. For this I'll need a number of relays to control heating and fans, all a max of 24v and about 2a. How would i know if the board / relays i buy will be working with Codesys? Does every hat work or does it need a library/driver? is there a list of drivers/libraries created? as this is a hobby project all tips on a relay board or single boards that works with codesys and not to expensive are very welcome.
Last updated: 2023-09-03

Post by nico01 on Integer with comma in visualization CODESYS Forge talk (Post)
Hello everyone, I created a visualization with a lot of REAL, with one or two digits after the decimal point. This causes me problems in terms of rounding and memory... is it possible to display an integer with a comma, like with PROFACE or SIEMENS? It's just an "abuse" of display, the comma is just on the visualization. This limits the memory (16 versus 64 bytes) and rounding is easier to manage... See print screen on proface software THANKS
Last updated: 2023-09-20

Post by nathant on Can't open online view of FB instance from code editor, only from Device/POU windows CODESYS Forge talk (Post)
Hello, The title pretty much says it all. When trying to open a FB from the CFC/Ladder/SFC editors while online, the FB does not open in an online view of that specific instance. Instead, it opens an offline view with '???' shown for the value of any variable. This makes debugging extremely cumbersome, as I have to find each FB in the POU window and select the specific instance I am trying to view. Anyone know the cause/solution for this? Thanks.
Last updated: 2023-11-08

Post by mmoncada on Dinamically loading recipes CODESYS Forge talk (Post)
I'm having trouble with the initial loading of recipes. I can create them and load one or the other, but when the program restarts the recipes are not listed. I'm calling: RecipeManCommands.ReloadRecipes and then RecipeManCommands.GetRecipeCount which returns 0 recipes. None of the methods returns error and if i call them again after RecipeManCommands.CreateRecipe RecipeManCommands.ReadAndSaveRecipe getRecipeCount returns the number of recipes created. When i restart the system, once again they are not listed even though the recipe files are there. Any ideas? Martin Btw, Codesys 3.5 SP 16 Path 9
Last updated: 2023-12-06

<< < 1 .. 51 52 53 54 55 .. 125 > >> (Page 53 of 125)

Showing results of 3124

Sort by relevance or date