Split String — Codesys

Fast, handles arrays automatically. Cons: Requires specific libraries that might not be on every legacy PLC. Method 2: Manual Loop Parsing (Universal) If you cannot guarantee the SysStr library exists on your target (e.g., older Wago, Beckhoff CX, or embedded CODESYS), you need the manual method.

Save the manual Function Block in your global library. You will use it in almost every project that involves HMIs, barcode scanners, or serial communication. Have a specific parsing challenge? Leave a comment below or check out the CODESYS Forums for SysStr troubleshooting.

Unlike high-level languages like Python or C# (which have built-in .split() methods), CODESYS (IEC 61131-3) requires a bit more manual work. Here is how to do it effectively. If you search the CODESYS library for StringSplit , you won’t find a standard one. The standard library gives us FIND , MID , LEFT , RIGHT , LEN , and DELETE . We must combine these to parse our data. Method 1: The Workhorse StrSplit (Using SysStr) For advanced users, CODESYS includes the SysStr library (often part of the CAA Types Extern ). This library contains the function StrSplit . codesys split string

PROGRAM Main VAR sInput : STRING := "Temperature;Humidity;Pressure"; aOutput : ARRAY[1..3] OF STRING(25); iCount : DINT; iResult : DINT; END_VAR // Split the string using semicolon as delimiter iResult := StrSplit(sInput, ';', aOutput, SIZE_OF(aOutput), iCount); // iCount now equals 3 // aOutput[1] = "Temperature"

xDone := TRUE; END_IF

WHILE iCurrentPart <= 10 AND iStart <= LEN(sWork) DO iPos := FIND(sWork, sDelimiter, iStart); IF iPos > 0 THEN // Extract substring aParts[iCurrentPart] := MID(sWork, iPos - iStart, iStart); iStart := iPos + iDelimLen; iCurrentPart := iCurrentPart + 1; ELSE // Last part aParts[iCurrentPart] := MID(sWork, LEN(sWork) - iStart + 1, iStart); iPartCount := iCurrentPart; EXIT; END_IF END_WHILE

In industrial automation, we often deal with messy incoming data strings. Whether you are parsing a CSV line from a barcode reader, handling commands from a serial port (RS232/RS485), or extracting parameters from an MQTT message, you will eventually need to split a string . Fast, handles arrays automatically

// Reset trigger IF NOT xExecute THEN xDone := FALSE; xError := FALSE; END_IF