Search talk: variable address

 
<< < 1 .. 25 26 27 28 29 .. 36 > >> (Page 27 of 36)

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 jeffgamsby on Accessing ModbusTCP addresses from python CODESYS Forge talk (Post)
Hi, I am new to modbusTCP and I am trying to access Input registers from codesys (3.5.SP13). The offset is 16#0000 and I am trying to access Channel 1[24] %IW24 to pull analog values. I am using pyModbusTCP and I need to supply a modbus address and the number of registers to read. What does 16#0000 mean in terms of the actual offset, how do I translate this number plus the channel to access this info via python? Any help would be appreciated, thank you.
Last updated: 2023-09-20

Post by deeksha on RaspberryPi with CoDeSys throwing error CODESYS Forge talk (Post)
I am trying to access Raspberry pi on CoDeSys, but it throws an error says, "No connection to target: An established connection was aborted by the server." I am able to access Raspberry pi via MobXterm, but on CoDeSys, it throws error. Looking for help in resolving this error. Error snap is attached. IP address is scanned here successfully, but when I am trying to install Raspberry pi packet: 4.0.0.0, it throws this error.
Last updated: 2024-08-23

Post by warrumungi on Opening a Dialog on a specific Client from ST CODESYS Forge talk (Post)
Hi Thanks, Manuel, for providing this solution and insight. I too had exactly the same problem as you did. While I did implement a custom filter, I'd also like to point out what jinlee mentioned above...I see no reference to VU.PublicVariables.Clients.Current anywhere?? In my case I only needed to show a dialog on a "master" client, not all the clients, so I filtered by IP address to do this.
Last updated: 2024-11-05

Post by nz-dave on ethercat softmotion axis error CODESYS Forge talk (Post)
Hi all I'm having a little trouble get my axis to work. i can turn them off and on. i can run each servo manually inputting directly to the mapping address. as soon as i try to use any FB's like jog etc my servos wont move and error out. so far I've had error "SMC_ERROR.SMC_DI-POSITIONLAGERROR" and another one about not calling a fb. cheers. in the attachment I have just jogged X_Axis with the MC_JOG FB
Last updated: 2025-03-10

Post by fschuler on No connection to Raspberry at runtime installation CODESYS Forge talk (Post)
Hi, I try to install the Codesys realtime in a Raspberry PI 3B+. When I click on the installation button I get always the message No connection to device: An established connection was aborted by the server. Raspberry 3B+ with newest raspberry PI OS. Codesys 3.5.15 Patch 1 Codesys Runtime Package 3.5.16.20 SSH is activated. I can login with Putty Ping is possible IP address search is possible Just the installation is not started.
Last updated: 2025-07-23

Post by gunstr on CODESYS control on RPi starts, shortly runs, then exits CODESYS Forge talk (Post)
The problem has been resolved. Two findings are described below for future reference. The new RPi hw delivered during August 2025 has a MAC address from a new vendor series that is not supported by old runtimes. 4.17.0.0 or above is required. 4.17.0.0 does not pick up the correct architecture during installation and aarch64 has to be manually configured either in the GUI under operations or in /etc/codesyscontrol/CODESYSControl_User.cfg under the [CmpRasPi] section.
Last updated: 2025-09-16

Post by monteta on Automation without UI CODESYS Forge talk (Post)
Problem solved, Once the perform_network_scan() is done, y just had to recover the address and using set_gateway_and_address(). Now i'm looking how to deploy all my device's applications on the PLC, I guess it will looks like : for app in allapplication: with online.create_online_application(app) as onlineapp onlinedevice = onlineapp.get_online_device() online.set_default_credentials(x,y) try: onlineapp.login(OnlineChangeOption.Keep, False) except Exception as e: msg = str(e).lower() if "rescan" in msg : print("PLC service might be off") elif "targetdo" in msg: print("Bad credentials") else print(msg) else: onlineapp.create_boot_application()
Last updated: 2025-09-29

