Demo stand: payments are not connected — 'unlock export' is free and just demonstrates the feature.
Array out of boundsliteral index outside the declared bounds
Infinite loopWHILE TRUE with no exit — watchdog
Division by zeroliteral /0 and MOD 0
CASE without ELSEunhandled selector values
gvl.* typosreferences to globals not declared in the GVL
Uncalled timersTON/TP/R_TRIG read, but the FB is never called
Unreachable branchesIF x<T … ELSIF x>=T … — dead ELSIF
Lost fractionsinteger division, REAL_TO_TIME/WORD truncation
Dead codePOUs that are never called
Magic numbersraw constants in logic without a name
Namingcryptic single-character names
CommentsPOUs with logic and not a single note
Copy-pastestructurally duplicated blocks and loops
Routine sizebloated POUs — candidates for decomposition
Self-assignmentx := x — typo/lost logic
Empty branchesforgotten logic in IFs/loops
Dead variablesdeclared but never used
Tidinessdouble ;; and other litter