Vai al contenuto
PLC Forum


istruzione LAR1 - conversione a s71500


toni_unitn

Messaggi consigliati

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

Link al commento
Condividi su altri siti


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

 

 

 

Link al commento
Condividi su altri siti

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

 

Link al commento
Condividi su altri siti

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 

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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 
Link al commento
Condividi su altri siti

1 ora fa, pigroplc scrisse:

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

👍

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