# TwinCAT und BC9000: wie einbinden & programmieren?



## ThomasF (5 Juni 2008)

Hallo allerseits...

Wie sollte es anders sein, ich hab' ein kleines Problem..  darum gibt's auch viel Text.. 

Ich bin Entwickler (Hochsprachen) und hab nun ein SPS Projekt an der Backe.. soll heißen: blutiger Anfänger was SPS angeht..  sorry..
Vorliegend habe ich einen BC9000 und folgende Klemmen: KL9210, KL1408, KL9080, KL9260, KL2602 sowie eine abschließende KL9010..

Das alles zusammengesteckt.. und besaftet.. IP Adresse zunächst per DHCP, dann per arp auf 223.223.223.41 gestellt.. kann pingen, alles wunderbar..
Die TwinCAT Demo installiert... ein routing zu dem BC9000 eingestellt.. neustart..

Ich habe im PLC Control, mit Zielsystem BC9000, ein winziges Programm gebaut (4-zeiler).. online schalten, hochgeladen, laufen lassen.. variablen setzen, etc.. programm lüppt manuell (wenn ich signale auf den KL1408 lege, werden die %IX* Variablen nicht gesetzt), hat aber keinerlei auswirkungen auf die KL2602 (obgleich die %QX* Variable gesetzt wird)..
Naja... noch finde ich das nicht bedenklich..
Der System-Manager zickt aber rum..
Was kann ich machen:
Zielsystem local.. eine virtuelle Ethernet schnittstelle hinzugefügt.. einen BC9000 dazu.. IP eingestellt.. Klemmen scannen.. klappt.. bis auf die Trennklemme ist alles dabei (nur andere modelle, per "ändern in kompatiblen Typ" ist aber alles gut)..
"Export Variablen Info" geht schonmal nicht.. es wird eine Datei mit "Gerüst" estellt, aber keine Variablen eingetragen. Weiter..
Einen Task zu der system konfiguration hinzugefügt.. variablen angelegt und verknüpft.. per knopfdruck eine Zuordnung Task <-> Virtual Ethernet erstellt..
Run mode... wird gestartet - kann aber natürlich nix.. wieder config mode..
wenn ich free-run einstelle kann ich die Eingangsänderungen sehen, und auch manuell den Ausgang schalten..
Super gut - ich kann mit dem BC9000 sprechen.. hab ich gedacht..

nochmal neu..
den BC9000 als Zielsystem nehmen geht - bedingt.. er wählt es schon aus aber sagt dann das es keine gültige Version hat.. gut.. wieder locales system als Ziel.
wieder virtuelles Ethernet.. etc.. mein kleines Programm in die SPS-Konfiguration geladen.. Ein- und Ausgänge verknüpft.. Zuordnung hergestellt..
Wenn ich jetzt in den Run Modus wechseln möchte.. kommt eine Fehlermeldung:
Init2\IO Create Images: Image schalten-Prozessabbild created >> Error: 0xb (Sorry no description!)

Habt ihr schon einen groben Schnitzer feststellen können?
Was könnte sonst schief gelaufen sein..?

Schonmal vielen Dank für's bis hier lesen.. 
- 
Thomas


----------



## drfunfrock (5 Juni 2008)

Hast du in PLC-Control auch als Projekttyp BC-Systeme gewählt?


----------



## ThomasF (5 Juni 2008)

drfunfrock schrieb:


> Hast du in PLC-Control auch als Projekttyp BC-Systeme gewählt?



Ich hatte als "Taget System Type": "BC via AMS" gewählt..

[edit]
In den Optionen von dem PLC Project ist unter "Controller Settings" auch der BC9000 ausgewählt..
[/edit]

[edit]
Als Zielsystem habe ich natürlich auch den BC9000 ausgewählt.. 
[/edit]

 - 
Thomas


----------



## Zottel (6 Juni 2008)

Habe jetzt nicht alles gründlich gelesen, aber bei Klemmen am BC hast du immer die Möglichkeit beim Einfügen zu wählen ob sie der BC-SPS zugeordnet werden (dann werden sie vom Programm auf dem BC gesteuert).
Habe vergessen wie die Alternative heißt, aber wenn du die wählst, werden sie von einem externen ADS-Gerät (im Allgemeine Twincat) gesteuert, als ob sie an einem BK hingen.


----------



## ThomasF (6 Juni 2008)

Zottel schrieb:


> Habe jetzt nicht alles gründlich gelesen, aber bei Klemmen am BC hast du immer die Möglichkeit beim Einfügen zu wählen ob sie der BC-SPS zugeordnet werden (dann werden sie vom Programm auf dem BC gesteuert).
> Habe vergessen wie die Alternative heißt, aber wenn du die wählst, werden sie von einem externen ADS-Gerät (im Allgemeine Twincat) gesteuert, als ob sie an einem BK hingen.



