Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - script in python o in VB6 ?
Forum - Visual Basic 6 - script in python o in VB6 ?

Avatar
iz1kbp (Normal User)
Rookie


Messaggi: 26
Iscritto: 29/02/2020

Segnala al moderatore
Postato alle 10:21
Sabato, 13/02/2021
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 :

Codice sorgente - presumibilmente Delphi

  1. # Imports socket from Python
  2. import socket
  3. # Host is console's IP
  4. host ="192.168.0.128"
  5. # Port must be 49280
  6. port =49280
  7. #Establishes variables and connects to console
  8. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  9. s.connect((host,port))
  10. # Recalls scene A0
  11. s.sendall("ssrecall_ex scene_a 0\n".encode())
  12. # receive a message before closing socket
  13. s.recv(1500)
  14. # Closes socket
  15. 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

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 12:50
Sabato, 13/02/2021
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.
Codice sorgente - presumibilmente VB.NET

  1. Dim Luogo As String
  2. Dim IP As String
  3. Dim Connessione As Boolean
  4.  
  5. Private Sub cmdLan_Click()
  6.  
  7.     If cmdLan.Caption = "LAN" Then
  8.         IP = "xx.xx.xx.xx" ' eventuale ip pubblico
  9.         Form1.Caption = "xx.xx.xx.xx:49280 TCP CarloBarabucci@2018"
  10.         cmdLan.Caption = "INTERNET"
  11.         Winsock1.Close
  12.         SCONNESSO
  13.     Else
  14.         IP = "192.168.0.128"
  15.         Form1.Caption = "192.168.0.128:49280 TCP CarloBarabucci@2018"
  16.         cmdLan.Caption = "LAN"
  17.         Winsock1.Close
  18.         SCONNESSO
  19.     End If
  20.    
  21. End Sub
  22.  
  23. Private Sub Command1_Click()
  24.  
  25.     If Winsock1.State = 7 Then
  26.         Winsock1.SendData "11"
  27.         Luogo = "PAESE"
  28.     Else
  29.         MsgBox "Fallito"
  30.     End If
  31.  
  32. End Sub
  33.  
  34. Private Sub Command2_Click()
  35.  
  36.     If Winsock1.State = 7 Then
  37.         Winsock1.SendData "12"
  38.         Luogo = "Paese"
  39.     Else
  40.         MsgBox "Fallito"
  41.     End If
  42.    
  43. End Sub
  44.  
  45. Private Sub Command3_Click()
  46.  
  47.     If Winsock1.State = 7 Then
  48.         Winsock1.SendData "21"
  49.         Luogo = "PAESE2"
  50.     Else
  51.         MsgBox "Fallito"
  52.     End If
  53.    
  54. End Sub
  55.  
  56. Private Sub Command4_Click()
  57.  
  58.     If Winsock1.State = 7 Then
  59.         Winsock1.SendData "22"
  60.         Luogo = "PAESE2"
  61.     Else
  62.         MsgBox "Fallito"
  63.     End If
  64.    
  65. End Sub
  66.  
  67. Private Sub Form_Load()
  68.  
  69. On Error GoTo errore
  70.  
  71.     Connessione = False
  72.     IP = "192.168.0.128"
  73.     Form1.Caption = "192.168.0.128:49280 TCP CarloBarabucci@2018"
  74.     cmdLan.Caption = "LAN"
  75.  
  76.     Winsock1.RemotePort = 49280
  77.    
  78.     Luogo = ""
  79.    
  80. On Error GoTo 0
  81. Exit Sub
  82.  
  83. errore:
  84.     On Error GoTo 0
  85.     SCONNESSO
  86.     lblStato.Caption = "ERRORE"
  87. End Sub
  88.  
  89. Private Sub Form_Unload(Cancel As Integer)
  90.  
  91.     Winsock1.Close
  92.  
  93. End Sub
  94.  
  95. Private Sub btnConnetti_Click()
  96.  
  97. On Error GoTo errore
  98.      
  99.     If Winsock1.State <> 0 Then
  100.         Winsock1.Close
  101.         SCONNESSO
  102.         Timer3.Enabled = False
  103.     Else
  104.         Winsock1.RemoteHost = IP
  105.         Winsock1.Connect
  106.         Timer1.Enabled = True
  107.     End If
  108.  
  109. Exit Sub
  110.  
  111. errore:
  112.     MsgBox "Connessione fallita"
  113.     SCONNESSO
  114.     On Error GoTo 0
  115. End Sub
  116.  
  117. Private Sub Timer2_Timer()
  118.  
  119.    Timer2.Enabled = False
  120.    
  121.    ' disegno le linee
  122.    If txtRicevuto.Text = "10" Then
  123.         Line7.Visible = True
  124.         Line11.Visible = True
  125.         Line10.Visible = False
  126.         Line12.Visible = False
  127.         Line8.Visible = False
  128.         Line13.Visible = False
  129.         Line9.Visible = True
  130.         Line14.Visible = True
  131.     End If
  132.    
  133.     If txtRicevuto.Text = "01" Then
  134.         Line8.Visible = True
  135.         Line13.Visible = True
  136.         Line9.Visible = False
  137.         Line14.Visible = False
  138.         Line7.Visible = False
  139.         Line11.Visible = False
  140.         Line10.Visible = True
  141.         Line12.Visible = True
  142.     End If
  143.    
  144.     If txtRicevuto.Text = "11" Then
  145.         Line7.Visible = True
  146.         Line11.Visible = True
  147.         Line8.Visible = True
  148.         Line13.Visible = True
  149.         Line9.Visible = False
  150.         Line10.Visible = False
  151.         Line12.Visible = False
  152.         Line14.Visible = False
  153.     End If
  154.    
  155.     If txtRicevuto.Text = "00" Then
  156.         Line7.Visible = False
  157.         Line11.Visible = False
  158.         Line8.Visible = False
  159.         Line13.Visible = False
  160.         Line9.Visible = True
  161.         Line10.Visible = True
  162.         Line12.Visible = True
  163.         Line14.Visible = True
  164.      End If
  165.  
  166. End Sub
  167.  
  168. Private Sub Timer3_Timer()
  169.  
  170.     ' ogni secondo controllo se la connessione è ancora attiva
  171.     If Winsock1.State = 9 Then
  172.         SCONNESSO
  173.         lblStato.Caption = "NON IN LINEA"
  174.         Winsock1.Close
  175.         Timer3.Enabled = False
  176.     End If
  177.  
  178.     If Winsock1.State = 8 Then
  179.         SCONNESSO
  180.         lblStato.Caption = "TIME OUT"
  181.         Winsock1.Close
  182.         Timer3.Enabled = False
  183.     End If
  184.  
  185. End Sub
  186.  
  187. Private Sub winsock1_DataArrival(ByVal bytesTotali As Long)
  188.  
  189. Dim RiceveMsg() As Byte
  190.  
  191.     ReDim RiceveMsg(bytesTotali)
  192.     Winsock1.GetData RiceveMsg
  193.    
  194.     txtRicevuto.Text = ""
  195.    
  196.     'prendo solo i primi due numeri degli otto ricevuti
  197.     txtRicevuto.Text = Chr(RiceveMsg(0))
  198.     txtRicevuto.Text = txtRicevuto.Text & Chr(RiceveMsg(1))
  199.    
  200.     If Check1.Value = 1 And Luogo = "PAESE" Then
  201.     If txtRicevuto.Text = "01" Then Command1_Click: Exit Sub
  202.     If txtRicevuto.Text = "10" Then Command2_Click: Exit Sub
  203.     End If
  204.    
  205.     If Check2.Value = 1 And Luogo = "PAESE2" Then
  206.     If txtRicevuto.Text = "10" Then Command3_Click: Exit Sub
  207.     If txtRicevuto.Text = "01" Then Command4_Click: Exit Sub
  208.     End If
  209.    
  210.     Timer2.Enabled = True ' attesa per eventuale commutazione prima di disegnare le linee
  211.    
  212. End Sub
  213.  
  214.  
  215. Private Sub Timer1_Timer()
  216.  
  217. Static a As Integer
  218.  
  219.     Timer1.Enabled = False 'disattivo e riattiverò se fallisce
  220.     a = a + 1
  221.     If a > 9 Then ' troppe volte
  222.         SCONNESSO
  223.         Winsock1.Close
  224.         lblStato.Caption = "10 tentativi"
  225.         a = 0
  226.         Exit Sub
  227.     End If
  228.    
  229.     If Connessione Then
  230.         Winsock1.SendData "00"
  231.         Timer3.Enabled = True ' controlla il mantenimento della connessione
  232.         Timer1.Interval = 200
  233.         a = 0
  234.     Else
  235.         SCONNESSO
  236.         btnConnetti.Enabled = False
  237.         btnConnetti.Caption = "Tentativo " & a
  238.         Timer1.Interval = 1000
  239.         Timer1.Enabled = True ' se sconnesso riprovo
  240.         Exit Sub
  241.     End If
  242.    
  243. End Sub
  244.  
  245. Private Sub SCONNESSO()
  246.  
  247.     lblStato.Caption = "SCONNESSO"
  248.     Shape1.FillStyle = 1
  249.     btnConnetti.Caption = "Connetti"
  250.     btnConnetti.Enabled = True
  251.     Command1.Enabled = False
  252.     Command2.Enabled = False
  253.     Command3.Enabled = False
  254.     Command4.Enabled = False
  255.     Timer1.Interval = 200
  256.     Connessione = False
  257.    
  258.    
  259. End Sub
  260.  
  261. Private Sub CONNESSO()
  262.  
  263.     lblStato.Caption = "Connesso"
  264.     Shape1.FillStyle = 0
  265.     btnConnetti.Caption = "Sconnetti"
  266.     btnConnetti.Enabled = True
  267.     Command1.Enabled = True
  268.     Command2.Enabled = True
  269.     Command3.Enabled = True
  270.     Command4.Enabled = True
  271.     Connessione = True
  272.    
  273. End Sub
  274.  
  275. Private Sub Winsock1_Connect()
  276.    
  277.     CONNESSO
  278.  
  279. End Sub


