Steuerparameter REQUEST

Grisu88

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

ich habe Probleme mit der Aktivierung des Funktionsblockes, über eine steigende Flanke aktivieren soll. Genau hier liegt auch mein Problem, meines erachtens habe ich auf den Eingang eine steigende Flanke gegeben. Leider wird der FB nicht gestartet und die Statusmeldung 7000 kommt, welche besagt das keine Auftragsbearbeitung aktiv ist. Weiß jemand wie ich das Problem lösen kann?

L MB 6
T AB 5
U A 5.7
UN #CONN_BUSY
= #Start


CALL "TCON" , "Daten_FB65"
REQ :=#Start
ID :=#LOCAL_ID
DONE :=#CONN_DONE
BUSY :=#CONN_BUSY
ERROR :=#CONN_ERROR
STATUS :=#CONN_STATUS
CONNECT:=#TCON_PAR



vielen Dank im Vorraus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
okay ich hab dann einfach #start auf 1 gesetzt und das geht auch nicht :p


L 1
T MB 0
U M 0.1
= #Start

CALL "TCON" , "Daten_FB65"
REQ :=#Start
ID :=#LOCAL_ID
DONE :=#CONN_DONE
BUSY :=#CONN_BUSY
ERROR :=#CONN_ERROR
STATUS :=#CONN_STATUS
CONNECT:=#TCON_PAR
 
Hallo,
entsprechen die Einstellungen in "TCon_Par" denen, die für die Verbindung benötigt werden ?
Ist die TCP-Gegenstation vorhanden und "gesprächsbereit" ?

Gruß
Larry
 
die Einstellungen wurden mit OC Wizard erstellt ich glaube das die richtig sind :) und es soll eine UDP Verbindung werden
 
Wie wertest du den aus ob die Verbindung zustande gekommen ist.

Der TCON.STATUS geht bei Antriggerung von TCON.REQ von hex7000 auf hex7001 bzw 7002.
Ist die Verbindung mit der Gegenstation zustande gekommen, gibt der Baustein über TCON.DONE
eine Flanke raus das die Verbindung zustande gekommen ist und der TCON.REQ geht auf hex0000
und anschließend wieder auf hex7000.

Wertest du diese Rückmeldungen des TCON aus?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn der Partner schon da ist und die Verbindung bestätigt, kannst du beim beobachten nichts erkennen, das geht etwas zu schnell.

Vielleicht schaltest du den Partner mal ab, dann solltest du zumindestens hex7002 im Status sehen.
 
Da ich lediglich eine Peripherie an meinem Netz hab und ich diese ich in meinem Programm verwende ist das auschalten dieser Komponente recht schwierig ;-). Jedoch hab ich eine neue Parameter UDT für einen Netzteilnehmer erstellt dessen IP Adresse nicht im Netz vorhanden ist. Es kam dadurch ein Fehler und den Status 0x8722 dazu.
 
Mach es dir doch nicht so schwer, schreib ein paar Zeilen Code womit du das Zustandekommen der Verbindung statisch speicherst.
Code:
U TCON.DONE
S Merker_irgend_was_immer_du_willst_nur_nicht_Temponär

noch einmal, du kannst es nicht beobachten der Signalzustand ist nicht statisch.
 
Temponär kann er sein wenn du eine Lokale Variabel deines aufrufenden Baustein aus dem Bereich temp nutzt.

Wenn du einen echten Merker nutzt passt das schon.

Temponär sollte er nicht sein, weil der Zustand eines Temporärer Speicherbereiches nicht immer gesichert seinen Wert nach verlassen des Bausteins behält.
Temporärer Speicherbereich wird unter Umständen von anderen Bausteinen genutzt.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann geh mal davon aus das deine Verbindung nicht zustande gekommen ist,
vorausgesetzt du hast deinen Baustein richtig angetriggert und beschaltet.

Vielleicht solltest du mal deine Fehler auswerten, bei mir sieht ein funktionierender
Testaufbau gerade so aus:

Code:
FUNCTION_BLOCK FB 1
TITLE =
VERSION : 0.1

VAR
  TCON : "TCON"; 
  TDISCON : "TDISCON"; 
  TCON_PAR : "TCON_PAR"; 
  TSEND : "TSEND"; 
  Daten : STRING  [254 ] := 'PAUL'; 
  Ein : BOOL ; 
  Aus : BOOL ; 
  senden : BOOL ; 
  verbunden : BOOL ; 
  ERR_TCON : WORD ; 
  ERR_TDISCON : WORD ; 
  ERR_TSEND : WORD ; 
END_VAR

BEGIN
NETWORK
TITLE =Verbinden
 

      CALL #TCON (
           REQ                      := #Ein,
           ID                       := #TCON_PAR.id,
           CONNECT                  := #TCON_PAR);

      ON    #TCON.ERROR; 
      SPB   A001; 
      L     #TCON.STATUS; 
      T     #ERR_TCON; 
A001: NOP   0; 
      O     #TCON.DONE; 
      R     #Ein; 


NETWORK
TITLE =Verbindung abbauen

      CALL #TDISCON (
           REQ                      := #Aus,
           ID                       := #TCON_PAR.id);


      ON    #TDISCON.ERROR; 
      SPB   A002; 
      L     #TDISCON.STATUS; 
      T     #ERR_TDISCON; 
A002: NOP   0; 

      O     #TDISCON.DONE; 
      R     #Aus; 


NETWORK
TITLE =Status Verbindung
      U     #TCON.DONE; 
      S     #verbunden; 
      O     #TDISCON.DONE; 
      R     #verbunden; 
 

NETWORK
TITLE =

      U     #verbunden; 
      U     #senden; 
      =     #TSEND.REQ; 

      CALL #TSEND (
           ID                       := #TCON_PAR.id,
           LEN                      := 20,
           DATA                     := #Daten);


      ON    #TSEND.ERROR; 
      ON    #senden; 
      SPB   A003; 
      L     #TSEND.STATUS; 
      T     #ERR_TSEND; 
A003: NOP   0; 

      O     #TSEND.DONE; 
      ON    #verbunden; 
      R     #senden; 

END_FUNCTION_BLOCK
 
Zuletzt bearbeitet:
ganz durchsteigen tue ich da nicht ^^ mit dem quellenorientierten Programmieren hab ich mich noch nicht wirklich auseinander gesetzt :p sry
 
Wie machst du es denn selber ... (wenn dir der Code von RN nicht gefällt) ?

In jedem Fall bekommst du erst ein Connect.done wenn du dich mit irgendwem (entsprechend deiner TCon_Par) connected = verbunden hast ...

Gruß
Larry
 
Zurück
Oben