Oppure

Loading
13/02/21 9:21
iz1kbp
Buongiorno a tutti.
Premetto che Python non lo conosco.
Devo pilotare un'apparato esterno che è dotato di lan. Il costruttore mi ha detto che posso comandarlo utilizzando dei semplici script in python.
Il mio programma di gestione attuale, per macchine simili ma piu vecchie, è in vb6 e comunico via seriale.
Questo uno script in pyton :

# Imports socket from Python
import socket
# Host is console's IP
host ="192.168.0.128"
# Port must be 49280
port =49280
#Establishes variables and connects to console
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
# Recalls scene A0
s.sendall("ssrecall_ex scene_a 0\n".encode())
# receive a message before closing socket
s.recv(1500)
# Closes socket
s.close ()


Da quel che vedo , mi pare di capire che lo script semplicemente manda un stringa " ssrecall_ex scene_a 0\n" sul socket.
Mi chiedevo: ma la stessa cosa potrei farla direttamente da vb6 usando il socket senza dover passare da python?
Che differenza c'è tra i due sistemi?
Qualcuno mi sa illuminare?
Grazie a tutti
Mario
aaa
13/02/21 11:50
Carlo
L'apparato esterno non sa con quale linguaggio hai creato e mandato la stringa, qualsiasi linguaggio usi per stabilire la connessione va bene.
In VB6 c'è il comodo Winsock, imposta i giusti parametri e trasmetti la striga...

Winsock è un componente che devi aggiungere, si trova alla voce: "Microsoft Winsock Control 6.0 (SP6)"

Un mio vecchio programma, ci puoi prendere degli spunti, la parte In Timer2 che disegna le righe che mostrano graficamente i device connessi tramite LAN o internet, la puoi ignorare, il programma trasmette e riceve.
In Command1,2,3,4 le trasmissioni delle stringhe, nel mio caso delle coppie di numeri.
In Timer1 c'è : Winsock1.SendData "00", è il comando di default, dovrai sostituirlo con il tuo.
Dim Luogo As String
Dim IP As String
Dim Connessione As Boolean

Private Sub cmdLan_Click()

    If cmdLan.Caption = "LAN" Then
        IP = "xx.xx.xx.xx" ' eventuale ip pubblico 
        Form1.Caption = "xx.xx.xx.xx:49280 TCP CarloBarabucci@2018"
        cmdLan.Caption = "INTERNET"
        Winsock1.Close
        SCONNESSO
    Else
        IP = "192.168.0.128"
        Form1.Caption = "192.168.0.128:49280 TCP CarloBarabucci@2018"
        cmdLan.Caption = "LAN"
        Winsock1.Close
        SCONNESSO
    End If
    
End Sub

Private Sub Command1_Click()

    If Winsock1.State = 7 Then
        Winsock1.SendData "11"
        Luogo = "PAESE"
    Else
        MsgBox "Fallito"
    End If
 
End Sub

Private Sub Command2_Click()

    If Winsock1.State = 7 Then
        Winsock1.SendData "12"
        Luogo = "Paese"
    Else
        MsgBox "Fallito"
    End If
    
End Sub

Private Sub Command3_Click()

    If Winsock1.State = 7 Then
        Winsock1.SendData "21"
        Luogo = "PAESE2"
    Else
        MsgBox "Fallito"
    End If
    
End Sub

Private Sub Command4_Click()

    If Winsock1.State = 7 Then
        Winsock1.SendData "22"
        Luogo = "PAESE2"
    Else
        MsgBox "Fallito"
    End If
    
End Sub

Private Sub Form_Load()

On Error GoTo errore

    Connessione = False
    IP = "192.168.0.128"
    Form1.Caption = "192.168.0.128:49280 TCP CarloBarabucci@2018"
    cmdLan.Caption = "LAN"

    Winsock1.RemotePort = 49280
    
    Luogo = ""
    
On Error GoTo 0
Exit Sub

errore:
    On Error GoTo 0
    SCONNESSO
    lblStato.Caption = "ERRORE"
End Sub

Private Sub Form_Unload(Cancel As Integer)

    Winsock1.Close

End Sub

Private Sub btnConnetti_Click()

On Error GoTo errore
     
    If Winsock1.State <> 0 Then
        Winsock1.Close
        SCONNESSO
        Timer3.Enabled = False
    Else
        Winsock1.RemoteHost = IP
        Winsock1.Connect
        Timer1.Enabled = True
    End If

Exit Sub

errore:
    MsgBox "Connessione fallita"
    SCONNESSO
    On Error GoTo 0
End Sub

