Ringrazio in anticipo tutti quelli che risponderanno!!
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.
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).
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.
>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.
Probabile.
>A voi è mai capitato una cosa del genere?
No, ma da quanto dici ipotizzo che possa esserci una saturazione di un buffer da
qualche parte.
Tieni presente che la UART della seriale all'interno del convertitore quando
arrivano degli 'spifferi' (il termine corretto è glitch), li interpreta come
falsi START-bit e inizia ad acquisire un carattere.
Se poi tu vai a vedere ogni tanto con un timer e non fai il polling o utilizzi
l'evento OnComm, è facile che questi falsi caratteri ricevuti vadano a saturare
qualche buffer e a creare strani errori.
Se fosse una seriale fisica con UART reale potresti sfruttare il FRAME ERROR,
perchè è improbabile che arrivi uno STOP bit in fase con il falso START e quindi
si genera un errore di trama a livello di UART, ma essendo una seriale virtuale
questo errore viene gestito fisicamente a livello del microcontroller
all'interno del convertitore USB-RS232 e quindi è inaccessibile..
>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:
che sono molto utili in questi casi, proprio perchè gli optoisoilatori
interrompono gli anelli di massa.
--
ciao
Stefano
>
>Se fosse una seriale fisica con UART reale potresti sfruttare il FRAME ERROR,
>perchè è improbabile che arrivi uno STOP bit in fase con il falso START e quindi
>si genera un errore di trama a livello di UART, ma essendo una seriale virtuale
>questo errore viene gestito fisicamente a livello del microcontroller
>all'interno del convertitore USB-RS232 e quindi è inaccessibile..
Ma con VB6 non lo potresti gestire comunque. il frame error si gestiva da DOS.
>
>Esistono dei convertitori optoisolati come questo:
>
>http://is.gd/aT9Bc
link sbagliato :-(
>che sono molto utili in questi casi, proprio perchè gli optoisoilatori
>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:
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!
>Infatti era un "disturbo" provocato da motori installati nel quadro gestito
>dal Pc.
Era la cosa più probabile, in effetti.
>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 :-)
Dipende anche dal 'retroterra', un softwarista, ed Albe è informatico di provata
competenza ed esperienza, sarà sempre portato a vedere le cose prima dal suo
punto di vista.
Io invece sono un elettronico abituato a lottare con i disturbi dai tempi in cui
non si sapeva nemmeno bene cosa fossero e si tendeva ad attribuire a loro tutte
le colpe dei malfunzionamenti.
>Grazie delle dritte Stefano, fa sempre piacere parlare con persone cosi ;-)
>
>Buon lavoro!
YW
--
ciao
Stefano
Essendo un softwarista da oggi posso dare la colpa ai disturbi per eventuali
problemi
di software :-)
Grazie ancora ;-)
In realtà, l'OP diceva espressamente che una volta si era già risolto
installando dei filtri, per cui era scontato che stavolta fosse
qualcosa di diverso.
Adesso si scopre che, pur conoscendo una possibile soluzione, non la si
era ancora applicata.
Magari, sapendolo prima...
>
> Io invece sono un elettronico abituato a lottare con i disturbi dai tempi in
> cui non si sapeva nemmeno bene cosa fossero e si tendeva ad attribuire a loro
> tutte le colpe dei malfunzionamenti.
Diciamo che nessuno potrebbe immaginare che in un sistema commerciale
si utilizzino delle seriali non optoisolate...
Alberto
>Diciamo che nessuno potrebbe immaginare che in un sistema commerciale
>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