Search talk: data types int

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

Post by tomast on Communication between PLC and HMI- sending DUT data CODESYS Forge talk (Post)
Hi everyone, I am working with project where i have DUT wihth struct. I would like to fill this data trough a form on HMI. I use NVL to communicate and i would like to know how is it possible to do this? Thanks for all your advice in advance.
Last updated: 2024-08-23

Post by tomast on Communication between PLC and HMI- sending DUT data CODESYS Forge talk (Post)
Hi everyone, I am working with project where i have DUT wihth struct. I would like to fill this data trough a form on HMI. I use NVL to communicate and i would like to know how is it possible to do this? Thanks for all your advice in advance.
Last updated: 2024-08-23

Post by tomast on Communication between PLC and HMI- sending DUT data CODESYS Forge talk (Post)
Hi everyone, I am working with project where i have DUT wihth struct. I would like to fill this data trough a form on HMI. I use NVL to communicate and i would like to know how is it possible to do this? Thanks for all your advice in advance.
Last updated: 2024-08-23

Post by tomast on Communication between PLC and HMI- sending DUT data CODESYS Forge talk (Post)
Hi everyone, I am working with project where i have DUT wihth struct. I would like to fill this data trough a form on HMI. I use NVL to communicate and i would like to know how is it possible to do this? Thanks for all your advice in advance.
Last updated: 2024-08-23

Post by tomast on Communication between PLC and HMI- sending DUT data CODESYS Forge talk (Post)
Hi everyone, I am working with project where i have DUT wihth struct. I would like to fill this data trough a form on HMI. I use NVL to communicate and i would like to know how is it possible to do this? Thanks for all your advice in advance.
Last updated: 2024-08-23

Post by tomast on Communication between PLC and HMI- sending DUT data CODESYS Forge talk (Post)
Hi everyone, I am working with project where i have DUT wihth struct. I would like to fill this data trough a form on HMI. I use NVL to communicate and i would like to know how is it possible to do this? Thanks for all your advice in advance.
Last updated: 2024-08-23

Post by damian177 on Problem with downloading OPC UA tags by Data Source Manager CODESYS Forge talk (Post)
Unfortunately , Data Source Manager from Codesys has any problem with OPC UA Server delivered with ifix SCADA. Someone can help me add manually any tag from UaExpert to codesys ? How should be was a structure for an example of one tag ? I try like in attachement, but question is , if it a good idea ?
Last updated: 2024-09-08

Post by domebruce on Which database to use? CODESYS Forge talk (Post)
We have developed a similar application few years ago with .Net and MS Sql Server. The database has about 30 tables, the more bigger tables have 2 or 3 thousands records. We can have multiple threads accessing at the same time to the DB. To garantie the data integrity we need to manage data locks and transactions. Thanks
Last updated: 2025-03-04

Post by felixal on Codesys automatic Data transfer to USB on rasberry pi CODESYS Forge talk (Post)
Hi all, I am currently working on a project where I need to save data automatically on many diffrent USB-Sticks, which are always plugged in the same USB-Port on a Rasberry PI, but I do not get how I can automatically detect the USB devices Folder Name and save a file there on Linux. Thanks!
Last updated: 2024-01-03

Post by adarsh on CAN Tags in Writing in PLC Error. CODESYS Forge talk (Post)
Hi Folks, I have CAN Device Connected so I am able to read and write data at J1939 Manager. But unable to write the data from the PLC. Geeting the Following error while Writing from the Ladder Logic Diagram. Error:NO Valid Assignment Target How we can Rsolve this Problem
Last updated: 2024-04-02

Post by fjgonzalez on Timer On Vijeo CODESYS Forge talk (Post)
Hi. I'm trying to show in Vijeo Designer a timer countdown. But I want to display the data in hour, minutes and seconds. I tried to change the data by converting in the Machine Expert but not able to succeed. Can you help me to find a solution? Regards, FG
Last updated: 2024-05-07

