Пример #1
0
long HpHardware::ReadCounter()
{
	int ExtraWaitTime = 10; //~100 ms
	do {
		if (ExtraWaitTime<10)
			Sleep(10);
		if (--ExtraWaitTime <= 0)
			throw EXCEPTION("Ошибка ожидания окончания счета таймера КАМАК: не получен сигнал Q в течение ожидаемого времени.");

		Camac_ReadWord(_crateN, _timerN, 1, 8);

	} while (!Camac_q());

	Camac_ReadWord(_crateN, _counterN, 0, COUNTER_OVERFLOW_CHECK_F);
	if (Camac_q() && !Camac_ErrorCode())					//Counter overflow
	{
		LogFileFormat("Counter overflow. Continue measuring?");
		if (IDNO == ::MessageBox(NULL, "    Counter overflow.    \n    Continue measuring?    ", "Error", MB_ICONSTOP | MB_YESNO))
			throw EXCEPTION("Counter overflow.");
		Camac_ReadWord(_crateN, _counterN, 0, COUNTER_RESET_F);
		//Reset counter and overflow
		Camac_ReadWord(_crateN, _counterN, 0, COUNTER_OVERFLOW_LAM_RESET_F);
		//Reset LAM and overflow
	}

	auto newN = Camac_ReadLong(_crateN, _counterN, 0, COUNTER_READ_RESET_F);
	if (Camac_ErrorCode())
	{
		LogFileFormat("Counter read failure. Continue measuring?");
		if (IDNO == ::MessageBox(NULL, "    Counter read failure.       \n    Continue measuring?    ", "Camac error", MB_ICONSTOP | MB_YESNO))
			throw EXCEPTION("Counter read failure.");
	}
	return newN;
}
Пример #2
0
DWORD SCALL LogFileInit(VOID)
{
    DWORD result;

    InterlockedExchange(&logStatus, LOG_STATUS_INACTIVE);
    STAILQ_INIT(&logQueue);

    logPath = Io_ConfigGetPath("Locations", "Log_Files", "nxMyDB.log", NULL);
    if (logPath == NULL) {
        return ERROR_NOT_ENOUGH_MEMORY;
    }

    if (!InitializeCriticalSectionAndSpinCount(&logLock, 50)) {
        result = GetLastError();
        Io_Free(logPath);

    } else {
        result = ERROR_SUCCESS;

        // Set logging system as active
        InterlockedExchange(&logStatus, LOG_STATUS_ACTIVE);

        // Write log header
        LogFileFormat("------------------------------------------------------------\r\n");
    }

    return result;
}
Пример #3
0
	//Может запрашивать действие пользователя и заканчивать поток
void CComThread::ReportComErrorAndExit()
{
	LPTSTR lpMsgBuf;
	FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM| 
	FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
	(LPTSTR) &lpMsgBuf, 0, NULL);
	CString str2;
	DetectSerialErrors(m_hComPort,&str2);
	LogSpecifiedFileFormat(LogFileName, "ReadFile: ошибка чтения из порта.%s %s",lpMsgBuf,(LPCSTR)str2);
	LogFileFormat("ReadFile: ошибка чтения из порта.%s %s",lpMsgBuf,(LPCSTR)str2);
	LocalFree(&lpMsgBuf);

	m_Pool.PutMsg(NULL,SERIAL_ERROR_COM_FAILED);
	AfxEndThread(0);
}
Пример #4
0
long KratosHardware::ReadCounter()
{
	bool firstTry = true;
	int ExtraWaitTime = 100; //Extra wait time ~ 1000...3000 ms
	CounterState counterState;
	do {
		counterState = _counterUnit.ReadLastCounter();
		if (!firstTry)
		{
			LogFileFormat("USB counter ExtraWaitTime: %i ", ExtraWaitTime);
			Sleep(10);
		}
		firstTry = false;
		if (--ExtraWaitTime <= 0)
			throw EXCEPTION_SPECIFIC(CounterTimeoutException, "ќшибка в блоке USB-счетчика: счетчик во врем¤ не закончил счет.");
				
	} while (counterState.StartState == StartStates::Start);
	
	return counterState.Count; 
}
Пример #5
0
DWORD SCALL LogFileInit(VOID)
{
    CHAR    *path;
    DWORD   result;

    InterlockedExchange(&logStatus, LOG_STATUS_INACTIVE);
    STAILQ_INIT(&logQueue);

    path = Io_ConfigGetPath("Locations", "Log_Files", "nxMyDB.log", NULL);
    if (path == NULL) {
        return ERROR_NOT_ENOUGH_MEMORY;
    }

    // Open log file for writing
    logHandle = CreateFileA(path, GENERIC_WRITE,
        FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 0, NULL);

    if (logHandle == INVALID_HANDLE_VALUE) {
        result = GetLastError();

    } else if (!InitializeCriticalSectionAndSpinCount(&logLock, 50)) {
        result = GetLastError();
        CloseHandle(logHandle);

    } else {
        result = ERROR_SUCCESS;

        // Set logging system as active
        InterlockedExchange(&logStatus, LOG_STATUS_ACTIVE);

        // Write log header
        LogFileFormat("------------------------------------------------------------\r\n");
    }

    Io_Free(path);

    return result;
}