Private Sub Timer2_Timer()

   Timer2.Enabled = False
   
   ' disegno le linee
   If txtRicevuto.Text = "10" Then
        Line7.Visible = True
        Line11.Visible = True
        Line10.Visible = False
        Line12.Visible = False
        Line8.Visible = False
        Line13.Visible = False
        Line9.Visible = True
        Line14.Visible = True
    End If
    
    If txtRicevuto.Text = "01" Then
        Line8.Visible = True
        Line13.Visible = True
        Line9.Visible = False
        Line14.Visible = False
        Line7.Visible = False
        Line11.Visible = False
        Line10.Visible = True
        Line12.Visible = True
    End If
    
    If txtRicevuto.Text = "11" Then
        Line7.Visible = True
        Line11.Visible = True
        Line8.Visible = True
        Line13.Visible = True
        Line9.Visible = False
        Line10.Visible = False
        Line12.Visible = False
        Line14.Visible = False
    End If
    
    If txtRicevuto.Text = "00" Then
        Line7.Visible = False
        Line11.Visible = False
        Line8.Visible = False
        Line13.Visible = False
        Line9.Visible = True
        Line10.Visible = True
        Line12.Visible = True
        Line14.Visible = True
     End If

End Sub

Private Sub Timer3_Timer()

    ' ogni secondo controllo se la connessione è ancora attiva
    If Winsock1.State = 9 Then
        SCONNESSO
        lblStato.Caption = "NON IN LINEA"
        Winsock1.Close
        Timer3.Enabled = False
    End If

    If Winsock1.State = 8 Then
        SCONNESSO
        lblStato.Caption = "TIME OUT"
        Winsock1.Close
        Timer3.Enabled = False
    End If
 
End Sub

Private Sub winsock1_DataArrival(ByVal bytesTotali As Long)

Dim RiceveMsg() As Byte

    ReDim RiceveMsg(bytesTotali)
    Winsock1.GetData RiceveMsg
    
    txtRicevuto.Text = ""
    
    'prendo solo i primi due numeri degli otto ricevuti
    txtRicevuto.Text = Chr(RiceveMsg(0))
    txtRicevuto.Text = txtRicevuto.Text & Chr(RiceveMsg(1))
    
    If Check1.Value = 1 And Luogo = "PAESE" Then
    If txtRicevuto.Text = "01" Then Command1_Click: Exit Sub
    If txtRicevuto.Text = "10" Then Command2_Click: Exit Sub
    End If
    
    If Check2.Value = 1 And Luogo = "PAESE2" Then
    If txtRicevuto.Text = "10" Then Command3_Click: Exit Sub
    If txtRicevuto.Text = "01" Then Command4_Click: Exit Sub
    End If
    
    Timer2.Enabled = True ' attesa per eventuale commutazione prima di disegnare le linee
    
End Sub


Private Sub Timer1_Timer()

Static a As Integer

    Timer1.Enabled = False 'disattivo e riattiverò se fallisce
    a = a + 1
    If a > 9 Then ' troppe volte
        SCONNESSO
        Winsock1.Close
        lblStato.Caption = "10 tentativi"
        a = 0
        Exit Sub
    End If
    
    If Connessione Then
        Winsock1.SendData "00"
        Timer3.Enabled = True ' controlla il mantenimento della connessione
        Timer1.Interval = 200
        a = 0
    Else
        SCONNESSO
        btnConnetti.Enabled = False
        btnConnetti.Caption = "Tentativo " & a
        Timer1.Interval = 1000
        Timer1.Enabled = True ' se sconnesso riprovo
        Exit Sub
    End If
    
End Sub

Private Sub SCONNESSO()

    lblStato.Caption = "SCONNESSO"
    Shape1.FillStyle = 1
    btnConnetti.Caption = "Connetti"
    btnConnetti.Enabled = True
    Command1.Enabled = False
    Command2.Enabled = False
    Command3.Enabled = False
    Command4.Enabled = False
    Timer1.Interval = 200
    Connessione = False
    
    
End Sub

Private Sub CONNESSO()

    lblStato.Caption = "Connesso"
    Shape1.FillStyle = 0
    btnConnetti.Caption = "Sconnetti"
    btnConnetti.Enabled = True
    Command1.Enabled = True
    Command2.Enabled = True
    Command3.Enabled = True
    Command4.Enabled = True
    Connessione = True
    
End Sub

Private Sub Winsock1_Connect()
    
    CONNESSO
 
End Sub
Ultima modifica effettuata da Carlo 13/02/21 12:23
in programmazione tutto è permesso
14/02/21 9:36
iz1kbp
Ciao Carlo,
grazie per il replay.

