Ecrire dans String

Forum traitant des automates industriels de marque Siemens.
Répondre
varach
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 110
Enregistré le : 26 avr. 2016, 13:27

Ecrire dans String

Message par varach »

Bonjour ,

Je suis en train de faire un système d'envoi de sms suivant des alarmes sur un S7 300 , en V5.5.

Mon message actif est stocké dans un DB1 , format string [160 ]
J'aimerai pouvoir stocker tt mes messages dans un autre DB2 , et aller "piocher "dedans suivant condition .

Comment déplacer un string de mon DB2 vers mon DB1 ?
Ils ont tous la même longueur .

Merci d 'avance ,

Yann
Avatar du membre
djé
Dieu du process
Dieu du process
Messages : 796
Enregistré le : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes

Re: Ecrire dans String

Message par djé »

Salut,

utilises le SFC20 "BLKMOV" en prenant soin d'utiliser, de préférence pour l'adressage des string, la manière "symbolique".
String.png
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Avatar du membre
JC87
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1952
Enregistré le : 20 oct. 2015, 13:00
Localisation : Nouvelle Aquitaine

Re: Ecrire dans String

Message par JC87 »

Bonjour,

Ou alors la méthode gros bourricot :
L DB2.DBDx
T DB1.DBDx
.
.
L DB2.DBDz
T DB1.DBDz

Bon c'est clair que le bloc move c'est quand même autrement plus élégant :mrgreen:

JC
"On veut faire du zéro défaut mais on a zéro bonhomme et zéro budget, et bien à la fin on a zéro résultat..."
Avatar du membre
djé
Dieu du process
Dieu du process
Messages : 796
Enregistré le : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes

Re: Ecrire dans String

Message par djé »

ou pour faire complet:
Transfert d'un message issu d'une table (DB2 "DB_SRC", MESSAGES : ARRAY [0 .. 20 ] OF STRING [160 ] - 21 messages au total) dans la destination DB1 "DB_DEST" (Message_txt : STRING [160 ])

MW100= numéro de message à envoyer (0à20)

Déclaration Local (Temp)
Source: ANY
Pointeur:DWORD

Rézo1: Contrôle (bornage num message)

Code : Tout sélectionner

  L     MW   100
      L     0
      <I                                // test <0
      SPB   S000
      L     MW   100
      L     20                          // test >20
      >I    
      SPB   S001
      SPA   s003
S000: L     0
      T     MW   100
      SPA   s003
S001: L     20
      T     MW   100
s003: NOP   0
Rézo2: Création du décalage (pointeur) en fonction du num message

Code : Tout sélectionner

 L     MW   100
      L     162
      *I    
      SLD   3                           // mise au format Pointeur
      L     P#DBX 0.0                   // on part de zéro dans la DB2
      +D    
      T     #Pointeur
Rézo3: Construction du pointeur ANY source

Code : Tout sélectionner

 LAR1  P##Source

      L     B#16#10                     // 10h pour S7
      T     LB [AR1,P#0.0]

      L     B#16#2                      // type de données : BYTE= 2h
      T     LB [AR1,P#1.0]

      L     162                         // Taille 162 octets
      T     LW [AR1,P#2.0]

      L     2                           // Num DB=2 (DB2)
      T     LW [AR1,P#4.0]

      L     #Pointeur                   // décalage
      T     LD [AR1,P#6.0]
Rézo4: transfert via SFC20

Code : Tout sélectionner

CALL  "BLKMOV"
       SRCBLK :=#Source
       RET_VAL:=#TEMP_ret
       DSTBLK :="DB_DEST".Message_txt
      NOP   0
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
GG10
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 147
Enregistré le : 15 sept. 2016, 14:35

Re: Ecrire dans String

Message par GG10 »

Bonjour !!

plus simplement en SCL

FUNCTION_BLOCK FB83
title='';

"DB2".MESSAGE[1]:="DB1".MESSAGE[1];
"DB2".MESSAGE[2]:="DB1".MESSAGE[2];
"DB2".MESSAGE[3]:="DB1".MESSAGE[10];

END_FUNCTION_BLOCK
Avatar du membre
djé
Dieu du process
Dieu du process
Messages : 796
Enregistré le : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes

Re: Ecrire dans String

Message par djé »

Bonjour,

Effectivement le SCL facilite grandement la programmation en rendant transparent tous une tas d'opération assez barbare (construction du pointeur ANY, utilisation du SCF20):

En SCL on peut ainsi directement affecter à la variable de destination un élément du tableau source:

Code : Tout sélectionner

FUNCTION FC100 : void

VAR_input
    Idx:INT; 
END_VAR

    BEGIN
     "DB_DEST".Message_txt:="DB_SRC".MESSAGES[Idx];
END_FUNCTION

Malheureusement tout le monde ne dispose pas du SCL et il est toujours intéressant, voire nécessaire de connaitre et comprendre les mécanismes qui sous-tendent au SCL.
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
varach
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 110
Enregistré le : 26 avr. 2016, 13:27

Re: Ecrire dans String

Message par varach »

Bonjour,

Merci à tous !
Répondre