예제 #1
0
/*************************************************************
Function: uint32_t Start ( void )
Description: 启动充电请求
Calls:       无
Called By:   
Input:       
Output:      无
Return:      
Others:      无
*************************************************************/
void Start ( void )
{
    uint8_t i, tmp;
  
    RS232Tx.Buff[0] = 0x68 ;    //起始符
    RS232Tx.Buff[1] = 0x01 ;    //版本
    RS232Tx.Buff[2] = Start_Function_code ; //功能码
    RS232Tx.Buff[3] = g_sParaConfig.id[0] ;        //设备编号     
    RS232Tx.Buff[4] = g_sParaConfig.id[1] ;        //设备编号
    RS232Tx.Buff[5] = g_sParaConfig.id[2] ;        //设备编号
    RS232Tx.Buff[6] = g_sParaConfig.id[3] ;        //设备编号
    RS232Tx.Buff[7] = 0 ;        //包号
    RS232Tx.Buff[8] = 0 ;        //
    RS232Tx.Buff[9] = Len_Start ;        //
    memcpy(&RS232Tx.Buff[10],r_user_info.tel_number,12);
    RS232Tx.Buff[22] = ( begin_CurKwh >> 24 ) & 0xff;
    RS232Tx.Buff[23] = ( begin_CurKwh >> 16 ) & 0xff;
    RS232Tx.Buff[24] = ( begin_CurKwh >> 8 ) & 0xff ;
    RS232Tx.Buff[25] = ( begin_CurKwh ) & 0xff ;
    tmp = 0; 
    for ( i = 0; i < Len_Start; i++ )
    {
        tmp += RS232Tx.Buff[10+i]; 
    }
    RS232Tx.Buff[Len_Start+10] = tmp ;        //
    RS232Tx.Len = Len_Start + 11 ;//给发送长度
    RS232SendMsg(); 
    ClrOutput ( LED1 );//04 
}
예제 #2
0
/**************************************************************************//**
 * @brief Sets/resets the ChipSelect of the SPI
 *
 * @param[in] value if true CS will be set, and reseted otherwise
 *****************************************************************************/
void SPI_SetChipSelect(bool value)
{
  if (value)
  {
	  SPI_setup();
    /* Enable chip select */
    ClrOutput(SDF_CS);
  }
  else
  {
	  SPI_close();
    /* Disable chip select */
    SetOutput(SDF_CS);
  }
}
예제 #3
0
void sensor_init(void) {

  nrf_gpio_cfg_output(SDI_TXEN);
  ClrOutput(SDI_TXEN);

  nrf_gpio_cfg_output(V5EN);
  SetOutput(V5EN);

  SetOutput(SDI_TXEN);

  sensor_ppi_init();


  hardware_init();
//  __enable_irq();
//
//  NRF_PPI->CHEN = 0;
}
예제 #4
0
/**************************************************************************//**
 * @brief Performs the actual transfer of a byte
 *
 * @param[in] data actual data to be passed towards spi
 *
 * @return actual data to be received from spi
 *****************************************************************************/