Post by alimans on Hex string CODESYS Forge talk (Post)
Hi kdkwhite, for Word you still can use suggested code by using a union structure and crack down your Word to two byte as bellow: TYPE CrackWordToByte : UNION InWord : WORD; OutBytes : ARRAY [0..1] OF BYTE; END_UNION END_TYPE then define your variable as this type: udInput : CrackWordToByte; now assign your Word variable input to InWord and send OutBytes[x] to the mentioned method: udInput.InWord := WordVariableInput; Input := udInput.OutBytes[x]; Regarding your question about the code: actually 48 is ascii code of "0" and while 65 is the ascii code of "A" so in above code 55 + 10 would be 65.
Last updated: 2023-09-20

Post by macros8 on Alarm Management - latched variable represented as Text list CODESYS Forge talk (Post)
Hi, I havenΒ΄t noticed you put the comment here. I thing itΒ΄s a bit different. What I want is to have detail errors of technology in data type e.g. INT. This variable I would latch to the corresponding error msg but I would like to get it convert to text from the text list and not keep it in INT form. Example. Main error Valve Error: SubErrors 1 - Both sensors 2 - Not retracted in time 3 - Not pulled out in time In HMI Main error + latch SubErrors => "Valve Error: Both sensors" The benefit is that text lists are part of translation and can be easily manipulated. I know I can create whole string msg in PLC but then, it lose advantage of Alarm management. Thanks. M.
Last updated: 2023-11-07

Post by ewi04 on Recipe Manager - RecipeManCommands, load & write wrong values, Bug? CODESYS Forge talk (Post)
I'm getting closer to the error. The combination of STRUCT and ARRAY probably causes the strange behavior. As soon as the ARRAY is followed by a variable, the problem arises. Examples: X: ARRAY[1..2] OF INT; // okay Y: ARRAY[1..2] OF STRUCT; // problem Z: STRUCT; Z.ArrayOfInt[1]; // okay Z.ArrayOfStruct[1].Variable // problem // *update - array of array also causes the error A: ARRAY[1..2] OF ARRAY[1..4] OF BOOL; // problem I can't be the only one who has this problem. Or? Maybe there is a solution. Anyone? Or is it a bug after all?
Last updated: 2023-11-17

Post by hwopereis on How to use Application Trigger in Modbus TCP Server CODESYS Forge talk (Post)
Hi, I'm currently reading and writing several registers with a Modbus TCP server as a subdevice of a Modbus TCP Client. If I read and write cyclically, there are no issues. The problem is this: I see there is also the option to write by "Application", which I would like to use. However, I don't know With the Modbus RTU client, I see there is a trigger variable, xTrigger, to trigger the writing tasks. However, I can't find any such trigger for the Modbus TCP Client. Does anybody know how to implement the trigger behavior for the Modbus TCP client? In particular, I struggle to find the exact "trigger" variable. I'm running Modbus Client version 4.4.0.0 Thanks in advance!
Last updated: 2024-07-01

Post by paulpotat on Exclude traces when searching with ctrl+F CODESYS Forge talk (Post)
Hello, I was wondering if there is a way in codesys to exclude the traces from the search when using the "ctrl+F" window ? That would be nice to improve the search functionnality when looking for a specific variable. Sometimes when I iterate through all occurences with the "find next" button, it opens the trace configuration window. I would expect to be able to close it and go to the next occurence with the "find next" button, but after closing the trace configuration window the search says it has reached the end of the scope (even if in reality there are other occurences of the variable elsewhere). I tried to enable / disable the "search up" checkbox but it's not changing anything. I hope somebody have insight on this, BR
Last updated: 2024-08-06

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 struccc on HTML5 Controls - string(>80) values CODESYS Forge talk (Post)
Dear all, does anyone have experience with HTML5 controls recently? CODESYS 3.5.20.30 / Visualization 4.6.0.0 I'd like to create a simple lightweight text editor, with proper multiline handling, cut & paste, scrolling, etc. And it seems to work fine, just have problems with strings longer than 80 bytes.... Declaring a variable sText1 : STRING(8000) and referencing it in the HTML5 Controls corresponding value property works perfectly one way: the code receive the data as a string (See log1)... (Note TypeID 1000...) Also sending back the data (seems to work (See log2) except it doesn't change the value of the bound variable. Probably the issue is with using SendSimpleValue method... Naturally, I could do a workaround, but maybe there is a more standard way to implement this... Please let me know if you have any suggestions.
Last updated: 2024-10-23

