Typ 'anwenden'?

d.t.m
2010-02-24
2010-03-02
  • d.t.m - 2010-02-24

    Servus,

    nachdem das Schalten per SMS mit Benachrichtung an meiner Wago 750-841 klappt, versuche ich gerade eine SMS zu versenden. Der Versand soll bei Zustandsänderung eines Merkers (BOOL) erfolgen.

    Ich habe bisher nur mit FB gearbeitet, es gibt aber keinen fertigen Funktionsblock für den SMS Versand.

    In der GSM_SMS_01.lib von Wago gibt es einen Datentyp namens typGSM_SEND_SMS

    Gesamte Bibliothek (pdf)

    An sich logischer Aufbau - aber wie muss ich vorgehen?

    Muss ich in st einen neuen Funktionsblock mit dem obigen Inhalt erstellen und entsprechend anpassen?

    Habe schon vieles ausprobiert aber komme nicht weiter..

    Gruß

    IMG: Bildschirmfoto 2010

     
  • d.t.m - 2010-02-25

    Ist meine Frage zu trivial? Ich weiß wirklich nicht wie es geht.

    -Oder zu kompliziert?

    -Fehlen Informationen um die Frage beantworten zu können?

    Vielleicht ein Tipp?

    Ich bin ja gern bereit das selbst hinzubekommen, aber ein Hinweis in dir richtige Richtung ist doch bestimmt drin, oder?

     
  • Oberchefe - 2010-02-25

    also soo schwierig kann das doch nicht sein, Wago liefert ein Beispielprogramm und einen fertigen FB (der nicht nur Empfangen tut sondern auch senden. Die Struktur ist in der Bibliothek schon angelegt, alles was Du tun mußt ist eine Variable vom Typ "typGSM_SEND_SMS" anzulegen, im Wago Beispiel Programm sieht das (unter anderem) so aus:

       VAR_IN_OUT
       NEW_SMS_RECEIVED   :   BOOL;
       RECEIVED_SMS         :   typGSM_RECEIVE_SMS;
       SEND_SMS            :   typGSM_SEND_SMS;
       START_SEND_SMS      :   BOOL;
    END_VAR
    

    Dann füllst Du die im Programm (siehe auch Beispiel Programm):

                (*--- im Handy gespeicherte SMSC-No. verwenden -----------*)
                SEND_SMS.SMSC_No.International := FALSE;
                SEND_SMS.SMSC_No.Number       := '';
                (*------------------------------------------------------------------------------*)
                (*--- Als Ziel die Absendernummer der Ursprungsmsg. eintragen ---*)
                SEND_SMS.Dest_No := RECEIVED_SMS.Sender_No;
                
    SEND_SMS.Msg       := 'Hallo ! Sie heben eine SMS an den WAGO-Ethernetkoppler geschickt';
    

    Dann noch das Bool für's Senden betätigen:

    START_SEND_SMS    := TRUE;  (* senden auslösen *)
    

    , fertig.

     
  • d.t.m - 2010-02-26

    Hallo Oberchefe,

    vielen Dank erstmal dass du auf mein Problem eingehst.

    (Ich hatte nie eine Schulung (studiere in eine gaaaanz andere Richtung) und auch nie programmieren gelernt, deshalb fällt es mir zugegebenermaßen etwas schwer den Einstieg zu finden.

    Mein Vorhaben:

    Rauchmelder triggern entsprechend jeweils einen DI.

    Gibt RM 5 Alarm, möchte ich eine Nachricht "Alarm RM 5" erhalten.

    Meine konkreten Fragen wären:

    **1. Muss ich ein neues Programm erstellen? **

    Die o.g. Funktionalität soll in ein bestehendes Projekt zugeführt werden. In meinem PLC_PRG (PRG-FUP) sind die Variable "typGSM_SEND_SMS" und die anderen im 1. von dir geposteten Codeteil schon definiert, da das Schalten von Aktoren per SMS anhand der 'fertigen' Funktionsblöcke sowie die autom. Empfangsbestätigung per SMS schon integriert ist.

    2. Falls ein zusätzl. Programm für diesen Zweck erstellt werden muss, kommen die (in deinem Post) Codeteile 2. und 3. in dieses Programm oder sind es Unterfunktionen vom Programm (siehe Frage 1)?

    3. Bisher habe ich nicht mit der Taskkonfiguration gearbeitet. In der 'Anleitung' von Wago (s.Bild) steht, dass der Baustein (welcher?) vom Anwender zyklisch aufgerufen werden muss. Wie macht man das?

    Entschuldige wenn dir meine Unwissenheit diesbezgl. als erscheint - das sind aber wirklich die Fragen die sich mir stellen, da ich schon einiges ausprobiert habe um es hinzubekommen, allerdings ohne Erfolg.

    Grüße

    IMG: Bildschirmfoto 2010

     
  • Oberchefe - 2010-02-26

    Zitat:
    1. Muss ich ein neues Programm erstellen?

    Nein, nur das vorhandene etwas erweitern

    Zitat:
    In meinem PLC_PRG (PRG-FUP) sind die Variable "typGSM_SEND_SMS" und die anderen im 1. von dir geposteten Codeteil schon definiert, da das Schalten von Aktoren per SMS anhand der 'fertigen' Funktionsblöcke sowie die autom. Empfangsbestätigung per SMS schon integriert ist.

    der zu versendende Text muß nur in die vorhandene Struktur per Programm reingeschrieben werden, also wenn Eingang vom Rauchmelder kommt, dann Bool setzen daß eine Meldung raus soll. Wenn der Baustein nicht gerade zufällig was versendet (Bestätigung Fernschalten...) wird das Bool wieder zurückgesetzt, der Text "Rauchmelder..." in die Struktur reingeschrieben und der Versand gestartet. Sollte der Baustein gerade was senden bleibt das Bool eben solange gesetzt bis der Baustein fertig ist , dann wird danach der Text gesetzt und das Bit zum Versenden gesetzt.
    Falls Du das nicht im gleichen Programm wie das bereits vorhandene programmieren willst/kannst mußt Du die jetzige Deklaration der Variablen vom aktuellen Programm entfernen und in die Globalen Variablen verschieben, somit kannst Du von jedem Programm drauf zugreifen.

    Zitat:
    3. Bisher habe ich nicht mit der Taskkonfiguration gearbeitet. In der 'Anleitung' von Wago (s.Bild) steht, dass der Baustein (welcher?) vom Anwender zyklisch aufgerufen werden muss. Wie macht man das?

    Damit will Wago sagen daß Du dafür sorgen mußt daß der Baustein (Typ GSM_SMS) öfter mal durchlaufen wird, nicht nur einmalig zum Versenden der SMS, aber das dürfte bei Dir bereits der Falls sein, andernfalls könntest Du auch nichts empfangen.

    Generell zu den Tasks:

    falls im Projekt ein Programm namens "PLC_PRG" existiert wird dieses quasi ständig aufgerufen, d.h. wenn das Programm komplett durch bearbeitet ist wird sofort wieder von vorne angefangen.

    Oftmals ist es von Vorteil auf zyklische Abarbeitung umzustellen. Unter "Resourcen", "Taskkonfiguration" kann ein Task (oder auch mehrere) definiert werden mit einem festgelegten Intervall.

    Da kann man dann beispielsweise festlegen, daß alle 20ms ein Programmzyklus starten soll. Dauert er dann tatsächlich mal 10 oder mal 15ms entsteht dadurch für die CPU eine Art "Leerlauf" (von 10 oder 5ms), die sie für Kommunikation (Webvisu...) nutzen kann. Wenn der Zyklus aber dann 25ms braucht haben wir ein Problem, deswegen sollte man die Zeit nur so weit runterstellen wie nötig.

    Mehrere zyklische Tasks können bei entsprechenden Aufgaben auch sinnvoll sein, beispielsweise einer mit 5ms (mit entsprechend wenig Code drin) zum Erfassen von kurzen Signalen und einer mit einem höheren Intervall für zeitlich unkritischere Sachen. Über Prioritäten läßt sich dann festlegen welcher Task bevorzugt werden soll wenn einmal zwei gleichzeitig laufen sollten.

    P.S.

    vielleicht solltest Du mal drüber nachdenken ob Du mal als Programmiersprache ST verwendest, sieht zwar am Anfang etwas schwieriger aus, mit der Zeit wirst Du aber feststellen daß es auf Dauer einfacher ist.

     
  • d.t.m - 2010-02-27

    Hallo Oberchefe,

    danke für deine Ausführungen. Mir scheint auch dass ich an ST nicht vorbeikomme.

    Zitat:
    der zu versendende Text muß nur in die vorhandene Strukturreingeschrieben werden, also wenn Eingang vom Rauchmelder kommt, dann Bool setzen daß eine Meldung raus soll (...)

    wie müsste das Programm denn aussehen? Bzw. mehr als 1 Anweisung wird es nicht sein, oder?

    Ich bekomme es nicht hin

    Mit den Zykluszeiten werde ich dann mal experimentieren wenn alles andere läuft.

    Grüße

     
  • Oberchefe - 2010-02-28

    Zitat:
    wie müsste das Programm denn aussehen?

    so ähnlich:

    If StatusLampe THEN
    SEND_SMS.Msg       := 'Hallo ! Sie heben eine SMS an den WAGO-Ethernetkoppler geschickt';
    END_IF
    If Rauchmelder THEN
    SEND_SMS.Msg       := 'Achtung! Der Rauchmelder hat ausgelöst';
    END_IF
    

    für's Beschreiben des Textes, StatusLampe und Rauchmelder wären im Beispiel BOOLS, sie müßte dann gesetzt werden wenn es was zum Verschicken gibt und gerade nichts anderes verschickt wird.

    Im Zweifelsfall mal das Ampel-Beispiel durchmachen und auch mal die Hilfe (F1) benutzen.

     
  • d.t.m - 2010-02-28

    Danke Oberchefe;

    es klappt so nicht. Die Nummer an die gesendet werden soll muss ja auch noch definiert werden. Das 'einfache' austauschen von "RECEIVED_SMS.Sender_NO" bringt keine Abhilfe, da kommt dann eine Fehlermeldung dass die Nummer nicht in typGSM_NUMBER konvertiert werden kann.

    Hatte mir das leichter vorgestellt. Blöd dass das Beispiel von Wago immer von einer empfangenen SMS ausgeht und von da aus entsprechend ausgewertet wird.. ich blick da nicht durch.

    Gruß

     
  • d.t.m - 2010-03-02

    Hallo Oberchefe (und wer sonst noch mitliest),

    sorry - auch wenn´s nervt -

    habe viel (!) rumprobiert, immer noch ohne Erfolg.

    Auch das Ampelbeispiel (nicht in ST geschrieben) habe ich mir angesehen nebst Doku von Codesys und auch F1 ist eine gängige Taste.

    Der Empfang/Versand von SMS läuft ja generell.

    Ich bekomme es aber einfach nicht hin, eine einfache SMS mit vordefiniertem Inhalt an eine vordefinierte Nummer zu senden.

    Habe auch die Doku zur Lib 'gsm_sms.lib' durch.

    Der Versand muss wohl mit dem 'Ein-/Ausgangsparameter' utSMS_MESSAGE vom Datentyp 'typGSM_SEND_SMS' möglich sein ("Struktur, in die die Daten einer zu sendenden Nachricht eingetragen werden können.

    Ich will ja nicht sagen dass ich am Verzweifeln bin, aber die unzähligen Versuche waren nicht zielführend und so langsam wird es frustrierend.

    Ich bin Neuling in Codesys (generell ist das Thema SPS neu für mich), deshalb geht mir das alles nicht so locker von der Hand.

    Vielleicht hat noch jemand den 'Nerv' mir weiterzuhelfen - dann weiß ich beim nächsten Problem vielleicht schon mehr und komme selbst weiter.

    IMG: Bildschirmfoto 2010

     

Log in to post a comment.