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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: S7 Neuling - etwas frustriert

  1. #1
    Registriert seit
    08.11.2007
    Beiträge
    17
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zunächst mal an alle im Forum!

    Ich bin aboluter S7 Anfänger (komme aus dem Windows-Umfeld, mehrjährige Programmiertätigkeit in C/C++, auch Embedded-Realtime-System auf C-Basis).

    Ich befasse mich mit SCL und soll eine C-Software, die auf einer Motorola-CPU läuft nach S7 portieren.
    Randbedingung: auf der S7 läuft bereits eine andere Steuerungssoftware, ich bin also nicht alleine. Die bestehende SW macht heftig Gebrauch von C-üblichen Datenmanipulationen (Bitoperationen, Schiebungen, ...Pointeraritmethik....)

    Als Schnittstelle nach außen fungiert eine TCP/IP-Socket-Verbindung.

    Unter C recht einfach, stellen sich mir beim Studium von S7/SCL andauernd "Hindernisse" und "Beschränkungen" in den Weg.

    Also ich fange mal an:
    Sockets: ich will die AG_SEND/AG_RECEIVE benutzen, in SCL benutze ich die ANY-Pointer, das ist auch klar.
    Der Anypointer braucht ja u.a. die Bausteinnummer (DB), die Anfangsadresse und den Offset des Datenbereiches.
    Wenn ich "hardcoded" die Nummern, Längen und Adressen der Datenbereiche eintrage, dann stosse ich spätestens dann auf Schwierigkeiten, wenn sich meine Bausteinnummern ändern (davon ist auszugehen, wenn in ein bestehendes System integriert wird). Auch wenn sich die Daten des Bausteins ändern ist Sense.
    In C gibt es die recht handlichen Direktiven sizeof()/offsetof() usw.

    Genau sowas ähnliches suche ich.

    Wenn ich alle meine Datein in einen einzigen (oder wenige DB) reinkriege, habe ich später weniger Aufwand (== Fehlerquellen).

    Kann mir jemand einen Tipp geben, wie man sizef/offsetof in SCLK realisieren kann?

    Wie sind im Allgemeinen die Erfahrungen, wenn man ein Zusatzprogramm auf eine bestehende Steuerung draufpackt.
    Ich bin ehrlich: ich halte es für eine Katastrophe, aber leider will mein Chef das so (hat keine Ahnung von SPSs).

    Ich fühle mich hier irgendwie auf einem Himmelfahrts-Projekt ....
    Zitieren Zitieren S7 Neuling - etwas frustriert  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.709
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    du kannst (gerade unter SCL) die ANY-Pointer auch auf einen Bereich in deiner STAT-Deklaration verweisen lassen. Dann bleibst du in deinem FB und deinem (eigenem) Variablen-Pool.

    Zum besseren Verständnis :
    den Pufferbereich, den du aktuell an dem RCV-FB hast ist vermutlich irgendein DB. Du kannst nun genauso gut eine gleich lange (gleich dimensionierte) Variable deines FB's daran hängen.

    Vielleicht hilft dir das jetzt schon weiter. Ansosnsten poste mal deinen Ansatz ...

    Gruß
    LL

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Du mußt auch die Any-Pointer nicht "Hardcoded" verdrahten. Mit der AT-Anweisung kannst du in SCL jeden der "Teile" des Any-Pointers für dich im Programm zugänglich machen und beliebig manipulieren. So kannst du z.Bsp. als Inputparameter deines FC/FB die DB-Nummer (Int), den Beginn des Datenbereiches im DB (Int) usw. übergeben und dann den Any-Pointer entspechend zusammenbauen. Siehe dazu mal hier in der Forumssuche und der FAQ.

    Hier mal ein Link: http://www.sps-forum.de/showthread.p...4&highlight=AT
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  4. #4
    augenstern ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.11.2007
    Beiträge
    17
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    das hab ich mir schon gedacht, dass ich Variablen in meinem Instanz-DB (statische Daten) benutzen kann, aber was fülle ich in den ANY rein? Da brauch ich u.a. eine DB-Nummer, eine Adresse. Wie komme ich zu denen?

    Ralle: Danke für Deinen Tipp mit dem AT!


    An alle: in der Doku des Anypointer steht u.a. : für das Feld DB muß die DB Nummer oder 0 eingetragen werden.

    Leider schreiben Sie nicht, was die 0 bedeutet. Weiß das jemand?
    Zitieren Zitieren Hallo LarryLaffer  

  5. #5
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.849
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    hast du das gelesen?
    http://www.sps-forum.de/showthread.php?t=12923
    da stehts doch

    wenn man auf einen datenbereich zugreift der kein db ist sollte man dort eine 0 reinschreiben.
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  6. #6
    augenstern ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.11.2007
    Beiträge
    17
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Rotes Gesicht

    Hi Volker!!

    Danke für die Erläuterungen. Jetzt seh ich etwas klarer.

    Bin eben noch blutiger Step7 und SCL Anfänger.

    Ich hoffe ihr Leute hier entschuldigt meine Fragen (die für Euch wohl trivial sind).

    Vielleicht hat der eine oder andere mal Fragen zu C/C++ oder Windows-Programmierung. Da helfe ich dann gerne aus ....

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.709
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    ? ...
    Ist denn dein Problem jetzt vom Tisch ?
    Hört sich für mich nicht so an ...
    Vielleicht solltest du doch meinen anfangs gemachten Vorschlag noch mal aufgreifen :
    ... Ansonsten poste mal deinen Ansatz ...
    Gruß
    LL

  8. #8
    augenstern ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.11.2007
    Beiträge
    17
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Blinzeln

    Ich habe mittlerweile Beispielcode für sizeof/offsetof gekriegt (falls es jemand interessiert: http://www.plctalk.net/qanda/showthr...952#post241952)

    Folgender Hintergrund zu meinen Fragen:
    - mein SPS-Programm soll in bestehende Programme integriert werden.

    Da habe ich dann natürlich das Problem, dass ich Bausteinnummern pflegen muß. Ich werde FCs/FBs/DBs natürlich symbolisch benamen, aber der Verwaltungsaufwand (und mögliche Fehlerquellen) ist nach wie vor da.

    Also hab ich mir gedacht, ich packe meine Daten in ein oder zwei DBs. Meine DBs strukturiere ich selbst. Wenn ich jetzt meine Daten via ANYpointer (z.B.für AG_SEND ...) usw behandeln muß, brauch ich u.a. deren Byteadressen, und die DB-Nummern. (Sonst müsste ich die Daten in separate DBs legen, damit der Offset immer 0 sein wird. Und genau das will ich vermeiden).

    Per BLOCK_DB_TO_WORD(...) krieg ich die DB-Nummer und über die Offset-FC die Adresse raus.

    So spar ich mir die DB-Inflation und kann zur Laufzeit dynamisch auf meine Daten zugreifen.

    - sizeof: man muß die Größen von Datenbereichen (bei mir: FiFo-Ringpuffer) leider harcoded machen (also z.B. puffer : array[0..127] of INT) da SCL leider keine #defines oder globalen CONST kennt (soweit ich zumindest bisher weiß). Also muß ich mein Programm überall da ändern, wo auf den Puffer zugegriffen wird (bei mir wird sich dieser Puffer kundenspezifisch ändern). Und das will ich soweit möglich vermeiden.


    Gibt es nicht irgendwie Tricks um globale CONST zu "simulieren" ?

    Ich hatte zwar einen 2-tägigen SCL-Kurs von einem "Siemens-Experten", aber ich muß schon sagen, die Leute hier in diesem Forum und in dem amerik. Forum (s.o.) sind weitaus kompetenter!!!
    Zitieren Zitieren Hallo Larry et al.!  

  9. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.709
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    es gibt keine "globalen Konstanten" ... aber es gibt ja noch die Standard-DB's in die man alles Mögliche hineinschreiben kann.

    Bei deinem FIFO könnte man es z.B. so machen, dass du dafür einen extra DB nimmst und in DW0 die Größe des ARRAY's schreibst. Eine andere Alternative wäre, wenn du das ARRAY immer für deine max. Befürfnisse erzeugst und ggf. nur Teile davon nutzt. Oder du übergibst das FIFO als ANY-Pointer (DB100.DBX0.0 Byte 200) = das bedeutet, dass das FIFO bei DB100 Byte 0 beginnt und 200 Bytes groß ist. Einen ANY kann man in SCL eigentlich problemlos verarbeiten.

    Vielleicht hilft das Ansatz weiter ...
    Gruß
    LL

  10. #10
    augenstern ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.11.2007
    Beiträge
    17
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Blinzeln


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke für Deine Anregungen!

    Ich muß das ganze eben so machen, dass ich möglichst wenige Konflikte mit Bausteinnummern kriege. Sonst werde ich später wahnsinnig mit dem Verwaltungsaufwand und der Fehlersuche....

    Problem ist eben, dass mein Prog in Programme von Kunden integriert werden soll (mein Chef will das eben so).

    Gruß
    Zitieren Zitieren Hallo Larry!  

Ähnliche Themen

  1. mal etwas anderes als nur Siemens!
    Von rostiger Nagel im Forum Stammtisch
    Antworten: 16
    Letzter Beitrag: 31.07.2011, 11:27
  2. mal etwas nettes zu Bildbausteinen
    Von rostiger Nagel im Forum HMI
    Antworten: 3
    Letzter Beitrag: 17.11.2008, 01:45
  3. Vipa OP3, etwas fehlt?
    Von Mess&Regler im Forum HMI
    Antworten: 1
    Letzter Beitrag: 04.05.2008, 00:03
  4. Suche etwas seltsame SPS
    Von Parallax im Forum Simatic
    Antworten: 45
    Letzter Beitrag: 08.05.2007, 17:03
  5. Habe etwas verpennt...
    Von Pattty im Forum Sonstige Steuerungen
    Antworten: 35
    Letzter Beitrag: 09.02.2007, 10:09

Lesezeichen

Berechtigungen

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