Post by kuegerls on SysProcessExecuteCommand2 and CANopen Device CODESYS Forge talk (Post)
I have now conducted some tests. The problem occurs when the Python script establishes an OPCUA connection, even if I only establish the connection without reading or writing any data. Is there another way to exchange data between Python and CODESYS without having to put in a lot of effort?
Last updated: 2024-06-24

Post by pernockham on Pointer/reference to Codesys trend recording object? CODESYS Forge talk (Post)
I have a Hmi that acts as an interface for many (mostly identical) units. This is managed by a sort of "mux" where you select which unit that should be presented on the HMI. Backbone is solved by a HMI-gvl defined as reference/pointer to "unit-data", which then can be set to the individual units. While this works for most data I still have not sorted how to solve this for the trend recordings. One solution would be to have already "mux:ed" data values as source for the/one trend. However then the trend would contain data from different units/sources which could/will cause confusion. If its possible to "clear" this can be mitigated. Possibly let the trend have its own "mux-selector" (ie, the hmi are focusing on unit#3 however trend data is locked on unit#5), that could also work.. Or, let each unit have its own trend recording, which is focused if the unit is "selected". Can I reach the trend recording objects programmatically (those defined in the device tree)? Ie, can I use a "reference/pointer to these trend recording objects"? There is a field "data source" in the trend properties dialog which seems to resemble what Im looking for? But Im not sure if I can use it in some way, I cannot change anything in this field it only says <local application="">. </local>
Last updated: 2025-09-16

Post by mainak on Opaque NodeId in the OPC UA server CODESYS Forge talk (Post)
Hello all, I am using the OPC UA server with my custom information model. I have used the communication manager to add my information model under my application and created instances from OPC UA types. I see that the created instances in the OPC UA server has some opaque nodeid (attached screenshot) and I want to change that. Therefore I have the following questions: 1. Is there a way to configure the NodeIds of instances in the OPC UA server? I tried to edit it using the UaExpert client but got error "BadNotWriteable". is it possible to configure it somewhere so that the nodeids can be changed using an external client? 2. Is there a way to define the rule for creating instance nodeids within the codesys IDE? 3. Is it possible to create the instances before e.g. using a modelling tool like UaModeler and import them as part of the information model and use them later? Using the communication manager, I can only create instances from types. I couldn't find a way to map my existing instances to plc tags from my application. It would be nice if someone could help me with these issues. Thanks in advance. :)
Last updated: 2024-10-19

Post by struccc on The future and proper use of CAA.BOLT, CAA.SEMA,.. CODESYS Forge talk (Post)
Dear All, Dear CODESYS, I'm curiously following CODESYS transitioning away from the CAA libraries, and I'm mostly in favor of these major changes. Naturally, I'd like to align my current (not end-user) developments accordingly. I'm tracking , reading release notes, ... And want to figure out the future :) Is it possible to hear / read more about the reasons, objectives and scope of these changes? One important element is CAA Types - CAA Types Extern. What is the plan with that? What's the future of CAA.SEMA, CAA.BOLT ? I have never used them (always relied on SysLib*), but they are tempting... Would be useful to have a platform independent "Macro" for this functionality... Is there something in existing or planned ? Are they suitable to be used in low level libraries... For Example IO-Drivers, Components, "to-become system libraries"? CAA.TaskLock, CAA.TaskUnlock ? Well, they don't claim platform independency, so I can't rely on those.... Any up-to-date advise, standard, pattern to follow in new libraries for task and resource locking? Practical set of conditional defines to be used? If this information is not publicly available, can you please send a private message about the proper way to achieve this? I have support agreement, just couldn't get trough with these questions... P.
Last updated: 2025-03-14

Post by nikgind on Codesys Communication Manger - Required information model version exists in the model repository but is not found CODESYS Forge talk (Post)
Hi I am trying to import a custom information model that I created using UA Modeler. I have only added two new methods and two new object types. It is possible to add the information model to the Communication Manager and the two new object types are shown in the Information Model tab. After compiling i get the following error: Communication Manager [Device: PLC Logic: Application]: The information model http://opcfoundation.org/UA/ is required by http://yourorganisation.org/Bsp_3.1/ with a minimal publication date from 15.12.2023 but the device has only a model from 15.09.2021 installed. Probably the information model from 15.09.2021 is missing in the information model repository. The error message does not make sense to me. Should it not be “Probably the information model from 15/12/2023 is missing in the information model repository”? Anyway I have installed the information model from 15/12/2023 but not from 15/09/2021. Which makes the error message even stranger.
Last updated: 2024-06-09

