Exemplo n.º 1
0
void SoD00Z::ReadHeader(QDataStream &datastr){
	QMutexLocker locker(&readmutex);
	char *buf=new char[512];
	datastr.readRawData(buf,512);
	int formatid=((int)(buf[10])+256*((int)buf[11]));
	if(formatid!=2){
		error("Wrond datafile format descriptor");
		Set_Error();
	}
	recordwidth=(((int)buf[8])+256*((int)buf[9]));
	blocklength=(((int)buf[14])+256*((int)buf[15]));
	recsperblock=blocklength/recordwidth;
	blocktag=blocklength%recordwidth;
	numblocks=(((int)buf[18])+256*((int)buf[19]));
	lastblocklength=(((int)buf[20])+256*((int)buf[21]));
	count=recsperblock*numblocks-(recsperblock-lastblocklength);
	Set_NADC((char)(recordwidth-1));
	char cntcnt=buf[134];
	for(int i=0;i<cntcnt;i++){
		uint v=((uint)buf[136+i*4])+
			((uint)buf[136+i*4+1])*256+
			((uint)buf[136+i*4+2])*65536+
			((uint)buf[136+i*4+3])*256*65536;
		double val=v;
		ApplyConstant("M#"+QString::number(i),val);
	}
	int textlen=buf[232];
	QString text="";
	for(int i=0; (i< (textlen+1)/2) && (i<10); i++){
		int data=
			((int)buf[234+i*2])+
			((int)buf[234+i*2])*256;
		int basa=RADIX50.length();
		text+=RADIX50[(data%(basa*basa*basa))/(basa*basa)];
		text+=RADIX50[(data%(basa*basa))/basa];
		text+=RADIX50[data%basa];
	}
	Set_description(Description()+ text);
	cnt=0;
	blockcnt=0;
	delete [] buf;
}
Exemplo n.º 2
0
//==================================================================================
//==================================================================================
//==================================================================================
int main()
{
	bool ver = 0;
	uint8_t cnt_link = 0;
	
	PLL_init();
	GPIO_init();
	TIM1_init();
	TIM2_init();
	TIM3_init();
	UART_init();
	WDT_init();
	EEPROM_init();
	
	SysTick_Config(SystemCoreClock/800);//~10 ms
	
	
	time.t1=5;
	time.t2=5;
	time.t3=5;
	time.t4=5;
	delay_ms(100);
	
	Segment[0]=0xFF;
	Segment[1]=0xFF;
	Segment[2]=0xFF;
	Segment[3]=0xFF;
	Segment[4]=0xFF;
	Segment[5]=0xFF;
	Segment[6]=0x7F;
	ALARM_ON;
	delay_ms(100);
	ALARM_OFF;
	delay_ms(1000);
	//
	//
	
  while(1)
	{
		if( TX_st )
		{
			TX_st = 0;
			
			if( cnt_link < LINK_COUNT )
			{
				link_PKBA();
				++cnt_link;
			}
			else
			{
				PKDU.error = true;
				cnt_link = 0;
			}
		}
		
		if( RX_ok && !PKDU.error )
		{
			uint8_t cnt_byte = 0, sum = 0;
			
			while( cnt_byte < RX_FRAME_SIZE )
			{
				sum += ArrayRX_PKBA[cnt_byte];
				++cnt_byte;
			}
			sum += 0xAA;
			
			if( !sum )
			{
				StatusPKBA.reg0 = ArrayRX_PKBA[0];
				StatusPKBA.reg1 = ArrayRX_PKBA[1];
				StatusPKBA.Error = (ArrayRX_PKBA[3]<<8) | ArrayRX_PKBA[2];
				StatusPKBA.RabReg0 = ArrayRX_PKBA[4];
				StatusPKBA.UGen = (ArrayRX_PKBA[6]<<8) | ArrayRX_PKBA[5];
				StatusPKBA.IGen = (ArrayRX_PKBA[8]<<8) | ArrayRX_PKBA[7];
				StatusPKBA.DT = ArrayRX_PKBA[9];
				StatusPKBA.DM = ArrayRX_PKBA[10];
				StatusPKBA.TM = ArrayRX_PKBA[11];
				StatusPKBA.NDiz = (ArrayRX_PKBA[13]<<8) | ArrayRX_PKBA[12];
				StatusPKBA.TBapEx = ArrayRX_PKBA[14];
				StatusPKBA.TBapIn = ArrayRX_PKBA[15];
				StatusPKBA.Led1 = ArrayRX_PKBA[16];
				StatusPKBA.Led2 = ArrayRX_PKBA[17];

				if( !ver )
				{
					ver = true;
					show_ver();
					delay_ms( 1500 );
					Segment[ 0 ] = 0;
					Segment[ 1 ] = 0;
					Segment[ 2 ] = 0;
					Segment[ 3 ] = 0;
					Segment[ 4 ] = 0;
				}
			cnt_link=0;
			}
			RX_ok=0;
		}
		
		__nop();
		
		Set_Error();
		
		if(!PKDU.error)
			ShowParam();
		
		if((PKDU.StatusKN>>4)&1)
		{
			maska_err = 0;
			StatusPKBA.Error=0;
			PKDU.error=false;
			cnt_link = 0;
		}
		
		if(((PKDU.StatusKN>>5)&1) && ((PKDU.StatusKN>>6)&1))
		{
			Segment[0] = 0xFF;
			Segment[1] = 0xFF;
			Segment[2] = 0xFF;
			Segment[3] = 0xFF;
			Segment[4] = 0xFF;
			Segment[5] = 0xFF;
			Segment[6] = 0x7F;
			
			while(((PKDU.StatusKN>>5)&1)&&((PKDU.StatusKN>>6)&1))
				IWDG_ReloadCounter();
		}
		
		ControlZvonok();
		
		write_hour();
		IWDG_ReloadCounter();
	}
}