Я проверял дома при выходе из сна. У тебя, вероятно, GpsGate не успевает инициализировать COM-порт до запуска этого скрипта.
Попробуй так:
Код:
#pragma compile(Icon, "C:\Program Files (x86)\AutoIt3\Icons\au3script_v9.ico")
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Run_AU3Check=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
#include <CommMG.au3>
#include <Date.au3>
#include <MsgBoxConstants.au3>
; Настройки COM-порта... себе установил порт 6
$iPort = 6
$iBaud = 115200
$iBits = 8
$iParity = 0
$iStop = 1
$iFlow = 0
$msgError = ''
While (True)
; Запускаем GpsGate, если не запущена
If (Not ProcessExists("GpsGateXP.exe")) Then
ShellExecute("C:\Program Files (x86)\Franson\GpsGate 2.0\GpsGateXP.exe")
Sleep(500)
EndIf
; Открываем порт
$i = 0
$portStatus = _CommSetPort($iPort, $msgError, $iBaud, $iBits, $iParity, $iStop, $iFlow)
If ($portStatus <> 1) Then
$i = $i + 1
If ($i > 10) Then
MsgBox($MB_SYSTEMMODAL, 'Ошибка', 'Ошибка открытия порта COM' & $iPort)
Exit
EndIf
Sleep(500)
EndIf
$LastValidDateTime = _NowCalc()
While (True)
$sInString = _CommGetString()
If (StringLen($sInString)) Then
$LastValidDateTime = _NowCalc()
Else
$iDiff = _DateDiff('s', $LastValidDateTime, _NowCalc())
If ($iDiff > 3) Then
ExitLoop
EndIf
EndIf
Sleep(1000)
WEnd
; Звук потери сигнала GPS
SoundPlay('C:\Windows\Media\Windows Hardware Fail.wav')
; Если GpsGate аварийно завершилась, то будет ошибка при закрытии порта
; Поэтому проверяем наличие запущенного процесса
If ProcessExists("GpsGateXP.exe") Then
_CommClosePort()
EndIf
WinClose("Franson GpsGate")
Sleep(250)
WEnd
Добавил 10 попыток подключения к COM-порту с периодичностью 0,5 сек.