Beispiel #1
0
BOOL CSummInfo::RecordSaveDate()
{
	FILETIME saveDate;
	CoFileTimeNow(&saveDate);
	return m_pSection->Set(PIDSI_LASTSAVE_DTM,
		(void*)&saveDate, VT_FILETIME);
}
Beispiel #2
0
BOOL CSummInfo::RecordPrintDate()
{
	FILETIME printDate;
	CoFileTimeNow(&printDate);
	return m_pSection->Set(PIDSI_LASTPRINTED,
		(void*)&printDate, VT_FILETIME);
}
Beispiel #3
0
BOOL CSummInfo::RecordCreateDate()
{
	FILETIME createDate;
	CoFileTimeNow(&createDate);
	return m_pSection->Set(PIDSI_CREATE_DTM,
		(void*)&createDate, VT_FILETIME);
}
Beispiel #4
0
STDMETHODIMP 
IMemStream::Stat( 
    STATSTG *pstatstg,
    DWORD grfStatFlag )
{
    #if 0        
    if( grfStatFlag & STATFLAG_DEFAULT ) // wants the stream name using CoMemTaskAlloc
    {
        pstatstg->pwcsName = (PTCHAR) CoTaskMemAlloc( 5 ); //  STATFLAG_NONAME
        _tcscpy( pstatstg->pwcsName, _T("Test") );
    }
    #endif
    memset( pstatstg, 0, sizeof(STATSTG) );
    pstatstg->type = STGTY_STREAM;
    pstatstg->cbSize.QuadPart = m_ullEnd;
    pstatstg->grfMode = STGM_SIMPLE|STGM_READ; //0x80000000;
    pstatstg->clsid = IID_IStream;

    // ??? don't know what to do here...
    FILETIME ft;
    CoFileTimeNow( &ft );
    pstatstg->mtime = ft;
    pstatstg->ctime = ft;
    pstatstg->atime = ft;

    return S_OK;
}
Beispiel #5
0
BOOL CSummInfo::AddCountToEditTime()
{
	FILETIME now;
	CoFileTimeNow(&now);
	__int64 currTime = *(__int64*)&now;
	__int64 thisSession = currTime - startEdit;
	__int64 lastTotal = *(__int64*)m_pSection->Get(PIDSI_EDITTIME);
	__int64 newTotal = lastTotal + thisSession;
	return m_pSection->Set(PIDSI_EDITTIME, (void*)&newTotal, VT_FILETIME);
}
Beispiel #6
0
CString CSummInfo::GetEditTime()
{
	FILETIME now;
	CoFileTimeNow(&now);
	__int64 currTime = *(__int64*)&now;
	__int64 thisSession = currTime - startEdit;
	__int64 lastTotal = *(__int64*)m_pSection->Get(PIDSI_EDITTIME);
	__int64 newTotal = lastTotal + thisSession;
	ULONG editMinutes = (ULONG)(newTotal/600000000);

	TCHAR buff[20];
#if _MSC_VER < 1400
	_stprintf(buff, _T("%lu min"), min(20, editMinutes));
#else
	_stprintf_s(buff, 20, _T("%lu min"), editMinutes);
#endif
	return CString(buff);
}
//------------------------------------------------------------------*
HRESULT COPCConnection::DoDisconnect()
{
    TRACE(_T("COPCConnection::DoDisconnect from %s\n"), (LPCTSTR)m_sMachineName);
    CSingleLock lock(&m_cs, TRUE);
    _ASSERTE(m_bConnected);
    m_bConnected = false;
    FILETIME timeNow;
    CoFileTimeNow(&timeNow);
    POSITION pos = m_activeItemList.GetHeadPosition();
    while (pos != NULL) {
        CComVariant Value;
        WORD quality;
        FILETIME time;
        CItem *pItem = m_activeItemList.GetNext(pos);
        pItem->m_hServer = 0;
        pItem->GetQVT(&Value, &quality, &time);
        quality = OPC_QUALITY_BAD;
        time = timeNow;
        pItem->SetQVT(Value, quality, time);
    }
    while (!m_removedItemList.IsEmpty()) {
        CItem *pItem = m_removedItemList.RemoveHead();
        pItem->Release();
    }
    while (!m_writeRequestList.IsEmpty()) {
        CWriteRequest *pRequest = m_writeRequestList.RemoveHead();
        pRequest->Release();
    }
    lock.Unlock();

    m_pSyncIO->Release();
    m_pSyncIO=NULL;
    m_pItemMgt->Release();
    m_pItemMgt=NULL;
    
    HRESULT hr = m_pOPCServer->RemoveGroup(m_hGroup1, TRUE);
    m_pOPCServer->Release();
    m_pOPCServer=NULL;

    return S_OK;
}
Beispiel #8
0
			HRESULT __stdcall Stat(STATSTG* stat, DWORD grfStatFlag)
			{
				if(!stat)
					return E_INVALIDARG;
				switch(grfStatFlag)
				{
				case STATFLAG_DEFAULT:
					str::clear(stat->pwcsName);
					break;
				default:
					stat->pwcsName = NULL;
					break;
				}
				FILETIME time;
				CoFileTimeNow(&time);
				stat->type = STGTY_STREAM;
				stat->cbSize.QuadPart = GetSize();
				stat->grfMode = GetAccessMode();
				stat->grfLocksSupported = 0;
				stat->clsid = GUID_NULL;
				stat->mtime = stat->ctime = stat->atime = time;
				return S_OK;
			}
