Vai al contenuto
PLC Forum


Lavore Con Le Stringhe


metameta

Messaggi consigliati

Salve a tutti .

Sto realizzaundo un impianto dove uso un modem GSM per trasmettere degli allarmi.

Il sistema funzione da PLC,però ho la necessità di inserire il numero di telefono ed il centro messaggi dal pannello

operatore di tipo OP77A.

Il problema è che il blocca FB48 (gestione SMS) vuole i numeri in formato string[31] mentre il pannello me li accetta

solo "stringchar" e cioè dovrebbe essere un byte per carattere infatti vuole solo il byte iniziale se non ho visto male.

Io avrei la necessità di convertire questi byte nell'intera stringa.

Altra domanda. Come faccio a visualizzare le stringhe in on-line , anche per verificare eventuali risultati ?

Vi ringrazio sin da ora , sperando di essere stato chiaro.

Link al commento
Condividi su altri siti


Matteo Montanari

il formato stringa, come è riportato nel manuale on-line del Simatic Manager:

Formato del tipo di dati STRING

Tipo di dati -> STRING[n] oppure STRING

Lunghezza (Byte) ->  n+2

Formato ->  Stringa di caratteri ASCII di lunghezza qualsiasi. n indica la lunghezza della stringa di caratteri: 254 caratteri rappresenta la lunghezza massima. Se non viene indicata, la lunghezza di default è di 254 caratteri.

Tipo di dati (Esempi di formato)

STRING[2] ->  'ab'
STRING[55] -> 'La stringa di caratteri può consistere di un massimo di 55 caratteri'

i primi due byte della stringa contengono:

Byte 0 -> lunghezza massima della stringa

Byte 1 -> lunghezza attuale della stringa

esempio hai "programmato" una stringa di 10 caratteri ma ne scrivi solamente 2

Byte 0 = 10 (lunghezza massima della stringa)

Byte 1 = 2 (lunghezza attuale della stringa)

-----

nel tuo programma devi dichiarare una stringa per scrivere "pippo"

quindi 5 caratteri, la stringa per sicurezza la scrivi di 10 caratteri:

Byte 00 = 10

Byte 01 = 5

Byte 02 = "p" carattere 01

Byte 03 = "i" carattere 02

Byte 04 = "p" carattere 03

Byte 05 = "p" carattere 04

Byte 06 = "o" carattere 05

Byte 07 = " " carattere 06

Byte 08 = " " carattere 07

Byte 09 = " " carattere 08

Byte 10 = " " carattere 09

Byte 11 = " " carattere 10

dal pannello puoi accedere ai byte anche singolarmente, puntando a quello che desideri

Link al commento
Condividi su altri siti

metameta,

Il problema è che il blocca FB48 (gestione SMS) vuole i numeri in formato string[31] mentre il pannello me li accetta

Dovresti passare l'offset della stringa attraverso un formato puntatore.

Per fare questo:

1. Crea una DB, mettiamo DB45.

2. Nel Box properties/Simbolic name scrivi DB45 IN STRING FORMAT

3. Edita la DB :

Address     Name           Type               Initail value          Comment
 0.0
+0.0        BYTE_STR       STRING[31]          ''        
=34
4. Ingressa come parametro di input per il blocco come scritto sotto, esempio :
Input_Param    := "DB45 IN STRING FORMAT".BYTE_STR  ( vuoldire puntatore alla DB(Nome),(Offset);  P#DB45.DBXX0.0)
5. I dati vengono scritti cosi:
DB45.DBB    0                                         DEC            31
DB45.DBB    1                                         DEC            31
DB45.DBB    2    "DB45 IN STRING FORMAT".BYTE_STR[1]  CHARACTER     '0'
DB45.DBB    3    "DB45 IN STRING FORMAT".BYTE_STR[2]  CHARACTER     '1'
DB45.DBB    4    "DB45 IN STRING FORMAT".BYTE_STR[3]  CHARACTER     '7'
DB45.DBB    5    "DB45 IN STRING FORMAT".BYTE_STR[4]  CHARACTER     '3'
DB45.DBB    6    "DB45 IN STRING FORMAT".BYTE_STR[5]  CHARACTER     '8'
DB45.DBB    7    "DB45 IN STRING FORMAT".BYTE_STR[6]  CHARACTER     '6'
DB45.DBB    8    "DB45 IN STRING FORMAT".BYTE_STR[7]  CHARACTER     '0'
DB45.DBB    9    "DB45 IN STRING FORMAT".BYTE_STR[8]  CHARACTER     '0'
DB45.DBB   10    "DB45 IN STRING FORMAT".BYTE_STR[9]  CHARACTER     '3'
DB45.DBB   11    "DB45 IN STRING FORMAT".BYTE_STR[10] CHARACTER     '1'
DB45.DBB   12    "DB45 IN STRING FORMAT".BYTE_STR[11] CHARACTER     '2'
DB45.DBB   13    "DB45 IN STRING FORMAT".BYTE_STR[12] CHARACTER     '1'
DB45.DBB   14    "DB45 IN STRING FORMAT".BYTE_STR[13] CHARACTER     '9'
DB45.DBB   15    "DB45 IN STRING FORMAT".BYTE_STR[14] CHARACTER     '0'
DB45.DBB   16    "DB45 IN STRING FORMAT".BYTE_STR[15] CHARACTER     '8'
DB45.DBB   17    "DB45 IN STRING FORMAT".BYTE_STR[16] CHARACTER     '7'
DB45.DBB   18    "DB45 IN STRING FORMAT".BYTE_STR[17] CHARACTER     '0'
DB45.DBB   19    "DB45 IN STRING FORMAT".BYTE_STR[18] CHARACTER     '6'
DB45.DBB   20    "DB45 IN STRING FORMAT".BYTE_STR[19] CHARACTER     '0'
DB45.DBB   21    "DB45 IN STRING FORMAT".BYTE_STR[20] CHARACTER     '7'
DB45.DBB   22    "DB45 IN STRING FORMAT".BYTE_STR[21] CHARACTER     '0'
DB45.DBB   23    "DB45 IN STRING FORMAT".BYTE_STR[22] CHARACTER     '1'
DB45.DBB   24    "DB45 IN STRING FORMAT".BYTE_STR[23] CHARACTER     '0'
DB45.DBB   25    "DB45 IN STRING FORMAT".BYTE_STR[24] CHARACTER     '5'
DB45.DBB   26    "DB45 IN STRING FORMAT".BYTE_STR[25] CHARACTER     '0'
DB45.DBB   27    "DB45 IN STRING FORMAT".BYTE_STR[26] CHARACTER     '7'
DB45.DBB   28    "DB45 IN STRING FORMAT".BYTE_STR[27] CHARACTER     '6'
DB45.DBB   29    "DB45 IN STRING FORMAT".BYTE_STR[28] CHARACTER     '5'
DB45.DBB   30    "DB45 IN STRING FORMAT".BYTE_STR[29] CHARACTER     '2'
DB45.DBB   31    "DB45 IN STRING FORMAT".BYTE_STR[30] CHARACTER     '0'
DB45.DBB   32    "DB45 IN STRING FORMAT".BYTE_STR[31] CHARACTER     '1'

In questo caso, la lunghezza della stringa coincide con la lunghezza utilizzata (31), dichiarate nei due primi byte.

N.B.: Certe info non la trovi sui manuali... ma si' su PLCForum.

Forum Card : Link ;)

Modificato: da Savino
Link al commento
Condividi su altri siti

Altra possibile soluzione: nel plc al posto di una variabile di tipo "String" crei un array di variabili di tipo "Char" e nell'OP dichiari una variabile di tipo "StringChar" al posto di "String".

Se il progetto OP è integrato, selezionando l'array di "Char" quando dichiari la variabile, il formato lo imposta in automatico.

La variabile di tipo "StringChar" è però considerata vecchia. Il formato è mantenuto solo per compatibilità con i vecchi pannelli.

Questa soluzione potrebbe quindi risultare un po' più facile, ma quella proposta da Savino è più corretta.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...