Fertig gibt's da soweit mir bekannt ist gar nichts.
Bei uns läuft das so: Bausteine werden (naturgemäß) in der am häufigsten eingesetzen Software geschrieben und gepflegt(in Deutschland oft S7). Bei Bedarf wird in die beiden anderen Versionen übersetzt. FB in S7 wird zu einer AOI in Rockwell. Beim Programmieren nach Möglichkeit den kleinsten gemeinsamen Nenner suchen, 8 BOOLs und dann ein INT/DINT/REAL-Array kommt in Rockwell als UDT nicht gut (zumindest bei Kommunikation mit Fremdsystemen über Profibus und dergleichen), wenn man da beim Erstellen des FB's bereits darauf achtet ist die "Übersetzung" nicht mehr so tragisch. Manche Sachen kann man evtl. über suchen und Ersetzen anpassen (z.B. Timer.Q durch Timer.DN ersetzen), manche Sachen gehen nicht (z.B. Konstante in CASE Abfrage oder Pointer), da muss man eine andere Lösung finden. Da findet sich aber oft auch eine Lösung, statt z.B. im Baustein per Pointer auf eine Profibus Ausgangsadresse zwei INTs zu schreiben kann man diese auch als Ausgang an den FB legen, dann wird der eben außerhalb des Bausteins auf die Profibus Adresse gegeben. auch eine Struct aus ein paar BOOL-Arrays und beschreiben in einer Schleife kann manchmal besser als Array einer BOOL-Struct gehandhabt werden. Strings sind auch ein Klassiker für Handarbeit (auch wieder bei Kommunikation mit Fremdsystemen), 3S definiert die Länge mit 0 auf dem ersten freien Buchstaben, der String hat benötigt maximale Stringlänge + 1 Byte als Daten, Siemens benötigt maximale Striglänge + 2 Bytes (max-Länge + tatsächliche Länge), Rockwell benötigt Stringlänge + 4 Bytes (tatsächliche Länge als DINT).
Hardware Besonderheiten müssen sowieso von Hand betrachtet werden, so geht ein Baustein in S7 vielleicht davon aus, dass nach Spannungsausfall die Lokalvariablen erst mal 0 sind, bei Rockwell behalten sie ihren Wert auch bei Spannungsausfall und müssen dann in der AOI im ersten Zyklus auf 0 gesetzt werden (anders herum natürlich eine ähnliche Problematik).
Zusammenfassend kann ich nur sagen: Automatische Übersetzung nur mit Nacharbeit von Hand, Pflege muss so aussehen dass Codeänderung in der einen Software dokumentiert werden muss (welche Zeilen in welcher Version warum geändert), dann können die Änderungen (von Hand) in die andere Software übernommen werden.