ppm Inserito: 12 settembre 2006 Segnala Inserito: 12 settembre 2006 Un saluto a tutti i lettori.Abbiamo una linea di produzione con alcuni Panel PC 670 per la gestione con ProTool e mi è stato chiesto di rendere disponibile in uno di essi le schermate di un'altra parte della macchina per evitare che gli operatori debbano camminare troppo...... Facile, vero? Importi tutte le schermate, i tag e i pointer alle aree dei messaggi e scarichi l'applicazione. Per iniziare bene, sono due PLC differenti: per fortuna siamo in rete e non costa niente passare i dati per ethernet. Ma quanti dati? Oddio, 750 tag per gli stati e le visualizzazioni, 500 messaggi di allarme, e non sono neanche consecutivi nelle DB di appoggio! Pensi immediatamente alle leggi di Murphy e ti rendi conto che la metá dei tag ha lo stesso nome nelle due applicazioni e che devi passare le giornate a riscriverli. Per finire: è sconsigliato usare il WinCC Flex con opzione Remote per ragioni di budget. No ci resta che piangere, Troisi dixit.Soluzione trovata, implementata e funzionante al 100%:1 - Connessione ethernet 100 Mbit con cavo cross UTP tra i due Panel PC. 2 - Installazione di TightVNC server nel Panel remoto e client nel Panel locale, Freeware.3 - Pulsante al port parallelo per lo switch tra le visualizzazioni con programmino di gestione in background. Nessun scomodo Alt + Tab.Il programma VNC è un visualizzatore/attivatore remoto. Vedi sul tuo schermo in full screen il contenuto dello schermo di un'altro PC e invii, con la tua tastiera e il tuo mouse, i comandi alle applicazioni remote. Freeware e perfetto per il controllo remoto. Generosamente rapido se disponi di connessione ethernet; lento peró affidabile con modem per gestioni di telecontrollo. Purtroppo, funziona solo tra PC; no so se è stato implementato su altre basi. Per l'ackowledge degli allarmi, è opportuno posizionare un tasto aggiuntivo nella area comune dello schermo remoto, dato che il tasto Ack del Panel PC resta locale.Il costo totale è di circa 20 euro (cavo UTP, connettori RJ45, pulsante 22 mm) e un pó di programmazione a tempo perso. Se qualcuno ha un'idea migliore, mi tolgo il cappello. Agli eventuali interessati posso mandare, "a gratis", tutti i dettagli e il programma di switch oppure pubblicare il tutto in questo post, se i Sigg. Amministratori del forum lo permettono.Saluti e baci.
Gianmario Pedrani Inserita: 12 settembre 2006 Segnala Inserita: 12 settembre 2006 E una soluzione, che io ho addottato 1 anno e mezzo fà...... diciamo che funziona
Bruno Inserita: 13 settembre 2006 Segnala Inserita: 13 settembre 2006 Anche io ho usato la tua soluzione (usavo VNC invece di TightVNC ma non cambia), solamente non avevamo pensato al pulsante collegato alla parallela. BRAVO !Bella soluzione come hai sviluppato il programmino che gestisce lo swap ( API per SEND message di windows ?)mi interesserebbe anche il cablaggio....CiaoBR1
ppm Inserita: 30 settembre 2006 Autore Segnala Inserita: 30 settembre 2006 Chiedo scusa pr il ritardo. Per quanto riguarda la parallela, è semplice: pulsante tra pin 11 e una massa (pin 18..25). Il pin 11 ha già un pull-up a +5V. La lettura si fa con utilità di accesso a port che, di norma, non è leggibile da programma diretto. Io uso di norma InpOut32.dll che si puó trovare qui.Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As IntegerPublic Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPublic Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As LongPublic Declare Function GetForegroundWindow Lib "user32" () As LongPublic Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As LongPublic Declare Function AttachThreadInput Lib "user32" (ByVal idAttach As Long, ByVal idAttachTo As Long, ByVal fAttach As Long) As LongPublic Declare Function IsIconic Lib "user32" (ByVal hWnd As Long) As LongPublic Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As LongPublic Const SW_SHOWNORMAL = 1Public Const SW_SHOW = 5Public Const SW_RESTORE = 9hWndProTool = FindWindow(lpClassName1, lpWindowName1)hWndVNC = FindWindow(lpClassName2, lpWindowName2)'Legge pin 11 di LPT1If Inp(&H379) And &H80 Then ....... If GetForegroundWindow() = hWndProTool Then Call ForceForegroundWindow(hWndVNC) Else Call ForceForegroundWindow(hWndProTool) End IfEnd IfPer il task switch ho avuto problemi con la forma canonica e ho trovato funzionale questo:Private Sub ForceForegroundWindow(ByVal hWnd)Dim ThreadID1 As Long, ThreadID2 As Long, ret As LongIf hWnd = GetForegroundWindow() Then Exit SubElse ThreadID1 = GetWindowThreadProcessId(GetForegroundWindow(), ByVal 0&) ThreadID2 = GetWindowThreadProcessId(Me.hWnd, ByVal 0&) If ThreadID1 <> ThreadID2 Then Call AttachThreadInput(ThreadID1, ThreadID2, True) ret = SetForegroundWindow(Me.hWnd) Call AttachThreadInput(ThreadID1, ThreadID2, False) End If ret = SetForegroundWindow(hWnd) If IsIconic(hWnd) Then Call ShowWindow(hWnd, SW_RESTORE) Else Call ShowWindow(hWnd, SW_SHOW) End IfEnd IfEnd SublpClassName1 e lpWindowName1 corrispondono al nome della classe della finestra di ProTool e al nome della finestra stessa.lpClassName2 e lpWindowName2 corrispondono al nome della classe della finestra di VNC e al nome della finestra stessa.Per trovarli, si puó usare qualunque utilitá che "legge" le finestre occulte o no, tipo Spy++ di Microsoft o AU3Info che viene nell'ottimo freeware AutoIt3 (che consiglio di scaricare).L'applicazione completa è forzatamente più complessa. Saluti agli eventuali lettori.
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora