--- a +++ b/readme.md @@ -0,0 +1,207 @@ +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 + +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>-|| + ||## || +012 ||. . . __________________________ . || + || NameEIGH | Execute ~1 | || + ||----] [---------------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} \ No newline at end of file