B&R SG3 auf SG4

Hannes

Level-1
Beiträge
67
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,


ich habe eine tcp- Task, welcher auf einem SG3- Gerät wunderbar funktioniert hat.
Nun wollte ich das Ganze auf einem SG4- target laufen lassen (ich hab die Dateien nur kopiet und nicht exportiert) aber ich bekomme den Fehler: ETHERNET: Generelle OS- Fehler.

Was kanns da haben?
Vielleicht hat damit schon jemand Erfahrungen gemacht!1

lg
 
Da musst du mal die Hilfe bemühen...soweit ich weiß, war unter SG3 eine tcpipcfg.dat nötig in der die konfigurationsdaten für's ehternet gespeichert wurden. Denke, dass sich hier die Bibliotheken geändert haben und du das alles umschreiben musst. Bin mir da aber nicht mehr so sicher, is immerhin schon ein paar jahre her mit den SG3's.

MFG

Markus
 
Hallo Hannes,

kannst du mir den tcp- task für SG4 irgendwie zukommen lassen oder vielleicht hier posten?

poste du mal was :???:

Folgender Vorschlag zum Eingrenzen des Fehlers:

Alle Tasks deaktivieren - SPS reseten
Tritt der Fehler nicht mehr auf musst du den Task ermitteln in dem der Fehler ausgelöst wird (der Reihe nach die Tasks aktivieren und downloaden).
Hast du den Task gefunden daktiviere im Source die Funktionsaufrufe (ausdokumentieren).
Hast du die Funktion gefunden kannst du
a) solange probieren bis du den Fehler selber gefunden hast oder
b) postest den Source im Forum

Ich kann mit der von dir genannten Fehlermeldung auch nicht viel anfangen, ich schliesse mich da_kine an und vermute das an der Konfiguration der Ethernet Schnittstelle was nicht stimmt.

Grüsse, harrylask
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Re: SG4

Hallo Hannes,

poste mal welche SG4 CPU Du verwenden willst oder verwendest.
Auch ware die Version des AutomationStudios wichtig, denn ab
der version 2.5.3.xxx aendert sich die Anwendung der ethernet lib
komplett. Ab da heisst das AsTcp. Ich habe mittlerweile fuer verschiedene
Kunden die Apllikationen umgeschrieben. ist aber nicht mehr so einfach.
Haellt sich sich jetzt mehr an den Standard, sprich socket Funktionen.

Gruss,

Mike
 
Ich verwende das Automation Studio mit der Versionsnummer 2.4.0.11
und das PowerPanel: 4PP220.1043-75 (SG4 -> auf dem gehts eben nicht), auf dem SG3 PowerPanel PP41 funktionierts.
 
Re:

Hallo Hannes,

ups Du verwendest noch 2.4.0.11. Da kann ich jetzt auf die schnelle nicht helfen. Muesste erstmal die sehr alte Version von AS installieren. Aber eigentlich ist das ganze sehr einfach.

Sende mir eine private mail, dann bekommst Du von mir eine aneder mail Adresse die mehr Daten Vloumen empfangen kann. Danach schickst Du mir das Projekt und ich sehen es mir mal an.

Besser waere allerdings Du koentest auf die Version 2.5.3.xx oder 2.5.2.108 updaten.

Gruss,

Mike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was für Bausteine, bzw. welche Bibliothek in welcher Version verwendest du denn?? Ist das ein C-Task? Oder welche Sprache verwendest du?

Ich denke nicht, dass es sinnvoll ist die AS Version zu verändern, da das einen enormen Rattenschwanz an weiteren änderungen nach sich zieht. Denn zu den nächsten Versionen sind wieder Bibliotheken hinzugekommen, und andere dafür weggefallen.

MFG

Markus
 
Zuletzt bearbeitet:
Ich programmiere in C, es sind im Grunde 2 einfache Tasks, einer, mit welchen ich die Verbindung über TCP herstelle und mit dem 2 werte ich die empfangenen Daten aus, aber leider hängt sich die SPS PP220 (SG4) auf, das PP41 geht hingegen super mit meinen 2 Tasks (da hat es sich noch nie!! aufgehängt), das SG4 hängt sich gleich mal auf, nachdem ich ihm über tcp was gesendet habe.
Auf eine andere Version des AS umzusteigen ist so eine Sache, da der Task ja auf dem SG3 und dem SG4 wiederverwendbar sein soll (bzg. wiederverwendbarkeit)
Mit ist auch die Problematik mit dem Little Endian und big Endian klar aber ich weiß nicht, wo das SG4 da in den Speicher hineinschreiben könnte.

lg und vielen Dank für Eure Antworten!!

