Vai al contenuto
PLC Forum


Lentezza Comunicazione Con Protocollo Somachine


zanellatofabio

Messaggi consigliati

Ciao a tutti, ho notato che volendo scambiare un certo numero di variabili tramite il protocollo somachine, tra il plc M238 e il pannello hmi S5T, la comunicazione diventa molto lenta .

Le variabili nel pannellino si aggiornano dopo alcuni secondi, provocando fastidiose attese nella visibilità di oggetti e nell'introduzioni di dati .

Ora vengono scambiati due elenchi di variabili globali : le persistenti e un altro oggetto che ho chiamato VAR_HMI usando il protocolo somachine che è molto comodo per avere a disposizione in vijeo le variabili del programma in codesys .


VAR_GLOBAL PERSISTENT RETAIN

Set_T_AF_TR_1: DINT := 30;

Set_T_AF_TR_2: DINT := 30;

Set_T_AF_TR_3: DINT := 30;

Set_T_AF_TR_4: DINT := 30;

Set_T_AF_TR_5: DINT := 30;

Set_T_AF_TR_6: DINT := 30;

Set_T_AF_DOS: DINT := 120;

Set_T_AF_TU_1: DINT := 140;

Set_T_AF_TU_2: DINT := 140;

Set_T_AF_TU_3: DINT := 140;

Set_T_AF_TU_4: DINT := 140;

Set_T_AF_TU_5: DINT := 140;

Set_T_AF_TU_6: DINT := 140;

Set_T_AF_TU_7: DINT := 140;

Set_T_AF_TU_8: DINT := 140;

Set_T_AF_TU_9: DINT := 140;

Set_T_AF_TU_10: DINT := 140;

Set_T_AF_TU_11: DINT := 140;

Set_T_AF_TU_12: DINT := 140;

Set_T_AF_BA_1: DINT := 160;

Set_T_ctrl_valle: DINT := 50;

Set_T_preavv: DINT := 3;

Set_T_carico: DINT := 5;

Set_T_scarico: DINT := 10;

Set_Lunghezza_batt_1: DINT := 1000;

Set_mm_imp_batt_1: WORD := 58;

M_abl_FRANG: BOOL := TRUE;

M_abl_LUN: BOOL := TRUE;

M_abl_MAR: BOOL := TRUE;

M_abl_MER: BOOL := TRUE;

M_abl_GIO: BOOL := TRUE;

M_abl_VEN: BOOL := TRUE;

M_abl_SAB: BOOL := TRUE;

M_abl_DOM: BOOL := TRUE;

auto_ORE_ON_1: UINT;

auto_MIN_ON_1: UINT;

Conta_impulsi_B1: DWORD;

END_VAR

e

VAR_GLOBAL

lifebit_hmi: BOOL;

hmi_pann_attuale: UINT;

hmi_pann_rich_plc: UINT;

array_allarmi: ARRAY[0..63] OF BOOL;

hmi_PB_mute: BOOL;

hmi_PB_reset_mt: BOOL;

hmi_PB_set_clock: BOOL;

hmi_Allarmi_presenti: BOOL;

hmi_Allarme_sirena: BOOL;

hmi_lampeggio_all: BOOL;

hmi_fc_bilancia: BOOL;

hmi_vis_liv_batt: WORD;

END_VAR

VAR_GLOBAL RETAIN

i_Anno: UINT;

i_Mese: UINT;

i_Giorno: UINT;

i_Ore: UINT;

i_Minuti: UINT;

i_Secondi: UINT;


mod_Anno: BOOL;

mod_Mese: BOOL;

mod_Giorno: BOOL;

mod_Ore: BOOL;

mod_Minuti:BOOL;

mod_Secondi:BOOL;

consenso_set_clock: BOOL;


u_Day_of_week: UINT;

u_Anno: UINT;

u_Mese: UINT;

u_Giorno: UINT;

u_Ore: UINT;

u_Minuti: UINT;

u_Secondi: UINT;

Lunghezza_att_batt_1 :DWORD;

hmi_vis_mt: DWORD;

hmi_fine_mt: BOOL;

END_VAR

Le variabili sono distribuite in una trentina di pagine ; ho chesto troppo ?

La cosa che non capisco è che pare che il pannello scambi tutte le variabili non quelle che la pagina visualizzata ha inserite .

Qulacuno ha riscontrato un problema simile e ha trovato qualche sistema per velocizzare lo scambio dati ?

Link al commento
Condividi su altri siti


Ciao

Verifica che in Vijeo in Gestore I/O la velocità di scansione della tua apparecchiatura sia impostata in veloce. COntrolla anche che il baud rate della porta sia il massimo possibile... se ancora non ti basta passa in modbus.

Io mi sono lamentato più volte della lentezza del protocollo SoMachine ma ad oggi non ho visto miglioramente. Peccato perchè è comodissimo!!

Link al commento
Condividi su altri siti

Grazie MaxSub, visto che il protocollo somachine era già settato tutto al massimo della velocità, oggi pomeriggio ho fatto delle prove col modbus .

La comunicazione si velocizza eccome, ma dopo aver provato invano i vari importa ed esporta da lato vijeo e lato somachine per cercare di portare i nomi delle variabili dal programma codesys all'editor delle variabili di vijeo, mi sono bloccato .

Ma non esite un modo per fare questo senza scrivere a mano nell'editor di vijeo tutti i nomi delle variabili ?

Ciao da Fabio

Link al commento
Condividi su altri siti

Che io sappia no. Di solito copi il nome della variabile da SoMachine in Vijeo e poi imposto l'indirizzo.

In modbus è un casino se ti serve avere a pannello delle variabili persistent. Io mi sono inventato una soluzione ma è lunghina da spiegare... se dovesse servirti fammi sapere.

Ciao

Link al commento
Condividi su altri siti

  • 1 month later...

Ciao, beh per scambiare delle variabili in modbus basta allocarle, ovviamente quelle persistenti non possono essere allocate, l'unico modo è copiare le variabili allocate nelle persistenti mentre il programma gira e al primo giro dopo il riavvio scrivere le persistenti nelle variabili allocate.

if first_cycle then

var_modubus:=persistent_variable;

else

persistent_variable:=var_modbus;

end_if

ciao

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