Beispiel #9
0
/***********************************************************************
 *           CoFileTimeNow [COMPOBJ.82]
 */
HRESULT WINAPI CoFileTimeNow16( FILETIME *lpFileTime )
{
    return CoFileTimeNow( lpFileTime );
}
Beispiel #10
0
//*******************************************************************
BOOL ODevice::UpdateTags( OTagList& tags, DWORD mSec )
   {
   if( simulate )
       {
       sim( tags );
       return TRUE;
       }

   //pCurrent->pPort->Initialize( );   // Only first call will do anything

   FILETIME now;
   CoFileTimeNow( &now );

   // for each tag in the list
   POSITION pos = tags.GetHeadPosition();
   while( pos )
      {  // maybe reuse a msg, instead of new/delete each time
      POSITION savedPos = pos;
      OModbusTag* pTag = tags.GetNext( pos );
      
      
//      OModbusTag::TYPE range = pTag->range;
//
//      // search for tags to group with this one
//      BOOL done = FALSE;
//      int count=1;
//      WORD groupSize = 1;
//      WORD groupStart = pTag->offset;
//      OModbusTag* pLastTag = pTag;
//      while( pos && !done)
//         {
//         OModbusTag* pNextTag = tags.GetNext( pos );
//         // Can this tag be combined in a message?
//         if( pNextTag->offset - pLastTag->offset < ADJACENT_SPAN
//          && pNextTag->offset - groupStart < MAX_SPAN
//          && pNextTag->range == range)
//            {
//            groupSize = pNextTag->offset - groupStart + 1;
//            count++;
//            }
//         else
//            done = TRUE;
//         pLastTag = pNextTag;
//         }
//
//      // create a packet for it
//      OMessage* msg = CreateReadPacket( pTag, groupSize+1 );
//
//      // Wait for the device's delay period?
//      DWORD diff = FileTimeDiff(pCurrent->lastMessage, now );
//      if( diff < pCurrent->interPollDelay )
//         Sleep( pCurrent->interPollDelay - diff );
//      // send the message to the port and get response
//      m_Sent++;
//      msg = pCurrent->pPort->Message( msg, pCurrent->timeout );
//      pCurrent->lastMessage = now;
//      if( msg->IsOk() == COMM_NO_ERROR )
//         {
//         m_Rcvd++;
//         pCurrent->pPort->m_Rcvd++;
//         }
//      else
//         {
//         // lock
//         if( msg->IsOk() == TIMEOUT )
//            {
//            m_Timeouts++;
//            pCurrent->pPort->m_Timeouts++;  // need lock!
//
//            // set quality for remaining tags
//            CSLock wait( &tagCS );   // protect data
//            pos = savedPos;
//            while( pos )
//               {
//               pTag = tags.GetNext( pos );
//               pTag->quality = OPC_QUALITY_BAD | OPC_QUALITY_COMM_FAILURE;
//               }
//            delete msg;
//            return FALSE;
//            }
//         else
//            {
//            m_Messages++;
//            pCurrent->pPort->m_Messages++;  // need lock!
//            }
//         }
//
//
//      // extract the data from the packet
//      VARIANT value;
//      pos = savedPos;
//      while( pos && count-- )
//         {
//         CSLock wait( &tagCS );   // protect data
//         pTag = tags.GetNext( pos );
//         if( msg->IsOk() == COMM_NO_ERROR )
//            {
//            switch( pTag->range )
//               {
//               case OModbusTag::OUTPUT_BOOL:
//               case OModbusTag::INPUT_BOOL :
//                  {
//                  value.vt = VT_BOOL;
//                  value.boolVal = msg->GetBit( pTag->offset - groupStart );
//                  break;
//                  }
//               case OModbusTag::OUTPUT_VALUE:
//               case OModbusTag::INPUT_VALUE :
//                  value.vt = pTag->nativeType;
//                  switch( pTag->nativeType )
//                     {
//                     default:
//                     case VT_EMPTY: ASSERT( FALSE );
//                     case VT_I2:
//                        value.iVal = msg->GetWord( pTag->offset - groupStart );
//                        break;
//                     case VT_I4:
//                        value.lVal = MAKELONG(msg->GetWord( pTag->offset - groupStart ),
//                                              msg->GetWord( pTag->offset - groupStart + 1 ));
//                        if( pCurrent->wordSwap )
//                           value.lVal = MAKELONG(HIWORD(value.lVal),LOWORD(value.lVal));
//                        break;
//					 case VT_R8:
//                     case VT_R4:
//                        DWORD temp = MAKELONG(msg->GetWord( pTag->offset - groupStart ),
//                                              msg->GetWord( pTag->offset - groupStart + 1 ));
//                        if( pCurrent->wordSwap )
//                           temp = MAKELONG(HIWORD(temp),LOWORD(temp));
//                        void* pfloat = &temp;
//                        value.fltVal = *(float*)pfloat;
//                        break;
//                     }
//                  break;
//               default: ASSERT( FALSE );
//               }
//            pTag->SetValue( value );
//            pTag->quality = OPC_QUALITY_GOOD;
//            }
//         else  // message had an error
//            {
//            pTag->quality = OPC_QUALITY_BAD | OPC_QUALITY_COMM_FAILURE;
//            }
//         pTag->timestamp = msg->timestamp;
//         }
//      delete msg;
      }
   return TRUE;
   }