Ahh.. okay.. hatte mich schon gefragt warum es da zwei Typen gibt.. bei der PLC Variante kann man aber gar keine Variablen zuordnen, ist das so gewollt? 

Besten Dank, ich werde das mal probieren.. 
- 
Thomas


----------



## ThomasF (6 Juni 2008)

Nun lüppt das.. 

Die PLC Klemmen anzufügen war der Knackpunkt..
Nachdem die im System Manager waren konnte ich auch die Variablen exportieren.. Ich hatte dann versuch die Konfiguration zu aktivieren.. hat aber  nicht geklappt.. (weil mindestens eine Verknüpfung fehlte) aber er scheint zumindest mit dem BC9000 gesprochen zu haben.. denn..
Die exportierten Variablen hab ich dann im PLC Control importiert.. und mein Programm entsprechend geändert.. (die Bit-Positionen waren übrigens die selben die ich auch eingetragen hatte..) Dann hab ich das ganze compiliert und hochgeladen & gestartet.. jeztzt bekomm ich sogar live-Rückmeldungen.. 

Bin nicht sicher ob ich überhaupt das Programm im System-manager angeben muß..

Vielen Dank an alle..
- 
Thomas


----------



## drfunfrock (6 Juni 2008)

Ja das ist besser, weil 

Um zu exportieren, musst du ein Projekt haben, dass sich kompilieren lässt. Sobald das mal nicht gegeben ist und du im System-Manager versuchst zu exportieren, bekommst du eine leere Export-Datei ohne jegliche Variablen und schon geht  nix mehr.


----------



## ThomasF (6 Juni 2008)

drfunfrock schrieb:


> Um zu exportieren, musst du ein Projekt haben, dass sich kompilieren lässt. Sobald das mal nicht gegeben ist und du im System-Manager versuchst zu exportieren, bekommst du eine leere Export-Datei ohne jegliche Variablen und schon geht  nix mehr.



Ahhh.. verstehe.. Ist aber so ein bisserl durch-die-brust-ins-auge, oder? ich mein', für ein vernünftiges Projekt braucht man doch die Variablen - die man erst bekommt wenn man ein Projekt hat.. 

Lustig..
- 
Thomas


----------



## drfunfrock (7 Juni 2008)

Ja man braucht die. Deshalb deklarier die unter den globalen Variablen mit absoluten Adressen. In deinem Programm hat das ansonsten keine Auswirkungen. Aber du kannst dann diese im Sys-Manager verlinken. 

Ich hatte es auch einmal gemacht wie du, aber das ging einmal schief und ich war kuriert. Damals musste ich erst die Variablen importieren und dann konnte ich das Programm schreiben.


----------



## ThomasF (9 Juni 2008)

Moin..



drfunfrock schrieb:


> Ich hatte es auch einmal gemacht wie du, aber das ging einmal schief und ich war kuriert. Damals musste ich erst die Variablen importieren und dann konnte ich das Programm schreiben.



Ich glaube ich werd' dann immer erstmal ein leeres Dummy-Programm im System-Manager einbinden, die Variablen exportieren und damit dann weiter arbeiten...

Vielen Dank für Eure Hilfe..
- 
Thomas
-- 
P.S. Vielleicht könnt Ihr mir ja auch bei dem zweiten (gleich geposteten) Problem helfen?


----------



## drfunfrock (9 Juni 2008)

Nee, ich empfehle, dass du die Variablen in deinem Code als Global deklarierst. Beispiel:

StartProcess AT %QX1000.0 : BOOL;

Damit hast du alles auf beiden Seiten ohne Probleme.


----------



## ThomasF (9 Juni 2008)

drfunfrock schrieb:


> Nee, ich empfehle, dass du die Variablen in deinem Code als Global deklarierst. Beispiel:
> 
> StartProcess AT %QX1000.0 : BOOL;
> 
> Damit hast du alles auf beiden Seiten ohne Probleme.



Achso.. also wie ich das ursprünglich hatte.. mir hatte das mit dem Variablen ex- und import eigentlich ganz gut gefallen - weil halt schon alles dabei ist und ich mir keinen kopf machen muss..  Global sind die ja auch..

- 
Thomas


----------



## drfunfrock (9 Juni 2008)

Es ist aber unsauber, den Kram aus dem Systemmanager zu importieren, weil 

