Показать сообщение отдельно
Старый 08.09.2015, 12:22   #162
Lexx09
Старший Пользователь
 
Регистрация: 18.04.2009
Город: Краснодар
Регион: 23, 93
Машина: Приора хэтчбек
Сообщений: 977
Lexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud of
По умолчанию

Я проверял дома при выходе из сна. У тебя, вероятно, 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 сек.
__________________
Приора хэтчбек
Win7 x64 Pro, Intel Core i3-3240 Ivy Bridge 2x3.4GHz HT, DDR3 2x4Gb, SSD SiliconPower Ace A55 128GB SATAIII, ASRock B75M-ITX, M2-ITX rev.2F, GPS Beitian BN-808, Logitech Wireless Touch Keyboard K400r, ИК-пульт Prology RCD-350, круиз-контроль...
Lexx09 вне форума   Ответить с цитированием