Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] Runtime error 8021

Buongiorno,
dopo diversi anni che alcuni nostri clienti utilizzavano un mio programma 
fatto in VB6 Pro
è successa una cosa strana...
Premetto che questo programma va a leggere dei dati su un Plc tramite la 
seriale (quindi MSComm).
A volte capita che esca un errore di runtime 8021 "Errore interno durante il 
recupero del blocco di controllo
periferica per la porta".
A quel punto l'unica cosa possibile per far ripartire l'applicazione è 
riavviare Windows XP.
Questi "difetti" si ripresentano sporadicamente e random.
Una volta si è risolto il problema montando dei filtri elettrici su dei 
motori gestiti dal Plc da cui
vengono letti i dati dal PC.
Quindi ho un forte sospetto che la causa sia un "disturbo" elettrico che fa 
impallare la seriale del PC.
A voi è mai capitato una cosa del genere?
Oppure avete idee o suggerimenti? non sono sicuro che il problema derivi 
dall'esterno, anche se l'applicazione
è stata fatta anni fa e gira tranquillamente da anni su un centinaio di PC 
senza aver mai dato questo tipo di errore.
Ringrazio in anticipo tutti quelli che risponderanno!! 

Il 22/03/2010, Alessandro ha detto :

La seriale è su scheda o Usb?
Quante seriali sul pc incriminato?
Quante schede di rete?
La seriale è sempre aperta o la apri al bisogno?
Iniziamo da qui, poi vediamo.
Alberto


La seriale è su Usb.
Ce solo quella di seriali.
Una scheda di rete 10/100 non utilizzata dal mio programma
La seriale viene aperta appena parte il mio programma e chiusa alla chiusura 
del programma.
Ciclicamente (con un timer) vengono letti i dati dal Plc. 

Alessandro ha pensato forte :

Ok, allora il problema è noto.
Tempo fa avevo cercato di spiegarlo, su questo NG, ad un ceffo che 
faceva software per... non ricordo, mi sembra etichettatrici per 
prosciutti o cose del genere, ma non ci sono stati cazzi, sembrava di 
parlare con un lobotomizzato, non gliene fregava niente di ascoltare e 
tirava dritto per dritto con le sue idee...
Comunque è un problema legato al cambio delle impostazioni dei 
decimali, che in certi casi fa impazzire l'enumerazione delle seriali 
usb, in modo particolare se le impostazioni vengono fatte con software 
Scada (che in genere non sono molto brillanti con le modifiche al 
sistema che derivano da altre applicazioni).
Verifica se per caso il tuo software non cambia le impostazioni 
internazionali del sistema da codice (che sarebbe comunque una 
porcheria indegna, a prescindere da questo problema).
Alberto


Il mio programma non cambia le impostazioni internazionali del sistema da 
codice.
Al massimo vengono cambiate a mano da chi installa il programma la prima 
volta.
Ma poi non avviene nessun cambiamento in corso d'uso e il pc è installato a 
bordo macchina,
quindi fa solo quello (gira solo il mio programma oltre al sistema operativo 
chiaramente). 

Sembra che Alessandro abbia detto :

Però bisogna che tu legga le risposte e risponda a tono, altrimenti non 
andiamo da nessuna parte.
Quello del cambio impostazioni da codice è un esempio, non è la verità 
assoluta.
Ho citato Scada e cambio impostazioni locali. Già dovresti vedere se il 
cambio di impostazioni è avvenuto, o meno, sulla macchina che ha il 
problema, fossa anche solo una volta a mano.
E poi dovresti sapermi dire se hai usato degli Scada per lo sviluppo di 
qualcosa.
Alberto


Sorry!
Le impostazioni locali sono state cambiate a mano prima dell'installazione 
del mio programma.
Nello specifico sono stati usati i ":" per la separazione dell'ora:min, poi 
è stato impostato nel formato
data breve "gg/MM/aaaa".
Preciso che queste modifiche sono sempre state fatte da 10 anni a questa 
parte su tutte le macchine
ma il problema dell'errore 8021 si è presentato solo recentemente.
Il mio programma è stato interamente sviluppato in VB6 Pro, nessun Scada 
tipo Automa o altri, se è
questo che volevi sapere.
Se non ho capito le tue richieste ti chiedo perdono e se potessi spiegarmi 
meglio cosa vuoi sapere
sono qui a tua completa disposizione. 

Oppure avete idee o suggerimenti?
Puoi intervenire sull'hardware filtrando la linea e magari evitando i
ground-loop che sono la principale fonte di cattura disturbi nei cablaggi, o sul
software andando a leggere più spesso la seriale per evitare che si saturino i
buffers. ma io propenderei per la prima.
Esistono dei convertitori optoisolati come questo:
http://is.gd/aT9Bc
che sono molto utili in questi casi, proprio perchè gli optoisoilatori
interrompono gli anelli di massa.
--
ciao
  Stefano

interrompono gli anelli di massa.
I convertitori USB-RS232 optoisolati sono rari e si trova un OMRON che costa un
botto:
http://mt.rsdelivers.com/product/omron/cs1w-cif31/cable-pc-usb-to-rs232c-converter-cable/0385180.aspx
potresti isolare la RS232 con un aggeggio tipo questo:
http://is.gd/aTcLY
ma meglio prima provare con i filtri, al limite prova a togliere il collegamento
alla calza della GND da una parte, a volte basta questo per ridurre l'effetto
spira.
--
ciao
  Stefano


Infatti era un "disturbo" provocato da motori installati nel quadro gestito 
dal Pc.
Una volta installato dei filtri su tali motori il problema è sparito.
Quindi niente "problemi" software o impostazioni di windows non gradite dal 
programma come
paventato in precedeza :-)
Grazie delle dritte Stefano, fa sempre piacere parlare con persone cosi ;-)
Buon lavoro! 

Buon lavoro! 
YW
--
ciao
  Stefano

 le colpe dei malfunzionamenti.
Essendo un softwarista da oggi posso dare la colpa ai disturbi per eventuali 
problemi
di software :-)
Grazie ancora ;-) 

 tutte le colpe dei malfunzionamenti. 
Diciamo che nessuno potrebbe immaginare che in un sistema commerciale 
si utilizzino delle seriali non optoisolate...
Alberto

si utilizzino delle seriali non optoisolate...
Beh, le RS232 spesso non sono optoisolate, perchè servono solo per scaricare
periodicamente dei dati o per aggiornare i firmware, quindi utilizzi spot ogni
tanto e con l'operatore presente.
Se si vuole una buona immunità in campo industriale si usa la RS485, e si
trovano facilmente dei convertitori RS232-RS485 isolati.
Ultimamente, anche per il basso costo dei processori ARM, si vede sempre più
spesso Ethernet, che è intrinsecamente isolata.
Se non ci sono delle esigenze particolari, la RS232 è ancora l' interfaccia più
comunemente usata, perchè tutti i µC anche i più economici hanno una uart a
bordo e si implementa molto facilmente, a differenza di altre come USB o
Ethernet che richiedono parecchie risorse hw e sw.
--
ciao
  Stefano