Winsock di vb6 gia lo uso pesantemente per altre macchine che fanno parte dello stesso progetto di controllo e devo dire che si comporta egreggiamente.Grazie comunque per il tuo codice!
Quello che mi ha lasciato un po spiazzato è stato che il produttore ha detto "usa python per...etc etc".
Si...sono della tua stessa idea,:la macchina legge una stringa,se poi gli arriva da python anziche da vb6 o da terminale poco importa.
Purtroppo non conoscendo python pensavo che usasse delle caratteristiche particolari per la comunicazione.
Ora devo capire se sfruttare semplicemente un shell per utilizzare gli script gia fatti, oppure inserire un altro winsock e creare ex novo la stringa da mandare.
Bho?!
Sicuramente la prima scelta è piu "veloce" ma devo installare PH e fare delle modifiche nel path di sistema.La seconda è piu elegante ma...vuol dire
altro sbattimento per creare e testare.
Vedo cosa mi dice "la pancia"
Grazie ancora!:k:
Mario
Ultima modifica effettuata da iz1kbp 14/02/21 9:37
aaa
14/02/21 10:50
Carlo
Postato originariamente da iz1kbp:

Ciao Carlo,
grazie per il replay.

Winsock di vb6 gia lo uso pesantemente per altre macchine che fanno parte dello stesso progetto di controllo e devo dire che si comporta egreggiamente.Grazie comunque per il tuo codice!
Quello che mi ha lasciato un po spiazzato è stato che il produttore ha detto "usa python per...etc etc".
Si...sono della tua stessa idea,:la macchina legge una stringa,se poi gli arriva da python anziche da vb6 o da terminale poco importa.
Purtroppo non conoscendo python pensavo che usasse delle caratteristiche particolari per la comunicazione.
Ora devo capire se sfruttare semplicemente un shell per utilizzare gli script gia fatti, oppure inserire un altro winsock e creare ex novo la stringa da mandare.
Bho?!
Sicuramente la prima scelta è piu "veloce" ma devo installare PH e fare delle modifiche nel path di sistema.La seconda è piu elegante ma...vuol dire
altro sbattimento per creare e testare.
Vedo cosa mi dice "la pancia"
Grazie ancora!:k:
Mario

Capisco.
Mantenere i progetti VB6...
Nuovi progetti VB.Net

I nuovi device te li forniscono con script Pyton?
Non sono un esperto di Pyton, ma testare e modificare codice Pyton è agevole, l'ambiente Pyton con IDE, si installa in due minuti e non ha bisogno di configurazioni:
python.org/downloads/release/python-387/
gli installer sono in fondo alla pagina.
Nel sito tutta la documentazione, ma dai un'occhiata anche qui:
w3schools.com/python/…
in programmazione tutto è permesso
15/02/21 16:28
iz1kbp
Avevo provato a migrare verso la .net ma...il pc su cui sviluppo, rallentava in maniera oscena.
Il tentativo lo avevo fatto perchè con i nuovi VStudio c'era la possibilita di sviluppare per altre piattaforme.
Purtroppo le mie conoscenze sono a livello "base, un po di piu" e quindi ho deciso di rimanere nel "seminato"...finchi posso!
Comunque devo dire che il programma che ho sviluppato (è partito da qbasic 4 nel lontano 1992 su un "vecchio " 8086 !!!) tiene tutt'ora "botta".
Ho provato PY,pensavo fosse qualcosa di mostruoso ma in realta, se ne sta tranquillo tranquillo in attesa di essere chiamato in causa!!
Mi sa che prodendo per l'uitlizzo di "shell".
Il nuovo strumento in realta viene fornito senza nessun programma se non un suo gestionale proprietario , che vuole un sistema 64bit!!. Sono riuscito , tramite agganci "strani ", a trovare il manuale di sviluppo ed un tecnico "intelligente" che ha capito che non volevo disassemblare il bios della macchina, ma solamente comandarla in maniera efficiente anche tramite terminale...8bit!!!:D
Grazie per il supporto e la pazienza!
Buon proseguimento
Mario
aaa
15/02/21 20:02
Carlo
Postato originariamente da iz1kbp:
Avevo provato a migrare verso la .net ma...il pc su cui sviluppo, rallentava in maniera oscena.
Il tentativo lo avevo fatto perchè con i nuovi VStudio c'era la possibilita di sviluppare per altre piattaforme.
Purtroppo le mie conoscenze sono a livello "base, un po di piu" e quindi ho deciso di rimanere nel "seminato"...finché posso!

Direi che oramai non puoi più:yup:
Attenzione non è il solito sermone del patito dell'aggiornare tutto a qualsiasi costo.
Anche io ho applicativi VB6 scritti decine di anni fa, che ancora girano con hardware dedicato sotto winXP, gli utilizzatori non ne vogliono sapere di cambiare, perché il sistema ha dimostrato negli anni di essere error free, non hanno bisogno di nuove features, e vogliono solo lavorare senza rischiare.

