# TwinCAT externe LIB



## demon2000 (4 April 2011)

Hallo

ich hab folgendes Problem.
Ich bekomme einen AES-Verschlüsselten Stream über die RS232 Schnittstelle rein. Ich hab einen C-Code für die Entschlüsselung. Kann ich diesen C-Code irgend wie in TwinCAT einbinden z.B. über externe library??? Wenn ja wie wird das gemacht, muss der Quellcode Compiliert werden???Oder wie kann ich das realisieren


----------



## cybertracepda (4 April 2011)

Gib das Suchwort C-Code ein, dann findest du hier im Forum die Antwort.
Der Link wäre unvollständig, wenn ich ihn dir in die Antwort hier reinkopiere.

Hab es selbst schon gemacht, funktioniert, man muß aber einige Sachen beachten, die dann beschrieben sind. Auch hier im Forum gibts einige Antworten

mfg
Cybertracepda


----------



## demon2000 (4 April 2011)

geht es nicht über die Externe Bibliothek??? Ich hätte gerne ein Baustein welches ich dann auch in späteren Programmen einsetzen kann.
Es muss doch irgend wie ein Baustein ohne ADS mit C-Code erstellt werden können. Viele schreiben, dass bei CoDeSys die Schnittstellen erst deklariert werden müssen, dann als externe lib speichern (wird eine .h .c und .lib erstellt und in .c kann der C-Code rein implemmentiert werden.
Aber ob das bei TwinCAT geht konnte ich nicht finden und ob ich den Quellcode noch Compilieren muss?

Ich arbeite mit TwinCAT PLC


----------



## demon2000 (5 April 2011)

Weis den niemand wie externe Library funktioniert


----------



## drfunfrock (5 April 2011)

Entschlüssel deinen Stream in einem Programm, um dann die Daten per ADS in Variablen der SPS zu schreiben. Dazu gibt es das dokumentierte ADS-Protokoll.


----------



## demon2000 (8 April 2011)

Ich möchte keine Externe Software!!!!
Wie kann ich eine externe Library erstellen.
Ich weis das erst die schnittstellen definiert werden müssen und dan in TwinCAT als externe Library speichern.
Es wird eine .c und .h Datei erstellt. in die .c datei kann ich mein Code implementieren. 
Wie muss ich dann weiter vorgehen????
Womit kompilieren und wie (z.B. als .dll)????


----------



## MasterOhh (8 April 2011)

Also so weit ich weiss ist es momentan noch nicht möglich C-Code in welcher Form auch immer in Twincat zu kompilieren. Da musst du wohl noch auf Twincat 3 warten, das irgendwann Ende dieses Jahres rauskommen soll.

Wir hatten mal ein ähnliches Problem. Unsere Informatiker hatten dafür dann ein Framework erstellt, welches wir direkt im Gerätemanger der CX einbinden konnten. Dieses Framework hat dann so ziehmlich alles gefressen, von Lua über C bis Basic.


----------



## cybertracepda (11 April 2011)

Hallo !
Hast du das Problem schon gelöst ?
Ich habe mal mein altes Projekt von 2006 durchforstet, gib mal die Eckdaten bekannt, vielleicht kann ich dir dann helfen.
Ich verwende VC6.0, damit habe ich meine ext. Lib compiliert und dann den *.obj zu \plc\lib mit der lib reinkopiert und unter TC das projekt dann kompiliert.
Man muss eine FB erzeugen, der die Eingänge und ausgänge deklariert.


----------



## demon2000 (12 April 2011)

Danke erstmal werde ich mal ausprobieren!!!


----------



## demon2000 (14 April 2011)

kannst du mir das etwas detaillierter beschreiben irgend wie blicke ich da nicht durch. Wieso hast du 2 mal kompeliert, einmal vc einmal tc??


----------



## cybertracepda (14 April 2011)

Schreib einen FB mit Ein- und AUsgangsparametern.
Speichere diese als externe Lib ab.

z.B. hier meine FB
FUNCTION_BLOCK Trajektor
VAR_INPUT
Start : BOOL; (*Start Berechnung*)
Stop : BOOL; (*Stopp normal *)
QSP : BOOL; (*Notstopp *)
Zeit : LREAL; (*Zeit*)
X_Start : LREAL; (*Startposition in x *)
X_End : LREAL; (*Zielposition in x *)
Y_Start : LREAL; (*Startposition in y *)
Y_End : LREAL; (*Zielposition in y *)
Params : TRBGParams; (*Masse der Hubeinheit incl. Last *)
END_VAR
VAR_OUTPUT
x : LREAL;
xp : LREAL;
q1 : LREAL;
q1p : LREAL;
y : LREAL;
yp : LREAL;
Fx : LREAL;
Fy : LREAL;
Q : LREAL;
Qp : LREAL;
y2p : LREAL;
Tend : LREAL;
END_VAR
VAR
InitFlag : BOOL;
RemInit : BOOL;
END_VAR

Typendeklaration :

TYPE TRBGParams :
STRUCT
mh : LREAL;
mk : LREAL;
mw : LREAL;
EJy : LREAL;
rhoA : LREAL;
L : LREAL;
dmp : LREAL;
dx : LREAL;
v_max_X : LREAL;
a_max_X : LREAL;
v_max_Y : LREAL;
a_max_Y : LREAL;
a_max_Not_X : LREAL;
a_max_Not_Y : LREAL;
v_Reduction : LREAL;
a_Reduction : LREAL;
s_X : LREAL;
s_Y : LREAL;
Fc : LREAL;
END_STRUCT
END_TYPE

Dus kannst alle diese Eingänge und Ausgänge anpassen, Namen ändern, welche löschen ect. 

Im FB Code steht nur ein Semikolon.
Beiliegend ein Bitmap mit dem FB-


Dann musst du den Header aus dem Projektverzeichnis deines Projektes
*.h ins C-Compiler zb.VC6 und dort den C_Code reinstopfen.
Wenn du es nicht hinbekommst, schick mir deinen Code und den FB, den du mit deinen richtigen Parametern versorgen sollst und ich komp. dir ein obj FIle mit den richtigen Einstellungen .
Es ist nicht ganz leicht,ich habs auch mit Hilfe von Beckhoff dann hinbekommen. Es sind nämlich die Compilereinstellungen am VC6 die das ganze ausmachen..

Ohne externen C-Compiler geht überhaupt nichts. In Twincat gibt es keine Möglichkeit, ausser deánn der neuen 3.xx C-Code einzubringen.


----------



## demon2000 (15 April 2011)

wenn ich kompiliere bekkome ich die Fehlermeldung "error c2065" 


> 'TESTtyp' nichtdeklarierter bezeichner


wie muss ich diese deklarieren?
Ich hab ein File für Erstellung einer ext lib gefunden


> ftp://ftp.sdt.se/Documentation/3S/M...eSys for 386/English/C in CoDeSys for 386.pdf


da steht das ich eine lzstyp.h für die ganzen deklarationen brauche, aber ich finde die nicht. Wie hast du das gemacht?
Kannst du deine Files irgend wo hochladen z. B für c=a+b, damit ich mir das angucken kann?


----------



## demon2000 (15 April 2011)

Hat sich erledigt, es funzt jetzt!!! Danke für deine Hilfe!!!!


----------



## Mauro1998 (13 Juni 2011)

*externe lib in twincat*

Hallo zusammen,

ich möchte mir einen Bib-Funktionsbaustein zusammenbauen. Der Baustein soll als Besselfilter 4. Ordnung benützt werden.

Da ich bei Oscat leider nichts passendes gefunden habe, wollte ich mir den Funktionsbaustein nun selber bauen.

Ich hab bereits die Ein- und Ausgänge in der Variablendeklaration von Twincat definiert. Den FB habe ich bereits als externe Lib abgespeichert. Die *.c, *.h und *.lib sind also vorhanden. 

Ich benütze Code::Blocks! kann mir vielleicht von euch einer zur Hand gehen und mir sagen wie ich den C-Code für den Besselfilter 4. Ordnung in die .lib Datei bekomme????

Wäre super wenn mir von euch jemand dabei helfen könnte!!

Danke

VG

Mauro


----------



## asschilling (30 August 2012)

*Externe Bibliothek für TwinCAT*

Hallo Zusammen, hallo cybertracepda,

ich möchte ebenso eine externe Bibliothek mit komplizierten C-Berechnungs-Funktionen für TwinCAT erstellen.
Zuerst habe ich Typen unf Funktions-Block in TwinCAT erstellt und als externe Bibliothek *.lib in der 
aktuellen Version 2.11.0 abgespeichert .
Danach habe ich den automatisch generierten C-Code in ein neues leeres VC++ 6.0 (Win32-Bibliothek (statische)) 
eingefügt. Das Projekt habe ich übersetzt und nur die erstellte obj-Datei (nicht die lib) zur TwinCAT-Lib-Datei  kopiert. 

Doch TwinCAT meckert in einem Test-Projekt, das es 2 Funktionen (von 3) nicht binden konnte.

Wäre gut, wenn mir jemand Tipps geben könnte

Vielen Dank

Andreas


----------



## DerDron (5 Dezember 2014)

Hallo,

Ich will das exakt gleiche machen: C Programme als externe Bibliothek erstellen und dann in TwinCAT2 importieren. Geht das nur mit VC++ 6.0? Ich hab versucht, durch speichern als externe Bibliothek die *.c und *.h Datei in einem statischen Bibliotheksprojekt einzufügen und wie Andreas dann zu übersetzen, es kommt aber der Fehler dass kein Kompilierungstool zugewiesen ist. In den Optionen hab ich nichts von Einstellungen zum Kompilieren gefunden.

Ist es mit MS Visual Studio 2010 möglich, eine für TwinCAT2 nutzbare Bibliothek zu erzeugen?

Ich hatte bereits bei Beckhoff nachgefragt, der sagt mir jedoch dass man keine eigenen C programmierten Bibliotheken nutzen kann, nur interne. 

Aber als ich den Thread gesehen hat, wurde ich vom Gegenteil überzeugt.

Ich hoffe jemand will/kann mir helfen. Wer das tut der erhält meine Lobpreisungen.


----------