- es gibt manchmal ein Problem (wie schon geschildert) 
- und man kann ohne den Import nicht programmieren, bzw. muss sich Variablen anlegen, die später gelöscht werden. 
- Manchmal ist man dann auch gezwungen sich die Sache schwieriger zu machen, als sie ist, weil man z.B. im FB die einen Output mit %QX* deklarieren kann. Mit der Importmethode kann man diese Möglichkeit nur eingeschränkt nutzen und macht sich mehr Arbeit.


----------



## hoOLLOow (13 Januar 2009)

Hallo,
habe auch Probleme und zusätzlich sitzt mir die zeit im Nacken.
Hab es GROßGESCHRIEBEN, was mit Probleme bereitet.

Was will ich?

- SPS-Programm, welches auf einem BC9000 autark laufen soll
- soll die 2 Digitaleingänge eines KL1002 abfragen und wenn einer auf TRUE/FALSE umspringt (je nach Logik) eine Email versenden

Folgendes habe ich getan (größtenteils wie bei ThomasF):

1. - über ARP eine IP zugewiesen... pingen klappt...alles bestens
   - Routing zur SPS läuft und funktioniert

2. - mit PLC Control ein etwas komplizierteres Porgramm geschrieben (brauch aber nur die 2 Eingänge zum funktionieren, denke ich)
   - kann dort auch Zielsystem BC9000 mit Port 800 wählen
   - einloggen, laden und starten funktionieren einwandtfrei

3. - im System Manager durch Scannen bei I/O Geräten finde ich: Gerät RT-Ethernet, daraufhin Box BC9000 und am Ende Klemmen KL1002 + Endklemme 9010
   - manuell geht das natürlich auch

     WAS BRINGT DAS VIRTUAL ETHERNET ?!?!? 
     WAS BRINGT DAS HINZUFÜGEN EINES TASKS BEI "SYSTEM-Konfiguration" WIE ThomasF ES GEMACHT HAT ?!?!? 

4. - nun habe ich manuell bei "SPS-Variablen" unter I/O-Geräte 2 Ausgangsvariablen erstellt
   - dann "Export Variablen Info"-> nur so stehen die 2 Variablen als Global drinne (bzw. überhaupt welche)
   - dann bei PLC Control importiert und Programm angepasst (nur Variablen-Namen) 
   - dann Programm mit PLC Control geladen und gestartet
   - dann SPS-Projekt im System-Manager angefügt, weil es ja gestartet ist landen die 2 zuvor importierten Variablen 
     KOMISCHERWEISE nicht wie bei "SPS-Variablen" in AUSGÄNGEN sondern bei EINGÄNGEN
     WARUM IST DAS UMGEKEHRT ?!?!? 

     WELCHE VERKNÜPFUNGEN SIND NUN SINNVOLL / WELCHE ZUORDNUNGEN BRAUCH ICH ?!?!? 
     - zur Auswahl: 
    2 EINGANGs-Variablen in "Eingänge" in der "SPS-Konfiguration", da wo das Projekt angefügt ist
    2 AUSGANGs-Variablen in "SPS-Variablen" bei den I/O-Geräten
    2 EINGANGs-Variablen in den beiden Kanälen der 1002er Klemme

     DIE GANZE ZEIT ERHALTE ICH, WENN ICH DAS ZIELSYSTEM BC9000 IM SYSTEM-MANAGER AUSWÄHLE: "Ungültige Version des Zielsystems" 

Das sind im Großen und Ganzen erstmal meine Probleme.
Hoffentlich ist hier noch jemand am Threma dran und kann mir weiterhelfen. Bitte!

Bis dann.


----------



## Rifel (21 Januar 2009)

*Teilweise Beantwortung und eigene Frage dazu*

WAS BRINGT DAS VIRTUAL ETHERNET ?!?!? 
Es geht nur per Virtual Ethernet denn ansonsten ist der Systemmanager nicht in der Laage eine Verbidung mit dem BC herzustellen (laut BH Support). Daher auch der Fehler:

DIE GANZE ZEIT ERHALTE ICH, WENN ICH DAS ZIELSYSTEM BC9000 IM SYSTEM-MANAGER AUSWÄHLE: "Ungültige Version des Zielsystems"

Da eine komplette Funktion des Systemmanagers bei einem BC nicht möglich ist. 
Laut BH Support kann man eigentlich ohne Systemmanager auskommen er meinte, per KS 2000 (oder alternativ) den PC IP mässig einstellen und die Adressierung überprüfen. Dann im PLC Control das Programm schreiben und als Variablen feste Verknüpfungen per" ...AT%IX32.0:BOOL;" erstellen und dann per Wähle Zielsystem auswählen und ein Bootprojekt erstellen. So sollte es funktionieren.