Post by arcadium on Library ENUM text representation in visualization CODESYS Forge talk (Post)
Hello, Maybe someone could help with this. When I add ENUM to a text field I get the number instead of the text. For my own ENUM variable I have declared and enabled text list value is displayed as text, but I need enum text displayed from softMotion and other internal FB's. In the picture I have one of desired ENUM variable setup, but in the visu I have number, but in the watch window it's text. There is probably some checkbox to tick, but was looking for an hour, can't find a solution. Would apreciate some help
Last updated: 2024-12-24

Post by arcadium on Library ENUM text representation in visualization CODESYS Forge talk (Post)
Hello, Maybe someone could help with this. When I add ENUM to a text field I get the number instead of the text. For my own ENUM variable I have declared and enabled text list value is displayed as text, but I need enum text displayed from softMotion and other internal FB's. In the picture I have one of desired ENUM variable setup, but in the visu I have number, but in the watch window it's text. There is probably some checkbox to tick, but was looking for an hour, can't find a solution. Would apreciate some help
Last updated: 2024-12-24

Post by sigurdrb on OPC server in "Communication manager" CODESYS Forge talk (Post)
Hi! I was thinking of switching the OPC server config from "Symbol Configuration" to the "Communication manager" in the device tree. I Have a lot of arrays of structs that I have previously declared in the "Persistent Variable" object in the device tree. It seems as it is not supported to directly expose persistant variables to the OPC server like the "older" way of doing it in the symbol config. Is this correct? Do you recommend to just do it the old fashioned way, or should I edit the structure of the global variable list / persistant data / OPC server and set up the OPC server from the "Communication manager" object?
Last updated: 2025-01-20

Post by pernockham on Slider instance value when accessed through "execute ST-code" CODESYS Forge talk (Post)
I have a time which I want to modify with a slider. I have confirmed it is possible to set the value of the slider by to_real(time) (I can see that the slider changes according to 'my_time_value's value). Slider variable: to_real(my_time_value); However I fail to access the current slider instance value when I want to write back the value as time (write to a variable will not work as I need a type-conversion before assignment). my_time_value := to_time(slider-instance-value); I tried with this^.? but could not see anything interesting and also THIS^.GEN_Instance.? but nothing resemble what could be the sliders value. Anyone that knows? Thanks!
Last updated: 2025-02-06

Post by clarenced on Multiple applications on one device sharing variables. CODESYS Forge talk (Post)
I got this working using OPC UA. In the logic application I just added a Symbol Configuration. In the HMI application I added a Data Sources Manager and OPC UA Data Source. The one thing I don't like is the way the tags end up being named in the HMI application. In the logic application I have a program named PLC_PRG. It has a variable named testDINT. In the logic application the name I get for this variable is DeviceSet.CODESYS_Control_Win_V3_x64.Resources.Logic.Programs.PLC_PRG.testDINT. This is very long and looks like it could change if I used this on a different device type. Any ideas how I could get this name shortened down to just PLC_PRG.testDINT like it is on the Logic application?
Last updated: 2025-03-06

Post by clarenced on Multiple applications on one device sharing variables. CODESYS Forge talk (Post)
I got this working using OPC UA. In the logic application I just added a Symbol Configuration. In the HMI application I added a Data Sources Manager and OPC UA Data Source. The one thing I don't like is the way the tags end up being named in the HMI application. In the logic application I have a program named PLC_PRG. It has a variable named testDINT. In the HMI application the name I get for this variable is DeviceSet.CODESYS_Control_Win_V3_x64.Resources.Logic.Programs.PLC_PRG.testDINT. This is very long and looks like it could change if I used this on a different device type. Any ideas how I could get this name shortened down to just PLC_PRG.testDINT like it is on the Logic application?
Last updated: 2025-03-06