lg
Hannes
 
Zuletzt bearbeitet:
Den gleichen Ethernet-Task auf SG3 & 4 zu verwenden ist nicht möglich denke ich. Die SG3's sind soweit ich weiß Motorola CPU's und die 4er sind Intel. Lies dir mal die Hilfe zur Bibliothek "Ethernet" durch. Ich denke du wirst nicht umhin kommen 2 Verschiedene Bausteine zu schreiben. Je nach dem auf was für ein Zielsystem du überträgst, kannst du dann ja aktivieren/deaktivieren.

MFG

Markus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Re:

Hallo Hannes,

ein paar Worte zur Erklaerung:

1. As2.4.0.11 arbeitet noch mit SG3 Visualisierung, soweit ich das im Kopf habe. Und Du hast wahrscheinlich (sagt meine Glaskugel ;)) eine VIS mit SG3 aufgebaut.
2. Wiederverwendbarkeit is OK. Es gibt jedoch ein paar unterschiede zwischen SG3 (motorola) und SG4 (intel, geode, x86 kompatibel) Systemen, was die Konfiguration des Systems betrifft.
Das einfachste ist Du koenntest irgendwo den SourceCode als Textfile uploaden oder sende Ihn per PM/Mail an uns. Dann koennen wir Dir helfen.

Gruss,

Mike
 
Zuletzt bearbeitet:
ich hab mein Problem gelöst, ich habe zur SPS 2 Bytes geschickt, wieviel Einträge ich von einem Array auf der SPS in den Sendebuffer kopieren will, bei SG3 hat das funktioniert aber bei SG4 musste ich die 2 Bytes umdrehen (Little/Big Endian!!!) jetzt funktionierts.

Vielen Dank für Eure Unterstützung!!!

liebe Grüße aus OberÖsterreich

Hannes
 
Re:

Hallo Hannes,

selbst DAS BIT kannst Du automatisieren um nicht jedesmal
von Hand ein Bit stezen zu muessen. Schau Dir mal in der Hilfe
die Funktionen 'RTINFO' und 'TARGETInfo' in der BRSystem Library an.

Also ein leichtes das ganze vollautomatisch zu erledeigen. Spart Zeit
und man(n / frau) vergisst es nicht......

Gruss,

Mike
 
Zuletzt bearbeitet:
Hallo, habe auch ein Problem mit AsTCP und SG4.

Es sind 2 CPU ( x20 cp1484) einer ist Server der andere Klient.
mein Quellcode:

SERVER_________________________
Deklaration: IP 192.168.10.124 [String(80)]



(* init program *)
sStep:= 0;
Zeiger:=ADR(IP);



(* cyclic program *)
CASE sStep OF

0:
TcpOpen_0.enable:=1;
TcpOpen_0.pIfAddr:=Zeiger;
TcpOpen_0.port:=0;
TcpOpen_0.options:= 0;
TcpOpen_0; (*Call the function*)

IF TcpOpen_0.status = 0 THEN
sStep := 10;
ELSIF TcpOpen_0.status = ERR_FUB_BUSY THEN
sStep := 0;
ELSE
sStep:= 100;
END_IF

(*5:
linger_opt.lLinger:=0;
linger_opt.lOnOff:=1;

Tcploctl_0.enable:=1;
Tcploctl_0.ident:=TcpOpen_0.ident;
Tcploctl_0.ioctl:=tcpSO_LINGER_SET;
Tcploctl_0.pData:=ADR(linger_opt);
Tcploctl_0.datalen:=SIZEOF(linger_opt);
Tcploctl_0;

IF Tcploctl_0.status = 0 THEN
sStep := 10;
ELSIF Tcploctl_0.status = ERR_FUB_BUSY THEN
sStep := 5;
ELSE
sStep:= 100;
END_IF
*)

10:
TcpServer_0.enable:=1;
TcpServer_0.ident:=TcpOpen_0.ident;
TcpServer_0.backlog:=1;
TcpServer_0.pIpAddr:=Zeiger;
TcpServer_0; (*Call the function*)

IF TcpServer_0.status = 0 THEN
sStep := 15;
ELSIF TcpServer_0.status = ERR_FUB_BUSY THEN
sStep := 10;
ELSE
sStep:= 100;
END_IF


15:
TcpRecv_0.enable:=1;
TcpRecv_0.ident:=TcpServer_0.identclnt;
TcpRecv_0.pData:=ADR(Data_in);
TcpRecv_0.datamax:=SIZEOF(Data_in);
TcpRecv_0.flags:=0;
TcpRecv_0;

