SMS_SEND FB48 nur 11 Zeichen?

babylon05

Level-1
Beiträge
180
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin, habe einen FB48 mit dem ich SMS versenden kann.
Laut Siemens beschreibung sendet er bis max. 160 Zeichen, wenn ich eine Text eingebe der mehr als 11 Zeichen hat, bekomme ich gar keine SMS mehr.


mfg babylon05
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas,

na das ging ja schnell eine Antwort auf meine Frage zu bekommen.

Also den FB48 lese ich in meinem FB100 ein, dort habe ich den SMS_Text in Stat als Datentyp String[160] definiert mit Anfangswert 'Brandalarm'.
Dies überträgt er mir auch, nur wenn der Anfangswert mehr wie 11 Zeichen hat bekomme ich keine SMS mehr.
 
Aktualisierst du denn auch den Aufruf des FB100 und Instanz-DB wenn du den Anfangswert änderst, inkl. Laden der Bausteine in die SPS?

Der FB48 wird sich die Länge des Strings den er senden soll aus den Kopfinformationen auslesen. Um zu überprüfen ob dort auch die richtigen Werte stehen, würde ich mal eine Variablentabelle anlegen, und in dieser die Bytes des Strings aus dem Instanz-DB des FB100 anzeigen lassen.
Im ersten Byte steht die Max-Länge des Strings (bei dir 160) im zweiten die aktuelle Länge, dann folgen die einzelnen Zeichen.
 
Ja ich tue dann den fb100, den OB1 in dem der fb100 geladen wird und den Multi instanz db100 vom fb100 neu laden in die sps.
Was ich nicht verstehe, wie ich das mit den Strings und der variablentabelle machen soll.

