/************************************************************* 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 }
/**************************************************************************//** * @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); } }
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; }
/**************************************************************************//** * @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; }
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; }
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; } } }