Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: B&R: Problem mit AsTCP

  1. #1
    Registriert seit
    14.07.2011
    Beiträge
    26
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    hab hier ein kleines Problem mit einer Client-Anwendung. Als "Server" dient mir momentan ein kleines Test-Tool (http://www.drk.com.ar/builder.php). Verbinden und Daten senden funktioniert, allerdings wenn ich die Verbindung händisch resete (siehe step 100 im Programm) oder künstlich einen Fehler erzeuge (Kabel ziehen) erhalte ich bei TcpClient() als Status 32608. Ich weiß jetzt aber nicht hab ich einen Fehler gemacht oder liegt das an dem Test-Tool. Hier mal der Code:

    Code:
    case ssw of
    
        ; init
        action 0:
            sockOpen.enable  = 1
            sockOpen.pIfAddr = 0
            sockOpen.port    = 0
            sockOpen.options = 0
                    
            ssw = 1
        endaction
        
        ; warte auf verbindung
        action 1:
            sockOpen FUB TcpOpen()
                    
            if (sockOpen.status <> 65535) then
            
                ; ok
                if (sockOpen.status = 0) then
                    ssw = 2
                    
                ; fehler
                else
                    ssw = 100
                endif
            endif
        endaction
        
        ; optionen setzen
        action 2:
            linger_opt.lLinger = 0
            linger_opt.lOnOff  = 1
            
            sockIO.enable  = 1
            sockIO.ident   = sockOpen.ident
            sockIO.ioctl   = tcpSO_LINGER_SET
            sockIO.pData   = adr(linger_opt)
            sockIO.datalen = sizeof(linger_opt)
            
            ssw = 3
        endaction        
        
        action 3:
            sockIO FUB TcpIoctl()
            
            if (sockIO.status = 0) then
                ssw = 4
            endif
        endaction                        
                                    
            
        ; client einrichten
        action 4:
            sockClient.enable   = 1
            sockClient.ident    = sockOpen.ident
            sockClient.pServer  = adr("192.168.10.60")
            sockClient.portserv = 1234
    
            ssw = 5
        endaction
    
        ; FUB abarbeiten bis verbunden
        action 5:
            sockClient FUB TcpClient()
            
            wait = wait +1
            
            ; timeout wenn kabel abgezogen
            if (wait > 20) then
                wait = 0
                ssw  = 100
            endif
            
            if (sockClient.status <> 65535) then
            
                ; ok
                if (sockClient.status = 0) then
                    ssw = 6
                    
                ; fehler
                else
                    ssw = 100
                endif
            endif
        endaction
        
        ; warte-loop
        action 6:    
            if (aktidx <> logbuf.idx) then
                ssw = 10
            endif
        endaction
        
        ; daten senden
        action 10:
            sockSend.enable  = 1
            sockSend.ident   = sockOpen.ident
            sockSend.pData   = adr(logbuf.msg[aktidx].msg)
            sockSend.datalen = strlen(adr(logbuf.msg[aktidx].msg)) +1
                                
            ssw = 11
        endaction
        
        ; FUB abarbeiten bis daten gesendet wurden
        action 11:
            sockSend FUB TcpSend()
            
            if (sockSend.status <> 65535) then
            
                ; ok
                if (sockSend.status = 0) then
                    aktidx = aktidx +1
                        
                    if (aktidx = maxsize) then
                        aktidx = 0
                    endif
                
                    ssw = 4
                    
                ; retry
                else if (sockSend.status = 32607) then
                    ssw = 12
                    
                ; fehler
                else
                    ssw = 100
                endif
            endif
        endaction
        
        ; kurz warten
        action 12:
            wait = wait +1
            
            if (wait > 5) then
                wait = 0
                ssw  = 11
            endif
        endaction
            
        ; fehler -> reconnect
        action 100:
            sockClose.enable = 1
            sockClose.ident  = sockOpen.ident
            sockClose.how    = 0
            
            ssw = 101
        endaction
        
        action 101:
            sockClose FUB TcpClose()
            
            if (sockClose.status <> 65535) then            
                ssw = 102
            endif
        endaction
        
        ; kurz warten
        action 102:
            wait = wait +1
            
            if (wait > 20) then
                wait = 0
                ssw  = 0
            endif
        endaction
        
    endcase
    Im Handbuch ist kein Beispiel und ich weiß jetzt nicht mach ich bei TcpClose() was falsch oder muß ich noch irgendwelche Optionen setzen?

    Im Handbuch steht zum Fehler 32608 nur folgendes:

    Wird der Status tcpERR_INVALID returniert, muss der Client-Ident komplett geschlossen (TcpCLose()) werden. Soll erneut versucht werden, eine Verbindung aufzubauen, ist wieder von vorne zu beginnen (TcpOpen(), Optionen setzen, TcpConnect()).



    Gruß,
    Marco
    Geändert von Leuchtkeks (30.03.2012 um 21:09 Uhr)
    Zitieren Zitieren B&R: Problem mit AsTCP  

  2. #2
    Registriert seit
    20.05.2007
    Beiträge
    301
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Hallo,
    kann mir nicht vorstellen, dass es am Test Tool liegt.

    Zum Beispiel: Wenn Du das Automation Studio 3 verwendest findest du unter den Beispiellibrarys einen Beispielquellcode.

    Was ich an deiner Stelle auf jeden Fall machen würde ist einen lokalen Port zu vergeben, das wird auch so gefordert.
    Bei TCP Open den gleichen Port wie bei TCP Client angeben. (Oder auch ein anderer, aber nicht 0)

    Ich gebe bei den Options dann noch tcpOPT_REUSEADDR mit. (TCP Open)

  3. #3
    Leuchtkeks ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.07.2011
    Beiträge
    26
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Nach langem rumprobieren hab ich festgestellt das wenn sich ein Client mit dem Tool verbunden hat sich kein zweiter verbinden kann. Ich schreib jetzt mal das Gegenstück, sprich den tatsächlichen Server der die Daten empfangen soll.

    Ich hab nur AS 2.7, das 3er will der Chef nichtbezahlen

    Könntest du mir das Beispiel aus der Library posten oder zuschicken?
    Geändert von Leuchtkeks (31.03.2012 um 10:13 Uhr)

  4. #4
    Registriert seit
    20.05.2007
    Beiträge
    301
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Ich hab nur AS 2.7, das 3er will der Chef nichtbezahlen
    Geizkragen Auf die Dauer wird er aber nicht drum rum kommen, weil die neue Hardware von B&R das Studio 3 voraussetzt.

    Könntest du mir das Beispiel aus der Library posten oder zuschicken?
    Klar. Mach ich am Montag wenn ich wieder in der Firma bin.

    Ich schreib jetzt mal das Gegenstück, sprich den tatsächlichen Server der die Daten empfangen soll.
    Implementierst du den auch in B&R?

  5. #5
    Leuchtkeks ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.07.2011
    Beiträge
    26
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zum Studio: Meine zwei Kollegen sind weg, ich hatte vorher nur die Leitrechner-Software geschrieben und hab jetzt das B&R noch dazu bekommen. Das Problem: Wir haben Provit2200, PP220, PP420, PP45 im Einsatz. Dazu kommen noch eben 5.7" und 10.4" und obendrein noch entweder CAN oder X2X. Und die Software für unsere Maschinen ist eine über 10 Jahre gewachsene Struktur an der inzwischn 4 Leute programmiert haben, also kannst dir vorstellen wieviel unterschiedliche Projekte aufm Server liegen was das für mich bedeutet einen Fehler zu finden, zu verbessern und die Änderungen in den anderen Projekten nachzuziehen

    Ich brauch kein Killer-OOP, aber wenn ich mit dem 3er Studio zumindest per C++ die ganzen Sachen etwas kapseln kann um von den 364527378 Millionen globalen Variablen wegzukommen wäre ich schon ziemlich glücklich


    Und der Server ist so eine Art einfacher Syslog-Server der einfach nur Strings empfängt und die abspeichert, entweder DB oder File, überleg ich mir noch. Das ganze läuft als dann auf dem Leitrechner-Server den sowieso jeder Kunde von uns hat.
    Wie oben beschrieben sind unsere Programme für unsere Maschienen sehr komplex und ich möchte einfach erstmal was einbauen was mir zu der Protokollierung der Istwert-Daten einfach ein zweites "geheimes" Protokoll erstellt was hat der Bediener gemacht oder in welchem Programmteil ist ein Fehler aufgetaucht damit ich in Zukunft es etwas leichter habe Fehler einzugrenzen.

  6. #6
    Registriert seit
    20.05.2007
    Beiträge
    301
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Meine zwei Kollegen sind weg
    Fachkräftemangel?

    10 Jahre gewachsene Struktur an der inzwischn 4 Leute programmiert haben
    Vielleicht Zeit für einen Cut.

    364527378 Millionen globalen Variablen
    Das Problem kenne ich

    3er Studio zumindest per C++
    C++ kostet aber derzeit nochmal richtig Asche ...

    Ich brauch kein Killer-OOP
    Im Embedded Bereich sicherlich nicht, es geht ganz einfach um ein wenig Objektorientierung um den Code wiederverwendbarer zu machen. Solche Sachen wo C einfach an seine Grenzen kommt.
    Auf die bekannten nicht deterministischen Schlüsselwörter sollte in der Echtzeitentwicklung verzichtet werden.

  7. #7
    Leuchtkeks ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.07.2011
    Beiträge
    26
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja etwas Kapselung im Code wär schon toll.

    Und Fachkräftemangel haben wir keinen, eher Involvenz + neuer Chef der uns aufgekauft hat und der partout nicht kapieren will das man nicht immer nur sparen kann sondern auch mal was investieren muß. Zumal IDE's und anständige Rechner heutzutage genauso Standard-Werkzeuge sind wie z.B. ein anständiger Schweißapparat. Schicke Bearbeituungszentren mit Keramik-Wendeplatten für die Werkzeuge aber der arme Konstrukteur muß mit einem Pentium4 mit 19" Röhrenmonitor arbeiten. Oh ich könnt mich schon wieder aufregen

  8. #8
    Leuchtkeks ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.07.2011
    Beiträge
    26
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hab den Server fertig, war tatsächlich das Test-Tool. Kann jetzt sauber die Verbindung händisch resetten, auch der automatische reconnect bei Verbindungsabbruch oder Kabel ziehen funktioniert.

  9. #9
    Registriert seit
    20.05.2007
    Beiträge
    301
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Und was war dann am Test Tool falsch?

  10. #10
    Leuchtkeks ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.07.2011
    Beiträge
    26
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Eigentlich nix, nur das es halt nur eine Verbindung akzeptiert statt mehrere.

    Aber das Beispiel vom AS 3 kannst mir trotzdem mal zuschicken zum studieren

Ähnliche Themen

  1. S7-Problem mit Profinet-I&M
    Von Dennert im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 17.02.2010, 10:30
  2. Problem mit S7 / Pt100 & PID Regler / TP177A
    Von suelzle.frank@web.de im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 18.12.2009, 10:55
  3. B&R Can Bus Problem in AS 2.7 mit PP220
    Von knorpe im Forum Sonstige Steuerungen
    Antworten: 6
    Letzter Beitrag: 22.12.2008, 20:38
  4. Problem mit SFC 14 & 15
    Von BaalX im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 19.02.2008, 09:25
  5. WinCC flex: problem mit Admin & Gruppe
    Von SIsepp im Forum HMI
    Antworten: 1
    Letzter Beitrag: 09.05.2006, 14:37

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •