Vai al contenuto
PLC Forum


Fc39 String To Real - come utilizzarlo??


Messaggi consigliati

David.Stefanutti
Inserito:

Salve a tutti.

L'applicazione che devo realizzare deve convertire una stringa di 6 caratteri (es.1250,3) che mi arriva sul DB1.DBX2.0 impostato come STRING[6] e trasformarlo in un real (esempio MD150)

Ho visto che l'fc 39 dovrebbe fare questa funzione ma non riesco a inizializzarlo...

CALL "STRNG_R"

S := ??????

RET_VAL:=


David.Stefanutti
Inserita:

HO scoperto che la stringa deve essere STRING[6] e deve avere il seguente formato

±v.nnnnnnnE±xx

± Segno

v 1 Posizione prima della virgola

n 7 Posizioni dopo la virgola

x 2 Posizioni esponenti

Nel mio FB scrivo

CALL "STRNG_R"

S :="DATI MACCHINA".MISURA_STRINGA

RET_VAL:="DATI MACCHINA".MISURA_IN_REALE

NOP 0

pur avendo il formato e tutto non funziona... Perchè????

Matteo Montanari
Inserita:

se controlliamo nell'hel in linea, cosa che hai fatto, la stringa deve essere di "14" caratteri e non "6".

inoltre prova ad utilizzare la funzione FC30 (converte il reale in stringa) e controllare cosa ti scrive nei "caratteri"...

il numero che hai messo: 1250,3

deve essere convertito così:

'','','+','0','.','1','2','5','0','3','0','0','E','+','0','4'

David.Stefanutti
Inserita: (modificato)

La correzione della string[14] l'avevo trovata.

Allora, ho visto la stringa sulla tabella delle variabili

byte per byte in formato carattere

e penso che ila visualizzazione sia identica

'','','+','0','.','1','2','5','0','3','0','0','E','+','0','4'

lo vedo come

DB1.DBB0=0

DB1.DBB1=0

DB1.DBB2=+

DB1.DBB3=1

DB1.DBB4=.

DB1.DBB5=2

DB1.DBB6=5

DB1.DBB7=0

DB1.DBB8=5

DB1.DBB9=0

DB1.DBB10=0

DB1.DBB11=0

DB1.DBB12=E

DB1.DBB13=+

DB1.DBB14=0

DB1.DBB15=3

lo trasferisco nella MD150 e il suo valore è 0

Secondo me sbaglio a inizializzare la stringa...

Il mio dubbio è:

1) cosa sono i simboli '',''

2) dal manuale

dati dinamici del tipo STRING devono essere inizializzati dall'utente prima di essere utilizzati per la prima volta, p. es. con una sequenza AWL nel formato:

LAR1 P#local_string_var // local_string_var dichiarato in VAR_TEMP come STRING[200]

L 200 // lunghezza STRING sopraindicata

T LB [AR1, P#0.0] // registrare nel byte MAX Len della stringa

L 5 // lunghezza effettiva della stringa

T LB [AR1, P#1.0] // lunghezza effettiva della stringa

questo, devo farlo????

Se si, come??

Modificato: da David.Stefanutti
Matteo Montanari
Inserita:

i primi due caratteri della stringa, quelli che io ti ho segnato come " '' " non devono essere modificati, non puoi mettere "0" in quanto il PLC si inka**a.

carica la tua DB vergine (così come l'hai creata) dentro il PLC. modifica i valori dal DB1.DBB2 al DB1.DBB15 con i valori che preferisci (tuoi o miei)

questo, devo farlo????

se non modifichi nulla nell'intestazione della stringa, (se non cambi lunghezza o altro) no, non devi farlo (il tutto è impostato nei primi due byte)

David.Stefanutti
Inserita:

Nada,nisba, niet!!!!!

Non funziona!!!

Ho provato anche con fc38 e fc37....neache a calci!

Matteo Montanari
Inserita:

prendi questo codice:

DATA_BLOCK "DB1"
TITLE =
VERSION : 0.1


  STRUCT  
   VALORE_REAL_1 : REAL;    
   VALORE_REAL_2 : REAL;    
   FREE_3 : INT;    
   STRINGA_1 : STRING  [14 ];    //Variabile stringa
   FREE_1 : DINT;    
   STRINGA_2 : STRING  [14 ];    //Variabile stringa
   FREE_2 : DINT;    
   PIPPO : ARRAY  [0 .. 99 ] OF BYTE;    
  END_STRUCT;    
BEGIN
   VALORE_REAL_1 := 0.000000e+000; 
   VALORE_REAL_2 := 0.000000e+000; 
   FREE_3 := 0; 
   STRINGA_1 := ''; 
   FREE_1 := L#0; 
   STRINGA_2 := ''; 
   FREE_2 := L#0; 
   PIPPO[0] := B#16#0; 
   PIPPO[1] := B#16#0; 
   PIPPO[2] := B#16#0; 
   PIPPO[3] := B#16#0; 
   PIPPO[4] := B#16#0; 
   PIPPO[5] := B#16#0; 
   PIPPO[6] := B#16#0; 
   PIPPO[7] := B#16#0; 
   PIPPO[8] := B#16#0; 
   PIPPO[9] := B#16#0; 
   PIPPO[10] := B#16#0; 
   PIPPO[11] := B#16#0; 
   PIPPO[12] := B#16#0; 
   PIPPO[13] := B#16#0; 
   PIPPO[14] := B#16#0; 
   PIPPO[15] := B#16#0; 
   PIPPO[16] := B#16#0; 
   PIPPO[17] := B#16#0; 
   PIPPO[18] := B#16#0; 
   PIPPO[19] := B#16#0; 
   PIPPO[20] := B#16#0; 
   PIPPO[21] := B#16#0; 
   PIPPO[22] := B#16#0; 
   PIPPO[23] := B#16#0; 
   PIPPO[24] := B#16#0; 
   PIPPO[25] := B#16#0; 
   PIPPO[26] := B#16#0; 
   PIPPO[27] := B#16#0; 
   PIPPO[28] := B#16#0; 
   PIPPO[29] := B#16#0; 
   PIPPO[30] := B#16#0; 
   PIPPO[31] := B#16#0; 
   PIPPO[32] := B#16#0; 
   PIPPO[33] := B#16#0; 
   PIPPO[34] := B#16#0; 
   PIPPO[35] := B#16#0; 
   PIPPO[36] := B#16#0; 
   PIPPO[37] := B#16#0; 
   PIPPO[38] := B#16#0; 
   PIPPO[39] := B#16#0; 
   PIPPO[40] := B#16#0; 
   PIPPO[41] := B#16#0; 
   PIPPO[42] := B#16#0; 
   PIPPO[43] := B#16#0; 
   PIPPO[44] := B#16#0; 
   PIPPO[45] := B#16#0; 
   PIPPO[46] := B#16#0; 
   PIPPO[47] := B#16#0; 
   PIPPO[48] := B#16#0; 
   PIPPO[49] := B#16#0; 
   PIPPO[50] := B#16#0; 
   PIPPO[51] := B#16#0; 
   PIPPO[52] := B#16#0; 
   PIPPO[53] := B#16#0; 
   PIPPO[54] := B#16#0; 
   PIPPO[55] := B#16#0; 
   PIPPO[56] := B#16#0; 
   PIPPO[57] := B#16#0; 
   PIPPO[58] := B#16#0; 
   PIPPO[59] := B#16#0; 
   PIPPO[60] := B#16#0; 
   PIPPO[61] := B#16#0; 
   PIPPO[62] := B#16#0; 
   PIPPO[63] := B#16#0; 
   PIPPO[64] := B#16#0; 
   PIPPO[65] := B#16#0; 
   PIPPO[66] := B#16#0; 
   PIPPO[67] := B#16#0; 
   PIPPO[68] := B#16#0; 
   PIPPO[69] := B#16#0; 
   PIPPO[70] := B#16#0; 
   PIPPO[71] := B#16#0; 
   PIPPO[72] := B#16#0; 
   PIPPO[73] := B#16#0; 
   PIPPO[74] := B#16#0; 
   PIPPO[75] := B#16#0; 
   PIPPO[76] := B#16#0; 
   PIPPO[77] := B#16#0; 
   PIPPO[78] := B#16#0; 
   PIPPO[79] := B#16#0; 
   PIPPO[80] := B#16#0; 
   PIPPO[81] := B#16#0; 
   PIPPO[82] := B#16#0; 
   PIPPO[83] := B#16#0; 
   PIPPO[84] := B#16#0; 
   PIPPO[85] := B#16#0; 
   PIPPO[86] := B#16#0; 
   PIPPO[87] := B#16#0; 
   PIPPO[88] := B#16#0; 
   PIPPO[89] := B#16#0; 
   PIPPO[90] := B#16#0; 
   PIPPO[91] := B#16#0; 
   PIPPO[92] := B#16#0; 
   PIPPO[93] := B#16#0; 
   PIPPO[94] := B#16#0; 
   PIPPO[95] := B#16#0; 
   PIPPO[96] := B#16#0; 
   PIPPO[97] := B#16#0; 
   PIPPO[98] := B#16#0; 
   PIPPO[99] := B#16#0; 
END_DATA_BLOCK

ORGANIZATION_BLOCK "CYCL_EXC"
TITLE = "Main Program Sweep (Cycle)"
AUTHOR : Keos
FAMILY : Keos
VERSION : 0.1


VAR_TEMP
  OB1_EV_CLASS : BYTE;    //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
  OB1_SCAN_1 : BYTE;    //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
  OB1_PRIORITY : BYTE;    //Priority of OB Execution
  OB1_OB_NUMBR : BYTE;    //1 (Organization block 1, OB1)
  OB1_RESERVED_1 : BYTE;    //Reserved for system
  OB1_RESERVED_2 : BYTE;    //Reserved for system
  OB1_PREV_CYCLE : INT;    //Cycle time of previous OB1 scan (milliseconds)
  OB1_MIN_CYCLE : INT;    //Minimum cycle time of OB1 (milliseconds)
  OB1_MAX_CYCLE : INT;    //Maximum cycle time of OB1 (milliseconds)
  OB1_DATE_TIME : DATE_AND_TIME;    //Date and time OB1 started
  PIPPO : STRING  [14 ];    
  TEMP_1 : DINT;    
  PLUTO : STRING  [14 ];    
END_VAR
BEGIN
NETWORK
TITLE =

      CALL "R_STRNG" (
           IN                       := "DB1".VALORE_REAL_2,
           RET_VAL                  := #PLUTO);
//;
      L     LB    40; 
      T     DB1.DBB   30; 
//;
      L     LB    41; 
      T     DB1.DBB   31; 
//;
      L     #PLUTO[1]; 
      T     "DB1".STRINGA_2[1]; 
//;
      L     #PLUTO[2]; 
      T     "DB1".STRINGA_2[2]; 
//;
      L     #PLUTO[3]; 
      T     "DB1".STRINGA_2[3]; 
//;
      L     #PLUTO[4]; 
      T     "DB1".STRINGA_2[4]; 
//;
      L     #PLUTO[5]; 
      T     "DB1".STRINGA_2[5]; 
//;
      L     #PLUTO[6]; 
      T     "DB1".STRINGA_2[6]; 
//;
      L     #PLUTO[7]; 
      T     "DB1".STRINGA_2[7]; 
//;
      L     #PLUTO[8]; 
      T     "DB1".STRINGA_2[8]; 
//;
      L     #PLUTO[9]; 
      T     "DB1".STRINGA_2[9]; 
//;
      L     #PLUTO[10]; 
      T     "DB1".STRINGA_2[10]; 
//;
      L     #PLUTO[11]; 
      T     "DB1".STRINGA_2[11]; 
//;
      L     #PLUTO[12]; 
      T     "DB1".STRINGA_2[12]; 
//;
      L     #PLUTO[13]; 
      T     "DB1".STRINGA_2[13]; 
//;
      L     #PLUTO[14]; 
      T     "DB1".STRINGA_2[14]; 
//;

//;
      L     DB1.DBB   10; 
      T     LB    20; 
//;
      L     DB1.DBB   11; 
      T     LB    21; 
//;
      L     "DB1".STRINGA_1[1]; 
      T     #PIPPO[1]; 
//;
      L     "DB1".STRINGA_1[2]; 
      T     #PIPPO[2]; 
//;
      L     "DB1".STRINGA_1[3]; 
      T     #PIPPO[3]; 
//;
      L     "DB1".STRINGA_1[4]; 
      T     #PIPPO[4]; 
//;
      L     "DB1".STRINGA_1[5]; 
      T     #PIPPO[5]; 
//;
      L     "DB1".STRINGA_1[6]; 
      T     #PIPPO[6]; 
//;
      L     "DB1".STRINGA_1[7]; 
      T     #PIPPO[7]; 
//;
      L     "DB1".STRINGA_1[8]; 
      T     #PIPPO[8]; 
//;
      L     "DB1".STRINGA_1[9]; 
      T     #PIPPO[9]; 
//;
      L     "DB1".STRINGA_1[10]; 
      T     #PIPPO[10]; 
//;
      L     "DB1".STRINGA_1[11]; 
      T     #PIPPO[11]; 
//;
      L     "DB1".STRINGA_1[12]; 
      T     #PIPPO[12]; 
//;
      L     "DB1".STRINGA_1[13]; 
      T     #PIPPO[13]; 
//;
      L     "DB1".STRINGA_1[14]; 
      T     #PIPPO[14]; 
//;
      CALL "STRNG_R" (
           S                        := #PIPPO,
           RET_VAL                  := "DB1".VALORE_REAL_1);

END_ORGANIZATION_BLOCK
trasferiscilo dentro la CPU con i blocchi FC39 ed FC30. dopo di che ti crei una tabella delle varibili:
DB1.DBD    0    "DB1".VALORE_REAL_1  VIRGOLA MOBILE
DB1.DBB   10      CARATTERE  
DB1.DBB   11      CARATTERE  ''
DB1.DBB   12    "DB1".STRINGA_1[1]    Variabile stringa    CARATTERE  '+'
DB1.DBB   13    "DB1".STRINGA_1[2]    Variabile stringa    CARATTERE  '0'
DB1.DBB   14    "DB1".STRINGA_1[3]    Variabile stringa    CARATTERE  '.'
DB1.DBB   15    "DB1".STRINGA_1[4]    Variabile stringa    CARATTERE  '1'
DB1.DBB   16    "DB1".STRINGA_1[5]    Variabile stringa    CARATTERE  '2'
DB1.DBB   17    "DB1".STRINGA_1[6]    Variabile stringa    CARATTERE  '5'
DB1.DBB   18    "DB1".STRINGA_1[7]    Variabile stringa    CARATTERE  '0'
DB1.DBB   19    "DB1".STRINGA_1[8]    Variabile stringa    CARATTERE  '3'
DB1.DBB   20    "DB1".STRINGA_1[9]    Variabile stringa    CARATTERE  '0'
DB1.DBB   21    "DB1".STRINGA_1[10]    Variabile stringa    CARATTERE  '0'
DB1.DBB   22    "DB1".STRINGA_1[11]    Variabile stringa    CARATTERE  'E'
DB1.DBB   23    "DB1".STRINGA_1[12]    Variabile stringa    CARATTERE  '+'
DB1.DBB   24    "DB1".STRINGA_1[13]    Variabile stringa    CARATTERE  '0'
DB1.DBB   25    "DB1".STRINGA_1[14]    Variabile stringa    CARATTERE  '4'
        
DB1.DBD    4    "DB1".VALORE_REAL_2  VIRGOLA MOBILE  1250.3
        
DB1.DBB   30      CARATTERE  
DB1.DBB   31      CARATTERE  
DB1.DBB   32    "DB1".STRINGA_2[1]    Variabile stringa    CARATTERE  
DB1.DBB   33    "DB1".STRINGA_2[2]    Variabile stringa    CARATTERE  
DB1.DBB   34    "DB1".STRINGA_2[3]    Variabile stringa    CARATTERE  
DB1.DBB   35    "DB1".STRINGA_2[4]    Variabile stringa    CARATTERE  
DB1.DBB   36    "DB1".STRINGA_2[5]    Variabile stringa    CARATTERE  
DB1.DBB   37    "DB1".STRINGA_2[6]    Variabile stringa    CARATTERE  
DB1.DBB   38    "DB1".STRINGA_2[7]    Variabile stringa    CARATTERE  
DB1.DBB   39    "DB1".STRINGA_2[8]    Variabile stringa    CARATTERE  
DB1.DBB   40    "DB1".STRINGA_2[9]    Variabile stringa    CARATTERE  
DB1.DBB   41    "DB1".STRINGA_2[10]    Variabile stringa    CARATTERE  
DB1.DBB   42    "DB1".STRINGA_2[11]    Variabile stringa    CARATTERE  
DB1.DBB   43    "DB1".STRINGA_2[12]    Variabile stringa    CARATTERE  
DB1.DBB   44    "DB1".STRINGA_2[13]    Variabile stringa    CARATTERE  
DB1.DBB   45    "DB1".STRINGA_2[14]    Variabile stringa    CARATTERE

e controlli il tutto.

io ho provato con il Sim (ieri) e tutto funzionava.

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...