Beispiel #11
0
void sim( OTagList& tags )
{
   CSLock wait( &tagCS );   // protect data
   double t = GetTickCount()/6000.0;
   POSITION pos = tags.GetHeadPosition();
   while( pos )
      {
      OModbusTag* pTag = tags.GetNext( pos );
      pTag->quality = OPC_QUALITY_GOOD;
      if( !pTag->active || pTag->m_IsOutput)
         continue;

      switch( pTag->value.vt )
        {
          case VT_EMPTY:
          case VT_NULL:
             pTag->value.vt = VT_R8;
             pTag->value.dblVal = 0.0;
             break;
          case VT_BOOL:
             switch(pTag->simType)
                {
                case OModbusTag::SIN:
                case OModbusTag::RAMP:
                   pTag->value.boolVal = ((int)t)&1 ? VARIANT_TRUE : VARIANT_FALSE; break;
                case OModbusTag::RANDOM:
                   pTag->value.boolVal = rand()&1 ? VARIANT_TRUE : VARIANT_FALSE; break;
                }
             break;
          case VT_UI1: // uchar
             switch(pTag->simType)
                {
                case OModbusTag::SIN:
                   pTag->value.bVal = (UCHAR)(50*sin(pi*t/10)+50); break;
                case OModbusTag::RAMP:
                   pTag->value.bVal = (pTag->value.bVal+1)%100; break;
                case OModbusTag::RANDOM:
                   pTag->value.bVal = rand()%100; break;
                }
             break;
          case VT_I2 :   // short
             switch(pTag->simType)
                {
                case OModbusTag::SIN:
                   pTag->value.iVal = (short)(50*sin(pi*t/10)+50); break;
                case OModbusTag::RAMP:
                   pTag->value.iVal = (pTag->value.iVal+1)%100; break;
                case OModbusTag::RANDOM:
                   pTag->value.iVal = rand()%100; break;
                }
             break;
          case VT_I4 :  // long
             switch(pTag->simType)
                {
                case OModbusTag::SIN:
                   pTag->value.lVal = (long)(50*sin(pi*t/10)+50); break;
                case OModbusTag::RAMP:
                   pTag->value.lVal = (pTag->value.lVal+1)%100; break;
                case OModbusTag::RANDOM:
                   pTag->value.lVal = rand()%100; break;
                }
             break;
          case VT_R4 :
             switch(pTag->simType)
                {
                case OModbusTag::SIN:
                   pTag->value.fltVal = (float)sin(pi*t/10); break;
                case OModbusTag::RAMP:
                   pTag->value.fltVal = (float)(long(t)%100); break;
                case OModbusTag::RANDOM:
                   pTag->value.fltVal = (float)((rand()%300)/3.0); break;
                }
             break;
          case VT_R8 :
             switch(pTag->simType)
                {
                case OModbusTag::SIN:
                   pTag->value.dblVal = sin(pi*t/10); break;
                case OModbusTag::RAMP:
                   pTag->value.dblVal = (long)(t)%100; break;
                case OModbusTag::RANDOM:
                   pTag->value.dblVal = (rand()%300)/3.0; break;
                }
             break;
          default: ASSERT( FALSE );
        }
      CoFileTimeNow( &pTag->timestamp );
      }
}
Beispiel #12
0
void CSummInfo::StartEditTimeCount()
{
	FILETIME now;
	CoFileTimeNow(&now);
	startEdit = *(__int64*)&now;
}