FC 5, FC 6 Bedeutung ID/LADDR???

fk- princess

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

als erstes erkläre ich mal fix die aufgabenstellung:

in einer Funktion befindet sich der Sendebaustein FC 5 und der Empfangsbaustein FC 6

im CP343-1LEAN ist ein aktiver verbindungsaufbau zu einer IFM kamera aufgebaut. Partneradresse ist fest eingestellt. bei der projektierung der verbindung habe ich eine eine ID ( 01 ) vergeben, die auch für Kamera1 bei den Aufrufen der FC5 und FC6 gültig ist. der LADDR w#16#100 ist ja die Baugruppenadresse des CP´s, soweit ich das richtig verstanden habe.

ist nur eine verbindung projektiert, und eine kamera angeschlossen, so läuft alles tadelos.

projektiere ich eine zweite verbindung ( ID: 2 LADDR: weiterhin W#16#100) und spreche die selbe sende-/empfangsstation an, wobei bei der ID die 2 verwendet wurde, so wird jedoch die erste kamera angesprochen und auch das ergebnis der ersten kamera in den empfangspuffer geschrieben und verarbeitet.

wo könnte da mein gedankenfehler sein???

ich habe das so verstanden, das mit der ID doch genau gesagt wird, welche nachricht an welche teilnehmer im netz geht. bei der projektierung habe ich ja auch der ID einen genau genannten partnerteilnehmer genannt.

Bsp: kamera1: 192.168.0.181
kamera2: 192.168.0.182

warum wird dann aber von dem funktionsaufruf für kamera2 die netzadresse von kamera1 angesprochen... verwirrt mich n bissel

grüsse mirko
 
Hallo,
werden nicht die Ethernet-Verbindungen im Net-Pro projektiert?
Dann bekommt man unter "Objekteigenschaften" für jede Verbindung, die projektiert wird, eine ID und eine LADDR. Diese muss man dann im Programm verwenden.

Gruß
Torsten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
habe das im net-pro projektiert. ID ist dann wählbar, der LADDR ist aber fest und nicht mehr veränderlich. ich werde mich da aber nochmal mit befassen, denn egal wie viel zeit zwischen den aufrufen der sende-/empfangsfunktion liegt, kommt ein zweiter teilnehmer hinzu, läuft immernoch alles unkontrolliert über teilnehmer1(kamera1)...

wollte damit evtl konflikte beim aufrufen der funktion ausschliessen, weil senden-/empfangen is eine funktion die ich teilnehmerbezogen oft aufrufen will, halt mit veränderbarer ID... das mit dem LADDR erschliesst sich mir noch nicht völlig :)
 
LADDR stammt aus der EA Adresse der CP in der Hardwarekonfiguration wenn Du da eine W#16#100 stehen hast, hat die CP die EA Adresse 256 in der Hardwarekonfig.

Wenn Du zwei kameras ansprechen willst musst Du zwei Verbindungen konfigurieren.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
die ID schalte ich ja im programm um. kamera1 ruft fc5 und fc6 mit der ID1 auf, kamera2 mit ID2 und so weiter. der LADDR ist fest.

in der Verbindungsübersicht im NETPRO sehe ich noch "remote verbindung". kann darüber nicht wirklich was finden. da steht auch was drin, was ich aber nicht wissentlich angegeben habe. ich weiss auch nicht, wo ich da evtl was ändern kann.

alle verbindungen sind vom CP ausgehende aktive verbindungen, da ich sonst die kamera(s) nicht ansprechen kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Tip:
Im KOP/AWL/FUP-Editor rechter Mausklick auf den FC5/FC6-Baustein-Aufruf > Verbindungen...
dann wird eine Liste der verfügbaren projektierten Verbindungen angezeigt -> die gewünschte Verbindung auswählen -> die zugehörigen ID und LADDR werden in den Baustein-Aufruf eingetragen.

Ansonsten wie meine Vorposter: für jede Verbindung einen eigenen FC5/FC6-Aufruf programmieren und auch in jedem OB1-Zyklus aufrufen.

Harald
 
meint ihr damit, das ich zB den Empfangsbaustein FC6 mehrmals dupliziere und umbenennen?

Bsp: fc61, fc62, etc
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
ok, ja so mache ich das im moment auch. die zeitfenster für die sendebausteine erzeuge ich mit mit dem ob35 als interrupt. laut siemens hilfe dürfen parameter des sende oder empfangsbausteins nur dann geändert werden, wenn der aufruf (x-1) fertig abgearbeitet wurde.

wenn ich die anderen sendeaufrufe nicht verriegel, dann gibt es wildes chaos im FC5 ( ewig lange strings, datenmüll als inhalt und und)

jetzt ist es so, das alle 50ms eine kamerafunktion einen sendeauftrag abschicken kann, der dann in dem fenster abgearbeitet wird. die sendefunktion wird ohne verriegelung aufgerufen. zur zeit habe ich noch das problem, das auch mit verschiedenen ID´s an den empfangsaufrufen alle das empfangen, was kamera 1 zur SPS sendet.

die 5 anderen teilnehmer sind auch erst "nur" projektiert, noch nicht angeschlossen... muss ich noch dazu sagen