uint8_t SPI_XferSpi(uint8_t _Data)
{
  uint8_t  l_Result;
  uint8_t  l_Size;
  uint16_t delay_count;

  l_Result = 0;                         // ensure initialised to zero(0);

  // clock in/out data (LSB first)
  for (l_Size=8; l_Size; l_Size--)
  {
    // output data, NOTE: before falling edge of SCK so signals don't all change at same time
    if (_Data & 0x80)
      SetOutput(DOUT);
    else
      ClrOutput(DOUT);

    // falling edge of SCK and Data out
    ClearSCK();

#if defined(NRF52)
//    nrf_delay_us(1);
//    for(delay_count = 0; delay_count < 17; delay_count++)
//    {
//        __ASM volatile (" NOP\n");
//    }
#endif
    // prepare for next bit out/in
    _Data <<= 1;
    l_Result <<= 1;

    // rising edge of SCK to latch data
    SetSCK();

    // read in data
    if (ReadInput(DIN))
      l_Result |= 0x01;
  }

  return l_Result;
}
예제 #5
0
BOOL CBlockUnit::Compile()
{
  m_bError = FALSE;

  if (m_pEditor)
  {
    // Save before compiling
    m_pEditor->Save();
  }

  if (m_nType == T_FUNCTION)
  {
    // Cleanup all I/Os
    ClrInput();
    ClrOutput();
    ClrGlobal();
    ClrStack();
    ClrLibrary();

    // Compile the source code
    m_bError = (CompileBlock(this) == FALSE);

    // Add system timer variable
    AddGlobal(new CVariable("TIME"), 0);
    AddGlobal(new CVariable("DTIME"), 0);
  }
  else if (m_nType == T_SUBSYSTEM)
  {
    // Compile subsystem document
   m_bError  = (m_pDocument->Compile() == FALSE);

    // Update document
    m_pDocument->Update();
    m_pDocument->Check();
  }

  return !m_bError;
}
예제 #6
0
void GPRS_main ( void )
{
    uint8_t i, len;
    uint8_t sum_check;
    uint16_t data_len;
    uint8_t tmp;
 /*     
    uint16_t *data;
    uint8_t crcl, crch;
    uint16_t addr = 0;
    uint16_t temp_;
 */  
    
    if(( SysTickCnt - HeartbeatCnt ) > HeartBeatTime)
    {
    	if(Get_UpdateStates() == 0)
        	Heartbeat();
        HeartbeatCnt = SysTickCnt;
    } 
    
    if (Dev_Status == 1)
    {
        ChargingTime = (SysTickCnt - ChargingBeginTime)/1000 ;
        if(( SysTickCnt - InfoCnt ) > 17000)
        {
            AC_Info();
            InfoCnt = SysTickCnt;
        } 
        Cur_0_Time = (SysTickCnt - Cur_0_BeginTime)/1000;     
        if ((Cur_0_Time > 180)||                //180s检测不到有效电流则认为充电已经停止
            (linkv != 6)||   //充电过程中如果检测枪断开则停止充电
            (MeterCommErr == 1)||               //电表通信故障
            (output_cur > 3500)||               //电流软保护,当输出电流大于35A时停止充电
            (output_vol > 25300)||(output_vol < 18700))           //电压软保护,当输入电压超出253V或者低于187V时充电机停止输出
        {
            end_CurKwh = CurKwh;
 //           ClrOutput(1);           //停止输出
            OUTPUTCLOSE;
            ClrOutput(2);           //关闭运行指示灯
            Dev_Status = 0;
            Stop();
        }
        
    }
  	UpdateInit(&RS232Tx.Len,&RS232Tx.Flag,RS232Tx.Buff,RS232Rx.Buff,&Dev_Status);
	SendUpdateCommand(SysTickCnt);  
    if ( GetRs232Sta() == 1 ) //帧接收结束标记
    {
        //接收状态指示灯
    /*    RelaySta232 = ~ RelaySta232 ;
        tmp = RelaySta232;
        if ( tmp & 0x1 )
        {
            SetOutput ( LED1 );
        }
        else
        {
            ClrOutput ( LED1 );
        }*/
        //
        len = RS232Rx.Len ;
        RS232Rx.Flag = 0 ;
        RS232Rx.Len = 0;
        RS232Rx.Idx = 0 ;
        if( RS232Rx.Buff[0] == 0x68 )
		{

			if(RS232Rx.Buff[ADDR_FUNCODE] != 0x01)
				{
					//if(!Dev_Status)   //不在充电状态进行相应
					DealUpdate_Flash(len,SysTickCnt);
				}
			if(Get_UpdateStates())
				return;
			//else
        {
            data_len = ( RS232Rx.Buff[9] << 8 ) + RS232Rx.Buff[10];
            if( len == ( data_len + 12 ) )
            {
                sum_check = 0;
                for ( i = 0; i < data_len; i++ )
                {
                    sum_check += RS232Rx.Buff[11+i]; 
                }
                if( sum_check == RS232Rx.Buff[11+data_len])
                {
                    switch ( RS232Rx.Buff[2] )
                    {
                    case 0x01:
                        {
                            communication_state = 1;
                            communication_delay = 0;
                            break;
                        }
                     case 0x02:
                        {
                            communication_state = 1;
                            return_sign = 1;
                            back_type = RS232Rx.Buff[7];
                            memcpy(r_user_info.tel_number,&RS232Rx.Buff[11],12);
                            r_user_info.Balance = 0;
                            r_user_info.Balance = RS232Rx.Buff[23];
                            r_user_info.Balance <<= 8;
                            r_user_info.Balance |= RS232Rx.Buff[24];
                            r_user_info.Balance <<= 8;
                            r_user_info.Balance |= RS232Rx.Buff[25];
                            r_user_info.Balance <<= 8;
                            r_user_info.Balance |= RS232Rx.Buff[26];
                            break;
                        }
                     case 0x03:
                        {
                          SetOutput ( LED1 );//03 light
                            LoginPermission = 1;
                            memcpy(r_user_info.tel_number,&RS232Rx.Buff[11],12);
                            r_user_info.Balance = 0;
                            r_user_info.Balance = RS232Rx.Buff[23];
                            r_user_info.Balance <<= 8;
                            r_user_info.Balance |= RS232Rx.Buff[24];
                            r_user_info.Balance <<= 8;
                            r_user_info.Balance |= RS232Rx.Buff[25];
                            r_user_info.Balance <<= 8;
                            r_user_info.Balance |= RS232Rx.Buff[26];
                            break;
                        }
                     case 0x04:
                        {
                            if (RS232Rx.Buff[7] == 0)
                            {
                                Order_number[0] = RS232Rx.Buff[11];
                                Order_number[1] = RS232Rx.Buff[12];
                                Order_number[2] = RS232Rx.Buff[13];
                                Order_number[3] = RS232Rx.Buff[14];
                                
                                ChargingPermission = 1;
                                
                                r_user_info.Balance = 0;
                                r_user_info.Balance = RS232Rx.Buff[15];
                                r_user_info.Balance <<= 8;
                                r_user_info.Balance |= RS232Rx.Buff[16];
                                r_user_info.Balance <<= 8;
                                r_user_info.Balance |= RS232Rx.Buff[17];
                                r_user_info.Balance <<= 8;
                                r_user_info.Balance |= RS232Rx.Buff[18];
                            }
                            break;
                        }
                     case 0x05:
                        {
                            StopPermission = 1;
                            r_user_info.Balance = 0;
                            r_user_info.Balance = RS232Rx.Buff[11];
                            r_user_info.Balance <<= 8;
                            r_user_info.Balance |= RS232Rx.Buff[12];
                            r_user_info.Balance <<= 8;
                            r_user_info.Balance |= RS232Rx.Buff[13];
                            r_user_info.Balance <<= 8;
                            r_user_info.Balance |= RS232Rx.Buff[14];
                            r_user_info.pay = 0;
                            r_user_info.pay = RS232Rx.Buff[15];
                            r_user_info.pay <<= 8;
                            r_user_info.pay |= RS232Rx.Buff[16];
                            r_user_info.pay <<= 8;
                            r_user_info.pay |= RS232Rx.Buff[17];
                            r_user_info.pay <<= 8;
                            r_user_info.pay |= RS232Rx.Buff[18];
                            break;
                        }
                     case 0x06:
                        {
                            r_user_info.pay = 0;
                            r_user_info.pay = RS232Rx.Buff[11];
                            r_user_info.pay <<= 8;
                            r_user_info.pay |= RS232Rx.Buff[12];
                            r_user_info.pay <<= 8;
                            r_user_info.pay |= RS232Rx.Buff[13];
                            r_user_info.pay <<= 8;
                            r_user_info.pay |= RS232Rx.Buff[14];
                            communication_state = 1;
                            if(RS232Rx.Buff[7] == 0x03 )
                            {
  //                              ClrOutput(1);           //停止输出
                                OUTPUTCLOSE;
                                ClrOutput(2);           //关闭运行指示灯
                                Stop();
                            }
                            break;
                        }
                     case 0x07:
                        {
                            r_user_info.pay = 0;
                            r_user_info.pay = RS232Rx.Buff[11];
                            r_user_info.pay <<= 8;
                            r_user_info.pay |= RS232Rx.Buff[12];
                            r_user_info.pay <<= 8;
                            r_user_info.pay |= RS232Rx.Buff[13];
                            r_user_info.pay <<= 8;
                            r_user_info.pay |= RS232Rx.Buff[14];
                            communication_state = 1;
                            if(RS232Rx.Buff[7] == 0x03 )
                            {
    //                            ClrOutput(1);           //停止输出
                                OUTPUTCLOSE;
                                ClrOutput(2);           //关闭运行指示灯
                                Stop();
                            }
                            break;
                        }
                     case 0x08:
                        {
                            StopRequest = 1;
                    /*      end_CurKwh = CurKwh;
                            Dev_Status = 0;
                            return_sign = 0;
                            communication_state = 1;
                            ClrOutput(1);           //停止输出
                            OUTPUTCLOSE;
                            ClrOutput(2);           //关闭运行指示灯
                            server_stop = 1;
                            Stop();*/
                            break;
                        }
                     case 0x09:
                        {
                            communication_state = 1;
                            memcpy(t_user_info.card_number,&RS232Rx.Buff[11],16);
                            r_user_info.Balance = 0;
                            r_user_info.Balance = RS232Rx.Buff[27];
                            r_user_info.Balance <<= 8;
                            r_user_info.Balance |= RS232Rx.Buff[28];
                            r_user_info.Balance <<= 8;
                            r_user_info.Balance |= RS232Rx.Buff[29];
                            r_user_info.Balance <<= 8;
                            r_user_info.Balance |= RS232Rx.Buff[30];
                            r_user_info.card_status = RS232Rx.Buff[31];
                            break;
                        }
                     case 0x0a:
                        {
                            communication_state = 1;
                            sys_year = RS232Rx.Buff[11];
                            sys_month = RS232Rx.Buff[12];
                            sys_day = RS232Rx.Buff[13];
                            sys_hour = RS232Rx.Buff[14];
                            sys_minute = RS232Rx.Buff[15];
                            sys_cecond = RS232Rx.Buff[16];
                            break;
                        } 
                    }
                }
                else
                {
                  RS232Rx.Flag = 0 ;
                  RS232Rx.Len = 0;
                  RS232Rx.Idx = 0 ;
                  return;
                }
            }
            else
            {
              RS232Rx.Flag = 0 ;
              RS232Rx.Len = 0;
              RS232Rx.Idx = 0 ;
              return;
            }
}
        }
        else
        {
          RS232Rx.Flag = 0 ;
          RS232Rx.Len = 0;
          RS232Rx.Idx = 0 ;
          return;
        }
    }
}