Tree [9bc435] /
 History

HTTPS access


File Date Author Commit
 examples 2020-02-17 i-campbell i-campbell [9bc435] Initial Commit
 .gitignore 2020-02-17 i-campbell i-campbell [9bc435] Initial Commit
 PlcOpenXmlLadderToAsciiLadder.py 2020-02-17 i-campbell i-campbell [9bc435] Initial Commit
 UNLICENSE 2020-02-17 i-campbell i-campbell [9bc435] Initial Commit
 readme.md 2020-02-17 i-campbell i-campbell [9bc435] Initial Commit

Read Me

This project is for the ASCII Art Ladder
It converts PLCOpenXML files of ladder POUs exported from CODESYS into a beautiful ASCII Art
It will initially use:
CODESYS Ladder Editor
CODESYS PLCOpenXML Export
CODESYS Scripting Engine / IronPython
Python XML
Some new ASCII Ladder format defined in this project

Step 1: User will create the ladder in CODESYS Ladder Editor.
User will compile the ladder without any errors.

Step 2: User will export just one single ladder routine to PLCOpenXML

Step 3: User will run the PLCOpenXMLLadderToASCIILADDER.py script, with the correct arguments

Step 4: The script will look for a declaration header as plain text and save this

Step 5: The script will read every subelement of <ld>.
Ones it can't understand will be put in an exceptions tag</ld>

Step 6: The script will arrange all of the ladder elements into rows and columns.
This new element array will also list branches in down / in up / out down / out up

Step 7: The script will write each row and column to a text file in ASCII Art Ladder format

Step 8: The script will list all truncated names, and complete all truncated EXECUTE blocks

Example File Output:

