Jump to content
PLC Forum

zanellatofabio

Lentezza Comunicazione Con Protocollo Somachine

Recommended Posts

zanellatofabio

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 to post
Share on other sites

MaxSub

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 to post
Share on other sites
zanellatofabio

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 to post
Share on other sites
MaxSub

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 to post
Share on other sites
pidds

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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...