IF TcpRecv_0.status = 0 THEN
sStep := 20;
ELSIF TcpRecv_0.status = ERR_FUB_BUSY THEN
sStep :=15;
ELSE
sStep:= 100;
END_IF


20:
TcpSend_0.enable:=1;
TcpSend_0.ident:=TcpServer_0.identclnt;
TcpSend_0.pData:=ADR(Data_out);
TcpSend_0.datalen:=SIZEOF(Data_out);
TcpSend_0.flags:=0;
TcpSend_0;

IF TcpSend_0.status = 0 THEN
sStep := 25;
ELSIF TcpSend_0.status = ERR_FUB_BUSY THEN
sStep :=20;
ELSE
sStep:= 100;
END_IF


25:
TcpClose_0.enable:=1;
TcpClose_0.ident:=TcpServer_0.identclnt;
TcpClose_0.how:=0;
TcpClose_0;

IF TcpClose_0.status = 0 THEN
sStep := 0;
ELSIF TcpClose_0.status = ERR_FUB_BUSY THEN
sStep :=25;
ELSE
sStep:= 100;
END_IF


100:
IF QUITT =0 THEN
sStep:= 0;
END_IF



END_CASE

**********************************************

CLIENT_________________



Deklaration: IP 192.168.10.123 [String(80)]



(* init program *)
sStep:= 0;
Zeiger:=ADR(IP);



* cyclic program *)
CASE sStep OF

0:
TcpOpen_0.enable:=1;
TcpOpen_0.pIfAddr:= Zeiger;
TcpOpen_0.port:=0;
TcpOpen_0.options:= 0;
TcpOpen_0; (*Call the function*)


IF TcpOpen_0.status = 0 THEN
sStep := 10;
ELSIF TcpOpen_0.status = ERR_FUB_BUSY THEN
sStep := 0;
ELSE
sStep:= 100;
END_IF


10:
TcpClient_0.enable:=1;
TcpClient_0.ident:=TcpOpen_0.ident;
TcpClient_0.pServer:=Zeiger;
TcpClient_0.portserv:=0;
TcpServer_0; (*Call the function*)

IF TcpServer_0.status = 0 THEN
sStep := 15;
ELSIF TcpServer_0.status = ERR_FUB_BUSY THEN
sStep := 10;
ELSE
sStep:= 100;
END_IF


15:
TcpSend_0.enable:=1;
TcpSend_0.ident:=TcpOpen_0.ident;
TcpSend_0.pData:=ADR(Data_out);
TcpSend_0.datalen:=SIZEOF(Data_out);
TcpSend_0.flags:=0;
TcpSend_0;

IF TcpSend_0.status = 0 THEN
sStep := 25;
ELSIF TcpSend_0.status = ERR_FUB_BUSY THEN
sStep :=20;
ELSE
sStep:= 100;
END_IF


20:
TcpRecv_0.enable:=1;
TcpRecv_0.ident:=TcpOpen_0.ident;
TcpRecv_0.pData:=ADR(Data_in);
TcpRecv_0.datamax:=SIZEOF(Data_in);
TcpRecv_0.flags:=0;
TcpRecv_0;

IF TcpRecv_0.status = 0 THEN
sStep := 20;
ELSIF TcpRecv_0.status = ERR_FUB_BUSY THEN
sStep :=15;
ELSE
sStep:= 100;
END_IF


25:
TcpClose_0.enable:=1;
TcpClose_0.ident:=TcpOpen_0.ident;
TcpClose_0.how:=0;
TcpClose_0;

IF TcpClose_0.status = 0 THEN
sStep := 0;
ELSIF TcpClose_0.status = ERR_FUB_BUSY THEN
sStep :=25;
ELSE
sStep:= 100;
END_IF


100:
IF QUITT =0 THEN
sStep:= 0;
END_IF



END_CASE
********************************

Bei mir komt der SERVER in die Sprungmarke 10 und dann gleich in 100 ohne Send und Rcive Funktionen zu bearbeiten.

Würde mich freuen wenn mir jemand helfen kann.
 
Zuletzt bearbeitet:
Also der TcpServer_0.status = 65xxx (entspricht " In bearbeitung" laut B&R Hilfe ) und es springt nie auf 0 ( "Status OK")!
 
Also der TcpServer_0.status = 65xxx (entspricht " In bearbeitung" laut B&R Hilfe ) und es springt nie auf 0 ( "Status OK")!
Hallo,
also es gibt nur 2 65xxx Nummern
siehe Bild

entweder er ist busy, dann bleibt er aber im Schritt und wechselt nicht auf 100 (siehe deinen Code) oder das enable geht --> 0
 

Anhänge

  • tcpbildchen.bmp
    166,1 KB · Aufrufe: 7
Zurück
Oben