Ultima modifica effettuata da Carlo il 13/02/2021 alle 13:23


in programmazione tutto è permesso
PM Quote
Avatar
iz1kbp (Normal User)
Rookie


Messaggi: 26
Iscritto: 29/02/2020

Segnala al moderatore
Postato alle 10:36
Domenica, 14/02/2021
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 il 14/02/2021 alle 10:37
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 11:50
Domenica, 14/02/2021
Testo quotato

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:
https://www.python.org/downloads/release/python-387/
gli installer sono in fondo alla pagina.
Nel sito tutta la documentazione, ma dai un'occhiata anche qui:
https://www.w3schools.com/python/default.asp


in programmazione tutto è permesso
PM Quote
Avatar
iz1kbp (Normal User)
Rookie


Messaggi: 26
Iscritto: 29/02/2020

Segnala al moderatore
Postato alle 17:28
Lunedì, 15/02/2021
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

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 21:02
Lunedì, 15/02/2021
Testo quotato

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, https://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: https://en.freedownloadmanager.org/Windows-PC/Microsoft-Vis ...
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 il 15/02/2021 alle 21:14


in programmazione tutto è permesso
PM Quote
Avatar
iz1kbp (Normal User)
Rookie


Messaggi: 26
Iscritto: 29/02/2020

Segnala al moderatore
Postato alle 22:45
Lunedì, 15/02/2021
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

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 10:56
Martedì, 16/02/2021
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: http://www.pierotofy.it/pages/extras/forum/6/1062607-visua ...

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 il 16/02/2021 alle 16:37


in programmazione tutto è permesso
PM Quote
Avatar
iz1kbp (Normal User)
Rookie


Messaggi: 26
Iscritto: 29/02/2020

Segnala al moderatore
Postato alle 11:29
Martedì, 16/02/2021
Hai perfettamente ragione in tutto, concordo pienamente.
Dovrei trovare il coraggio e la voglia di cominciare in .net.
Convertire  tutto il programma attuale da vb6 a .net è una cosa secondo me non praticabile, troppo lavoro per una applicazione che nasce e muore su un tipo di macchina particolare.
Sicuramente se mi proporranno un progetto nuovo valutero il passaggio a net.
Grazie per i preziosi spunti di riflessione!!:k:
buon proseguimento
Mario;)

PM Quote