Post by r-niedermayer on OPC UA subscriber not operational CODESYS Forge talk (Post)
Hi. As far as projects in "old version"s are concerned, these can be upgraded to newer versions at any time. To do this, the device must be updated accordingly and the copilers and library versions must be adapted. You can find instructions on how to proceed in the online help/FAQ: https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_changing_compiler_version.html https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_cmd_update_device.html See also 4.3.22.4 "How to open an Example Project" within the following pdf for more details on the single steps: https://forge.codesys.com/lib/counit/tickets/_discuss/thread/3e991befbc/ca97/attachment/Public%20FAQ-v13-20240610_075228.pdf Regaring your OPCUA connection state always showing just "DISABLED", without knowing both sides of the assembly in detail, one can only approach the problem theoretically. We can give a chekclist on how to proceed: Fist, please recheck the communication settings in the OPC UA connection function block to ensure that the server URL, endpoint URL, and other settings are correct and match the configuration of the OPC UA server. Verify that the OPC UA server is running and accessible. -You can try to connect to the OPC UA server using a separate client, such as UAExpert, to ensure that the issue is not related to the OPC UA server itself. Test the security settings in the OPC UA connection function block to ensure that the correct security policy and certificate are selected. If you are using a dynamic connection to the OPC UA server, probe that the connection settings are correctly configured and that the OPC UA client is able to establish a connection to the OPC UA server. Also, please loock into the log files for any errors related to the OPC UA connection function block, these should be listet there. The log files may also provide additional information about the issue and help you to further troubleshoot the problem. FYI - Please see https://content.helpme-codesys.com/en/CODESYS%20Communication/_cds_obj_data_source_communication_opc_ua_server.html: Her you can finde the Communication settings via OPC UA Server -> layout Browse Live Server: The client connects to the server and detects the existing variables and types. From Information Model The client reads the data structure (layout) of the OPC UA Server from the information model set here and as a result receives the information about available variables and types. A connection to the server is not required. The list contains the information models installed in the OPC UA Information Model Repository. "Read Connection" Settings from IEC Variable (option set): - The connection settings used by the device are not read here from the dialog, but at runtime from the IEC variable specified here. - For this possibility, please see the Using a Dynamic Connection to an OPC UA Server (https://content.helpme-codesys.com/en/CODESYS%20Communication/_comm_use_dynamic_opc_ua_server_comm_settings.html) The settings for the communication of a Client-data source to an OPC UA Server can also be dynamically configured from the IEC code and can also be changed at runtime. For such a purpose, a structure is available in the DatasourceOpcUAServer library (For a description of the OPC UA Server, there is one included in the standard installation of CODESYS, https://content.helpme-codesys.com/en/CODESYS%20Communication/_cds_encrypt_communication_data_sources_opc_ua_client.html)
Last updated: 2024-11-04

