| 1 | short CCP4002Prot::Trans(void)
|
|---|
| 2 | {
|
|---|
| 3 | short ret = 0;
|
|---|
| 4 | DWORD retErr = 0;
|
|---|
| 5 |
|
|---|
| 6 | SetCpStatusString(TRANSMIT);
|
|---|
| 7 |
|
|---|
| 8 | if (false == WriteCanQueue(m_comnum, m_transBuf, m_transBuflen))
|
|---|
| 9 | {
|
|---|
| 10 | DTLOG(m_logid, DT_CP4002PROT_CAN_WRITE_FAILED);
|
|---|
| 11 | retErr = GetLastError();
|
|---|
| 12 | m_errCounterTrans++;
|
|---|
| 13 | ret = -1;
|
|---|
| 14 | }
|
|---|
| 15 | else
|
|---|
| 16 | {
|
|---|
| 17 | m_myTimer->Set_MaxSecs(m_recvTimeoutSec);
|
|---|
| 18 | m_myTimer->StartTimer(true);
|
|---|
| 19 | retErr = 0;
|
|---|
| 20 | m_errCounterTrans = 0;
|
|---|
| 21 | ret = 0;
|
|---|
| 22 | }
|
|---|
| 23 |
|
|---|
| 24 | return ret;
|
|---|
| 25 | }
|
|---|
| 26 |
|
|---|
| 27 | short CCP4002Prot::Recv(void)
|
|---|
| 28 | { // Wartet auf ReceiveEvents und überwacht Timeouts
|
|---|
| 29 | static int merkeBytesReceivedAll = 0;
|
|---|
| 30 | DWORD waitResult = 0;
|
|---|
| 31 | short ret = 0;
|
|---|
| 32 | bool timeout = false;
|
|---|
| 33 |
|
|---|
| 34 | SetCpStatusString(RECEIVE);
|
|---|
| 35 |
|
|---|
| 36 | m_bytesReceived = 0;
|
|---|
| 37 | m_recvTimeout = false;
|
|---|
| 38 |
|
|---|
| 39 | memset(m_recvBuf, 0x00, CP_RECEIVE_MAX_LEN);
|
|---|
| 40 |
|
|---|
| 41 | if (m_bytesSollRecv > 0)
|
|---|
| 42 | { // Wenn gesendeter Befehl eine Antwort erwartet, wird auf ReceiveEvent gewartet
|
|---|
| 43 | if (CP_START == m_cpStatus)
|
|---|
| 44 | {
|
|---|
| 45 | m_CountSampleTime = true;
|
|---|
| 46 | m_startSampleTime = time(NULL);
|
|---|
| 47 | }
|
|---|
| 48 |
|
|---|
| 49 | //merkeBytesReceivedAll = 0;
|
|---|
| 50 | while ((m_bytesReceived < m_bytesSollRecv) && (!timeout))
|
|---|
| 51 | { // Wenn noch nicht alle Bytes empfangen wurden und es noch kein Timeout gab, wird auf weitere Daten gewartet
|
|---|
| 52 | if (merkeBytesReceivedAll != m_bytesReceivedAll)
|
|---|
| 53 | { // Es wurden neuen Daten empfangen
|
|---|
| 54 | m_myTimer->Set_MaxSecs(CP_ANADATA_TIMEOUT_2/1000);
|
|---|
| 55 | m_myTimer->ResetTimer(); // Timer zurücksetzen
|
|---|
| 56 |
|
|---|
| 57 | if (CP_START == m_cpStatus && false == m_CountRunTime)
|
|---|
| 58 | { // Nach dem Spülen, wenn das erste Byte empfangen wurde, wird die RunTime gezählt und die Ventile geschaltet
|
|---|
| 59 | m_CountRunTime = true;
|
|---|
| 60 | m_startRunTime = time(NULL);
|
|---|
| 61 |
|
|---|
| 62 | m_flushingFinished = true;
|
|---|
| 63 | }
|
|---|
| 64 |
|
|---|
| 65 | merkeBytesReceivedAll = m_bytesReceivedAll;
|
|---|
| 66 | }
|
|---|
| 67 |
|
|---|
| 68 | if (m_myTimer->Get_NumberOfExpiry() > 0)
|
|---|
| 69 | { // Wenn Timer abgelaufen war -> Timeout!
|
|---|
| 70 | m_myTimer->StopTimer(); // Timer anhalten
|
|---|
| 71 | m_myTimer->ResetTimer(); // Timer zurücksetzen
|
|---|
| 72 | timeout = true;
|
|---|
| 73 | }
|
|---|
| 74 | }
|
|---|
| 75 | merkeBytesReceivedAll = m_bytesReceivedAll; // Zur Sicherheit am Ende nochmals kopieren
|
|---|
| 76 |
|
|---|
| 77 | if (m_bytesReceived == m_bytesSollRecv && (!timeout))
|
|---|
| 78 | { // Wenn alles empfangen und kein Timeout
|
|---|
| 79 | ret = ProcessRecvData();
|
|---|
| 80 | xValue(CP4002ReqWithAnsw)++;
|
|---|
| 81 | //SaveXVars();
|
|---|
| 82 | }
|
|---|
| 83 | else
|
|---|
| 84 | {
|
|---|
| 85 | DTLOG(m_logid, DT_CP4002PROT_RECEIVE_FAILED, m_bytesSollRecv, m_bytesReceived);
|
|---|
| 86 | TRACE(_T("NOT all Bytes received or timeout! %i\n"), m_bytesReceived);
|
|---|
| 87 | xValue(CP4002ReqWithoutAnsw)++;
|
|---|
| 88 | //SaveXVars();
|
|---|
| 89 | }
|
|---|
| 90 | }
|
|---|
| 91 |
|
|---|
| 92 | if (CP_START == m_cpStatus)
|
|---|
| 93 | {
|
|---|
| 94 | m_CountSampleTime = false;
|
|---|
| 95 | m_CountRunTime = false;
|
|---|
| 96 | }
|
|---|
| 97 |
|
|---|
| 98 | return ret;
|
|---|
| 99 | }
|
|---|
| 100 |
|
|---|
| 101 | bool CCP4002Prot::RecvFomCAN(CANMSG *cm)
|
|---|
| 102 | { // Hier kommt Empfangenes von CAN an
|
|---|
| 103 | CANMSG *cmTemp = cm;
|
|---|
| 104 |
|
|---|
| 105 | memcpy((m_recvBuf+m_bytesReceived), cmTemp->byContent, cmTemp->byDatalength);
|
|---|
| 106 |
|
|---|
| 107 | if (0 == m_bytesReceived)
|
|---|
| 108 | m_bytesReceivedAll = 0;
|
|---|
| 109 | m_bytesReceivedAll += cmTemp->byDatalength;
|
|---|
| 110 |
|
|---|
| 111 | if (CP_START == m_cpStatus)
|
|---|
| 112 | SetCpStatusString(RECEIVE);
|
|---|
| 113 |
|
|---|
| 114 | m_bytesReceived += cmTemp->byDatalength;
|
|---|
| 115 |
|
|---|
| 116 | //if (cmTemp->byDatalength > 0)
|
|---|
| 117 | //{
|
|---|
| 118 | // SetEvent(m_recvEvent); // Dem Protokoll melden, dass neue Daten eingegangen sind
|
|---|
| 119 | //}
|
|---|
| 120 |
|
|---|
| 121 | return true;
|
|---|
| 122 | }
|
|---|