# Hilfe mit CAN OPEN Layer 2 protocol



## blackdawn (7 April 2017)

Hallo Alle,
Ich benutze Wago 750-8203 mit CODESYS V2.3. Ich habe Atlas Copco MKIV lokale Steuerung und muss ich die Daten von diese Steuerung gegen CAN Open Master kriegen. Ich benutze die WagoCANLayer2_02.lib und habe meine FUP beigefügt. Ich habe eine Fehler dass ich nur "CAN_BUS_IDLE" bekomme. Kann mir jemend helfen. Was ist die Lösung ?

Danke für die Hilfe.


----------



## ccore (10 April 2017)

Hallo Blackdawn, 

in deinem Baustein CAN_OPEN hast du auch die Fehlermeldung, POU_not_enabled. 
Idle sagt ja nur das er aktuell nichts macht. Ich würde mal darauf tippen das wenn CAN_OPEN nicht aktiviert ist der Rest auch nichts machen kann. 

Gruß


----------



## .:WAGO::016346:. (10 April 2017)

Hallo Blackdawn,

der Enableeingang der CAN_OPEN Instanz darf nur so lange anliegen, bis die Schnittstelle erfolgreich geöffnet werden konnte.
Die Sende- und Empfangsbausteine sollte erst freigegeben werden, wenn die Schnittstelle geöffnet wurde.

Falls die CAN Schnittstelle vorher auf CANopen eingestellt war, ist unter Umständen ein Neustart mit dem neuen Projekt notwendig.
Die angehängte Grafik zeigt ein Minimalprogramm:


----------



## blackdawn (10 April 2017)

Hallo Wago Support Team,
Vielen Dank für ihre Antwort. Ich habe die Lösung versucht aber meien Program ziegt die gleichen Fehler. Ich weiß nicht ob CAN-ID Falsch ist, es zeigt diese Fehler? Könnten Sie mir helfen. 

Danke für die Hilfe

BG
Fazil.


----------



## .:WAGO::016346:. (11 April 2017)

Hallo Fazil,

wurde in der Steuerungskonfiguration das Gerät "CAN Layer2 Device" ausgewählt?

Sofern die Variable xInterfaceIsOpen auf TRUE gesetzt wurde, wurde die CAN Schnittstelle erfolgreich initialisiert und geöffnet.


----------



## blackdawn (12 April 2017)

Hallo Wago Support Team,
Danke. xInterfaceIsOpen ist TRUE aber fbInterfaceOpen.CONFIRM = FALSE and fbInterfaceOpen.Error ist noch POU_NOT_ENABLED. Wago PLC ziegt dass CAN LED ist grun aber weiß nicht warum der Fehler. 

BG
Fazil


----------



## .:WAGO::016346:. (13 April 2017)

Hallo Fazil,

wie der Name der Variable schon vermuten lässt, wurde die Schnittstelle erfolgreich geöffnet, sofern xInterfaceIsOpen den Wert TRUE annimmt.
Schaut man sich das Verhalten des Codes an, so sieht man dass nur einen bis wenige SPS Zyklen der Enable Eingang des Bausteins auf TRUE gesetzt wird.
Nur in diesem Zustand sind die Ausgangswerte gültig.

Da der Zweck des Bausteins, das Öffnen der Schnittstelle ist, sollte und darf der Enable Eingang nicht dauerhaft auf TRUE gesetzt werden.

Zusätzlich sollte man auf dem CAN Bus, sofern mindestens ein weiterer aktiver Teilnehmer vorhanden ist, die zyklisch gesendeten Telegramme sehen.
Dies wäre nicht möglich, sofern die Schnittstelle nicht erfolgreich geöffnet werden konnte.


----------



## patrolmen (12 März 2018)

Hallo Wago Support Team,

ich bin verzweifelt auf der Suche nach einem Download für die WagoCANLayer2_01.lib bzw. WagoCANLayer2_02.lib.
Im Wago Download Bereich kann ich sie leider nicht finden. Gibt es eine alternative Quelle?

Vorab vielen Dank!

Gruß Martin


----------



## Tobsucht (13 März 2018)

Hallo Martin,

die Bibliotheken sind schon bei der Installation dabei.
Sie liegen im CoDeSys Ordner Targets\WAGO\Libraries\PFC200\


Grüße


----------



## patrolmen (13 März 2018)

Bin fündig geworden. Danke für die Hilfe!


----------



## Biffi (17 Juni 2019)

Hallo zusammen,

seit dem ich von codesys 2.3 auf ecockpit umgestiegen bin bekomm ich den Can nicht mehr ausgelesen.
Habe eine 750-8203 und zusätzlich eine can-Karte, weil ich 2 unterschiedliche Can`s auslesen möchte.
Ich versuche es mit der wagoappcanlayer2 Bibliothek, aber ohne erfolg! 
Der Baustein ist wie nachfolgend bestückt und der Ausgang Error ist wenn Enable=TRUE ist immer auch auf TRUE.



Daten des Bausteins Online:


	

		
			
		

		
	
   Und hier ist die Fehlermeldung: "Invalid Port or Device" Also ein ungültiger Port oder Gerät, aber woher weiß ich welchen Port ich brauche? 

Konfiguration Geräteübersicht:


Konfiguration Can-Karte:



Und wie unterscheide ich bei dem Baustein ob ich jetzt auf den Can des PFC zugreife oder auf den der Can-Karte?


----------



## Thruser (17 Juni 2019)

Hallo,





Biffi schrieb:


> Und wie unterscheide ich bei dem Baustein ob ich jetzt auf den Can des PFC zugreife oder auf den der Can-Karte?



viel kann ich Dir da auch nicht helfen aber wenn Du Dir die ersten beiden Bilder ansiehst findest Du dort I_Port, und im zweiten Bild ganz rechts bei den Kommentaren 'CAN port, either the internal PFC or K...'

Darüber steuerst Du welche Schnittstelle verwendet wird. In der Bilbluiothek mußt Du Dir dann mal die Bedeutung des Datentyps WagoTypesCan.I (nterface?) ansehen.

Gruß


----------



## ccore (17 Juni 2019)

Damit du die CAN Layer 2 Schnittstelle des Controllers verwenden kannst musst du in der Gerätestruktur den Haken dafür setzen


Um das CAN Bus Gateway entsprechend auszuwählen muss das entsprechende Interface ausgewählt werden.


----------



## Biffi (17 Juni 2019)

Hallo ccore,

den Hacken um CanLayer 2 zu aktivieren hatte ich gesetzt.
Den Eingang auf Bild 2 anlegen wäre dann so?


	

		
			
		

		
	
also für den Port den Can_Gatway einfügen?

Verstehe ich das dann richtig dass der Bausteil dann auf die Klemme zugreift?
Und und wie greife ich dann auf die CAN Schnittstelle, welche auf der Steuerung ist zu?


----------



## Thruser (18 Juni 2019)

Hallo,

die interne CAN Schnittstelle ist WAGO_CAN_LAYER2_DEVICE. Sieh Dir auch mal die Hilfe/Doku zur WagoAppCanLayer2 an unter 10 Documentation an. Du wirst da noch weitere Bausteine benötigen.

Gruß


----------



## Tobsucht (18 Juni 2019)

Hallo Biffi,

das Interface für die CAN Schnittstelle X4 ist WAGO_CAN_LAYER2_DEVICE. Findest Du übrigens auch unter IoConfig_Globals.

Ich würde bei beiden Schnittstellen noch jeweils eine Instanz vom Baustein WagoAppCanLayer2.FbCanL2Open verwenden.
Für das CAN Gateway brauchst Du noch eine Instanz vom Baustein WagoSysModule_75x_658.FbModuleConfigurationAndStatus.

Grüße


----------



## Biffi (19 Juni 2019)

Die Schnittstelle X4 der Wago selbst läuft jetzt,aber die des Gateway noch nicht.
Habe jetzt die 3 Bausteine eingefügt um die Klemme 750-658 auszulesen.
Aber der FB: WagoSysModule_75x_658.FbModuleConfigurationAndStatus macht mir Probleme, da ich nicht genau weiß was er am Eingang typConfigData genau haben will und wo ich die "Variable" herbekomme.
Fehlt sonst noch etwas?


----------



## ccore (19 Juni 2019)

Also ich habe mal die Hilfe bemüht. Dort findet man folgendes:


----------



## Biffi (19 Juni 2019)

Hallo ccore,

ja die Hilfe bzw. Dokumentation hab ich auch gesehen aber ich verstehe es nicht.
Ich weiß nicht welche Variable an den Eingang von typConfigData kommt bzw. woher man es bekommt.
Also wenn in der Spalte Type etwas anderes steht als die "Normale" Variablendeklaration wie BOOL,INT,DT versteh ich nicht wie man diese Daten verwenden soll bzw was man an die Eingänge schreiben muss, dass der Baustein funktioniert.


----------



## Thruser (19 Juni 2019)

Hallo,

um das mal weiter in Bildern auszudrücken:



```
CAN_Gateway_Config : WagoTypesModule_75x_658.typFullConfiguration;
```

weitere Informationen dazu:



Da werden wohl Daten der Konfiguration des Moduls drin gespeichert, die Du entweder Lesen oder Schreiben kannst. 


> A function block reading status and diagnosis information from module 750-658.  Additional functionality as reading and writing the configuration is supported.


Ich denke bei letzterem wird dann auch ein Neustart des Controller durchgeführt falls die Konfiguration sich geändert hat. 



Gruß


----------



## Thruser (19 Juni 2019)

Sorry muß lauten:

```
CAN_Gateway_Config : WagoSysModule_75x_658.WagoTypesModule_75x_658.typFullConfiguration;
```
wenn man die Types Bibliothek nicht direkt eingebunden hat.

Gruß


----------



## Thruser (19 Juni 2019)

So,

wenn man ehrlich ist kommt auf diese Weise nicht wirklich immer weiter. 

Die WagoAppCanLayer2 ist da ein gutes Beispiel mit dem Eingang I_Port der Funktionsbausteine, wei Du ja bereits feststellen mußtest. Besonders bei Deinem Anwendungsfall.

Zu I_Port steht in der Doku zum Baustein der Bibliothek


> I_Port | WagoTypesCan.I_WagoSysCanBase | CAN port, either the internal pfc port or the K-Bus port provided by the module 750-658


OK, ist also dafür da den richtigen Port/das richtige Modul zuzuweisen, aber woher bekommen?

Zum Glück steht in der Doku zur Bibliothek im Abschnitt 10 Documentation:


> Onboard interface:
> 
> Input I_port from the function blocks must be assigned by either WAGO_CAN_Layer2_Device, WAGO_CanOpen_Slave or WAGO_CanOpen_Manager.



Also mal auf den Eingang und F2 drücken, siehe da unter IoConfigGlobals gibt es WAGO_CAN_Layer2_Device.

Das wäre also die interne Schnittstelle, aber es gibt ja noch die externe Klemme 658 und im Abschnitt 10 Documentation gibt es auch etwas dazu:


> The function block FbModuleConfigurationAndStatus from library WagoSysModule_75x_658 must be used and executed in each plc cycle.
> 
> If the module is used in Mapped mode, IO data must be processed using function block FbModuleMappedModeIO_Access from library WagoSysModule_75x_658. Direct IO access is strictly forbidden.



Also muß zur korrekten Verwendung der Funktionsbaustein FbModuleMappedModeIO_Access verwendet werden. Aber zum I_Port steht dort nichts.

Jetzt kann man sich noch einmal mit F2 die verfügbare Auswahl ansehen. Wenn man die Klemme 658 einbindet erscheint dort auf einmal noch CAN_Device. Man kann das ja mal damit versuchen. Unter dem Namen erscheint ja die Klemme auch in der Gerätestruktur.

Andererseits kann man sich noch einmal die Definition des Eingangs am Baustein ansehen


> I_Port | WagoTypesCan.I_WagoSysCanBase | CAN port, either the internal pfc port or the K-Bus port provided by the module 750-658


Also ist der Eingang I_Port vom Typ WagoTypesCan.I_WagoSysCanBase. WagoTypesCan deutet an, daß der Datentyp in einer Bibliothek mit Namen WagoTypesCan definiert werden muß. Also mal dort nachsehen.

Dort gibt es tatsächlich I_WagoSysCanBase, aber das ist ist ein Interface! Woher soll man bitte wissen welche Funktionsbausteine in welchen Bibliotheken denn nun dieses Interface implementieren!

Sehen wir uns dazu noch einmal CAN_Device unter IoConfig_Globals an:


> IoConfig_Globals.CAN_Device | WagoSysModule_75x_658.FbModule_75x_658



Ist also ein Funktionsbaustein aus der Bibliothek WagoSysModule_75x_658. Dort in der Doku steht aber nichts davon, daß die Schnittstelle von oben implementiert wird. Und selbst wenn, müßte man ja jeden einzelnen Biblioheksbaustein danach durchsuchen.

Das wichtigste was dort erwähnt wird ist


> Access to the CAN gateway module 750-658 This block is needed for each module. The instance of this function block is either automatically generated by the K-Bus configuration or has to be manually added in case of the dynamic configuration.


Aber nicht, daß die Instanz des Bausteins an den Eingang I_Port geschaltet werden muß. 

Das gleiche für das interne Interface. Dort haben wir den Typ CanCfg.FbCanInterface.

Iteressant wird es dann noch wenn man sich den Baustein FbModuleConfigurationAndStatus dazu ansieht. Dort gibt es auch einen I_Port


> I_Port | WagoTypesModule_75x_658.I_WagoModule_75x_658Extended | Access to the module


Wieder ein Interface als Typ. Kann man da jetzt dieselbe IoConfig_Globals Variable nehmen oder nicht?

Da muß WAGO, wie eigentlich überall in der Doku, noch kräftig nachbessern und/oder Beispiele bringen.

Also zum Schluß noch einmal: Es ist nicht wirklich leicht sich da die richtigen Variablen dranzuschreiben. Die zusätzliche Verwendung von OOP macht es dazu auch nicht leichter.

Gruß


----------