Post by mariapaola on Port instantiation of serial interface in WAGO PLC using Modb_L05.lib in CoDeSys v2.3 CODESYS Forge talk (Post)
Hi, Would really appreciate your insights in this issue I have. I am currently using a WAGO 750-881 with multiple IO devices. For one of them I already occupied the MODBUS Master configuration tool so I cannot overwrite it for my other devices. I have a total of two serial interfaces WAGO 750-652. The first one is instantiated in COM2 and doesn't need any protocol since the information comes in an specific formatting that need little code to differentiate between needed info. This one is working just fine. The second one is where I have an issue. I have tried to instantiate the port using MODBUS library modb_L05.lib to properly receive the data from an ARDUINO and I am absolutely unable to open the port: Signal DEVICE2.fbModbus.MODBUS_EXT_MASTER.Interface.Com_Port_Ist_Offen is never TRUE, among with all other signals from that interface, while signal DEVICE1.COM2.Com_Port_Ist_Offen is TRUE, and the other signals also read as TRUE or FALSE. I have tried instantiating the second one as the first one, changing COM3 to COM4, I've tried a lot of things but it wont ever open the channel. I don't know if you have any recommendations for me. For both physical modules, both witness LEDs A and E are on. First one is instantiated like this: PROGRAM DEVICE1 VAR wBaudRate : WORD := BAUD_9600; bDataBits : BYTE := 8; bParity : BYTE := 0; bFlowControl : BYTE := 3; (RS422 FullDuplex with continous send) i : INT; COM2 : SERIAL_INTERFACE; xOpenPort2 : BOOL := TRUE; ( Flag to open the Port ) xInitPort2 : BOOL; ( Flag to initiallize the Port ) ReceiveBuffer2 : typRing_Buffer; END_VAR COM2( bCOM_PORT_NR := 2, cbBAUDRATE := wBaudRate, cbsBYTESIZE := bDataBits, cpPARITY := bParity, csSTOPBITS := STOPBITS_1, cfFLOW_CONTROL := bFlowControl, utRECEIVE_BUFFER := ReceiveBuffer2, ptSEND_BUFFER := ADR(SendString2), xINIT := xInitPort2, xOPEN_COM_PORT := xOpenPort2, iBYTES_TO_SEND := LEN(SendString2)+1, xSTART_SEND := xSendActive2 ); Second one like this: PROGRAM DEVICE2 VAR COM4 : SERIAL_INTERFACE; xInitPort4 : BOOL := TRUE; xOpenPort4 : BOOL := TRUE; ReceiveBuffer4 : typRing_Buffer; fbModbus : MODBUS_EXTENDED_MASTER_RTU; fbError : enumMB_ERROR; stQuery : typModbusExtendedQuery; stResponse : typModbusResponse; au16Data : ARRAY[0..14] OF WORD; i : INT; tPoll : TON; END_VAR COM4( bCOM_PORT_NR := 4, cbBAUDRATE := BAUD_9600, cbsBYTESIZE := 8, cpPARITY := 0, csSTOPBITS := STOPBITS_1, cfFLOW_CONTROL := 2, ( RS-485 half-duplex ) utRECEIVE_BUFFER := ReceiveBuffer4, xINIT := xInitPort4, xOPEN_COM_PORT := xOpenPort4, xSTART_SEND := xSendActive4, ); stQuery.SlaveAddress := 1; stQuery.FunctionCode := 3; stQuery.Read_StartAddress := 0; stQuery.Read_Quantity := 15; (Poll code) fbModbus( ENABLE := TRUE, bCOM_PORT := 4, ( COM4=> 750-652 port ) cbCOM_BAUDRATE := BAUD_9600, cpCOM_PARITY := 0, csCOM_STOPBITS := 1, cbsCOM_BYTESIZE := 8, cfCOM_FLOW_CONTROL := 2, TimeOut := T#500ms, StartFunction := xStart, ExtQuery := stQuery, Response := stResponse, MB_Error => fbError ); FOR i := 0 TO 14 DO au16Data[i] := stResponse.Data[i]; END_FOR;
Last updated: 2025-11-28

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 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 timo on String nach erlaubten/unerlaubten Zeichen durchsuchen CODESYS Forge talk (Post)
Hallo, Ich bastele gerade an einer möglichst einfachen Möglichkeit mit der ich prüfen kann ob ein String Sonderzeichen enthält. Mein Ansatz ist ein ST FB mit einer Case Schrittkette. Ich vergleiche jedes Zeichen des Strings mit allen Zeichen eines vorher definierten Strings erlaubter Zeichen, der A-Z, a-z und 0-9 enthält und ggf angepasst werden kann, wenn ich weitere Zeichen erlaube. Leider wird meine j Zählervariable nicht richtig ausgeführt. Hat da jemand eine Idee? Oder gibt es eine einfachere Lösung/einen fertigen FB den ich mir anschauen kann? FUNCTION_BLOCK Sonderzeichen_Check VAR_INPUT inputString : STRING; // Zu prüfender String startCheck : BOOL; // Startsignal END_VAR VAR_OUTPUT ok : BOOL; // TRUE, wenn keine ungültigen Zeichen END_VAR VAR i : INT := 1; // Input-String Zähler j : INT := 1; // erlaubte Zeichen Zähler allowedChars: STRING := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; // Erlaubte Zeichen currentChar : STRING[1]; // Aktuelles Zeichen step : INT := 0; // Schritt END_VAR CASE step OF 0: // Warten auf Start IF startCheck THEN step := 10; END_IF 10: // Initialisierungen i := 1; j := 1; ok := TRUE; // Standard: ok step := 20; 20: // Durchgehen des Eingangs-Strings IF i <= LEN(inputString) THEN currentChar := MID(inputString, i, 1); // Aktuelles Zeichen step := 30; ELSE step := 70; // Alle Zeichen ok END_IF 30: // Durchgehen der erlaubten Zeichen IF j <= LEN(allowedChars) THEN step := 40; // Zu Schritt 40 ELSE step := 60; // Ungültiges Zeichen END_IF 40: // Vergleich IF currentChar = MID(allowedChars, j, 1) THEN i := i + 1; // Nächstes Zeichen im Input step := 20; ELSE j := j + 1; // Nächstes erlaubtes Zeichen step := 30; END_IF 60: // Ungültiges Zeichen ok := FALSE; // Setze auf FALSE step := 0; 70: // Alle Zeichen ok step := 0; END_CASE
Last updated: 2025-01-20

