Vai al contenuto
PLC Forum


istruzione LAR1 - conversione a s71500


Messaggi consigliati

Inserito:

Salve a tutti. sto cercando di compilare il progetto s7300 appena convertito in s71500, e ho problemi con tutti i segmenti in cui uso un puntatore awl tramite istruzione lar1. Esempio: in step7 avevo questo segmento:

 

      AUF   "ALARMS - EMERGENCIES"
      LAR1  P#0.0
      L     #MacroAlarmsNumber
LBL1: T     #Temp_INT
      O     DBX [AR1,P#0.1]
      O     DBX [AR1,P#0.2]
      O     DBX [AR1,P#0.3]
      O     DBX [AR1,P#0.4]
      O     DBX [AR1,P#0.5]
      O     DBX [AR1,P#0.6]
      O     DBX [AR1,P#0.7]
      O     DBX [AR1,P#1.0]
      O     DBX [AR1,P#1.1]
      O     DBX [AR1,P#1.2]
      O     DBX [AR1,P#1.3]
      O     DBX [AR1,P#1.4]
      O     DBX [AR1,P#1.5]
      O     DBX [AR1,P#1.6]
      O     DBX [AR1,P#1.7]
      =     DBX [AR1,P#0.0]
      +AR1  P#2.0
      L     #Temp_INT
      LOOP  LBL1

In TIA portal me lo ritrovo pari pari:

 

      AUF   "ALARMS - EMERGENCIES"
      LAR1  P#0.0
      L     #MacroAlarmsNumber
LBL1: T     #Temp_INT
      O DBX [ AR1 , P#0.1 ]
      O DBX [ AR1 , P#0.2 ]
      O DBX [ AR1 , P#0.3 ]
      O DBX [ AR1 , P#0.4 ]
      O DBX [ AR1 , P#0.5 ]
      O DBX [ AR1 , P#0.6 ]
      O DBX [ AR1 , P#0.7 ]
      O DBX [ AR1 , P#1.0 ]
      O DBX [ AR1 , P#1.1 ]
      O DBX [ AR1 , P#1.2 ]
      O DBX [ AR1 , P#1.3 ]
      O DBX [ AR1 , P#1.4 ]
      O DBX [ AR1 , P#1.5 ]
      O DBX [ AR1 , P#1.6 ]
      O DBX [ AR1 , P#1.7 ]
      = DBX [ AR1 , P#0.0 ]
      +AR1  P#2.0
      L     #Temp_INT
      LOOP  LBL1

Il problema è che il compilatore mi informa che:

 

"L'indirizzo parzialmente qualificato non può essere convertito in un indirizzo completo."

 

e mi impedisce di sostituire la CPU 315 con una 1513

 

Come posso fare?

 

Grazie 1000


Inserita:

Do qualche dettaglio in più: quello che ho appena descritto mi succede nel momento in cui, dopo aver convertito con successo il programma step7 con tutta la configurazione HW, cerco di sostituire , nella config HW di TIA , la cpu 315 con una 1513. Ho notato adesso che in realtà mi è comparsa la nuova CPU nella lista dei dispositivi, però ho tutta questa lesta di messaggi

 

"L'indirizzo parzialmente qualificato non può essere convertito in un indirizzo completo." in corrispondenza di tutti i puntatori AWL (Saranno centinaia......)

 

Non ho capito se questo pregiudichi o meno il funzionamento del programma..tutti i messaggi hanno a fianco la croce bianca sul cerchio rosso...

 

 

 

Inserita:

Ma sono solo avvisi, non errori.
La sostituzione l'ha fatta, e la compilazione va a buon fine, giusto?

I puntatori devono funzionare anche con la cpu 1500.

 

Piccolo appunto: perché, al posto di controllare uno per uno tutti i 16 bit, non fai un controllo di tutta la word?

Esempio:

      AUF   "ALARMS - EMERGENCIES"
      LAR1  P#0.0
      L     #MacroAlarmsNumber
LBL1: T     #Temp_INT
      L W [ AR1 , P#0.0 ]
      L     16#0
      <>I
      = DBX [ AR1 , P#0.0 ]

	+AR1  P#2.0
      L     #Temp_INT
      LOOP  LBL1

 

Inserita:

grazie 1000 per la risposta 

per quanto riguarda la tua domanda, secondo me se faccio come dici tu, una volta che mi si setta il bit 0 della word poi non va più giù perché è proprio lui che fa mantenere diversa da 0 la word. Il bit 0 deve essere 1 se e solo se è 1 uno qualunque degli altri 15 bit della word 

Inserita:
7 minuti fa, toni_unitn scrisse:

per quanto riguarda la tua domanda, secondo me se faccio come dici tu, una volta che mi si setta il bit 0 della word poi non va più giù perché è proprio lui che fa mantenere diversa da 0 la word. Il bit 0 deve essere 1 se e solo se è 1 uno qualunque degli altri 15 bit della word 

Sì, non avevo notato che il controllo parte dal secondo bit, e che il risultato viene messo nel primo bit sempre della stessa word.
Strano, però. Di solito si usano tutti i 16 bit della word come allarmi, e il risultato si mette da un'altra parte.

Inserita:

Qui da noi si risparmia anche sui bit

Inserita:
12 ore fa, toni_unitn scrisse:

Qui da noi si risparmia anche sui bit

E meno male che non si pagano....... 😁

Rispetto a quanto ha suggerito un luminare del codice come Batta io aggiungerei allora lo shift a destra di 1 prima del confronto:

L W [ AR1 , P#0.0 ]
SRW 1  <<<<<<<< così ripulisci il bit meno significativo
L     16#0 
Inserita:
1 ora fa, pigroplc scrisse:

io aggiungerei allora lo shift a destra di 1 prima del confronto:

👍

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