Post by dkugler on Toggling Visualizations using HMI Physical Buttons CODESYS Forge talk (Post)
the magic option is named "Use CurrentVisu variable" activate this option in the Visualization Manager an have a look: https://help.codesys.com/webapp/_visu_obj_manager;product=core_visualization;version=3.5.14.0 if your button is pressed, "feed" the string varable VisuElems.CurrentVisu := 'visu1'; with the correct name of the depending visu. alternative: place a frame element at a empty main visu, konfigure all visus to be shown by this frame. With setting the switching variable of the frame to the index value of the depending visu, it will switch to it. Advantage: the visu names are not hardcoded as string in the ladder lodgic. Good luck! Hint: If you have multiple VisuClients(Target, WebVisu,...) all will show the same visu. Independent switching is much more difficult, but there is a example from codesys.
Last updated: 2024-02-13

Post by mani-i4point0 on Issue with WebVisu on Raspberry PI CODESYS Forge talk (Post)
Hi, I am running Codesys Runtime by purchasing 'Codesys control for raspberry pi MC SL', I am trying to use the Variables from my GVL's. Few of the variables used as a Pushbutton form the Visualization. These 'BOOL' Variable getting unlatched automatically even though there is no write function in the Overall project. All of them are 'Read' functions, at the same time few other BOOL variable behaviors are seems to be fine. I have tried, clean all and download, serval time restarted the hardware. Happy to share any any information. Your input to resolve this issue would be highly appriciated. Version Details: codesyscontrol 4.8.0.0, armhf codesyscontrol based on SDK 3.5.19.0
Last updated: 2024-03-20

Post by fless on Warning C0564 when compiling CNC project with variables program CODESYS Forge talk (Post)
Hello, we are porting a CNC project from codesys 3.5.16 to codesys 3.5.19. The project has lots of CNC programs with variables. now we get hundreds of messages like this. [WARNING] CNC Test SP19: TestCNC SPS: PLC Logic: Application: C0564: A reference to uninitialized variable varCNC is used for initialization of TestCNC_D. Accessing the uninitialized variable may result in unexpected behavior. The objects program_name_D are implicit generated by codesys. I see no way to generated them after the variables. Is there a way to correct the initialization order? We know how to suppress this warning. But we need a clean solution as the warning already saved us in a other nonCNC project. Attached a small demo of the problem.
Last updated: 2024-03-21

Post by davidbo on RETAIN PERSISTENT only stored at gracefully shutdown? CODESYS Forge talk (Post)
I have {attribute 'checksumnoinit_override' := '2629838988'} {attribute 'init_related_code' := '5c6efcf8-e0f4-4166-a9fa-17eadd8908df'} VAR_GLOBAL RETAIN PERSISTENT {attribute 'order_in_persistent_editor' := '0'} segmentValue: ARRAY[0..49] OF REAL; {attribute 'order_in_persistent_editor' := '1'} segmentTime: ARRAY[0..49] OF REAL; // Generated instance path of persistent variable PRG.test: INT; // Generated instance path of persistent variable PRG.nw_storage: SysSocket_Implementation.SysSocket_Interfaces.SOCK_ADAPTER_INFORMATION2; END_VAR When I have changed PRG.nw_storage it will not be stored at a power off, but if I do a: sudo systemctl restart codesycontrol and then a power off it will be stored. Is there a way to store persistent variables without a restart of codesyscontrol? Can anyone explain how and when CODESYS store persistent variables?
Last updated: 2025-11-17

<< < 1 .. 25 26 27 28 29 .. 36 > >> (Page 27 of 36)

Showing results of 892

Sort by relevance or date