Altes Projekt neuer Baustein

vollmi

Level-3
Beiträge
5.425
Reaktionspunkte
1.403
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Ich habe hier ein älteres Projekt welches mit einer neuen Kommunikation ausgerüstet werden soll. Da das Projekt wirklich äusserst schlecht dokumentiert ist und keine Vollqualifizierten Zugriffe hat. Ist es echt mühsam da grossartig in den Funktionen rumzuwerkeln Darum möchte ich es mir möglichst einfach machen.

Code:
      CALL  "P_SND_RK" , DB8
       SF      :='S'
       REQ     :="M16.2"
       R       :="M16.3"
       LADDR   :=304
       DB_NO   :="MW20"
       DBB_NO  :="MW22"
       LEN     :="MW24"
       R_CPU_NO:=
       R_TYP   :='D'
       R_NO    :=50
       R_OFFSET:=0
       R_CF_BYT:=255
       R_CF_BIT:=
       DONE    :="M16.0"
       ERROR   :="M16.1"
       STATUS  :="MW18"
Gesendet soll dann mit dem neuen Baustein werden:
Code:
      CALL  "AG_SEND"
       ACT   :="M16.2"
       ID    :=1
       LADDR :=W#16#100
       SEND  :=
       LEN   :="MW24"
       DONE  :="M16.0"
       ERROR :="M16.1"
       STATUS:="MW18"
Jetzt trage ich ja normalerweise bei Send die den Start und die Grösse des Bereiches so an: P#DB102.DBX20.0 BYTE 16

Wie kriege ich es jetzt hin das die oben getrennten Inhalte von MW20 (DbNr) MW22 (Startadresse Byte) und MW24 (Blockgrösse) in ein für SEND taugliches Format? So das trotzdem dynamisch verändert werden kann.

mfG René
 
Zuletzt bearbeitet:
hallo,

dazu musst du dir vor dem SEND Aufruf einen ANY bauen (temp-Variable).
Da gehören deine Merkerworte und ein paar Konstanten rein.

Sollte hier im Forum einiges zu stehen.

Diesen ANY übergibst du dann an den SEND Baustein.

Micha
 
