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




Encoder Ssi - Azzeramento encoder assoluto


Messaggi consigliati

Inserito: (modificato)

Buongiorno a tutti,

prima di cominciare questo topic ho cercato nelle varie discussioni senza però risolvere il mio problema.

Sono alle primissime armi e stò imparando ad usare S7 guardando codice esistente...

Ora ho un "piccolo" problema con la gestione di encoder assoluti SSi:

questo è il codice all'interno dell'FC che gestisce il macchinario

A "501 MAN"

A "E 501 PRESET"

= L 6.0

BLD 103

A "ON"

JNB _00b

CALL "F ABS SSI ET200S"

ADDR :=548

PRESET :=L6.0

SSI_MAX :=L#33554432

POS_MAX :=L#20000000

POSITION :="501 DATA".D39

PRESET_POS:="501 DATA".D36

ADJUST_POS:="501 DATA".D37

_00b: A BR

R "E 501 PRESET"

mentre il blocco richiamato è il seguente:

network1:

// READ PI BYTE 0-3 (ACTUAL ENCODER POSITION)

L #ADDR

SLW 3

T #POINT

LAR1

L PID [AR1,P#0.0]

T #SSI_POS

// ENCODER RANGE (UP COUNTING) NOT PASSING TURNOVER VALUE

L #PRESET_POS

L #POS_MAX

+D

L #SSI_MAX

<=D

JCN F11

// ENCODER VALUE IN RANGE POSITIV VALUE

A(

L #SSI_POS

L #PRESET_POS

>=D

)

A(

L #PRESET_POS

L #POS_MAX

+D

L #SSI_POS

TAK

<=D

)

JCN F11A

L #SSI_POS

L #PRESET_POS

-D

T #TEMP_POS

JU F19

// ENCODER VALUE IN RANGE NEGATIVE VALUE

F11A: L #SSI_POS

L #PRESET_POS

-D

T #TEMP_POS

L 0

>D

JCN F19

L #SSI_POS

L #SSI_MAX

-D

L #PRESET_POS

-D

T #TEMP_POS

JU F19

// ENCODER RANGE (UP COUNTING) PASSING TURNOVER VALUE

F11: NOP 0

// ENCODER VALUE IN RANGE NEGATIVE VALUE

A(

L #SSI_POS

L #PRESET_POS

<D

)

A(

L #PRESET_POS

L #SSI_MAX

-D

L #POS_MAX

+D

L #SSI_POS

TAK

>=D

)

JCN F12A

L #SSI_POS

L #PRESET_POS

-D

T #TEMP_POS

JU F19

// ENCODER VALUE IN RANGE POSITIVE VALUE

F12A: L #SSI_POS

L #PRESET_POS

-D

T #TEMP_POS

L 0

<D

JCN F19

L #SSI_MAX

L #PRESET_POS

-D

L #SSI_POS

+D

T #TEMP_POS

// ACTUAL ENCODER POSITION

F19: L #TEMP_POS

L #ADJUST_POS

+D

T #POSITION

network2:

A #PRESET

JCN F21

L #SSI_POS

T #PRESET_POS

L 0

T #ADJUST_POS

F21: NOP 0

Ora, so' che la posizione attuale viene memorizzata nella DBW "501 DATA".D39, che 548 è l'indirizzo del modulo di input SSI (almeno credo), "501 MAN" e "E 501 PRESET" sono merker che arrivano da comandi locali.

Probabilmente chiedo troppo ma non è che per caso qualcuno mi aiuterebbe con delle delucidazioni su questo codice?? Grazie anticipatamente!

Modificato: da nodux2000

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