//This is a rung comment
(Also a
rung comment
)
(Mabe a nicer
* Way to do multiline comments
*)
(
supported features:
* 001 ‘Network’
* 002 ‘Box’
* 002 ‘Assignment’
* (003 FB, 003 FN) ‘Box with EN/ENO’
* 002 ‘Input’
* 005 ‘Label’
* 005 ‘Contact’
* 005 ‘Coil’
* 005 Negated Contant
* 006 Branches (note, branches always close!)
* 007 Set coil
* 007 Reset coil
* 008 short circuit evaluation (SCE) (Toggle Parallel Mode) (I dislike this enough I make you use extended ascii)
* 008 Negation (I dislike this enough I make you use extended ascii)
* 009 Jump
* 010 Return
* 011 Network Comment State
* 012 FBD/LD/IL Element ‘Execute’
* 013 Names are too long (abreviation section)
* I think that's everything actually.
)
(
Declaration Section:
* Exact copy of the declaration section, with some indentation
* Note any indentation that is the same for each line will be removed
)
{Declaration}
PROGRAM POU
VAR
END_VAR
{/Declaration}
( Abbreviation Section:
* Sure it can get confusing. Maybe later can alter it so not fixed width ladder
* For importing, it is OK to change the abbrevioations however you please
* Rules: Generally if too long:
* take first three letters and last three and add a ~0 through ~9
* If more than 10 have same first three and same last three, the 11th becomes ~~10
* If there is one or more points in the variable name, shorten the first three and but the point before the ~
*)
{Abbreviaitons}
Nam~0GHT := NameEIGHT;
Nam~1GHT := NameONE_HUNDRED_AND_EIGHT;
Nam~2GHT := NameI_CANT_WEIGHT;
F_C~0ate := F_Calculate;
FB.~0ate := FB_Timer.Calculate;
{/Abbreviations}
(
Execution Section:
* If the execution block is too big to fit,
* either width ways or column ways, write it's Execution here.
* Note any indentation that is the same for each line will be removed
*)
{Executions}
{~1}
thisvariable := actuallyToolong;
REsult := Function();
//I added a comment
//If line too long it gets truncated
// >6 line, ~ bottom right
IF TRUE THEN
DoSomethingCool;
END_IF;
{/~1}
{/Executions}
{Ladder}
001 ||. . . . . . ||
|| ||
||------------------------------------------------------------||
|| ||
002 ||. . . _ . ||
|| NameEIGH | F_Name | NameEIGH ||
||----] [------------------------Input_01|--------------( )---||
|| Variable==In_out01| ||
|| =InOut2 | ||
|| Variable--Input2 | ||
|| =InOut3 | ||
|| | Out01--Variable ||
|| | Out02--Variable ||
|| |_| ||
|| ||
003 ||. . . _
. ||
|| NameEIGH NameEIGH Instance--FB_Name8| NameEIGH ||
||----]
[-------] [--------------EN ENO---------------( )---||
|| -Input01 | ||
|| | Out01- ||
|| =In_out01| ||
|| =Inout2 | ||
|| |_| ||
|| ||
004 ||. . . _
. ||
|| NameEIGH | F_Name | NameEIGH ||
||----]
[------------------------EN ENO---------------( )---||
|| Variable--Input01 | ||
|| | Out01--Variable ||
|| Variable==In_out01| ||
|| Variable==Inout2 | ||
|| |__| ||
|| ||
005 ||. . . . . . ||
myLabel || NameEIGH NameEIGH NameEIGH ||
||----]
[-------]/[-------------------------------------( )---||
|| ||
006 ||. . . . . . ||
|| NameEIGH NameEIGH NameEIGH ||
||+---]
[--++---] [------------+------------------------( )---||
||| || | ||
||| || . | ||
|||NameEIGH||NameEIGH NameEIGH| ||
||+---]
[--++---] [-------]/[--+ ||
|| ||
007 ||. . . . . . ||
|| NameEIGH NameEIGH NameEIGH ||
||----------------------------------(R)-------(S)---+---(S)--+||
|| | |||
|| | |||
|| |NameEIGH|||
|| +---(R)--+||
|| ||
008 ||. . . . . . ||
|| NameEIGH ASCII181 NameEIGH ||
||----]
[---╬---] [--------------------------------╬----( )---||
|| ║ ║ ||
|| ║ . __ ║ ||
|| ║ASCII206 Instance--FB_Name8| ║ ||
|| ╬---]
[--------------EN ENO----------╬ ||
|| NegInVarø-Input01 | ||
|| | Out01-øASCII155 ||
|| =In_out01| ||
|| =Inout2 | ||
|| |__| ||
|| ||
009 ||. . . . . . ||
|| myLabel ||
||----------------------------------------------------<jump>--||
|| ||
010 ||. . . . . . ||
|| ||
||---------------------------------------------------<return>-||
|| ||
011 ||##. . . . . . ||
||## NameEIGH ||
||##----]</return></jump>
[--------------------------------------------<return>-||
||## ||
012 ||. . . ________ . ||
|| NameEIGH | Execute ~1 | ||
||----]</return>
[---------------EN ENO------------||
|| |thisvariable := actuallyT~| ||
|| |REsult := Function(); | ||
|| |//I added a comment | ||
|| |//If line too long it get~| ||
|| |// >6 line, ~ bottom right| ||
|| |IF TRUE THEN | ||
|| |____~| ||
|| ||
013 ||. . .
_____ . ||
|| FB.~0ate Nam~1GHT |F_C~0ate| Nam~2GHT ||
||----]
[---+---] [--------------EN ENO----------+----( )---||
|| | NegInVarø-Input01 | | ||
|| | | Out01-øASCII155| ||
|| | =In_out01| | ||
|| | =Inout2 | | ||
|| | |_| | ||
|| | . _
| ||
|| |Nam~0GHT Instance--FB_Timer| | ||
|| +---]
[--------------EN ENO----------+ ||
|| NegInVarø-Input01 | ||
|| | Out01-øASCII155 ||
|| =In_out01| ||
|| =Inout2 | ||
|| |_
| ||
|| ||
{/Ladder}