edit: problem ist gelöst. ich habe die funktion MID (fc26) zum herrauslösen meiner benötigten teilstrings in einem extra funktionsbaustein gehabt. irgendwas, den grund kenne ich nicht, hat dort den fehler verursacht, das trotz verschiedener adressierung der datenquelle für alle teilnehmer quelle1 genommen wurde um die teilstrings zu erhalten.

nun steht die funktion fc26 direkt in der kamerafunktion und alles läuft wie es soll

danke für die hilfe bis dahin

grüsse
 
Zuletzt bearbeitet:
ich habe noch eine frage zum FC6...

alle siemenshilfen beschreiben ein byteweises empfangen. das beinhaltet die gesamte puffer und zeigerprogrammierung rund um den fc6. ich möchte jedoch den gesamten string mit einmal in einen puffer laden, zb array of byte oder string, und dann teile der zeichenkette auswerten, da ein byteweises empfangen mein system mit mehreren teilnehmern stark ausbremst.

leider habe ich das problem, das bei einem neuen empfang der puffer nicht wieder von anfang an beschrieben wird, sondern das der funktionsbaustein fc6 am ende der vorherigen nachricht anknüpft und erst beim signal NDR=1 wieder von vorn anfängt. auch ein vorhergehendes "nullen" des puffers bringt nichts. an das NDR-signal komme ich beim siemens baustein auch nicht ohne weiteres an.

bis jetzt sieht mein versuch so aus, dass ich die nachricht einfach in den puffer lade und nach dem CR oder LF suche und den gesuchten inhalt des arrays dann über diesen weg finde. eine bessere lösung wäre ja ein puffer, der immer wieder an stelle 0.0 neu überschrieben wird.

hat wer evtl noch einen tipp, wie ich das ganze besser lösen könnte???
 
Hallo,
es könnte sein das du an deiner Kamera mehr oder weniger Daten sendest / empfängst als am FC5/6 projektiert wurde. Soll heissen wenn dein Kamera Projekt 10byte sendet und 10byte empfängt. Muss der Anypointer an den Send/Empfangs FC's die selbe länge haben, also 10byte. Wichtig ist aber auch noch ob Endezeichen mit gesendet werden ,oder angehangen sind. Dadurch können sich die empfangenen Daten verschieben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
der sendesting ist immer 5 byte. der empfangsstring ist immer 24bytes. byte 23 ist das CR, byte 24 ist das LF. laut den siemens hilfen ist der empfangspuffer ein immer nur ein byte, wie auch der any zeiger. wenn ich da etwas ändern möchte, kommen fehlermeldungen.

wollte es jetzt so machen das ich den fc6 einfach aufrufe, bei dem der empfangsbereich 26 bytes gross ist. da habe ich aber bei jedem empfang einen versatz. also muss ich derzeit nach dem zeilenumbruch suchen ( LF) und dann mit einem offset zu den eigentlichen daten gelangen wie zb pixelfläche.

der riesen nachteil ist, das ich länge, fehleermeldungen und das NDR- signal nicht wirklich auswerten kann
 
Auf welches Beispiel von Siemens beziehst du dich denn eigentlich?
Mach doch mal den Empfangs-Any 7 Byte lang, dann sollte das doch gehen.
 
http://support.automation.siemens.c...objaction=csview&extranet=standard&viewreg=WW
das ist die bezugsquelle und dazu noch der E2Vxx SPS baustein von der Firma IFM

den empfangspuffer am FC06 erweitern versteh ich ja noch, aber denn darunter die ganze sache mit dem ANY-zeiger und dem bitoffset, das versteh ich nich so recht ( also das verständnis über einen ausbau auf erweiterung von einem byte auf ein array oder string)


wenn ich das so programmiere wie in der hilfe, empfange ich alles byteweise und das macht mein system sehr langsam. einfach am RECV-ausgang n array anlegen will auch nich so recht klappen :(
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Beispiel von Siemens kann bis 100 Byte mit einem Mal empfangen. Je nach CPU (leider) werden die Daten im Buffer einfach angehängt oder es wird immer am Anfang begonnen.

Schreib mal in deinem Any-Pointer statt "Byte 100" "Byte 7".
Deinen Empfangs-DB kannst du ja auch mal anpassen, der Emfangsbereich sollte auf jeden Fall lang genug sein.
 
ich weiss nicht, was ich falsch mache, aber mein empfänger fängt nicht wieder von vorn an.

meine empfangsnachricht ist konstant 24bytes gross.

wenn ich jetzt am fc6 db222.dbx0.0 byte24 eingebe, wobei der empfangsbereich im DBein array mit 255 freien feldern ist, dann bekomme ich beim ersten empfang einen error-status von 16#80b1

wenn ich die bytezahl auf vll 30 erhöhe, empfange ich meinen string, durch die nun aber 6 freien zeichenfelder erreiche ich jedoch einen unerwünschten versatz
 
Erhöhe doch mal schrittweise, bis es geht, also 25,26,27 ... und ob dann auch ein Versatz auftritt. Solange 801BHex angezeigt wird, ist der Zielbereich zu klein angegeben. Zu groß darf der Bereich auch nicht sein, da sonst der die die nächste empfangene Nachricht hinten angehängt wird und der Rest dann vorn Versetzt erscheint. Wenn du immer die selbe Länge hast ist das ja schon einmal gut.
 
Zurück
Oben