Wenn ich mir den Multiinst db100 aufrufe steht z.B. bei Adresse 122, Dekleration stat, Name ...Message[0], Type BYTE, Anfangswert B#16#0, Endwert B#16#0. Der Name wird in der nächsten Zeile mit [1] etc fortgesetzt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In der Variablentabelle kannst du prüfen ob die Stringlänge korrekt eingetragen ist.
An DB100.DBB122 sollte mit 160 die Maximallänge stehen (16#A0).
An DB100.DBB123 sollte die aktuelle Länge des Strings stehen. Wenn du einen String länger als 11 Zeichen hast sollte dort auch die korrekte Länge stehen.
Ab DBB124 folgen die einzelnen Zeichen.
 
Also bei 11 Zeichen hat er mir das Wort Brandalarme Senkrecht angezeigt. das Erste Byte wie du beschrieben hast B#16#A0, das nächste Byte steht jetzt B#16#0B Bei Message[13] steht B#16#0

Nachtrag, also bei einem Wort größer 11 Zeichen steht in der Variablentabelle auch der komplette Text, das schein zu gehen. nur er sendet diesen Text nicht.
 
Zuletzt bearbeitet:
Sendstring[] von Anfang an in maximaler Größe deklarieren

Ist das der FB48 "SMS_SEND" aus der Bibliothek Teleservice?

Was steht bei Dir JETZT am Eingangsparameter MESSAGE?
Wenn die deklarierte Stringlänge des Aktualparameters nachträglich verändert wird, dann muß der Aktualparameter erneut symbolisch an den Eingangsparameter drangeschrieben werden (oder der Operandenvorrang muß auf symbolisch stehen und Bausteinkonsistenz muß geprüft werden).

Ich würde in einem DB einen STRING[160] anlegen, den als Aktualparameter an den FB48 schreiben und dann meine (kürzeren) Messages jeweils in diesen String kopieren mit SFC20 "BLKMOV".

Harald
 
Ja ist er.
Am eingangsparameter Message steht jetzt 123456789123456789
Dein nächster Satz verstehe ich leider nicht.

Ich habe festgestellt, dass alle Texte größer als 11 Zeichen zb. 12 er mir im fb48 bei Restlänge = 1 macht, ist der Text nun 20 Zeichen lang, macht er Restlänge 9, alles was Restlänge 0 ist schickt er mir per sms raus.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Am eingangsparameter Message steht jetzt 123456789123456789
Als Programmierer kann ich mir das irgendwie nicht vorstellen ... Oder meinst Du damit: in dem String, den Du am Eingang angegeben hast, steht jetzt die Zeichenfolge '123456789123456789' drin? Oder wie bekommst Du 123456789123456789 an den Baustein-Eingang geschrieben??? Zeigt doch mal den Programmcode vom Bausteinaufruf. Ich meine nicht den Wert des Aktualparameters sondern den Programmcode.


Dein nächster Satz verstehe ich leider nicht.
Angenommen Du hast mal in einem DB "DB1" einen String "Message | STRING[11] | '' " deklariert und dann an den Bausteinparameter geschrieben:
Code:
      CALL  "SMS_SEND" , DB48
       MPI_TS_ADAPTER:=10
       PHONE_NO      :="DB1".SendSMS.PhoneNo
       SCENTER_NO    :="DB1".SendSMS.ServiceCenter
       MESSAGE       :="DB1".SendSMS.Message
       BUSY          :=#SMS_SEND_BUSY
       STATUS        :=#SMS_SEND_STATUS
Danach änderst Du die Deklaration des Strings zu "Message | STRING[160] | '' ". Dann kannst Du zwar mehr Zeichen in den String schreiben, der FB48 wird aber nicht mehr Zeichen senden, weil immer noch am Eingang MESSAGE ein ANY für 13 BYTE dransteht:
Code:
      CALL  "SMS_SEND" , DB48
       MPI_TS_ADAPTER:=10
       PHONE_NO      :="DB1".SendSMS.PhoneNo
       SCENTER_NO    :="DB1".SendSMS.ServiceCenter
       MESSAGE       :=[COLOR="#FF0000"]P#DB1.DBX70.0 BYTE 13[/COLOR]
       BUSY          :=#SMS_SEND_BUSY
       STATUS        :=#SMS_SEND_STATUS
Die Parameterversorgung muß aktualisiert werden --> nochmal symbolisch dranschreiben. Danach den Baustein mit dem geänderten FB48-Aufruf erneut in die CPU laden.
Wenn der Operandenvorrang auf "symbolisch" steht, dann wurde die Parameterversorgung eventuell automatisch angepasst, der geänderte Baustein mit dem angepassten FB48-Aufruf muß trotzdem erneut in die CPU geladen werden.


Ich habe festgestellt, dass alle Texte größer als 11 Zeichen zb. 12 er mir im fb48 bei Restlänge = 1 macht, ist der Text nun 20 Zeichen lang, macht er Restlänge 9, alles was Restlänge 0 ist schickt er mir per sms raus.
:confused: Was meinst Du mit "Restlänge" ?

Wenn der FB48 weniger Zeichen als erwartet sendet oder gar nichts sendet, was steht dann im Ausgang STATUS?

Harald
 
Schaut denn die Funktion auf die Längenangabe des Any-Pointers?
Wenn man sich das Programmbeispiel im PDF-Handbuch ansieht, könnte man davon ausgehen dass die aktuelle Stringlänge ausgewertet wird. Denn dort wird auch symbolisch der String[160] an den Parameter angeschaltet, obwohl dort weniger Zeichen aktuell enthalten sind.
 
Ich habe es nicht ausprobiert, nur mal in den FB48 reingeschaut. Zuerst wird die Sendmessage mit SFC20 BLKMOV in ein ARRAY OF BYTE in den IDB umkopiert (zu DBB98...). Ohne besondere Auswertung der tatsächlichen Stringlänge. SFC20 kopiert max. soviel Zeichen wie im ANY angegeben sind. Ist die Quelle ein String, werden maximal nur die aktuell im String enthaltenen Zeichen kopiert.
Wahrscheinlich wird später auch noch irgendwo die tatsächliche Stringlänge ausgewertet, doch da wurde der String ja schon durch SFC20 gekürzt.

Bei allen Beispielen, die ich zu dem FB48 kenne, ist an MESSAGE immer ein String angegeben, der als STRING[160] deklariert wurde. Der ANY hinter dem symbolischen Aktualparameter ist da also immer ein P#... BYTE 162, egal wie kurz der String tatsächlich ist.

Auch wenn das Senden letztendlich fehlschlägt, müßte man das umkopieren in den IDB.DBB98 von außen beobachten können.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Als Programmierer kann ich mir das irgendwie nicht vorstellen ... Oder meinst Du damit: in dem String, den Du am Eingang angegeben hast, steht jetzt die Zeichenfolge '123456789123456789' drin? Oder wie bekommst Du 123456789123456789 an den Baustein-Eingang geschrieben??? Zeigt doch mal den Programmcode vom Bausteinaufruf. Ich meine nicht den Wert des Aktualparameters sondern den Programmcode.

ja das sollte der SMS Text sein

also bei mir sieht es so aus in meinem FB100

Code:
Netzwerk1
// Störungen auswerten
      U     #Stoerung_1
      FP    #Flankenmerker_01
      S     #Aufrufbedingung_1

Netzwerk2
// Prüfen, ob Meldung 1 gesendet werden soll
      U     #Aufrufbedingung_1
      SPBN  A2

// Aufruf des SMS_SEND
      CALL  #SMS_Send_1_IDB
       MPI_TS_ADAPTER:=1
       PHONE_NO      :=#Telefon_Nr
       SCENTER_NO    :=#Servicecenter_Nr
       MESSAGE       :=#SMS_Text_1
       BUSY          :=#Send_1_Busy
       STATUS        :=#Send_1_Status

Ich muss dazu sagen, das dies ein sehr guter Freund angelegt hat, der Momentan auch nicht weiß wie so er nur 11 Zeichen sendet, vor einem Jahr ging es auch mit mehr als 11 Zeichen.
Nur an sich wieder an den Bausteinen nicht verändert.

Nachtrag:

Habe eben mal nur den FB48 geladen mit Instanz-DB und diesem in einem FC aufgerufen und dort den SMS TEXT mit String[160] und einem 160 Zeichen Text belegt, dort sendet er mir eine sms mit 160 Zeichen.
Also muss es an meinem Multi instanz DB liegen.

Vielleicht könnte mir einer noch sagen, wie ich den FB48 umbauen kann damit er die SMS ein 2 Handynummern verschickt.

mfg
 
Zuletzt bearbeitet:
Zurück
Oben