(Bitte verbessern wenn was falsch ist)


HELPHELPHELPHELPHELPHELPHELPHELPHELPHELPHELPHELP
Ich habe auch ein Problem denn ich habe die Konfiguration so durchgeführt und erhalte keine Onlinedaten wenn ich mich einlogge und habe auch keine Steuerungsfunktion????

Thomas


----------



## Rifel (21 Januar 2009)

*Wat is en PLC Klemme*

Ihr schreibt von einer PLC Klemme?
Also wenn ich nen BC9100 habe und per Virtuelles Ethernet die Boxen scanne und dann meine I/O Karten erhalte sind das dann PLC Klemme oder bezieht sich das auf die Klemme wenn Sie mit einer SPS Task verknüpft ist?
THX


----------



## hoOLLOow (21 Januar 2009)

Hallo Rifel,
danke für deine Hilfe. Hab natürlich weiter rumprobiert und auch den Beckhoff Support kontaktiert. 

Die haben gesagt:
1. in System-Konfiguration eine Task hinzufügen
2. in diesem eine Eingangs- und eine Ausgangsvariable (Name VarIn und Varout)
3. in der Einstellung der Task Auto-Start aktivieren und "Zyklusticks" auf 80 anstatt 10 stellen
4. an der SPS-Konfiguration nichts machen
5. EA-Konfiguration: Virtual Ethernet wählen
6. dann Gerät wählen (z.B.  BC9000) und nach Boxen scannen
7. das gute daran: die Klemmen werden auch gleich erkannt
8. also nicht nach Klemmen scannen, die Klemmen haben keine Kanäle drin, ist aber so in Ordnung
9. eine der 16 Eingangs- und eine der 16 Ausgangs-"SPS-Variablen" in der Box (z.B. BC9000) mit den VarIn und VarOut von zuvor verknüpfen
10. dann Rechtsklick auf die Box und "Export Variablen Info"
11. diese Variable in PLC Control importieren und das Programm anpassen
12. die Variablen heißen bei mir (KL1002 mit zwei Digitaleingängen):  
    Klemme_2_KL1002_1_Eingang    AT %IX0.0:    BOOL;
    Klemme_2_KL1002_2_Eingang    AT %IX0.1:    BOOL;
    -> die Variablen werden quasi automatisch erkannt und benannt
    -> diese findet man im PLC Control unter globale Variablen -> TwinCAT_Import
    -> das sollten die 32 Ein- und Ausgänge plus diese zwei Klemmen sein
13. Achja: keine AMS-Route zum Gerät erstellen!!! Zielsystem bleibt im System Manager LOKAL. 
14. Dann Konfiguration aktivieren und RUN-Modus laufen lassen. Danach gibts automatisch im PLC Control das Zielsystem BC9000 mit IP usw. und einloggen klappt ohne eine Route.

15. Wenn ich nun das Programm rauf lade, Bootprojekt erstelle und das Programm starte, kann ich Live-Rückmeldungen erhalten
-> also wenn ich nun bei der Klemme KL1002 die Anschlüsse 1 und 2 bzw.5 und 6 kurzschließe, dann erkennt das die Software und schaltet von TRUE zu FALSE 
    (halt nur BOOL-Kontakte, ist auch automatisch erkannt worden xD)

Bei mir funktioniert es ;D
Hoffe es hilft dir /euch weiter.

Gruß Mathias


----------



## Rifel (21 Januar 2009)

*Lustigerweise klappt es bei mir jetzt mit andere Methode*

Erst einmal vielen Dank für die schnelle Antwort,
ich habe jetzt eine vollständige Funktion aber mit anderer Vorgehensweise:
Erstellte das PLC mit Globalen Variablen, die Adressinfos habe ich vom KS2000 (geht aber auch mithilfe des Systemmanagers)
Dann mit dem BC einen AMS Router eingerichtet (Wenn man neben der Windows uhr auf die TwinCat Weltkugel mit Rechtsklick geht kann man unter Einstellungen AMS Router Manuell hinzufügen)
Dann eine neuen Systemmanager erstellt und als erstes den Querverweis auf das PLC Programm (Task) erstellt und dann eine Virtuelle Ethernet Schnitstelle dann einen Scan erstellt findet den BC und auch die Karten dann als PLC Karten.
Im PLC Manager dann eingeloggt Bootprojekt und dann Start und alles ist gut.
Wie man jedoch aus ner "normalen" Klemme z.B. KL2022 eine PLC KL2022 machen kann weiß ich nicht?? Würde mich aber brennend interessieren. 

Rifel popifel


----------