Post by timvh on Get Alarm status in Codesys CODESYS Forge talk (Post)
You are right, that you can use the GetState method, but it is not that simple. You first have to get a list of (filtered) alarms from the AlarmManager. You can find an example in Forge how to do this. See https://forge.codesys.com/prj/codesys-example/alarm-manager/home/Home/ Then you can go through this list to get the state of all the (filtered) alarms. See below the code which you could use. This is all based on the example from forge. Create a program: // This example shows how to access alarms via structured text. PROGRAM PLC_PRG VAR xInit : BOOL := TRUE; udiResult : UDINT; fbAlarmFilterCriteriaAll : FB_AlarmFilterCriteriaAll; fbAlarmManagerClient : FB_AlarmManagerClient; itfAlarmManagerClient : IAlarmManagerClient := fbAlarmManagerClient; xAlarm1 : BOOL; xAlarm2 : BOOL; xWarning : BOOL; iNrOfAlarmsInAlarmList : INT; iNrOfActiveAlarmsInAlarmList : INT; paitfAlarm: POINTER TO ARRAY [0..0] OF AlarmManager.IAlarm; iAlarmIndex : INT; eAlarmState: AlarmManager.AlarmState; END_VAR IF xInit THEN xInit := FALSE; fbAlarmManagerClient.itfAlarmFilterCriteria := fbAlarmFilterCriteriaAll; // register alarm client to get updated about alarm status / changes udiResult := AlarmManager.g_AlarmHandler.RegisterClient(itfAlarmManagerClient, 0, 0); END_IF // Polling the number of alarms udiResult := AlarmManager.g_AlarmHandler.GetActiveAlarms(itfAlarmManagerClient, parritfActiveAlarms => paitfAlarm, iCountActiveAlarms => iNrOfAlarmsInAlarmList); iAlarmIndex := 0; iNrOfActiveAlarmsInAlarmList := 0; WHILE iAlarmIndex < iNrOfAlarmsInAlarmList DO eAlarmState := paitfAlarm^[iAlarmIndex].GetState(); IF eAlarmState = AlarmManager.AlarmState.Active OR eAlarmState = AlarmManager.AlarmState.ActiveAcknowledged THEN iNrOfActiveAlarmsInAlarmList := iNrOfActiveAlarmsInAlarmList + 1; END_IF iAlarmIndex := iAlarmIndex + 1; END_WHILE See below some details about the function blocks: One function block should implement the IAlarmFilterCriteria interface. This can be empty except a few methods. FUNCTION_BLOCK FB_AlarmFilterCriteriaAll IMPLEMENTS AlarmManager.IAlarmFilterCriteria Method implementation (others related to interface are empty) METHOD AreAllAlarmClassesSelected : BOOL AreAllAlarmClassesSelected := TRUE; METHOD AreAllAlarmGroupsSelected : BOOL AreAllAlarmGroupsSelected := TRUE; METHOD GetPriorityFrom : USINT GetPriorityFrom := 0; METHOD GetPriorityTo : USINT GetPriorityTo := 255; The other function block should implement IAlarmManagerClient and get a reference to the FB which implements the IAlarmFilterCriteria FUNCTION_BLOCK FB_AlarmManagerClient IMPLEMENTS AlarmManager.IAlarmManagerClient VAR_INPUT itfAlarmFilterCriteria: AlarmManager.IAlarmFilterCriteria; END_VAR Method implementation (others related to the interface are empty) METHOD GetFilterCriteria : AlarmManager.IAlarmFilterCriteria // see VAR_INPUT for filter GetFilterCriteria := itfAlarmFilterCriteria; Off course you have to add the AlarmManager to your application and add some alarms to it.
Last updated: 2025-09-02

