Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Indicizzare Blkmov O S_Move


Messaggi consigliati

Inserito:

Salve a tutti,

Tia portal V13 SP1, Cpu 313C,

per la 313C sapete se esiste l'equivalente del comando S_MOVE valido per il 1200 (ed immagino anche 1500) ?

o si può indicizzare il BLKMOV tipo:

CALL BLKMOV
blk_type:=Any
SRCBLK :=P#DB260.DBX [#indice] BYTE 34
RET_VAL :=#"ret val"
DSTBLK := P#DB250.DBX0.0 BYTE 34
Non so se si può fare o se sbaglio sintassi ma se scrivo come sopra (#indice è una Dint temporanea) non me lo accetta.
Ciò che devo fare è estrarre un nome da un array di stringhe in funzione di un determinato evento
grazie a tutti.

Inserita:

non puoi indicizzare come stai facendo

La blockmove , SFC20 (almeno la ricordo cosi ) , prende come sorgente l'indirizzo iniziale di un'area di memoria e la trasferisce su un'altra area a partire dall'indirizzo indicato per una quantità di N° bytes, , nel tuo caso 34

Per cui ovunque tu punti si riferisce a byte , stai attento a non sforare le aree di memoria altrimenti va in stop la cpu

Il P# e' un po come la "&" del C , carica l'indirizzo ....

Poi c'e' la SFC21 che puoi usarla per inizializzare un'area di memoria , sempre a partire da un indirizzo a byte di una struttura dati piu o meno complessa .Per esempio mettere a zero un'intera area di memoria , questa lavora tipo la memset(...) del C

Inserita:

Se devi scrivere righe di programma per costruirti il puntatore ANY e poi usare BLKMOV, tanto vale creare direttamente una funzione per copiare direttamente le vaiabili interessate.

Se poi lavori con array, tutto diventa facilissimo se lo fai in SCL.

Inserita:

grazie per le info, per il momento tra una nevicata e l'altra ( qua a Praga succede) ho risolto in questa maniera:

estraggo a blocchi di byte le varie parti della stringa che mi interessa e la ricompongo dove intendo visualizzare il nome, sembra funzioni.

//////////////////////////////////////////////////////////////
// trasmissione nome allarme////////////////////
AUF "DB 260 storico"
L DBD [ #"index 1"]
T "DB 260 storico".name_1[1]
AUF "DB 260 storico"
L DBD [ #"index 2"]
T "DB 260 storico".name_1[2]
AUF "DB 260 storico"
L DBD [ #"index 3"]
T "DB 260 storico".name_1[3]
AUF "DB 260 storico"
L DBD [ #"index 4"]
T "DB 260 storico".name_1[4]
AUF "DB 260 storico"
L DBD [ #"index 5"]
T "DB 260 storico".name_1[5]
AUF "DB 260 storico"
L DBD [ #"index 6"]
T "DB 260 storico".name_1[6]
// richiamo i 24 byte che compongono la stringa in una sola stringa
CALL BLKMOV
blk_type:=Any
SRCBLK :="DB 260 storico".name_1
RET_VAL :=#"ret val"
DSTBLK :="DB 260 storico".storico[1]
Inserita:

si , dipende tutto da come dichiari le variabili nel DB , se sono array di strutture per esempio funziona

Inserita:

Se tutte le variabili sono sempre in "DB 260 storico" non serve continuare a ripetere l'istruzione AUF DB 260 storico"

  • 2 months later...
Inserita:

rispolvero l'argomento avendo trovato questo file nel sito della Siemens. Si tratta di un FC che permette di muovere dati usando un indice.

dbdbcpy_dbdbcmp.pdf

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