Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Remotare Applicazione Protool Runtime - Risparmio energetico


Messaggi consigliati

Inserito:

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:

E una soluzione, che io ho addottato 1 anno e mezzo fà...... diciamo che funziona :D

Inserita:

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

Ciao

BR1

  • 3 weeks later...
Inserita:

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 Integer

Public 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 Long

Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long

Public Declare Function GetForegroundWindow Lib "user32" () As Long

Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long

Public Declare Function AttachThreadInput Lib "user32" (ByVal idAttach As Long, ByVal idAttachTo As Long, ByVal fAttach As Long) As Long

Public Declare Function IsIconic Lib "user32" (ByVal hWnd As Long) As Long

Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

Public Const SW_SHOWNORMAL = 1

Public Const SW_SHOW = 5

Public Const SW_RESTORE = 9

hWndProTool = FindWindow(lpClassName1, lpWindowName1)

hWndVNC = FindWindow(lpClassName2, lpWindowName2)

'Legge pin 11 di LPT1

If Inp(&H379) And &H80 Then .......

If GetForegroundWindow() = hWndProTool Then

Call ForceForegroundWindow(hWndVNC)

Else

Call ForceForegroundWindow(hWndProTool)

End If

End If

Per 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 Long

If hWnd = GetForegroundWindow() Then

Exit Sub

Else

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 If

End If

End Sub

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

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