Post by r-niedermayer on C0564 Warning Message CODESYS Forge talk (Post)
Please see or Online Help on how to initialize variable before using them: https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_pragma_attribute_global_init_slot.html Regarding the Attribute global_init_slot: You can use this pragma to influence the order in which signatures are processed during global initialization. It can only be applied to signatures. By default, the initialization sequence for variables from global variable lists is undefined! However, if, for example, variables from one list depend on variables from another list, it is necessary to initialize one before the other. (Aee OLH and Syntax) The placeholder <slot> must be replaced by an integer value that defines the position in the initialization sequence.</slot> The default value is 50000. A lower value causes an earlier initialization! If several signatures have the same value for the 'global_init_slot' attribute, the order of their initialization remains undefined! Cautious application should therefore be considered! Example: The project contains f.e. two global variable lists GVL_1 and GVL_2. The global variable "A" is part of the global variable list GVL_1: {attribute 'global_init_slot' := '300'} VAR_GLOBAL A : INT:=1000; END_VAR The initialization values of the variables "B" and "C" of GVL_2 are dependent on the variable "A". {attribute 'global_init_slot' := '350'} VAR_GLOBAL B : INT:=A+1; C : INT:=A-1; END_VAR So if you set the 'global_init_slot' attribute of the global variable list GVL_1 to 300, i.e. to the lowest initialization value in the example, then it is ensured that the expression "A+1" is well-defined at the time of initialization of "B".
Last updated: 2024-01-30

Post by timo on Visualisierung: Tastatur vergrößern? CODESYS Forge talk (Post)
Hallo, Ich nutze den Stil White Style 3.5.16 mit ein paar farblichen Änderungen über den Stileditor. Was ich gerne machen würde, wäre die Tastaturen zu vergrößern, die sich auf dem Touchpanel öffnen wenn ein INT oder STRING eingegeben werden muss. Gibt es dafür "fertige" Variablen im Editor des Stils oder in Codesys selbst, mit dem die Größe hochskaliert werden kann? Oder muss ich jede Taste einzeln anpacken? Danke im Voraus :)
Last updated: 2025-02-21

Post by svn123 on In Simulation Mode, logic is not executing CODESYS Forge talk (Post)
Please check the attached snapshot. I am converting an int to real and storing in rVlv01_SV and then scaling the value using LIN_TRAFO. In the bottom Status Bar of Codesys, both RUN and SIMULATION are visible. When I enter value 100 as input to INT_TO_REAL instruction and press Ctrl-F7, the value can be seen at the input but the logic seems not to work. I searched for help but could not find anything relevant. What could be the reason. Codesys ver3.5.11 svn
Last updated: 2023-12-25

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

Showing results of 734

Sort by relevance or date