MBED_LPC11U24 Capacitor Dose Meter

Dependencies:   mbed USBDevice

Files at this revision

API Documentation at this revision

Comitter:
H_Tsunemoto
Date:
Wed Dec 18 01:37:25 2019 +0000
Commit message:
CapDose_V020

Changed in this revision

USBDevice.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r d583bc5ef930 USBDevice.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice.lib	Wed Dec 18 01:37:25 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/USBDevice/#53949e6131f6
diff -r 000000000000 -r d583bc5ef930 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Dec 18 01:37:25 2019 +0000
@@ -0,0 +1,1812 @@
+/////////////////////////////////////////////////////////////////////
+//  Capacitor Dose Meter                                          //
+//  for 6CH Sensor Charge / Discharge / Measure                    //
+//   Since 2019.11.22  H.Tsunemoto                                 //
+//   Sample Program Import (1) Serial_interrupt                    //
+//                         (2) Timer_Interrupt(100mSec) Sample     //
+//                         (3) Internal_ADC_with_interrupt         //
+/////////////////////////////////////////////////////////////////////
+
+#include "mbed.h"
+#include "stdio.h"
+#include "math.h"
+#include "LPC11Uxx.h" 
+
+// MBED NXP-LPC11U24 Bord I/O Port Status Define
+Serial device(USBTX, USBRX);
+// On_Board Debug LED  
+DigitalOut myled1(P1_8);
+DigitalOut myled2(P1_9);
+DigitalOut myled3(P1_10);
+DigitalOut myled4(P1_11);
+
+DigitalOut P36_Int1msec(p36);
+DigitalOut P35_SampleTiming(p35);
+
+// Common Relay Connect SW
+DigitalOut pCOM_Vref_Conn_p5(p5);
+DigitalOut pCOM_GND_Conn_p6(p6);
+DigitalOut pCOM_AD_OFF_DRV_p13(p13);
+
+// Sensor Relay Connect SW 1 - 6 
+DigitalOut pS1_Conn_p7(p7);
+DigitalOut pS2_Conn_p8(p8);
+DigitalOut pS3_Conn_p9(p9);
+DigitalOut pS4_Conn_p10(p10);
+DigitalOut pS5_Conn_p11(p11);
+DigitalOut pS6_Conn_p12(p12);
+
+// Sensor Error LED 1 - 6
+DigitalOut pS1_LED_p30(p30);
+DigitalOut pS2_LED_p29(p29);
+DigitalOut pS3_LED_p28(p28);
+DigitalOut pS4_LED_p27(p27);
+DigitalOut pS5_LED_p26(p26);
+DigitalOut pS6_LED_p25(p25);
+
+//Sensor 6CH AnalogIn input 1 - 6 (p15,p16,p17,p18,p19,p20 );
+AnalogIn    pS1_AD0__p15(p15);
+AnalogIn    pS2_AD1__p16(p16);
+AnalogIn    pS3_AD2__p17(p17);
+AnalogIn    pS4_AD3__p18(p18);
+AnalogIn    pS5_AD5__p19(p19);
+AnalogIn    pS6_AD6__p20(p20);
+//DigitalInOut p10_Power(p10,PIN_OUTPUT,PullNone,0);
+
+/////////////////////////////////
+//  Parameter Data //////////////
+/////////////////////////////////
+
+// --------------  Capacitor Dose Meter Parameter Declaration  ----------------//
+typedef struct  st_CapDose_Action_param{
+    int i_CPD_Mode;             // Main Job Mode 
+    int i_Meas_Job_Stage;        // Measurement Job Job Stage
+    int i_Charge_Job_Stage;     // Charge Job Stage
+    int i_DisCharge_Job_Stage;  // DisCharge Job Stage
+    
+}ST_CAPDOSE_ACTION_PARAMETER;
+//    int i_CPD_Mode;         // Main Job Mode 
+enum {
+    CPD_STAT_Ready=0
+    ,CPD_STAT_MEAS
+    ,CPD_STAT_CHARGE
+    ,CPD_STAT_DISCHARGE
+};
+//    i_Meas_Job_Stage;         // 測定動作状態遷移 
+enum {
+    MEAS_STAGE_Ready=0
+    ,MEAS_STAGE_AD_Open
+    ,MEAS_STAGE_Connect_Start
+    ,MEAS_STAGE_Sn_Measure
+    ,MEAS_STAGE_Sn_End
+};
+//   int i_Charge_Job_Stage;     // Charge Job Stage
+enum {
+    CHARGE_STAGE_Ready=0
+    ,CHARGE_STAGE_CHG_START
+    ,CHARGE_STAGE_SnMeasure
+    ,CHARGE_STAGE_EndChack
+    ,CHARGE_STAGE_SnRetry
+    ,CHARGE_STAGE_END
+};
+//    int i_DisCharge_Job_Stage;  // DisCharge Job Stage
+enum {
+    DISCHARGE_STAGE_Ready=0
+    ,DISCHARGE_STAGE_DCH_START
+    ,DISCHARGE_STAGE_SnMeasure
+    ,DISCHARGE_STAGE_SnEND_Delay
+    ,DISCHARGE_STAGE_END
+};
+
+// 初期値セット st_CapDose_Action_param 
+const ST_CAPDOSE_ACTION_PARAMETER const_st_CapDose_Action_param_Default=
+{
+//     int i_CPD_Mode;             // Main Job Mode 
+    CPD_STAT_Ready
+//   int i_Meas_Job_Stage;        // Measurement Job Job Stage
+    ,MEAS_STAGE_Ready
+//    int i_Charge_Job_Stage;     // Charge Job Stage
+    ,CHARGE_STAGE_Ready
+//    int i_DisCharge_Job_Stage;  // DisCharge Job Stage
+    ,DISCHARGE_STAGE_Ready
+};
+
+
+/////////////////////////////// 
+//    設定データ                //
+///////////////////////////////
+// --------------  Capacitor Dose Meter Setting Parameter Declaration  ----------------//
+typedef struct  st_CapDoseSetting_param{
+    // 共通設定項目
+    int i_RelaySW_Delay;            // 共通 Relay 切り替え時遅延時間[x1msec]
+    //Measure 専用パラメータ
+    int   i_Meas_Interval_Time;         //  測定値 AD測定間隔
+    int   i_Meas_Connect_Time;          //  測定時 Sensor 接続時間
+    int   i_Meas_StartDelayTime;        //  センサー接続からセンサー値測定開始Delay
+    int   i_Meas_SampleAveTimes;         // 測定開始から AD測定回数 
+    int   i_Meas_SampleAveInterval;      //  AD測定間隔 
+                                        //  (i_Meas_StartDelayTime + (i_Meas_SampleAveTim x i_Meas_SampleAveInterval))
+                                        //  が i_Meas_Connect_Time より小さい
+    // Charge/DisCharge 共通
+    int   i_CDC_Meas_IntervalTime;      //  充放電時電圧監視 AD測定間隔
+     // Charge 専用パラメータ
+    float   f_ChargeTargetVolt;           // 充電完了判断しきい値レベル 設定値
+    int     i_ChargeLimitTime;              //  充電時間 リミット制限
+    int     i_ChargeAflerDelay;             // 充電しきい値達成後Wait
+    
+    // DisCharge 専用   
+    float   f_DisChargeTargetVolt;          // 放電時 放電終了 レベルしきい値[ADC_Level ]
+    int     i_DisChargeLimitTime;           //  放電時間 リミット制限
+    int     i_DisChargeAfterDelay;          // 放電時 しきい値達成後 Delay
+    
+}ST_CAPDOSE_SETTING_PARAMETER;
+    // 共通設定項目
+    //int i_RelaySW_Delay;                  // 共通 Relay 切り替え時遅延時間[x1msec]
+#define Def_RELAY_SW_DELAY_5ms       5       // Relay SW 切り替え時間 初期値 5msec
+#define Def_RELAY_SW_DELAY_SetMax_1S  1000       // Relay SW 切り替え時間 最大値
+
+    //Measure 専用パラメータ
+    //int   i_Meas_Interval_Time;           //  測定値 AD測定間隔
+#define Def_MEAS_INTERVAL_100ms        100     // 100msec毎に 再接続 Sample Ave
+#define Def_MEAS_INTERVAL_SET_MAX_10min 600000  // 測定間隔 リミット
+    //int   i_Meas_Connect_Time;            //  測定時 SeSample AveSample Ave    
+#define Def_MEAS_CONNECT_TIME_50ms    50      //1回 測定での接続時間  50msec
+#define Def_MEAS_CONNECT_TIME_Max1m  60000      //1回 測定での接Max1mi 6000ax 60000sec = 1min
+
+    //int   i_Meas_StartDelayTime;          //  センサー接続からセンサー値測定開始Delay
+#define Def_MEAS_START_DELAY_10ms     10      // Sensor 接続からAD測定開始 Delay時間 初期値 14msec
+#define Def_MEAS_START_DELAY_SetMax1sec     1000      // Sensor 接続からAD測定開始 Delay時間 最大1sec
+
+    //int   i_Meas_SampleAveTimes;           // 測定開始から AD測定回数 (i_Meas_StartDelayTime + i_Meas_SampleAveTimes)
+#define Def_MEAS_SAMPLE_AVE_32Times   32      // AD測定回数 初期値 32回 
+#define Def_MEAS_SAMPLE_AVE_Times_SetMax_60000   60000     // AD測定回数 /1測定 60000Times 
+
+    //int   i_Meas_SampleAveInterval;       //  AD測定間隔 
+ #define Def_MEAS_SAMPLE_INETRVAL_1ms    1   // AD測定回数 初期値 毎回 1msec
+ #define Def_MEAS_SAMPLE_INETRVAL_SetMax_1sec   1000// AD測定間隔 初期値 毎回 1sec
+    //int  i_CDC_Meas_IntervalTime;         //  充放電時電圧監視 AD測定間隔
+#define Def_CDC_MEAS_INTERVAL_5ms  5             // しきい値監視 初期値 5msec
+#define Def_CDC_MEAS_INTERVAL_SetMax  1000       // しきい値監視 最大 1sec
+
+     // Charge 専用パラメータ
+    //float f_ChargeTargetVolt;             // 充電完了判断しきい値レベル 設定値
+#define Def_CHARGE_TARGETVolt3V  3.0f         // Charge [V] Power Charge Target Limit Volt
+#define Def_CHARGE_TARGET_VoltMIN    1.0f
+#define Def_CHARGE_TARGET_VoltMAX    3.3f
+
+    // int i_ChargeLimitTime;               //  充電時間 リミット制限
+#define Def_CHARGE_LIMIT_TIME_10sec 10000         // 10000msec = 10sec 
+#define Def_CHARGE_LIMIT_TIME_SetMax_1min 60000         // 60000msec = 1minutes 
+
+    //int i_ChargeAflerDelay;               // 充電しきい値達成後Wait
+#define Def_CHARGE_AFTER_DELAY5sec      5000    // 5000msec = 5sec 
+#define Def_CHARGE_AFTER_DELAY_SetMax_1min    60000         // 60000msec = 1minutes 
+    // DisCharge 専用   
+   //float f_DisChargeTargetVolt;           // 充電完了判断しきい値レベル 設定値
+#define Def_DisCHARGE_TARGETVolt05V  0.5f      // DisCharge [V] Power Charge Target Limit Volt
+#define Def_DisCHARGE_TARGET_VoltMIN    0.0f
+#define Def_DisCHARGE_TARGET_VoltMAX    3.0f
+    //int i_DisChargeLimitTime;             //  放電時間 リミット制限
+#define Def_DISCHARGE_LIMIT_TIME10sec 10000      // 10000msec = 10sec 
+#define Def_DISCHARGE_LIMIT_TIMEMax_1min   60000         // 60000msec = 1minutes 
+    //int i_DisChargeAfterDelay;            // 放電時 しきい値達成後 Delay
+#define Def_DISCHARGE_AFTER_DELAY5sec 5000      // 5000msec = 5sec 
+#define Def_DISCHARGE_AFTER_DELAY_SetMax_1min 60000         // 60000msec = 1minutes  
+
+
+///////////////////////////////
+//    測定及び状態監視データ      //
+///////////////////////////////
+//DigitalOut pCOM_Vref_Conn_p5(p5) ,pCOM_GND_Conn_p6(p6) ,pCOM_AD_OFF_DRV_p13(p13);
+// Sensor Relay Connect SW 1 - 6 
+//DigitalOut pS1_Conn_p7(p7) ,pS2_Conn_p8(p8), pS3_Conn_p9(p9), pS4_Conn_p10(p10), pS5_Conn_p11(p11), pS6_Conn_p12(p12);
+// Sensor Error LED 1 - 6
+//DigitalOut pS1_LED_p30(p30), pS2_LED_p29(p29), pS3_LED_p28(p28), pS4_LED_p27(p27), pS5_LED_p26(p26), pS6_LED_p25(p25);
+//---------------  I/O Port Setting Now -----------------------//
+#define nSENSOR_6CH     6
+#define Sel_S1  0
+#define Sel_S2  1
+#define Sel_S3  2
+#define Sel_S4  3
+#define Sel_S5  4
+#define Sel_S6  5
+#define No_S1  1
+#define No_S2  2
+#define No_S3  3
+#define No_S4  4
+#define No_S5  5
+#define No_S6  6
+typedef struct st_PortStat{
+    int i_pCOM_Vref_Conn_p5;
+    int i_pCOM_GND_Conn_p6;
+    int i_pCOM_AD_OFF_DRV_p13;
+    int i_pSn_Conn[nSENSOR_6CH];
+    int i_pSn_LED[nSENSOR_6CH];
+}ST_PORT_STATUS;
+    // Relay SW ON/OFF
+    #define RelayON     1
+    #define RelayOFF    0
+    #define LED_ON      0
+    #define LED_OFF     1
+    #define Def_PortSET_Stat_MAX 1
+
+// --------------  Capacitor Dose Meter Measurement Parameter  ----------------//
+
+typedef struct  st_MeasStat{
+    int i_Sn_ADMeas[nSENSOR_6CH];
+    int i_Sn_ERR[nSENSOR_6CH];
+    int i_Sn_MeasCount[nSENSOR_6CH];
+    
+}ST_MEAS_STAT;
+
+// Work Space Declaration
+ST_CAPDOSE_ACTION_PARAMETER st_CapDoseMain;
+ST_CAPDOSE_SETTING_PARAMETER st_CapDoseSetting;
+ST_MEAS_STAT st_Meas;
+ST_PORT_STATUS st_IOPort;
+
+
+//////////////////////////////////////////
+//  Timer 割り込み 定義
+//////////////////////////////////////////
+// Timer Interrupt //
+///////////////
+Ticker Int1mSec_Timer;
+Timer t;
+
+//////////////////////////////////////////////////////////
+//------------------------------------//
+// --- USB Serial Communication ---  //
+//------------------------------------//
+void Tx_interrupt();
+void Rx_interrupt();
+void send_line();
+int read_line();  // Return Rec CHAR Count 2013.08.08 Tsunemoto Append
+void Tick_1mSec_Interrupt();
+
+// Circular buffers for serial TX and RX data - used by interrupt routines
+const int ser_buffer_size = 255;
+// might need to increase buffer size for high baud rates
+char tx_buffer[ser_buffer_size];
+char rx_buffer[ser_buffer_size];
+// Circular buffer pointers
+// volatile makes read-modify-write atomic
+volatile int tx_in=0;
+volatile int tx_out=0;
+volatile int rx_in=0;
+volatile int rx_out=0;
+// Line buffers for sprintf and sscanf
+char tx_line[80];
+char rx_line[80];
+//---  2013.08.08 Tsunemoto ------//
+//--  rx Data Cr Rec Counter
+volatile int rx_cr_Rec = 0;
+//-----------------------------------------------------------//
+//--------- Timer Innterrupt For DAC Control  ---------------//
+//-----------------------------------------------------------//
+int timer_count=0;
+int timer_1Sec=0;
+int main_loop_count=0;
+//////////////////////////////
+////  Measurement Mode   /////
+//////////////////////////////
+#define SAMPLE_MODE_NotActive   0
+#define SAMPLE_MODE_ACTIVE      1
+int i_SampleMode=0;
+#define CHARGE_MODE_NotActive   0
+#define CHARGE_MODE_AfterDelay  1
+#define CHARGE_MODE_ACTIVE      2
+int i_ChargeMode=0;
+
+#define DISCHARGE_MODE_NotActive   0
+#define DISCHARGE_MODE_ACTIVE      1
+int i_DisChargeMode=0;
+
+// 100usec Decrement Counter
+int i_ADC_IntCount =0;
+int i_ADC_Sample_Count=0;
+int i_ChargeAfterDelayCount =0;
+int i_Charge_TermOverCount=0;
+int i_DisChargeTermCount =0;
+
+
+//////////////////////////////////////////////////////////////////////////////////
+//------------    Command Check & Set Function ---------------------------------//
+//////////////////////////////////////////////////////////////////////////////////
+//------------    Command Check & Set Function ---------------------------------//
+//////////////////////////////////////////////////////////////////////////////////
+void CapDose_param_init();
+
+float ADC_Sample_Send();
+void Ser_Command_Input();
+void com_Table_Param_Send();
+void com_Stat_Table_Param_Send();
+// USB Serial Command Job
+bool com_Check_SW_PCV_COMVref(int i_RecCharCount);
+bool com_Check_SW_PCG_COMGND(int i_RecCharCount);
+bool com_Check_SW_PCA_COMADG(int i_RecCharCount);
+bool com_Check_SW_Psn_SensConn(int i_RecCharCount);
+bool com_Check_SW_PLn_LEDset(int i_RecCharCount);
+bool com_Check_RDL_ConnDelayAfterRSW(int i_RecCharCount);
+bool com_Check_MIT_MeasurementInterval(int i_RecCharCount);
+bool com_Check_MCT_MeasurementConnectTime(int i_RecCharCount);
+bool com_Check_MSD_MeasSampleStartDelay(int i_RecCharCount);
+bool com_Check_MAT_MeasAveTimes(int i_RecCharCount);
+bool com_Check_MAI_MeasSampleAveInterval(int i_RecCharCount);
+bool com_Check_CDI_Charge_DisCharge_SampleInterval(int i_RecCharCount);
+bool com_Check_CTV_ChargeTargetVoltSet(int i_RecCharCount);
+bool com_Check_CLT_ChargeLimitTimeSet(int i_RecCharCount);
+bool com_Check_CAD_ChargeAfterDelaySet(int i_RecCharCount);
+bool com_Check_DTV_DisChargeTargetVoltSet(int i_RecCharCount);
+bool com_Check_DLT_DisChargeLimitTimeSet(int i_RecCharCount);
+bool com_Check_DAD_DisChargeAfterDelaySet(int i_RecCharCount);
+
+//----------------------------------------------------------------//
+//////////////////////////////////////////////////
+//  Relay SW Control Initial Set                //
+//      Common Relay Connect SW                 //
+//      DigitalOut pCOM_Vref_Conn_p5(p5);       //
+//      DigitalOut pCOM_GND_Conn_p6(p6);        //
+//      DigitalOut pCOM_AD_OFF_DRV_p13(p13);    //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//DigitalOut pCOM_Vref_Conn_p5(p5) ,pCOM_GND_Conn_p6(p6) ,pCOM_AD_OFF_DRV_p13(p13);                                         //
+// Sensor Relay Connect SW 1 - 6                                                                                            //
+//DigitalOut pS1_Conn_p7(p7) ,pS2_Conn_p8(p8), pS3_Conn_p9(p9), pS4_Conn_p10(p10), pS5_Conn_p11(p11), pS6_Conn_p12(p12);    //
+// Sensor Error LED 1 - 6                                                                                                   //
+//DigitalOut pS1_LED_p30(p30), pS2_LED_p29(p29), pS3_LED_p28(p28), pS4_LED_p27(p27), pS5_LED_p26(p26), pS6_LED_p25(p25);    //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//  ---------------  I/O Port Setting Now -----------------------  ///
+//typedef struct st_PortStat{                                       //
+//    int i_pCOM_Vref_Conn_p5;                                      //
+//    int i_pCOM_GND_Conn_p6;                                       //
+//    int i_pCOM_AD_OFF_DRV_p13;                                    //
+//    int i_pSn_Conn[nSENSOR_6CH];                                  //
+//    int i_pSn_LED[nSENSOR_6CH];                                   //
+//////////////////////////////////////////////////////////////////////
+void set_Initial_IOPort()  
+{
+    pCOM_Vref_Conn_p5 = RelayOFF;       st_IOPort.i_pCOM_Vref_Conn_p5 = RelayOFF;
+    pCOM_GND_Conn_p6 = RelayOFF;        st_IOPort.i_pCOM_GND_Conn_p6 = RelayOFF;
+     pS1_Conn_p7 = RelayOFF;             st_IOPort.i_pSn_Conn[Sel_S1] = RelayOFF;
+     pS2_Conn_p8 = RelayOFF;             st_IOPort.i_pSn_Conn[Sel_S2] = RelayOFF;
+     pS3_Conn_p9 = RelayOFF;             st_IOPort.i_pSn_Conn[Sel_S3] = RelayOFF;
+     pS4_Conn_p10 = RelayOFF;            st_IOPort.i_pSn_Conn[Sel_S4] = RelayOFF;
+     pS5_Conn_p11 = RelayOFF;            st_IOPort.i_pSn_Conn[Sel_S5] = RelayOFF;
+     pS6_Conn_p12 = RelayOFF;            st_IOPort.i_pSn_Conn[Sel_S6] = RelayOFF;
+    pCOM_AD_OFF_DRV_p13 = RelayON; st_IOPort.i_pCOM_AD_OFF_DRV_p13 = RelayON;
+     pS1_LED_p30 = LED_OFF;             st_IOPort.i_pSn_LED[Sel_S1] = LED_OFF;
+     pS2_LED_p29 = LED_OFF;             st_IOPort.i_pSn_LED[Sel_S2] = LED_OFF;
+     pS3_LED_p28 = LED_OFF;             st_IOPort.i_pSn_LED[Sel_S3] = LED_OFF;
+     pS4_LED_p27 = LED_OFF;             st_IOPort.i_pSn_LED[Sel_S4] = LED_OFF;
+     pS5_LED_p26 = LED_OFF;             st_IOPort.i_pSn_LED[Sel_S5] = LED_OFF;
+     pS6_LED_p25 = LED_OFF;             st_IOPort.i_pSn_LED[Sel_S6] = LED_OFF;
+   
+}
+//////////////////////////////////////////////////////////////////////
+//typedef struct st_PortStat{                                       //
+//    int i_pCOM_Vref_Conn_p5;                                      //
+//    int i_pCOM_GND_Conn_p6;                                       //
+//    int i_pCOM_AD_OFF_DRV_p13;                                    //
+//////////////////////////////////////////////////////////////////////
+void set_RelaySW_COM(int i_sw_Vref,int i_sw_GND,int i_sw_ADOFF)
+{
+    st_IOPort.i_pCOM_Vref_Conn_p5 = i_sw_Vref;
+    pCOM_Vref_Conn_p5 = i_sw_Vref;
+    st_IOPort.i_pCOM_GND_Conn_p6 = i_sw_GND;
+    pCOM_GND_Conn_p6 = i_sw_GND;
+    st_IOPort.i_pCOM_AD_OFF_DRV_p13 = i_sw_ADOFF;
+    pCOM_AD_OFF_DRV_p13 = i_sw_ADOFF;
+}
+//////////////////////////////////////////////////////////////////////
+//          ---   Sensor n Relay Control  ---                       //
+//typedef struct st_PortStat{                                       //
+//    int i_pCOM_Vref_Conn_p5;                                      //
+//    int i_pCOM_GND_Conn_p6;                                       //
+//    int i_pCOM_AD_OFF_DRV_p13;                                    //
+//>>    int i_pSn_Conn[nSENSOR_6CH];                                //
+//    int i_pSn_LED[nSENSOR_6CH];                                   //
+/////////////////////////////////////////////////////////////////////
+void set_RelaySW_SensConn(int i_Sn,int i_sw)
+{
+    switch(i_Sn){
+        case No_S1:
+            st_IOPort.i_pSn_Conn[Sel_S1] = i_sw;
+            pS1_Conn_p7 = i_sw;
+            break;
+        case No_S2:
+            st_IOPort.i_pSn_Conn[Sel_S2] = i_sw;
+            pS2_Conn_p8 = i_sw;
+           break;
+        case No_S3:
+            st_IOPort.i_pSn_Conn[Sel_S3] = i_sw;
+            pS3_Conn_p9 = i_sw;
+           break;
+        case No_S4:
+            st_IOPort.i_pSn_Conn[Sel_S4] = i_sw;
+            pS4_Conn_p10 = i_sw;
+           break;
+        case No_S5:
+            st_IOPort.i_pSn_Conn[Sel_S5] = i_sw;
+            pS5_Conn_p11 = i_sw;
+            break;
+        case No_S6:
+            st_IOPort.i_pSn_Conn[Sel_S6] = i_sw;
+            pS6_Conn_p12 = i_sw;
+            break;
+        default:
+            break;    
+    }
+}
+//////////////////////////////////////////////////////////////////////
+//          ---   LED n ON/OFF Control  ---                       //
+//typedef struct st_PortStat{                                       //
+//    int i_pCOM_Vref_Conn_p5;                                      //
+//    int i_pCOM_GND_Conn_p6;                                       //
+//    int i_pCOM_AD_OFF_DRV_p13;                                    //
+//    int i_pSn_Conn[nSENSOR_6CH];                                  //
+//>>    int i_pSn_LED[nSENSOR_6CH];                                   //
+/////////////////////////////////////////////////////////////////////
+void set_LEDnSW_port(int i_Sn,int i_sw)
+{
+    switch(i_Sn){
+        case No_S1:
+            st_IOPort.i_pSn_LED[Sel_S1] = i_sw;
+            pS1_LED_p30 = i_sw;
+            break;
+        case No_S2:
+            st_IOPort.i_pSn_LED[Sel_S2] = i_sw;
+            pS2_LED_p29 = i_sw;
+           break;
+        case No_S3:
+             st_IOPort.i_pSn_LED[Sel_S3] = i_sw;
+           pS3_LED_p28 = i_sw;
+           break;
+        case No_S4:
+             st_IOPort.i_pSn_LED[Sel_S4] = i_sw;
+           pS4_LED_p27 = i_sw;
+           break;
+        case No_S5:
+            st_IOPort.i_pSn_LED[Sel_S5] = i_sw;
+            pS5_LED_p26 = i_sw;
+            break;
+        case No_S6:
+            st_IOPort.i_pSn_LED[Sel_S6] = i_sw;
+            pS6_LED_p25 = i_sw;
+            break;
+        default:
+            break;    
+    }
+}
+
+///////////////////////////////////////////////////////////
+//--------------Parameter Initial Set ------------------//
+void CapDose_param_init()
+{
+    st_CapDoseMain.i_CPD_Mode = const_st_CapDose_Action_param_Default.i_CPD_Mode;
+    st_CapDoseMain.i_Meas_Job_Stage = const_st_CapDose_Action_param_Default.i_Meas_Job_Stage;
+    st_CapDoseMain.i_Charge_Job_Stage = const_st_CapDose_Action_param_Default.i_Charge_Job_Stage;
+    st_CapDoseMain.i_DisCharge_Job_Stage = const_st_CapDose_Action_param_Default.i_DisCharge_Job_Stage;
+    // 共通設定項目
+    //int i_RelaySW_Delay;                  // 共通 Relay 切り替え時遅延時間[x1msec]
+    st_CapDoseSetting.i_RelaySW_Delay = Def_RELAY_SW_DELAY_5ms;   // Relay SW 切り替え時間 初期値 5msec
+    //Measure 専用パラメータ
+    //int   i_Meas_Interval_Time;           //  測定値 AD測定間隔
+    st_CapDoseSetting.i_Meas_Interval_Time = Def_MEAS_INTERVAL_100ms; 
+    //int   i_Meas_Connect_Time;            //  測定時 SeSample AveSample Ave  
+    st_CapDoseSetting.i_Meas_Connect_Time = Def_MEAS_CONNECT_TIME_50ms;
+    //int   i_Meas_StartDelayTime;          //  センサー接続からセンサー値測定開始Delay
+    st_CapDoseSetting.i_Meas_StartDelayTime = Def_MEAS_START_DELAY_10ms;
+    //int   i_Meas_SampleAveTimes;           // 測定開始から AD測定回数 (i_Meas_StartDelayTime + i_Meas_SampleAveTimes)
+    st_CapDoseSetting.i_Meas_SampleAveTimes = Def_MEAS_SAMPLE_AVE_32Times;
+    //int   i_Meas_SampleAveInterval;       //  AD測定間隔 
+    st_CapDoseSetting.i_Meas_SampleAveInterval = Def_MEAS_SAMPLE_INETRVAL_1ms;
+    //int  i_CDC_Meas_IntervalTime;         //  充放電時電圧監視 AD測定間隔
+    st_CapDoseSetting.i_CDC_Meas_IntervalTime = Def_CDC_MEAS_INTERVAL_5ms;
+     // Charge 専用パラメータ
+    //float f_ChargeTargetVolt;             // 充電完了判断しきい値レベル 設定値
+    st_CapDoseSetting.f_ChargeTargetVolt = Def_CHARGE_TARGETVolt3V;
+    // int i_ChargeLimitTime;               //  充電時間 リミット制限
+    st_CapDoseSetting.i_ChargeLimitTime = Def_CHARGE_LIMIT_TIME_10sec;
+    //int i_ChargeAflerDelay;               // 充電しきい値達成後Wait
+    st_CapDoseSetting.i_ChargeAflerDelay = Def_CHARGE_AFTER_DELAY5sec;
+    // DisCharge 専用   
+    //float f_DisChargeTargetVolt;           // 充電完了判断しきい値レベル 設定値
+    st_CapDoseSetting.f_DisChargeTargetVolt = Def_DisCHARGE_TARGETVolt05V;
+    //int i_DisChargeLimitTime;             //  放電時間 リミット制限
+    st_CapDoseSetting.i_DisChargeLimitTime = Def_DISCHARGE_LIMIT_TIME10sec;
+    //int i_DisChargeAfterDelay;            // 放電時 しきい値達成後 Delay
+    st_CapDoseSetting.i_DisChargeAfterDelay = Def_DISCHARGE_AFTER_DELAY5sec;
+
+ }
+//    i_Meas_Job_Stage;         // 測定動作状態遷移 
+//enum {
+//    MEAS_STAGE_Ready=0
+//    ,MEAS_STAGE_AD_Open
+//    ,MEAS_STAGE_Connect_Start
+//    ,MEAS_STAGE_Sn_Measure
+//    ,MEAS_STAGE_Sn_End
+//};
+////////////////////////////////////////////
+//     --  Main Action Sequence  ---      //
+//           <<<  Measure  >>>            //
+////////////////////////////////////////////
+void MainAction_Measurement(void)
+{
+    
+}
+//-------------------------------------------------------//
+//----------   "SM" レベル測定スタート      ---------------------//
+//  //  
+//int i_ADC_IntCount =0;
+//int i_ADC_Sample_Count=0;
+//-------------------------------------------------------//
+void Start_SampleMeasure()
+{
+    st_CapDoseMain.i_CPD_Mode = CPD_STAT_MEAS;         // Main Action Measurement Stage Set
+    sprintf(tx_line,"SM:START\r\n" );
+    send_line();
+
+    AnalogIn p20_Adc(p20);
+   i_SampleMode = SAMPLE_MODE_ACTIVE;
+ //   i_ADC_IntCount= (st_dosimeterDock_param.i_SampleInterval_msec)*10;
+//    i_ADC_Sample_Count= 0 ;   //st_dosimeterDock_param.i_SampleTimes_MAX;
+}
+void Start_MeasureSingle()
+{
+}
+void Start_MeasureNtimes()
+{
+}
+void Start_MeasureContinuous()
+{
+}
+////////////////////////////////////////////
+//     --  Main Action Sequence  ---      //
+//           <<<  Charge  >>>             //
+////////////////////////////////////////////
+void MainAction_Charge(void)
+{
+    
+}
+////////////////////////////////////////////
+//     --  Main Action Sequence  ---      //
+//           <<<  DisCharge  >>>          //
+////////////////////////////////////////////
+void MainAction_DisCharge(void)
+{
+    
+}
+    
+////////////////////////////////////////////
+//////////////////////////////////////////////////////////
+//     Main                                             //
+//////////////////////////////////////////////////////////
+int main(){
+    float f_ADC_inp =0.0;
+        
+    set_Initial_IOPort();
+    device.baud(115200);
+    timer_count = 0;
+    CapDose_param_init();
+    Int1mSec_Timer.attach_us(&Tick_1mSec_Interrupt, (1000));       // 1msec Timer 割り込み
+    t.reset();
+    t.start();
+
+    // Setup a serial interrupt function to receive data
+    device.attach(&Rx_interrupt, Serial::RxIrq);
+    // Setup a serial interrupt function to transmit data
+    device.attach(&Tx_interrupt, Serial::TxIrq);
+    timer_count = 0;
+
+    //--- ADC Measurement Control Parameter Initial Set ---//
+    //    adc_param_init(); 
+    //--- DAC Control Parameter Init --- //
+    //   dac1_param_init();
+    // -- Main Loop -- //
+    while (1) {
+        if(rx_cr_Rec > 0){
+            Ser_Command_Input();
+        }
+        // Sample Measurement Active
+        if(i_SampleMode == SAMPLE_MODE_ACTIVE){
+             myled4 = 1.0;
+            if(i_ADC_IntCount == 0){
+ //               i_ADC_IntCount= (st_dosimeterDock_param.i_SampleInterval_msec)*10;
+                f_ADC_inp =ADC_Sample_Send();
+                i_ADC_Sample_Count++;
+//               if(i_ADC_Sample_Count >= st_dosimeterDock_param.i_SampleTimes_MAX){
+//                    i_SampleMode = SAMPLE_MODE_NotActive;           // Sample End
+//                   myled4 = 0;
+//                    sprintf(tx_line,"SM:END\r\n" );
+//                    send_line();
+//                }
+            }
+
+        }
+        // 動作 モード シーケンス
+        //enum {
+        //CPD_STAT_Ready=0
+        //,CPD_STAT_MEAS
+        //,CPD_STAT_CHARGE
+        //,CPD_STAT_DISCHARGE
+        //};
+
+        switch(st_CapDoseMain.i_CPD_Mode){
+            case CPD_STAT_Ready:
+                break;
+            case CPD_STAT_MEAS:
+                MainAction_Measurement();
+                break;
+            case CPD_STAT_CHARGE:
+                MainAction_Charge();
+                break;
+            case CPD_STAT_DISCHARGE:
+                MainAction_DisCharge();
+                break;
+            default:
+                break;
+        }
+            
+        
+       // MainLoop LED Blink
+        main_loop_count++;
+        if(main_loop_count>=100000){
+            myled1 = (myled1+1) & 1;
+            main_loop_count = 0;
+        }
+            /////////////////////////////////
+    }
+}
+
+//-------------------------------------------------------//
+//----------    Chargeスタート      ---------------------//
+//-------------------------------------------------------//
+void Start_ChargeMode()
+{
+    sprintf(tx_line,"SC:START\r\n" );
+   send_line();
+ //   AnalogIn p20_Adc(p20);
+ //  i_ChargeMode = CHARGE_MODE_ACTIVE;
+ //   i_ADC_IntCount= (st_dosimeterDock_param.i_SampleInterval_msec)*10;
+//    i_Charge_TermOverCount = (int)( (st_dosimeterDock_param.f_ChargeOver_Time) * 10000.0f);
+//    i_ADC_Sample_Count= 0 ;   //st_dosimeterDock_param.i_SampleTimes_MAX;
+ //   P10_PWR_Pin_1_High();
+ //      sprintf(tx_line,"TIMECOUNT %4d\r\n",i_Charge_TermOverCount );
+ //  send_line();
+ 
+}
+//-------------------------------------------------------//
+//----------    DisChargeスタート      ---------------------//
+//-------------------------------------------------------//
+void Start_DisChargeMode()
+{
+    sprintf(tx_line,"SD:START\r\n" );
+    send_line();
+    i_DisChargeMode = DISCHARGE_MODE_ACTIVE;
+//    i_ADC_IntCount= (st_dosimeterDock_param.i_SampleInterval_msec)*10;
+ //   i_DisChargeTermCount=(int)( (st_dosimeterDock_param.f_DisCharge_Time) * 10000.0f);
+//    i_ADC_Sample_Count= 0 ;   //st_dosimeterDock_param.i_SampleTimes_MAX;
+//    P10_PWR_Pin_0_GND();
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////
+// 動作 パラメータ  初期設定
+///
+//st_CapDoseMain
+// --------------  Capacitor Dose Meter Parameter Declaration  ----------------//
+//typedef struct  st_CapDose_Action_param{
+//    int i_CPD_Mode;             // Main Job Mode 
+//    int i_Meas_Job_Stage;        // Measurement Job Job Stage
+//    int i_Charge_Job_Stage;     // Charge Job Stage
+//    int i_DisCharge_Job_Stage;  // DisCharge Job Stage
+//    
+//}ST_CAPDOSE_ACTION_PARAMETER;
+// 初期値セット st_CapDose_Action_param 
+//const ST_CAPDOSE_ACTION_PARAMETER const_st_CapDose_Action_param_Default=
+//{
+////     int i_CPD_Mode;             // Main Job Mode 
+//   CPD_STAT_Ready
+// //   int i_Meas_Job_Stage;        // Measurement Job Job Stage
+//   ,MEAS_STAGE_Ready
+////    int i_Charge_Job_Stage;     // Charge Job Stage
+//   ,CHARGE_STAGE_Ready
+////    int i_DisCharge_Job_Stage;  // DisCharge Job Stage
+//    ,DISCHARGE_STAGE_Ready
+//};
+
+////////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////
+/////      ADC 1 Sample Input & Send        //
+//////////////////////////////////////////////
+float ADC_Sample_Send()
+{
+ //   int i;
+    float f_ADC_V =0.0;
+    
+    AnalogIn p20_Adc(p20);
+    f_ADC_V  = (float)p20_Adc*3.3;
+    sprintf(tx_line,"ADC,%3i,%2.3f\r\n",i_ADC_Sample_Count, f_ADC_V  );
+    send_line();
+    return(f_ADC_V);
+}
+
+////////////////////////////
+//  P10 Power Port Set    //
+////////////////////////////
+void P10_PWR_Pin_0_GND()
+{
+ }
+void P10_PWR_Pin_1_High()
+{
+}
+void P10_PWR_Pin_2_Open()
+{
+ 
+}
+
+void P10_PWR_Pin_Setting(int i_selMode)
+{
+    switch(i_selMode){
+        case 0:
+            P10_PWR_Pin_0_GND();
+        break;
+        case 1:
+            P10_PWR_Pin_1_High();
+        break;
+        case 2:
+            P10_PWR_Pin_2_Open();
+       break;
+        default:
+        break;
+    }
+        
+}
+////////////////////////////
+//  P20 ADC Port Set    //
+////////////////////////////
+void P20_ADC_Pin_0_Open()
+{
+    DigitalInOut p20_GPIO_Open(p20,PIN_OUTPUT,OpenDrain,1);
+}
+void P20_ADC_Pin_1_ADCin()
+{
+    AnalogIn    p20_Adc(p20);
+
+}
+void P20_ADC_Pin_2_AD_Open()
+{
+    DigitalInOut p20_GPIO_Open(p20,PIN_OUTPUT,OpenDrain,1);
+
+}
+void P20_ADC_Pin_3_ADPin_GNDTest()
+{
+    DigitalInOut p20_GPIO_GND(p20,PIN_OUTPUT,PullNone,0);
+
+}
+void P20_ADC_Pin_4_ADPin_HighTest()
+{
+    DigitalInOut p20_GPIO_High(p20,PIN_OUTPUT,PullNone,1);
+
+}
+           
+void P20_ADC_Pin_Setting(int i_selMode)
+{
+    switch(i_selMode){
+        case 0:
+            P20_ADC_Pin_0_Open();
+            break;
+        case 1:
+            P20_ADC_Pin_1_ADCin();
+            break;
+        case 2:
+            P20_ADC_Pin_2_AD_Open();
+            break;
+        case 3:
+            P20_ADC_Pin_3_ADPin_GNDTest();
+            break;
+         case 4:
+            P20_ADC_Pin_4_ADPin_HighTest();
+            break;
+       default:
+            break;
+    }
+        
+}
+
+//////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////
+
+
+//------------------------------------------------------------------------------//
+//------------------------------------------------------------------------------//
+//-----    Serial tx/rx Communication  
+//------------------------------------------------------------------------------//
+// Copy tx line buffer to large tx buffer for tx interrupt routine
+void send_line() {
+    int i;
+    char temp_char;
+    bool empty;
+    i = 0;
+// Start Critical Section - don't interrupt while changing global buffer variables
+    NVIC_DisableIRQ(UART_IRQn);
+    empty = (tx_in == tx_out);
+    while ((i==0) || (tx_line[i-1] != '\n')) {
+// Wait if buffer full
+        if (((tx_in + 1) % ser_buffer_size) == tx_out) {
+// End Critical Section - need to let interrupt routine empty buffer by sending
+            NVIC_EnableIRQ(UART_IRQn);
+            while (((tx_in + 1) % ser_buffer_size) == tx_out) {
+            }
+// Start Critical Section - don't interrupt while changing global buffer variables
+            NVIC_DisableIRQ(UART_IRQn);
+        }
+        tx_buffer[tx_in] = tx_line[i];
+        i++;
+        tx_in = (tx_in + 1) % ser_buffer_size;
+    }
+    if (device.writeable() && (empty)) {
+        temp_char = tx_buffer[tx_out];
+        tx_out = (tx_out + 1) % ser_buffer_size;
+// Send first character to start tx interrupts, if stopped
+        device.putc(temp_char);
+    }
+// End Critical Section
+    NVIC_EnableIRQ(UART_IRQn);
+    return;
+}
+
+
+// Read a line from the large rx buffer from rx interrupt routine
+// 2013.08.08 H.Tsunemoto 
+// Append Return Chear Number
+int read_line(){
+//void read_line() {
+    int i;
+    i = 0;
+    // Start Critical Section - don't interrupt while changing global buffer variables
+    NVIC_DisableIRQ(UART_IRQn);
+    while((rx_in != rx_out) && (rx_buffer[rx_out]<0x20)){
+          rx_out = (rx_out + 1) % ser_buffer_size;
+     }
+     while(rx_in != rx_out){
+        rx_line[i] = rx_buffer[rx_out];
+         rx_out = (rx_out + 1) % ser_buffer_size;
+        if((rx_line[i] == '\r') || (rx_line[i] == '\n')){
+            break;
+       }
+             i++;
+
+    }
+    rx_line[i] = 0;
+// End Critical Section
+    NVIC_EnableIRQ(UART_IRQn);
+    return(i);
+}
+// Interupt Routine to read in data from serial port
+void Rx_interrupt() {
+    //led1=1;
+// Loop just in case more than one character is in UART's receive FIFO buffer
+// Stop if buffer full
+    while ((device.readable()) || (((rx_in + 1) % ser_buffer_size) == rx_out)) {
+        rx_buffer[rx_in] = device.getc();
+// Uncomment to Echo to USB serial to watch data flow
+//        monitor_device.putc(rx_buffer[rx_in]);
+        //------- 2013.08.08 Tsunemoto ------------//
+        // -- Char CR Rec Counter ----//
+        if(rx_buffer[rx_in]== '\r'){
+           //led2 = 1;
+           rx_cr_Rec ++;
+        }
+        //----------------------------//
+        rx_in = (rx_in + 1) % ser_buffer_size;
+    }
+    //led1=0;
+    return;
+}
+
+// Interupt Routine to write out data to serial port
+void Tx_interrupt() {
+    //led2=1;
+// Loop to fill more than one character in UART's transmit FIFO buffer
+// Stop if buffer empty
+    while ((device.writeable()) && (tx_in != tx_out)) {
+        device.putc(tx_buffer[tx_out]);
+        tx_out = (tx_out + 1) % ser_buffer_size;
+    }
+    //led2=0;
+    return;
+}
+
+////////////////////////////////////////////////
+//   1msec Timer Interrupt
+//
+// 1msec Decrement Counter
+//int i_ADC_IntCount =0;
+//int i_ADC_Sample_Count=0;
+//int i_Charge_Term_Count=0;
+//int i_ChargeAfterDelayCount =0;
+//int i_Charge_TermOverCount=0;
+//int i_DisChargeTermCount =0;
+
+///////////////////////////////////////////////
+void Tick_1mSec_Interrupt() 
+{
+    P36_Int1msec=1;
+    // Sampling Interval 
+    if(i_ADC_IntCount >0){
+        i_ADC_IntCount--;
+    }
+    // i_Charge_Term_Count 
+    if(i_ChargeAfterDelayCount >0){
+        i_ChargeAfterDelayCount--;
+    }
+    if(i_Charge_TermOverCount >0){
+        i_Charge_TermOverCount--;
+    }
+
+    // Discharge Term Counter
+    if(i_DisChargeTermCount >0){
+        i_DisChargeTermCount--;
+    }
+    
+    timer_count++;                  //increment timer_count
+    if(timer_count >= 10000){
+        timer_count = 0;
+        timer_1Sec++;
+    }
+    P36_Int1msec=0;
+
+}
+
+//////////////////////////////////////////////////////////////////////////////////
+//------------    Command Check & Set Function ---------------------------------//
+//  Input :i_RecCharCount :Command Stringth Length                              //
+//         rx_line[80] :(Global) Rec Data Stringth                              //
+//  Return :bool b_CommadERR  0= ACK                                            //
+//                            1= ERR                                            //
+//////////////////////////////////////////////////////////////////////////////////
+
+//-------- DosimeterDock Parameter declaration  --------//
+/////////////////////////////// 
+//    設定パラメータ応答               //
+///////////////////////////////
+// --------------  Capacitor Dose Meter I・O Port ON/OFF Test  ----------------//
+ //  MBED Port (Relay Control Pin Replay Status & Set I/O Port
+ //     bool com_Check_SW_RCV_COMVref(int i_RecCharCount)
+ //     bool com_Check_SW_RCG_COMGND(int i_RecCharCount)
+ //     bool com_Check_SW_RCA_COMADG(int i_RecCharCount)
+ //     bool com_Check_SW_RSn_SnConn(int i_RecCharCount)n=1-6
+ // Setting Parameter Replay & Setting
+ //     bool com_Check_SW_RCV_COMVref(int i_RecCharCount)
+//------------------------------------------------------------------------------//
+//  Command No.1  "Relay SW ON/OFF "  P5 COM_Vref3.2V Pin Status  Set             //
+//typedef struct st_PortStat{
+//>>    int i_pCOM_Vref_Conn_p5;
+//    int i_pCOM_GND_Conn_p6;
+//    int i_pCOM_AD_OFF_DRV_p13;
+//    int i_pSn_Conn[nSENSOR_6CH];
+//    int i_pSn_LED[nSENSOR_6CH];
+//}ST_PORT_STATUS;
+//
+//int st_IOPort.i_pCOM_Vref_Conn_p5 = 1;  // P5 Vref3.2V Connect
+//------------------------------------------------------------------------------//
+bool com_Check_SW_PCV_COMVref(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+
+    if(i_RecCharCount < 3){
+        b_CommadERR = 1;
+    }
+    else if( ((rx_line[3] == 'O') && (rx_line[4] == 'N') )
+             || ((rx_line[3] == ' ') &&(rx_line[4] == 'O') && (rx_line[5] == 'N') )){
+        set_RelaySW_COM(RelayON,st_IOPort.i_pCOM_GND_Conn_p6,st_IOPort.i_pCOM_AD_OFF_DRV_p13);
+    }
+    else if( ((rx_line[3] == 'O') && (rx_line[4] == 'F') )
+             || ((rx_line[3] == ' ') &&(rx_line[4] == 'O') && (rx_line[5] == 'F') )){
+        set_RelaySW_COM(RelayOFF,st_IOPort.i_pCOM_GND_Conn_p6,st_IOPort.i_pCOM_AD_OFF_DRV_p13);
+    }
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if((i_num >= 0 ) && (i_num <= Def_PortSET_Stat_MAX)){
+                 set_RelaySW_COM(i_num,st_IOPort.i_pCOM_GND_Conn_p6,st_IOPort.i_pCOM_AD_OFF_DRV_p13);
+        }
+        else{
+            b_CommadERR = 1;
+        }
+   }
+    return(b_CommadERR);
+ }
+ //------------------------------------------------------------------------------//
+//  Command No.2  "Relay SW ON/OFF "  P6 COM GND  Pin Status  Set             //
+//typedef struct st_PortStat{
+//>>    int i_pCOM_GND_Conn_p6;
+//}ST_PORT_STATUS;
+//------------------------------------------------------------------------------//
+bool com_Check_SW_PCG_COMGND(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+
+    if(i_RecCharCount < 3){
+        b_CommadERR = 1;
+    } 
+    else if( ((rx_line[3] == 'O') && (rx_line[4] == 'N') )
+             || ((rx_line[3] == ' ') &&(rx_line[4] == 'O') && (rx_line[5] == 'N') )){
+        set_RelaySW_COM(st_IOPort.i_pCOM_Vref_Conn_p5,RelayON,st_IOPort.i_pCOM_AD_OFF_DRV_p13);
+    }
+    else if( ((rx_line[3] == 'O') && (rx_line[4] == 'F') )
+             || ((rx_line[3] == ' ') &&(rx_line[4] == 'O') && (rx_line[5] == 'F') )){
+        set_RelaySW_COM(st_IOPort.i_pCOM_Vref_Conn_p5,RelayOFF,st_IOPort.i_pCOM_AD_OFF_DRV_p13);
+    }
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if((i_num >= 0 ) && (i_num <= Def_PortSET_Stat_MAX)){
+                 set_RelaySW_COM(st_IOPort.i_pCOM_Vref_Conn_p5,i_num,st_IOPort.i_pCOM_AD_OFF_DRV_p13);
+        }
+        else{
+            b_CommadERR = 1;
+        }
+   }
+    return(b_CommadERR);
+ }
+//------------------------------------------------------------------------------//
+//  Command No.3  "Relay SW ON/OFF "  P13 ADC Inp Short GND  Pin Status  Set    //
+//typedef struct st_PortStat{
+//>>    int i_pCOM_AD_OFF_DRV_p13;
+//}ST_PORT_STATUS;
+///------------------------------------------------------------------------------//
+bool com_Check_SW_PCA_COMADG(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+
+    if(i_RecCharCount < 3){
+        b_CommadERR = 1;
+    } 
+    else if( ((rx_line[3] == 'O') && (rx_line[4] == 'N') )
+             || ((rx_line[3] == ' ') &&(rx_line[4] == 'O') && (rx_line[5] == 'N') )){
+        set_RelaySW_COM(st_IOPort.i_pCOM_Vref_Conn_p5,st_IOPort.i_pCOM_GND_Conn_p6,RelayON);
+    }
+    else if( ((rx_line[3] == 'O') && (rx_line[4] == 'F') )
+             || ((rx_line[3] == ' ') &&(rx_line[4] == 'O') && (rx_line[5] == 'F') )){
+        set_RelaySW_COM(st_IOPort.i_pCOM_Vref_Conn_p5,st_IOPort.i_pCOM_GND_Conn_p6,RelayOFF);
+    }
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if((i_num >= 0 ) && (i_num <= Def_PortSET_Stat_MAX)){
+                 set_RelaySW_COM(st_IOPort.i_pCOM_Vref_Conn_p5,st_IOPort.i_pCOM_GND_Conn_p6,i_num);
+        }
+        else{
+            b_CommadERR = 1;
+        }
+   }
+    return(b_CommadERR);
+ }
+//------------------------------------------------------------------------------//
+//  Command No.4  "Relay SW ON/OFF "  Sensor 1 - 6 Relay  Pin Status  Set    //
+//typedef struct st_PortStat{
+//>>    int i_pSn_Conn[nSENSOR_6CH];
+//}ST_PORT_STATUS;
+//------------------------------------------------------------------------------//
+bool com_Check_SW_Psn_SensConn(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_SensorNo=0;
+    int i_num=0;
+    char *pt_comRec;
+    #define SENSOR_S0   0x30 
+        i_SensorNo = (int)(rx_line[2]);
+        
+    if((i_SensorNo >= 0x31) && (i_SensorNo <= 0x36)){
+        if(i_RecCharCount < 3){
+         b_CommadERR = 1;
+        } 
+        else if( ((rx_line[3] == 'O') && (rx_line[4] == 'N') )
+             || ((rx_line[3] == ' ') &&(rx_line[4] == 'O') && (rx_line[5] == 'N') )){
+            set_RelaySW_SensConn((i_SensorNo - SENSOR_S0) ,RelayON);
+        }
+        else if( ((rx_line[3] == 'O') && (rx_line[4] == 'F') )
+             || ((rx_line[3] == ' ') &&(rx_line[4] == 'O') && (rx_line[5] == 'F') )){
+            set_RelaySW_SensConn((i_SensorNo - SENSOR_S0) ,RelayOFF);
+        }
+        else{
+            pt_comRec = (char *)&rx_line[3];
+            i_num= atoi(pt_comRec);
+            if((i_num >= 0 ) && (i_num <= Def_PortSET_Stat_MAX)){
+                 set_RelaySW_SensConn((i_SensorNo - SENSOR_S0) ,i_num);
+            }
+            else{
+                b_CommadERR = 1;
+            }
+        }
+    }
+    else{
+        b_CommadERR = 1;
+    }
+    return(b_CommadERR);
+ }
+//set_LEDnSW_port
+//------------------------------------------------------------------------------//
+//  Command No.5  "Sensor LED  ON/OFF "  LED 1 - 6   Pin Status  Set    //
+//typedef struct st_PortStat{
+///>>    int i_pSn_LED[nSENSOR_6CH];
+//}ST_PORT_STATUS;
+//------------------------------------------------------------------------------//
+bool com_Check_SW_PLn_LEDset(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_SensorNo=0;
+    int i_num=0;
+    char *pt_comRec;
+    #define SENSOR_S0   0x30 
+        i_SensorNo = (int)(rx_line[2]);
+        
+    if((i_SensorNo >= 0x31) && (i_SensorNo <= 0x36)){
+        if(i_RecCharCount < 3){
+         b_CommadERR = 1;
+        } 
+        else if( ((rx_line[3] == 'O') && (rx_line[4] == 'N') )
+             || ((rx_line[3] == ' ') &&(rx_line[4] == 'O') && (rx_line[5] == 'N') )){
+            set_LEDnSW_port((i_SensorNo - SENSOR_S0)  ,LED_ON);
+        }
+        else if( ((rx_line[3] == 'O') && (rx_line[4] == 'F') )
+             || ((rx_line[3] == ' ') &&(rx_line[4] == 'O') && (rx_line[5] == 'F') )){
+            set_LEDnSW_port((i_SensorNo - SENSOR_S0)  ,LED_OFF);
+        }
+        else{
+            pt_comRec = (char *)&rx_line[3];
+            i_num= atoi(pt_comRec);
+            if((i_num >= 0 ) && (i_num <= Def_PortSET_Stat_MAX)){
+                 set_LEDnSW_port((i_SensorNo - SENSOR_S0) ,i_num);
+            }
+            else{
+                b_CommadERR = 1;
+            }
+        }
+    }
+    else{
+        b_CommadERR = 1;
+    }
+    return(b_CommadERR);
+ }
+ 
+//------------------------------------------------------------------------------//
+//  Command No.11  Setteing Parameter Set No.11    //
+// --------------  Capacitor Dose Meter Setting Parameter Declaration  ----------------//
+//////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////
+//typedef struct  st_CapDoseSetting_param{
+//    // 共通設定項目
+//    int i_RelaySW_Delay;            // 共通 Relay 切り替え時遅延時間[x1msec]
+//    //Measure 専用パラメータ
+//    int   i_Meas_Interval_Time;         //  測定値 AD測定間隔
+//    int   i_Meas_Connect_Time;          //  測定時 Sensor 接続時間
+//    int   i_Meas_StartDelayTime;        //  センサー接続からセンサー値測定開始Delay
+//    int   i_Meas_SampleAveTimes;         // 測定開始から AD測定回数 
+//    int   i_Meas_SampleAveInterval;      //  AD測定間隔 //  
+//        (i_Meas_StartDelayTime + (i_Meas_SampleAveTim x i_Meas_SampleAveInterval)) が i_Meas_Connect_Time より小さい
+//    // Charge/DisCharge 共通
+//    int   i_CDC_Meas_IntervalTime;      //  充放電時電圧監視 AD測定間隔
+//     // Charge 専用パラメータ
+//    float f_ChargeTargetVolt;           // 充電完了判断しきい値レベル 設定値
+//     int i_ChargeLimitTime;             //  充電時間 リミット制限
+//    int i_ChargeAflerDelay;             // 充電しきい値達成後Wait
+//    
+//    // DisCharge 専用   
+//    float f_DisChargeTargetVolt;          // 放電時 放電終了 レベルしきい値[ADC_Level ]
+//    int i_DisChargeLimitTime;       //  放電時間 リミット制限
+//    int i_DisChargeAfterDelay;      // 放電時 しきい値達成後 Delay
+//}ST_CAPDOSE_SETTING_PARAMETER;
+//////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////
+//------------------------------------------------------------------------------//
+//  Command No.101  "RDL xxx"  [msec] Relay SW After Delay Relay 切替後接続Delay               //
+//int st_CapDoseSetting.i_RelaySW_Delay  // 
+//------------------------------------------------------------------------------//
+bool com_Check_RDL_ConnDelayAfterRSW(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+    if(i_RecCharCount < 4){ b_CommadERR = 1;} 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if((i_num > 0 ) && (i_num <= Def_RELAY_SW_DELAY_SetMax_1S)){
+                 st_CapDoseSetting.i_RelaySW_Delay = i_num;
+        }
+        else{ b_CommadERR = 1; }
+   }
+    return(b_CommadERR);
+ }
+//------------------------------------------------------------------------------//
+//  Command No.102  "MIT xxxx"  [msec] 測定間隔                                 //
+//  int st_CapDoseSetting.i_Meas_Interval_Time                                  //
+//        条件 > 測定時接続時間 < MaxLimit (<600000msec = 10minutes          // 
+//------------------------------------------------------------------------------//
+bool com_Check_MIT_MeasurementInterval(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+    if(i_RecCharCount < 4){ b_CommadERR = 1;} 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if((i_num > st_CapDoseSetting.i_Meas_Connect_Time ) && (i_num <= Def_MEAS_INTERVAL_SET_MAX_10min)){
+                 st_CapDoseSetting.i_Meas_Interval_Time = i_num;
+        }
+        else{ b_CommadERR = 1; }
+   }
+    return(b_CommadERR);
+ }
+//------------------------------------------------------------------------------//
+//  Command No.103  "MCT xxxx"  [msec] 1測定時1接続時間                          //
+//  int st_CapDoseSetting.i_Meas_Connect_Time                                  //
+//        条件 > 測定時接続時間 < MaxLimit (<60000msec = 1minutes            // 
+//              <測定間隔
+//------------------------------------------------------------------------------//
+bool com_Check_MCT_MeasurementConnectTime(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+    if(i_RecCharCount < 4){ b_CommadERR = 1;} 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if( (i_num > 0 ) && (i_num < st_CapDoseSetting.i_Meas_Interval_Time ) && (i_num <= Def_MEAS_CONNECT_TIME_Max1m)){
+                 st_CapDoseSetting.i_Meas_Connect_Time = i_num;
+        }
+        else{ b_CommadERR = 1; }
+   }
+    return(b_CommadERR);
+ }
+//------------------------------------------------------------------------------//
+//  Command No.104  "MSD xxxx"  [msec] s測定開始 遅延時間                       //
+//  int st_CapDoseSetting.i_Meas_StartDelayTime                                 //
+//        条件 < 測定時接続時間 < MaxLimit (< = 10sec            // 
+//              <測定間隔
+//------------------------------------------------------------------------------//
+bool com_Check_MSD_MeasSampleStartDelay(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+    if(i_RecCharCount < 4){ b_CommadERR = 1;} 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if( (i_num > 0 ) && (i_num < st_CapDoseSetting.i_Meas_Connect_Time ) && (i_num <= Def_MEAS_START_DELAY_SetMax1sec)){
+                 st_CapDoseSetting.i_Meas_StartDelayTime = i_num;
+        }
+        else{ b_CommadERR = 1; }
+   }
+    return(b_CommadERR);
+ }
+
+//------------------------------------------------------------------------------//
+//  Command No.105  "MAT xxxx"  [msec] s測定開始 遅延時間                       //
+//  int st_CapDoseSetting.i_Meas_SampleAveTimes                                 //
+//        条件 < 測定 Ave回数             // 
+//              <測定間隔
+//------------------------------------------------------------------------------//
+bool com_Check_MAT_MeasAveTimes(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+    if(i_RecCharCount < 4){ b_CommadERR = 1;} 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if( (i_num > 0 ) && (i_num < st_CapDoseSetting.i_Meas_Connect_Time ) && (i_num <= Def_MEAS_SAMPLE_AVE_Times_SetMax_60000)){
+                 st_CapDoseSetting.i_Meas_SampleAveTimes = i_num;
+        }
+        else{ b_CommadERR = 1; }
+   }
+    return(b_CommadERR);
+ }
+
+//------------------------------------------------------------------------------//
+//  Command No.106  "MAI xxxx"  [msec] 測定 繰返しAve Sample間隔                //
+//  int st_CapDoseSetting.i_Meas_SampleAveInterval                                 //
+//        条件 < 測定時接続時間 < MaxLimit (< = 10sec            // 
+//              <測定間隔
+//------------------------------------------------------------------------------//
+bool com_Check_MAI_MeasSampleAveInterval(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+    if(i_RecCharCount < 4){ b_CommadERR = 1;} 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if( (i_num > 0 ) &&  (i_num <= Def_MEAS_SAMPLE_INETRVAL_SetMax_1sec)){
+                 st_CapDoseSetting.i_Meas_SampleAveInterval = i_num;
+        }
+        else{ b_CommadERR = 1; }
+   }
+    return(b_CommadERR);
+ }
+
+////  Charge / DisCharge Setting Command
+//    int   i_CDC_Meas_IntervalTime;      //  充放電時電圧監視 AD測定間隔
+//    float f_ChargeTargetVolt;           // 充電完了判断しきい値レベル 設定値
+//     int i_ChargeLimitTime;             //  充電時間 リミット制限
+//    int i_ChargeAflerDelay;             // 充電しきい値達成後Wait
+//    float f_DisChargeTargetVolt;          // 放電時 放電終了 レベルしきい値[ADC_Level ]
+//    int i_DisChargeLimitTime;       //  放電時間 リミット制限
+//    int i_DisChargeAfterDelay;      // 放電時 しきい値達成後 Delay
+//------------------------------------------------------------------------------//
+//  Command No.107  "CDI xxxx"  [msec] 測定 Charge/DisCharge  Sample間隔                //
+//  int st_CapDoseSetting.i_Meas_SampleAveInterval                                 //
+//        条件 < 
+//------------------------------------------------------------------------------//
+bool com_Check_CDI_Charge_DisCharge_SampleInterval(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+    if(i_RecCharCount < 4){ b_CommadERR = 1;} 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if( (i_num > 0 ) &&  (i_num <= Def_CDC_MEAS_INTERVAL_SetMax)){
+                 st_CapDoseSetting.i_CDC_Meas_IntervalTime = i_num;
+        }
+        else{ b_CommadERR = 1; }
+   }
+    return(b_CommadERR);
+ }
+
+//------------------------------------------------------------------------------//
+//  Command No.108  "CTV xxxx"  [V] 測定 Charge しきい値 V              //
+//  int st_CapDoseSetting.f_ChargeTargetVolt                                     //
+//        条件 < 
+//------------------------------------------------------------------------------//
+bool com_Check_CTV_ChargeTargetVoltSet(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    float f_num=0.00f;
+    char *pt_comRec;
+    if(i_RecCharCount < 4){ b_CommadERR = 1; } 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        f_num = atof(pt_comRec);
+        if((f_num >= Def_CHARGE_TARGET_VoltMIN ) && (f_num <= Def_CHARGE_TARGET_VoltMAX)){
+                 st_CapDoseSetting.f_ChargeTargetVolt = ( f_num ) ;
+        }
+        else{b_CommadERR = 1;}
+   }
+   return(b_CommadERR);
+}
+//------------------------------------------------------------------------------//
+//  Command No.109  "CLT xxxx"  [msec] 測定 Charge 時間 limits             //
+//  int st_CapDoseSetting.i_ChargeLimitTime                                     //
+//        条件 < 
+//------------------------------------------------------------------------------//
+bool com_Check_CLT_ChargeLimitTimeSet(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+    if(i_RecCharCount < 4){ b_CommadERR = 1;} 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if( (i_num > 0 ) &&  (i_num <= Def_CHARGE_LIMIT_TIME_SetMax_1min)){
+                 st_CapDoseSetting.i_ChargeLimitTime = i_num;
+        }
+        else{ b_CommadERR = 1; }
+   }
+    return(b_CommadERR);
+ }
+
+//------------------------------------------------------------------------------//
+//  Command No.110  "CAD xxxx"  [msec] 測定 Charge 後 接続解除Delay             //
+//  int st_CapDoseSetting.i_ChargeAflerDelay                                    //
+//        条件 < 
+//------------------------------------------------------------------------------//
+bool com_Check_CAD_ChargeAfterDelaySet(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+    if(i_RecCharCount < 4){ b_CommadERR = 1;} 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if( (i_num > 0 ) &&  (i_num <= Def_CHARGE_AFTER_DELAY_SetMax_1min)){
+                 st_CapDoseSetting.i_ChargeAflerDelay = i_num;
+        }
+        else{ b_CommadERR = 1; }
+   }
+    return(b_CommadERR);
+ }
+
+//------------------------------------------------------------------------------//
+//  Command No.111  "DTV xxxx"  [V] 測定 Charge しきい値 V              //
+//  int st_CapDoseSetting.f_DisChargeTargetVolt                                    //
+//        条件 < 
+//------------------------------------------------------------------------------//
+bool com_Check_DTV_DisChargeTargetVoltSet(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    float f_num=0.00f;
+    char *pt_comRec;
+    if(i_RecCharCount < 4){ b_CommadERR = 1; } 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        f_num = atof(pt_comRec);
+        if((f_num >= Def_DisCHARGE_TARGET_VoltMIN ) && (f_num <= Def_DisCHARGE_TARGET_VoltMAX)){
+                 st_CapDoseSetting.f_DisChargeTargetVolt = ( f_num ) ;
+        }
+        else{b_CommadERR = 1;}
+   }
+   return(b_CommadERR);
+}
+//------------------------------------------------------------------------------//
+//  Command No.112  "DLT xxxx"  [msec] 測定 Charge 時間 limits             //
+//  int st_CapDoseSetting.i_DisChargeLimitTime                                     //
+//        条件 < 
+//------------------------------------------------------------------------------//
+bool com_Check_DLT_DisChargeLimitTimeSet(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+    if(i_RecCharCount < 4){ b_CommadERR = 1;} 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if( (i_num > 0 ) &&  (i_num <= Def_DISCHARGE_LIMIT_TIMEMax_1min)){
+                 st_CapDoseSetting.i_DisChargeLimitTime = i_num;
+        }
+        else{ b_CommadERR = 1; }
+   }
+    return(b_CommadERR);
+ }
+
+//------------------------------------------------------------------------------//
+//  Command No.113  "DAD xxxx"  [msec] 測定 Charge 後 接続解除Delay             //
+//  int st_CapDoseSetting.i_ChargeAflerDelay                                    //
+//        条件 < 
+//------------------------------------------------------------------------------//
+bool com_Check_DAD_DisChargeAfterDelaySet(int i_RecCharCount)
+{
+    bool b_CommadERR=0;
+    int i_num=0;
+    char *pt_comRec;
+    if(i_RecCharCount < 4){ b_CommadERR = 1;} 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num= atoi(pt_comRec);
+        if( (i_num > 0 ) &&  (i_num <= Def_DISCHARGE_AFTER_DELAY_SetMax_1min)){
+                 st_CapDoseSetting.i_DisChargeAfterDelay = i_num;
+        }
+        else{ b_CommadERR = 1; }
+   }
+    return(b_CommadERR);
+ }
+
+
+
+
+
+//------------------------------------------------------------------//
+//-----    Serial rx Commmand Input & Parameter Set Function   -----//
+//  Tsunemoto Scince 2013.08.08                                     //
+//------------------------------------------------------------------//
+void Ser_Command_Input()
+{
+    int i_RecCharCount;
+    bool b_CommadERR = 0;
+ 
+//    int i;
+ //   while(rx_cr_Rec > 0){
+         // Read a line from the large rx buffer from rx interrupt routine
+        i_RecCharCount = read_line();
+            
+        if(i_RecCharCount >0)
+        {
+            switch (rx_line[0]){
+                case 'P':
+                    if(rx_line[1] == 'C'){
+                        switch(rx_line[2]){
+                            case 'V':
+                                b_CommadERR = com_Check_SW_PCV_COMVref(i_RecCharCount);
+                                break;
+                            case 'G':
+                                b_CommadERR = com_Check_SW_PCG_COMGND(i_RecCharCount);
+                                break;
+                            case 'A':
+                                b_CommadERR = com_Check_SW_PCA_COMADG(i_RecCharCount);
+                                break;
+                            default:
+                                break;
+                        }
+                    }
+                    else if (rx_line[1] == 'S'){
+                        b_CommadERR = com_Check_SW_Psn_SensConn(i_RecCharCount);
+                    }
+                    else if (rx_line[1] == 'L'){
+                        b_CommadERR = com_Check_SW_PLn_LEDset(i_RecCharCount);
+                    }
+                    else{
+                    }
+                    break;
+                case 'R':
+                    if((rx_line[1] == 'D') && (rx_line[2] == 'L')){
+                        b_CommadERR = com_Check_RDL_ConnDelayAfterRSW(i_RecCharCount);
+                    }
+                    break;
+                 case 'M':
+                    if((rx_line[1] == 'I') && (rx_line[2] == 'T')){
+                        b_CommadERR = com_Check_MIT_MeasurementInterval(i_RecCharCount);
+                    }
+                    else if((rx_line[1] == 'C') && (rx_line[2] == 'T')){
+                        b_CommadERR = com_Check_MCT_MeasurementConnectTime(i_RecCharCount);
+                    }
+                    else if((rx_line[1] == 'S') && (rx_line[2] == 'D')){
+                        b_CommadERR = com_Check_MSD_MeasSampleStartDelay(i_RecCharCount);
+                    }
+                    else if((rx_line[1] == 'A') && (rx_line[2] == 'T')){
+                        b_CommadERR = com_Check_MAT_MeasAveTimes(i_RecCharCount);
+                    }
+                    else if((rx_line[1] == 'A') && (rx_line[2] == 'I')){
+                        b_CommadERR = com_Check_MAT_MeasAveTimes(i_RecCharCount);
+                    }
+                    break;
+                case 'C':
+                    if((rx_line[1] == 'D') && (rx_line[2] == 'I')){
+                        b_CommadERR = com_Check_CDI_Charge_DisCharge_SampleInterval(i_RecCharCount);
+                    }
+                    else if((rx_line[1] == 'T') && (rx_line[2] == 'V')){
+                        b_CommadERR = com_Check_CTV_ChargeTargetVoltSet(i_RecCharCount);
+                    }
+                    else if((rx_line[1] == 'L') && (rx_line[2] == 'T')){
+                        b_CommadERR = com_Check_CLT_ChargeLimitTimeSet(i_RecCharCount);
+                    }
+                    else if((rx_line[1] == 'A') && (rx_line[2] == 'D')){
+                        b_CommadERR = com_Check_CAD_ChargeAfterDelaySet(i_RecCharCount);
+                    }
+                   break;
+                case 'D':
+                    if((rx_line[1] == 'T') && (rx_line[2] == 'V')){
+                        b_CommadERR = com_Check_DTV_DisChargeTargetVoltSet(i_RecCharCount);
+                    }
+                    else if((rx_line[1] == 'L') && (rx_line[2] == 'T')){
+                        b_CommadERR = com_Check_DLT_DisChargeLimitTimeSet(i_RecCharCount);
+                    }
+                    else if((rx_line[1] == 'A') && (rx_line[2] == 'D')){
+                        b_CommadERR = com_Check_DAD_DisChargeAfterDelaySet(i_RecCharCount);
+                    }
+                    break;
+                case 'S':
+                   switch (rx_line[1]){
+                        case 'M':
+                            switch (rx_line[2]){
+                                case 'S':
+                                    Start_MeasureSingle();
+                                    
+                                    break;
+                                case 'N':
+                                    Start_MeasureNtimes();
+                                    break;
+                                case 'C':
+                                     Start_MeasureContinuous();
+                                   break;
+                                default:
+                                    b_CommadERR = 2;
+                                    break;
+                            }        
+                            //Start_SampleMeasure();
+                            break;
+                        case 'C':
+                            Start_ChargeMode();
+                            break;
+                        case 'D':
+                            Start_DisChargeMode();
+                            break;
+                        default:
+                            break;
+                    }
+                    break;
+
+                case '?':
+                    com_Stat_Table_Param_Send();
+                    /////////////////////////////
+                    // Iwate Pattern
+                    break;
+               default:
+                    break;
+            }
+            //}
+        }
+ 
+        if(b_CommadERR == 0){
+                sprintf(tx_line,"ACK%d \r\n",rx_cr_Rec); 
+                // Copy tx line buffer to large tx buffer for tx interrupt routine
+                send_line();
+        }
+        else{
+                sprintf(tx_line,"ERR%d \r\n",b_CommadERR); 
+                // Copy tx line buffer to large tx buffer for tx interrupt routine
+                send_line();
+        }
+
+        rx_cr_Rec--;
+          
+ //   }
+}
+//////////////////////////////////////////////////////////////////////////////////
+//------------    Command Check & Set Function ---------------------------------//
+//  Input :i_RecCharCount :Command Stringth Length                              //
+//         rx_line[80] :(Global) Rec Data Stringth                              //
+//  Return :bool b_CommadERR  0= ACK                                            //
+//                            1= ERR                                            //
+//////////////////////////////////////////////////////////////////////////////////
+//------------------------------------------------------------------------------//
+//  CapDose  ?"  Setting  Parameter Repry                                          //
+/////////////////////////////// 
+//    設定パラメータ応答               //
+///////////////////////////////
+// --------------  Capacitor Dose Meter Setting Parameter Declaration  ----------------//
+//typedef struct  st_CapDoseSetting_param{
+//    // 共通設定項目
+//    int i_RelaySW_Delay;            // 共通 Relay 切り替え時遅延時間[x1msec]
+//    //Measure 専用パラメータ
+//    int   i_Meas_Interval_Time;         //  測定値 AD測定間隔
+//    int   i_Meas_Connect_Time;          //  測定時 Sensor 接続時間
+//    int   i_Meas_StartDelayTime;        //  センサー接続からセンサー値測定開始Delay
+//    int   i_Meas_SampleAveTimes;         // 測定開始から AD測定回数 
+//    int   i_Meas_SampleAveInterval;      //  AD測定間隔 
+//                                        //  (i_Meas_StartDelayTime + (i_Meas_SampleAveTim x i_Meas_SampleAveInterval))
+//                                        //  が i_Meas_Connect_Time より小さい
+//    // Charge/DisCharge 共通
+//    int   i_CDC_Meas_IntervalTime;      //  充放電時電圧監視 AD測定間隔
+//     // Charge 専用パラメータ
+//    float f_ChargeTargetVolt;           // 充電完了判断しきい値レベル 設定値
+//     int i_ChargeLimitTime;             //  充電時間 リミット制限
+//    int i_ChargeAflerDelay;             // 充電しきい値達成後Wait
+//    
+//    // DisCharge 専用   
+//    float f_DisChargeTargetVolt;          // 放電時 放電終了 レベルしきい値[ADC_Level ]
+//    int i_DisChargeLimitTime;       //  放電時間 リミット制限
+//    int i_DisChargeAfterDelay;      // 放電時 しきい値達成後 Delay
+//    
+//}ST_CAPDOSE_SETTING_PARAMETER;
+//
+//------------------------------------------------------------------------------//
+void com_Stat_Table_Param_Send()
+{
+float f_num;
+int i_num;
+
+    sprintf(tx_line,"Capacitor DoseMeter MBED_LPC11U24 Ver0.01 \r\n");
+    send_line();
+
+    sprintf(tx_line,"?: Parameter & Status Request \r\n");
+    send_line();
+    
+   // 共通設定項目
+    //int i_RelaySW_Delay;                  // 共通 Relay 切り替え時遅延時間[x1msec]
+    //st_CapDoseSetting.i_RelaySW_Delay = Def_RELAY_SW_DELAY_5ms;   // Relay SW 切り替え時間 初期値 5msec
+    i_num = ((int)st_CapDoseSetting.i_RelaySW_Delay );
+   sprintf(tx_line,"Com:RelaySW Change Delay Time [RDL]=%3d[msec]\r\n",i_num);
+   send_line();
+       //Measure 専用パラメータ
+    //int   i_Meas_Interval_Time;           //  測定値 AD測定間隔
+    //st_CapDoseSetting.i_Meas_Interval_Time = Def_MEAS_INTERVAL_100ms; 
+    i_num = ((int)st_CapDoseSetting.i_Meas_Interval_Time );
+    sprintf(tx_line,"Meas:Meas Interval Time [MIT]=%6d[msec]\r\n",i_num);
+    send_line();   
+    //int   i_Meas_Connect_Time;            //  測定時 SeSample AveSample Ave  
+    //st_CapDoseSetting.i_Meas_Connect_Time = Def_MEAS_CONNECT_TIME_50ms;
+    i_num = ((int)st_CapDoseSetting.i_Meas_Connect_Time );
+    sprintf(tx_line,"Meas:1Meas Sensor Connect Time [MCT]=%5d[msec]\r\n",i_num);
+    send_line();
+    //int   i_Meas_StartDelayTime;          //  センサー接続からセンサー値測定開始Delay
+    //st_CapDoseSetting.i_Meas_StartDelayTime = Def_MEAS_START_DELAY_10ms;
+    i_num = ((int)st_CapDoseSetting.i_Meas_StartDelayTime );
+    sprintf(tx_line,"Meas:Sample Delay Time after Sensor Connect [MSD]=%3d[msec]\r\n",i_num);
+    send_line();    
+    //int   i_Meas_SampleAveTimes;           // 測定開始から AD測定回数 (i_Meas_StartDelayTime + i_Meas_SampleAveTimes)
+    //st_CapDoseSetting.i_Meas_SampleAveTimes = Def_MEAS_SAMPLE_AVE_32Times;
+    i_num = ((int)st_CapDoseSetting.i_Meas_SampleAveTimes );
+    sprintf(tx_line,"Meas:1Meas Sample Average Times  [MAT]=%3d[times]\r\n",i_num);
+    send_line();
+    //int   i_Meas_SampleAveInterval;       //  AD測定間隔 
+    //st_CapDoseSetting.i_Meas_SampleAveInterval = Def_MEAS_SAMPLE_INETRVAL_1ms;
+    i_num = ((int)st_CapDoseSetting.i_Meas_SampleAveInterval );
+    sprintf(tx_line,"Meas:nSample Average Interval Time  [MAI]=%3d[msec]\r\n",i_num);
+    send_line();
+    //int  i_CDC_Meas_IntervalTime;         //  充放電時電圧監視 AD測定間隔
+    //st_CapDoseSetting.i_CDC_Meas_IntervalTime = Def_CDC_MEAS_INTERVAL_5ms;
+    i_num = ((int)st_CapDoseSetting.i_CDC_Meas_IntervalTime );
+    sprintf(tx_line,"Charge/Discharge: threshold Sample Interval Time [CDI]=%3d[msec]\r\n",i_num);
+    send_line();
+    // Charge 専用パラメータ
+    //float f_ChargeTargetVolt;             // 充電完了判断しきい値レベル 設定値
+    //st_CapDoseSetting.f_ChargeTargetVolt = Def_CHARGE_TARGETVolt3V;
+    f_num = ((float)st_CapDoseSetting.f_ChargeTargetVolt );
+    sprintf(tx_line,"Charge:Charge Target Level [CTV]=%2.3f[V]\r\n",f_num);
+    send_line();
+     // int i_ChargeLimitTime;               //  充電時間 リミット制限
+    //st_CapDoseSetting.i_ChargeLimitTime = Def_CHARGE_LIMIT_TIME_10sec;
+    i_num = ((int)st_CapDoseSetting.i_ChargeLimitTime );
+    sprintf(tx_line,"Charge: Charge Wait Time Max Limit [CLT]=%5d[msec]\r\n",i_num);
+    send_line();
+    //int i_ChargeAflerDelay;               // 充電しきい値達成後Wait
+    //st_CapDoseSetting.i_ChargeAflerDelay = Def_CHARGE_AFTER_DELAY5sec;
+    i_num = ((int)st_CapDoseSetting.i_ChargeAflerDelay);
+    sprintf(tx_line,"Charge: Delay Time After Charge [CAD]=%5d[msec]\r\n",i_num);
+    send_line();
+    // DisCharge 専用   
+   //float f_DisChargeTargetVolt;           // 充電完了判断しきい値レベル 設定値
+   //st_CapDoseSetting.f_DisChargeTargetVolt = Def_DisCHARGE_TARGETVolt05V;
+    f_num = ((float)st_CapDoseSetting.f_DisChargeTargetVolt );
+    sprintf(tx_line,"Discharge:Discharge Target Level [DTV]=%2.3f[V]\r\n",f_num);
+    send_line();
+    //int i_DisChargeLimitTime;             //  放電時間 リミット制限
+    //st_CapDoseSetting.i_DisChargeLimitTime = Def_DISCHARGE_LIMIT_TIME10sec;
+    i_num = ((int)st_CapDoseSetting.i_DisChargeLimitTime);
+    sprintf(tx_line,"Discharge: Discharge Wait Time Max Limit [DLT]=%5d[msec]\r\n",i_num);
+    send_line();
+     //int i_DisChargeAfterDelay;            // 放電時 しきい値達成後 Delay
+    //st_CapDoseSetting.i_DisChargeAfterDelay = Def_DISCHARGE_AFTER_DELAY5sec;
+    i_num = ((int)st_CapDoseSetting.i_DisChargeAfterDelay);
+    sprintf(tx_line,"Discharge: Delay Time After Discharge [DAD]=%5d[msec]\r\n",i_num);
+    send_line();
+
+// typedef struct st_PortStat{
+//    int i_pCOM_Vref_Conn_p5;
+//    int i_pCOM_GND_Conn_p6;
+//    int i_pCOM_AD_OFF_DRV_p13;
+//    int i_pSn_Conn[nSENSOR_6CH];
+//    int i_pSn_LED[nSENSOR_6CH];
+//}ST_PORT_STATUS;
+//ST_PORT_STATUS st_IOPort;
+    sprintf(tx_line," Relay & LED Control StatusControl Status\r\n");
+    send_line();
+    sprintf(tx_line,"Common Relay Control\r\n" );
+    send_line();
+    sprintf(tx_line," COM_Ref3.2V=[%1d],COM_GND=[%1d],COM_ADGND=[%1d]\r\n"
+                    ,st_IOPort.i_pCOM_Vref_Conn_p5
+                    ,st_IOPort.i_pCOM_GND_Conn_p6
+                    ,st_IOPort.i_pCOM_AD_OFF_DRV_p13
+                    );
+    send_line();
+    sprintf(tx_line," S1=[%1d],S2=[%1d],S3=[%1d],S4=[%1d],S5=[%1d],S6=[%1d]\r\n"
+                    ,st_IOPort.i_pSn_Conn[Sel_S1]
+                    ,st_IOPort.i_pSn_Conn[Sel_S2]
+                    ,st_IOPort.i_pSn_Conn[Sel_S3]
+                    ,st_IOPort.i_pSn_Conn[Sel_S4]
+                    ,st_IOPort.i_pSn_Conn[Sel_S5]
+                    ,st_IOPort.i_pSn_Conn[Sel_S6]
+                    );
+    send_line();
+    sprintf(tx_line," LED1=[%1d],LED2=[%1d],LED3=[%1d],LED4=[%1d],LED5=[%1d],LED6=[%1d]\r\n"
+                    ,st_IOPort.i_pSn_LED[Sel_S1]
+                    ,st_IOPort.i_pSn_LED[Sel_S2]
+                    ,st_IOPort.i_pSn_LED[Sel_S3]
+                    ,st_IOPort.i_pSn_LED[Sel_S4]
+                    ,st_IOPort.i_pSn_LED[Sel_S5]
+                    ,st_IOPort.i_pSn_LED[Sel_S6]
+                    );
+    send_line();
+
+
+ 
+}
+
diff -r 000000000000 -r d583bc5ef930 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Dec 18 01:37:25 2019 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/a97add6d7e64
\ No newline at end of file