Je cherchais à afficher et stocker dans des fichiers données émises en TCP par des capteurs.
Je suis parvenu à mes fins à l'aide de deux scripts du type suivant qui écrivent les données dans le même fichier:
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
_Main()
Func _Main()
Local $output, $die, $msg, $results
;Global $Port = 80, $IP = @IPAddress1, $Socket
GUICreate("SEABIRD SBE45", 370, 70, -1, -1)
GUICtrlCreateLabel(" Température, Conductivité, Salinité, Vélocité", 10, 10)
$output = GUICtrlCreateLabel("", 10, 30, 340, 30, BitOR($BS_PUSHLIKE, $SS_CENTER))
GUICtrlSetFont($output, 12, 800, "", "Comic Sans MS")
GUISetState(); Afficher le GUI
; Run the GUI until the dialog is closed
;Identification("admin", "ab12cd34")
;Func Identification($Pseudo, $Motdepasse)
TCPStartup()
OnAutoItExitRegister("_Cleanup")
$sIP = "192.168.203.34"
$iPort = 4660
Local $file = FileOpen("acquitcp.txt", 10)
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
;If @error Then
; MsgBox(0, "", "Impossible de se conneter au serveur, il se peut que le serveur soit deconnecter")
; TCPShutdown()
; Exit
; EndIf
Global $hSocketClient = TCPConnect($sIP, $iPort)
;Func Sendlogin()
;$send = String($login & "\" & $pass)
; TCPSend($hSocketClient, "#IDENTIFY#" & _GetIP() & "|" & $Pseudo & "|" & $Motdepasse)
If $hSocketClient = -1 Then
MsgBox(0, "Erreur", "Unable to connect with SBE45 in TCP")
Exit
EndIf
HotKeySet("{ESC}", "_Exit")
;EndFunc ;==>Identification
While 1
$recv = TCPRecv($hSocketClient, 4096)
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
If $recv Then
ConsoleWrite($recv & @CRLF)
FileWrite("acquitcp.txt",$recv)
GUICtrlSetData($output, $recv)
FileClose($file)
EndIf
WEnd
EndFunc ;==>_Main
;Func _Cleanup()
; TCPShutdown()
;EndFunc
;Func _Exit()
; Exit
;EndFunc
Voici à quoi ressemblent ces données:
22.2325, 0.00008, 0.0108, 1489.021
$GPGGA,134557.428,4821.6136,N,00433.6451,W,0,00,50.0,0.0,M,52.2,M,0.0,0000*51
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPGSV,3,1,09,15,77,292,33,09,61,057,00,26,55,111,00,24,41,258,00*7A
$GPGSV,3,2,09,28,40,055,00,18,26,309,36,05,14,178,00,17,12,108,00*7F
$GPGSV,3,3,09,08,07,064,00*4D
$GPRMC,134557.428,V,4821.6136,N,00433.6451,W,,,190413,,*08
J'aimerais enrichir mon script et présenter ces données sous une autre forme:
Température: 22.2325 Conductivité: 0.00008 Salinité: 0.0108 Vélocité: 1489.021
Pour cela il faudrait que je puisse discriminer les 4 valeurs, température conductivité salinité et vélocité dans mes paquets TCP.
Je voudrais garder que la ligne $GPRMC,134557.428,V,4821.6136,N,00433.6451,W,,,190413,,*08 et enlever toutes les autres lignes $GP qui arrivent (et si possible n'en garder qu'une sur 10)/
Quels sont les outils qui pourraient me permettre de mettre en forme ces données enregistrés à partir des ports TCP?