Zuviel Werbung?
-> Hier kostenlos registrieren
P#DB102.DBX20.0 BYTE 16
Code:
      L     P##quellzeiger            //Temp. Variable vom Typ Any
      LAR1  

      L     W#16#1002                  // Typ Byte
      T     W [AR1,P#0.0]

      L     16                              // Anzahl der Bytes
      T     W [AR1,P#2.0]

      L     102                            // Quell-DB-Nummer
      T     W [AR1,P#4.0]

      L     20                             // Byteadresse 
      SLD   3
      OD    DW#16#84000000
      T     D [AR1,P#6.0]
Jetzt nur noch für die Parameter, die Du dynamisch ändern willst, die Konstanten durch Variablen ersetzen und dann funzt das.:)
 
Danke euch. Ich habe das jetzt mal so gemacht:

Jetzt noch ein paar Verständnisfragen. Es ist ok wenn ihr mir den Suchbegriff in der Hilfe von Step7 sagen könnt, dann lese ich es auch selber nach. Aber so wirklich schlau bin ich nicht geworden.

Code:
       L     W#16#1002                   // Typ Byte
      T     W [AR1,P#0.0]

Wo finde ich welcher Code welcher Datentyp bedeutet?
Code:
      L     "MW22"                      // Byteadresse 
      SLD   3
      OD    DW#16#84000000
      T     D [AR1,P#6.0]

Wozu ist das schieben und verodern?

Irgendwie ist das wieder ganz speziell.
 
Wie ist das denn bei den alten CPUs? Auf der Anlage ist eine 315-2DP 315-2AF02-0AB0 installiert und das Programm komplett mit

Code:
AUF DB xx
L DBWx
T MWx

programmiert.

Kann ich davon ausgehen das mein Objektfb den ich üblicherweise verwende für diese Anwendung trotzdem funktioniert? Ich programmiere normal mit Zugriffen.

Code:
L DB100.dbwx
t MWx

Oder sollte ich meinen Baustein umbauen auf dieselbe Zugriffsweise wie in der Anlage?
 
Wie ist das denn bei den alten CPUs? Auf der Anlage ist eine 315-2DP 315-2AF02-0AB0 installiert und das Programm komplett mit

Code:
AUF DB xx
L DBWx
T MWx

programmiert.

Kann ich davon ausgehen das mein Objektfb den ich üblicherweise verwende für diese Anwendung trotzdem funktioniert? Ich programmiere normal mit Zugriffen.

Code:
L DB100.dbwx
t MWx

Oder sollte ich meinen Baustein umbauen auf dieselbe Zugriffsweise wie in der Anlage?

Hallo,
sollte gehen...
Denk aber dran, wenn du nach einem AUF... einen direkten Zugriff machst, liegt im DB-Register die DB-Nr, auf den du direkt zugegriffen hast !

Musst einfach danach noch AUF... auf den vorherigen DB sagen...

Gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Musst einfach danach noch AUF... auf den vorherigen DB sagen...

Danke für den Hinweis. Ich hänge diese Prozedur eh in einen eigenen Baustein ganz am Ende des Programms.

Aber so richtig laufen tuts leider trotzdem noch nicht.
Ich kriege da immer Projektierung fehlt (8183h) abwechselnd mit Auftrag läuft (8181h).

S71.jpg

S72.jpg


Fehlt dem noch etwas? Die Uebergabewerte des DB Länge und dergleichen sind doch im Dezimal Format richig oder?

Die Partner ID ist leer weil die Verbindung an einen unspezifizierten Teilnehmer geht. Das heisst nur IP, ID, TSAP

Habe ich da noch etwas übersehen?
 
Aber so richtig laufen tuts leider trotzdem noch nicht.
Ich kriege da immer Projektierung fehlt (8183h) abwechselnd mit Auftrag läuft (8181h).
Die HW-Konfig ist in Testsystem geladen?
Mache mal die Spezialdiagnose auf den CP343-1 (CP markieren, dann Zielsystem > Baugruppenzustand, dann Spezialdiagnose)
- Betriebszustand: ist die Send/Recv Kommunikation in Run?
- Verbindungen: wird Deine Verbindung da aufgeführt?

Ist der CP343-1 wirklich auf Adresse 352 (W#16#160) projektiert?
LADDR und ID kann man direkt an AG_SEND eintragen lassen: rechter Mausklick auf den Bausteinaufruf, dann "Verbindungen..."

Harald
 
Die Partner ID ist leer weil die Verbindung an einen unspezifizierten Teilnehmer geht. Das heisst nur IP, ID, TSAP

Habe ich da noch etwas übersehen?
Stimmen denn IP und TSAP mit dem Teilnehmer überein, sprich steht beim Partner das "gegengleiche"?
Wer ist der aktive Verbindungspartner?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die HW-Konfig ist in Testsystem geladen?
Mache mal die Spezialdiagnose auf den CP343-1 (CP markieren, dann Zielsystem > Baugruppenzustand, dann Spezialdiagnose)
- Betriebszustand: ist die Send/Recv Kommunikation in Run?
- Verbindungen: wird Deine Verbindung da aufgeführt?

Jap die Kommunikation ist in Run
Die Verbindung wird auch aufgeführt mit "Aktiver Verbindungsaufbau läuft"

Ist der CP343-1 wirklich auf Adresse 352 (W#16#160) projektiert?

Jap die ist da.

LADDR und ID kann man direkt an AG_SEND eintragen lassen: rechter Mausklick auf den Bausteinaufruf, dann "Verbindungen..."

Jup die stimmen. Mache ich bei einzelnen Bausteinen auch so.
 
Stimmen denn IP und TSAP mit dem Teilnehmer überein, sprich steht beim Partner das "gegengleiche"?
Wer ist der aktive Verbindungspartner?

Der Verbindungspartner ist noch garnicht am Netz ich habe zwar einen PC aufgebaut der testweise die Anfragen entgegennehmen und protokollieren soll. Aber jetzt sollte als Status eher sowas wie 8311h kommen.

Edit: Ich habe den Empfänger mal online genommen. Jetzt fängt der LSEND an zu senden ohne Fehlermeldung. Aber wie kommt denn jetzt die Meldung fehlerhafte Projektierung zustande wenn der Empfänger garnicht erreichbar ist?

mfG René
 
Zuletzt bearbeitet:
Hi,

solange "aktiver Verbindungsaufbau läuft" ist die Verbindung nicht aktiv, und es kann auch nix gesendet werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

solange "aktiver Verbindungsaufbau läuft" ist die Verbindung nicht aktiv, und es kann auch nix gesendet werden.

Es muss ja auch noch nichts gesendet werden solange der Partner nicht online ist. Allerdings hätte ich eben dann den Status 8311h erwartet. Also Partner nicht erreichbar. Die Statusanzeigen werte ich aus und lege sie auf die Visu. Und da ist es dann schon missverständlich wenn da steht Projektierung fehlerhaft und keiner nach einer unterbrochenen Verbindung sucht.

Beim LRECV kriege ich jetzt als Status 80B0h (Baugruppe kennt den Datensatz nicht) da verstehe ich auch nicht was damit gemeint ist.
ZielDB fehlerhafter Typ? Es wird noch nix vom Partner gesendet? oder was?
 
imho muss die Verbindung aktiv sein.

Bei den Bausteinen stehen sicher mehrere Fehler an, aber sie können ja nur einen ausgeben.
 
Zurück
Oben