Ma tenere dei PC WinXP in una rete, dove ci sono dei PC Win10, diventa sempre più difficile, e l'istallazione di Win10 è obbligatoria nei PC con dati sensibili, come i PC dell'amministrazione o i PC di casa usati per navigare, dove magari si fanno acquisi o pagamenti online.

Sviluppare in Win7 con VB6 è possibile, ma troverai sempre qualche difficoltà con alcuni OCX, e in Win10 è praticamente impossibile ottere tutte le caratteristiche di VB6.

VisualStudio 2012, visualstudio.microsoft.com/it/vs/older-downloads/ è ancora disponibile, e gira discretamente su PC datati.
Attenzione, il codice usato per scrivere VisualStudio, non si comporta come il codice usato per scrivere VB6, nel senso che per evitare di compilare tutto, il codice viene caricato e vengono compilate solo le parti che vengono usate, il risultato è che al primo avvio e alla prima compilazione, tutto sembra molto lento, ma vedrai, che se chiudi VisualStudio e lo riapri il secondo caricamento sarà molto più veloce, lo stesso vale per la compilazione.

Personalmente ho ancora un portatile (centrino) con WinXP e VisualStudio 2010, si comporta benissimo, ma Microsoft non distribuisce più VS 2010, ho visto che si trova ancora nel web: en.freedownloadmanager.org/Windows-PC/…
ma non ho idea se sia una scelta valida, come non conosco le versioni express, che dovrebbero essere più leggere.

Per concludere il tempo che stai utilizzando per continuare a far funzionare i nuovi applicativi sotto VB6, sarebbe meglio speso per migrare verso VB.Net, dove se si usano le nuove istruzioni tutto è più facile e performante, pensa a tutti i cicli che fai in VB6 per caricare/salvare files, cercare stringhe, ordinare liste, dividere stringhe e immeterle negli array, in VB .Net, ci sono le istruzioni dedicate e si fanno con una riga di codice, non secondario che se si usano tali istruzioni il codice diventa migliaia di volte più veloce che in VB6. Non mi dilungo sulla grafica perché ci vorrebbe tutta la pagina.
Ultima modifica effettuata da Carlo 15/02/21 20:14
in programmazione tutto è permesso
15/02/21 21:45
iz1kbp
Si, avevo provato vs2010 e pure la versione express (mi serviva un exe al volo per una tavoletta grafica).
Avevo installato la vs2012 ma per il mio pc era troppo pesante.
Comunque il mio "exe" di vb6 gira "tranquillamente" su win10 64.
E' vero che non uso grafica, ma uso pesantemente la parte "hardware" dei pc e queste , per mia fortuna, lavorano ancora bene con il vecchio vb6. Attualmente sviluppo su win7 32bit.
questa applicazione è legata a macchine "vecchie". Se un giorno mi diranno che le macchine "vecchie" non potranno piu essere utilizzate...bhe...
ci penserò.
Ma dubito fortemente che questa strumentazione venga messa da parte anche perchè , tornando all'inizio, la macchina non sa chi gli spedisce una stringa...e certamente non sarò io a fare la spia!! :D:D:D:D
aaa
16/02/21 9:56
Carlo
VB6 è il mio primo amore, i linguaggi che avevo usato precedentemente mi avevano appassionato ma non mi avevano creato nessuna infatuazione.
Se hai tempo guarda il mio primo post su Pierotofy: pierotofy.it/pages/extras/forum/6/1062607-visual_basic_6_e_windows_710/

Detto questo saprai che non voglio accusarti o forzarti a fare nulla.

Se gli applicativi VB6 funzionano in Win10 64bit è perché la Microsoft si è sempre concentrata sulla retrocompatibilità, al contrario di altri che invece hanno fatto buttare tutto nel cesso ogni 10 anni.
In Win10 però, il supporto a VB6 deve essere considerato come una ruota di scorta, va custodita gelosamente nel bagagliaio e si monta in caso di necessità, permettendoti di tornare a casa. La Microsoft ti permette di continuare ad usare il vecchio mentre in tutta comodità hai il tempo di aggiornarti, se per i nuovi applicativi usi ancora VB6 è come se circolassi con la ruota di scorta e il bagaliaio vuoto, prima o poi resterai a piedi.

Se VS2010 sul tuo PC è troppo lento, immagino che hai dei problemi oppure usi un Pentium IV o simile. Un Pentim IV consuma quasi 170W, un dual core duo 120W, un i3 70W, poi ci sono i PC small Eee ecc, che consumano 30W e anche meno, cambiare il PC considerati i consumi è gratis, e dopo un anno ti fa guadagnare, un i3 W7/10 originale di seconda generazione acquistato alle fiere dell'elettronica (quando ci risaranno) costa meno di 100 euro.:k:
Ultima modifica effettuata da Carlo 16/02/21 15:37
in programmazione tutto è permesso