threads / discuss / 38837

Git with Lader logic

Subject: Git with Lader logic

## tl;dr

10 messages between Mar 17, 2015 and Mar 27, 2015.

replies: 9people: 6as markdown or json

Bharat Suvarna· Mar 17, 2015, 23:33 UTC · lore
Hi 
I am trying to find a way of using version control on PLC programmers like Allen Bradley PLC. I can't find a way of this.
Could you please give me an idea if it will work with Plc programs. Which are basically Ladder logic.
Sent from my iPad
Kevin D· Mar 18, 2015, 11:29 UTC · re: Bharat Suvarna · lore

Re: Git with Lader logic

On Tue, Mar 17, 2015 at 11:33:54PM +0000, Bharat Suvarna wrote:
Show 6 quoted lines
> Hi 
> 
> I am trying to find a way of using version control on PLC programmers like Allen Bradley PLC. I can't find a way of this.
> 
> Could you please give me an idea if it will work with Plc programs. Which are basically Ladder logic.
> 

I'm not familiar with these programs, so I can't give you specific advice about this.

Although git is not very picky about the contents, it is optimized to track text files. Things like showing diffs and merging files only works on text files.

Git can track binary files, but there are some disadvantages:
- Diff / merge doesn't work well
- Compression is often difficult, so the repository size may grow
  depending on the size of the things stored

These disadvantages are not limited to only git, other SCM systems also have to deal with these problems.

So if the Ladder logic is represented as text source, there is no problem with it. If it'sbinary, there might be other sollutions better suited.

Kevin
Randall S. Becker· Mar 18, 2015, 19:53 UTC · re: Bharat Suvarna · lore

RE: Git with Lader logic

On March 17, 2015 7:34 PM, Bharat Suvarna wrote:
> I am trying to find a way of using version control on PLC programmers like
Allen
> Bradley PLC. I can't find a way of this.
> 
> Could you please give me an idea if it will work with Plc programs. Which
are
> basically Ladder logic.

Many PLC programs either store their project code in XML, L5K or L5X (for example), TXT, CSV, or some other text format or can import and export to text forms. If you have a directory structure that represents your project, and the file formats have reasonable line separators so that diffs can be done easily, git very likely would work out for you. You do not have to have the local .git repository in the same directory as your working area if your tool has issues with that or .gitignore. You may want to use a GUI client to manage your local repository and handle the commit/push/pull/merge/rebase functions as I expect whatever PLC system you are using does not have git built-in.

To store binary PLC data natively, which some tools use, I expect that those who are better at git-conjuring than I, could provide guidance on how to automate binary diffs for your tool's particular file format.

Cheers, Randall -- Brief whoami: NonStop&UNIX developer since approximately UNIX(421664400)/NonStop(211288444200000000) -- In my real life, I talk too much.

Doug Kelly· Mar 18, 2015, 22:28 UTC · re: Randall S. Becker · lore

Re: Git with Lader logic

On Wed, Mar 18, 2015 at 2:53 PM, Randall S. Becker <rsbecker@nexbridge.com> wrote:

Show 23 quoted lines
> On March 17, 2015 7:34 PM, Bharat Suvarna wrote:
>> I am trying to find a way of using version control on PLC programmers like
> Allen
>> Bradley PLC. I can't find a way of this.
>>
>> Could you please give me an idea if it will work with Plc programs. Which
> are
>> basically Ladder logic.
>
> Many PLC programs either store their project code in XML, L5K or L5X (for
> example), TXT, CSV, or some other text format or can import and export to
> text forms. If you have a directory structure that represents your project,
> and the file formats have reasonable line separators so that diffs can be
> done easily, git very likely would work out for you. You do not have to have
> the local .git repository in the same directory as your working area if your
> tool has issues with that or .gitignore. You may want to use a GUI client to
> manage your local repository and handle the commit/push/pull/merge/rebase
> functions as I expect whatever PLC system you are using does not have git
> built-in.
>
> To store binary PLC data natively, which some tools use, I expect that those
> who are better at git-conjuring than I, could provide guidance on how to
> automate binary diffs for your tool's particular file format.

The one thing I find interesting about RSLogix in general (caveat: I only have very limited experience with RSLogix 500 / 5000; if I do anything nowadays, it's in the micro series using RSLogix Micro Starter Lite)... they do have some limited notion of version control inside the application itself, though it seems rudimentary to me. This could prove to be helpful or extremely annoying, since even when I connect to a PLC and go online, just to reset the RTC, it still prompts me to save again (even though nothing changed, other than the processor state).

You may also find this link on stackexchange helpful: http://programmers.stackexchange.com/questions/102487/are-there-realistic-useful-solutions-for-source-control-for-ladder-logic-program

As Randall noted, L5K is just text, and RSLogix 5000 uses it, according to this post. It may work okay.

--Doug
Randall S. Becker· Mar 18, 2015, 22:38 UTC · re: Doug Kelly · lore

RE: Git with Lader logic

On March 18, 2015 6:29 PM Doug Kelly wrote:
Show 44 quoted lines
> On Wed, Mar 18, 2015 at 2:53 PM, Randall S. Becker
> <rsbecker@nexbridge.com> wrote:
> > On March 17, 2015 7:34 PM, Bharat Suvarna wrote:
> >> I am trying to find a way of using version control on PLC programmers
> >> like
> > Allen
> >> Bradley PLC. I can't find a way of this.
> >>
> >> Could you please give me an idea if it will work with Plc programs.
> >> Which
> > are
> >> basically Ladder logic.
> >
> > Many PLC programs either store their project code in XML, L5K or L5X
> > (for example), TXT, CSV, or some other text format or can import and
> > export to text forms. If you have a directory structure that
> > represents your project, and the file formats have reasonable line
> > separators so that diffs can be done easily, git very likely would
> > work out for you. You do not have to have the local .git repository in
> > the same directory as your working area if your tool has issues with
> > that or .gitignore. You may want to use a GUI client to manage your
> > local repository and handle the commit/push/pull/merge/rebase
> > functions as I expect whatever PLC system you are using does not have git
> built-in.
> >
> > To store binary PLC data natively, which some tools use, I expect that
> > those who are better at git-conjuring than I, could provide guidance
> > on how to automate binary diffs for your tool's particular file format.
> 
> The one thing I find interesting about RSLogix in general (caveat: I only have
> very limited experience with RSLogix 500 / 5000; if I do anything nowadays, it's
> in the micro series using RSLogix Micro Starter Lite)... they do have some
> limited notion of version control inside the application itself, though it seems
> rudimentary to me.
> This could prove to be helpful or extremely annoying, since even when I
> connect to a PLC and go online, just to reset the RTC, it still prompts me to save
> again (even though nothing changed, other than the processor state).
> 
> You may also find this link on stackexchange helpful:
> http://programmers.stackexchange.com/questions/102487/are-there-
> realistic-useful-solutions-for-source-control-for-ladder-logic-program
> 
> As Randall noted, L5K is just text, and RSLogix 5000 uses it, according to this
> post.  It may work okay.
A really good reason to use git instead of some other systems is that new versions of files are determined by SHA signatures (real differences) rather than straight timestamps. So saving a file that has not changed will not force a new version - unlike some systems that shall remain nameless.
Bharat Suvarna· Mar 19, 2015, 07:14 UTC · re: Doug Kelly · lore

Re: Git with Lader logic

Thanks all .. I will have a look. But could I just set this up on my laptop and checking this works on system first before installing one of Git on server
Sent from my iPhone
Show 45 quoted lines
> On 18 Mar 2015, at 22:28, Doug Kelly <dougk.ff7@gmail.com> wrote:
> 
> On Wed, Mar 18, 2015 at 2:53 PM, Randall S. Becker
> <rsbecker@nexbridge.com> wrote:
>> On March 17, 2015 7:34 PM, Bharat Suvarna wrote:
>>> I am trying to find a way of using version control on PLC programmers like
>> Allen
>>> Bradley PLC. I can't find a way of this.
>>> 
>>> Could you please give me an idea if it will work with Plc programs. Which
>> are
>>> basically Ladder logic.
>> 
>> Many PLC programs either store their project code in XML, L5K or L5X (for
>> example), TXT, CSV, or some other text format or can import and export to
>> text forms. If you have a directory structure that represents your project,
>> and the file formats have reasonable line separators so that diffs can be
>> done easily, git very likely would work out for you. You do not have to have
>> the local .git repository in the same directory as your working area if your
>> tool has issues with that or .gitignore. You may want to use a GUI client to
>> manage your local repository and handle the commit/push/pull/merge/rebase
>> functions as I expect whatever PLC system you are using does not have git
>> built-in.
>> 
>> To store binary PLC data natively, which some tools use, I expect that those
>> who are better at git-conjuring than I, could provide guidance on how to
>> automate binary diffs for your tool's particular file format.
> 
> The one thing I find interesting about RSLogix in general (caveat: I
> only have very limited experience with RSLogix 500 / 5000; if I do
> anything nowadays, it's in the micro series using RSLogix Micro
> Starter Lite)... they do have some limited notion of version control
> inside the application itself, though it seems rudimentary to me.
> This could prove to be helpful or extremely annoying, since even when
> I connect to a PLC and go online, just to reset the RTC, it still
> prompts me to save again (even though nothing changed, other than the
> processor state).
> 
> You may also find this link on stackexchange helpful:
> http://programmers.stackexchange.com/questions/102487/are-there-realistic-useful-solutions-for-source-control-for-ladder-logic-program
> 
> As Randall noted, L5K is just text, and RSLogix 5000 uses it,
> according to this post.  It may work okay.
> 
> --Doug
Kevin D· Mar 19, 2015, 21:17 UTC · re: Bharat Suvarna · lore

Re: Git with Lader logic

On Thu, Mar 19, 2015 at 07:14:52AM +0000, Bharat Suvarna wrote:
> Thanks all .. I will have a look. But could I just set this up on my laptop and checking this works on system first before installing one of Git on server
> 

Sure, that's no problem. Git happily runs just locally on your own machine and does not depend on a server.

Martin Pettersson· Mar 27, 2015, 15:09 UTC · re: Bharat Suvarna · lore

Re: Git with Lader logic

Bharat Suvarna <bharat.bs84 <at> icloud.com> writes:
> 
> Hi 
> 
> I am trying to find a way of using version control on 

PLC programmers like Allen Bradley PLC. I can't find a way

> of this.
> 
> Could you please give me an idea if it will work with 

Plc programs. Which are basically Ladder logic.

Show 7 quoted lines
> 
> Sent from my iPad--
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo <at> vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 
I use Git for versioning PLC program written for Beckhoff TwinCAT v2 that 
saves the files in binary format.  
You can probably do the same for most other systems as well.   
  
My way of doing it is... 
I have a batch file that starts TwinCAT including a file that tell Twincat to
open my PLC program and export it into a text based format. 
After that the script opens git gui and gitk.  
  
I have one script like this for each plc program. 
It is quite effcient, the whole procedure only takes a double click and 
less than 10 seconds and you have git gui up and you can see your 
changes in pure text, commit and push.   
I commit both the exported text files and the binary  because the binary
is the one I edit.   
This has been working very well for many years....
  
Take care   
Martin
Junio C Hamano· Mar 27, 2015, 15:39 UTC · re: Martin Pettersson · lore

Re: Git with Lader logic

Martin Pettersson <martin@siamect.com> writes:
Show 16 quoted lines
> I use Git for versioning PLC program written for Beckhoff TwinCAT v2 that 
> saves the files in binary format.  
> You can probably do the same for most other systems as well.   
>   
> My way of doing it is... 
> I have a batch file that starts TwinCAT including a file that tell Twincat to
> open my PLC program and export it into a text based format. 
> After that the script opens git gui and gitk.  
>   
> I have one script like this for each plc program. 
> It is quite effcient, the whole procedure only takes a double click and 
> less than 10 seconds and you have git gui up and you can see your 
> changes in pure text, commit and push.   
> I commit both the exported text files and the binary  because the binary
> is the one I edit.   
> This has been working very well for many years....
Let me check if I got your scheme correctly.
 - You need to track PLC program files, whose native format is
   binary and is not very amenable to textual processing like diff
   and merge
 - But you can tell TwinCat to export that binary file to text (and
   presumably you can tell TwinCat to read that exported text file),
   and the text format is human-readable.
 - You use a script that calls TwinCat to export the binary into
   text as a clean filter, and what is checked into Git is the
   exported text representation.
 - You use another script that calls TwinCat to convert the exported
   text back to the binary as a smudge filter, and what is checked
   out to the working tree is the native binary format file.

Is that what is going on? I can imagine how that arrangement would work (after all, that is how clean/smudge filters are designed to be used).

Thanks.
Martin Pettersson· Mar 27, 2015, 16:32 UTC · re: Junio C Hamano · lore

Re: Git with Lader logic

Junio C Hamano <gitster <at> pobox.com> writes:
Show 45 quoted lines
> 
> Martin Pettersson <martin <at> siamect.com> writes:
> 
> > I use Git for versioning PLC program written for Beckhoff TwinCAT v2 that 
> > saves the files in binary format.  
> > You can probably do the same for most other systems as well.   
> >   
> > My way of doing it is... 
> > I have a batch file that starts TwinCAT including a file that tell Twincat to
> > open my PLC program and export it into a text based format. 
> > After that the script opens git gui and gitk.  
> >   
> > I have one script like this for each plc program. 
> > It is quite effcient, the whole procedure only takes a double click and 
> > less than 10 seconds and you have git gui up and you can see your 
> > changes in pure text, commit and push.   
> > I commit both the exported text files and the binary  because the binary
> > is the one I edit.   
> > This has been working very well for many years....
> 
> Let me check if I got your scheme correctly.
> 
>  - You need to track PLC program files, whose native format is
>    binary and is not very amenable to textual processing like diff
>    and merge
> 
>  - But you can tell TwinCat to export that binary file to text (and
>    presumably you can tell TwinCat to read that exported text file),
>    and the text format is human-readable.
> 
>  - You use a script that calls TwinCat to export the binary into
>    text as a clean filter, and what is checked into Git is the
>    exported text representation.
> 
>  - You use another script that calls TwinCat to convert the exported
>    text back to the binary as a smudge filter, and what is checked
>    out to the working tree is the native binary format file.
> 
> Is that what is going on?  I can imagine how that arrangement would
> work (after all, that is how clean/smudge filters are designed to be
> used).
> 
> Thanks.
> 
> 

Well you got it right, but I "almost" never convert the exported textfiles back into TwinCat.

The exported textfiles is not really suitable
for merging as they have a proprietary format, 
but they are human readable and it helps a lot 
to be able to see what changes I made at a certain commit.  
  
I do commit both the exported text files and the original binary files.
Recreating the binary by imprting the textfiles can be done.
I just don't do it because it is easier to commit the binary at 
the same time when I commit the exported text files. 
That way I can just checkout any version and rebuild the project 
and  reload it in the machine. 

My script is just a batch file that I double click on. It is not using any of the hooks that git comes with.

Here is an example, I hope it keeps the formatting  (windows batch file):

Set WorkingFolder="C:\Documents and Settings\Me\projectname\Beckhoff" Set CommandFile="do_.cmd" Set TwinCatFile="plc_program_name.prx" Set ExportFile="exports\intermediate_plate.exp" Set ExportFolder="exports\modules"

cd %WorkingFolder%

echo project expmul %ExportFolder% > %CommandFile% echo project export %ExportFile% >> %CommandFile% echo file quit >> %CommandFile%

del /f /q %ExportFile% del /f /q %ExportFolder%\*.* C:\TwinCAT\Plc\TCatPlcCtrl.exe %TwinCatFile% /cmd %CommandFile% del /f %CommandFile%

call git gui & call gitk --all &

Take care Martin

← back to recent threads