k t / Mbed 2 deprecated TCD_BD_JIG

Dependencies:   mbed

Fork of TCD_BD_JIG by masanori abe

Committer:
katak
Date:
Wed Oct 29 11:43:42 2014 +0000
Revision:
1:40527b0f0dfa
Parent:
0:03dfcdd06518
2014/10/29; IO,AD?????????; ??????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
abem 0:03dfcdd06518 1 #include "mbed.h"
abem 0:03dfcdd06518 2
abem 0:03dfcdd06518 3 /* DA設定 */
abem 0:03dfcdd06518 4 AnalogOut da1(p18);
abem 0:03dfcdd06518 5
abem 0:03dfcdd06518 6 /* LED設定 */
abem 0:03dfcdd06518 7 DigitalOut myled1(LED1);
abem 0:03dfcdd06518 8 DigitalOut myled2(LED2);
abem 0:03dfcdd06518 9 DigitalOut myled3(LED3);
abem 0:03dfcdd06518 10 DigitalOut myled4(LED4);
abem 0:03dfcdd06518 11
abem 0:03dfcdd06518 12 /* DIO設定 */
abem 0:03dfcdd06518 13 DigitalIn inDrvAlm(p21); // DRV-ALM
abem 0:03dfcdd06518 14 DigitalIn inReady(p22); // READY
abem 0:03dfcdd06518 15 DigitalOut outRSTDRV(p23); // RST-DRV
abem 0:03dfcdd06518 16 DigitalOut outPWMON(p24); // PWM-ON
abem 0:03dfcdd06518 17
abem 0:03dfcdd06518 18 /* SIO設定 */
abem 0:03dfcdd06518 19 Serial pc(USBTX, USBRX); // USB-SIO
abem 0:03dfcdd06518 20 Serial sio1(p9, p10); // SIO1
abem 0:03dfcdd06518 21 Serial sio2(p13, p14); // SIO2
abem 0:03dfcdd06518 22
abem 0:03dfcdd06518 23 /* タイマー設定 */
abem 0:03dfcdd06518 24 Timeout flipper;
abem 0:03dfcdd06518 25 Ticker led4flic;
abem 0:03dfcdd06518 26
abem 0:03dfcdd06518 27 /* 関数宣言 */
abem 0:03dfcdd06518 28 void initSIO(void); // シリアルイニシャライズ
abem 0:03dfcdd06518 29
abem 0:03dfcdd06518 30 void cmdSIOpc(void); // コマンド処理 pc-SIO
abem 0:03dfcdd06518 31 void cmdSIOsio2(void); // コマンド処理 SIO1
abem 0:03dfcdd06518 32 void cmdSIOsio1(void); // コマンド処理 SIO2
abem 0:03dfcdd06518 33
abem 0:03dfcdd06518 34 int trgADcmp(short ADdata, unsigned short ch); // ターゲット取得AD値比較処理
abem 0:03dfcdd06518 35
katak 1:40527b0f0dfa 36 unsigned short trgIO1check(unsigned short mode); // ターゲットIO1チェック処理
katak 1:40527b0f0dfa 37 unsigned short trgIO2check(unsigned short mode); // ターゲットIO2チェック処理
katak 1:40527b0f0dfa 38
katak 1:40527b0f0dfa 39 short trgADreq(unsigned short ch); // DA設定&ターゲットAD値リクエスト
katak 1:40527b0f0dfa 40
katak 1:40527b0f0dfa 41
abem 0:03dfcdd06518 42
abem 0:03dfcdd06518 43 /* 定数宣言 */
abem 0:03dfcdd06518 44 // DA固定出力(0-2.5-5V)
abem 0:03dfcdd06518 45 unsigned short outDA0v0 =0;
abem 0:03dfcdd06518 46 unsigned short outDA2v5 =19200;
abem 0:03dfcdd06518 47 //unsigned short outDA2v5 =10000;
abem 0:03dfcdd06518 48 unsigned short outDA5v0 =62000;
abem 0:03dfcdd06518 49
abem 0:03dfcdd06518 50 // ターゲットAD判定閾値(0-2.5-5V)
abem 0:03dfcdd06518 51 // 出力範囲:0-5V(ターゲット:-2047~2048)
abem 0:03dfcdd06518 52 short AD0v0l =-2048;
abem 0:03dfcdd06518 53 short AD0v0h =-1800;
abem 0:03dfcdd06518 54 short AD2v5l =-100;
abem 0:03dfcdd06518 55 short AD2v5h =100;
abem 0:03dfcdd06518 56 short AD5v0l =1800;
abem 0:03dfcdd06518 57 short AD5v0h =2047;
abem 0:03dfcdd06518 58
abem 0:03dfcdd06518 59 // SIOコマンド
abem 0:03dfcdd06518 60 // 個別
abem 0:03dfcdd06518 61 char cmdCHK[] = "CHK"; // シリアルチェック
abem 0:03dfcdd06518 62 char cmdIO1[] = "IO1"; // RST_DRV-DRV_ALMチェック
abem 0:03dfcdd06518 63 char cmdIO2[] = "IO2"; // PWM_ON-READYチェック
abem 0:03dfcdd06518 64 char cmdIOC[] = "IOC"; // DI/Oシーケンシャルチェック
abem 0:03dfcdd06518 65 char cmdDAC[] = "DAC"; // 指令電圧チェック
abem 0:03dfcdd06518 66 char cmdDAM[] = "DAM"; // 指令電圧マニュアル出力
abem 0:03dfcdd06518 67
abem 0:03dfcdd06518 68 /* 変数宣言 */
abem 0:03dfcdd06518 69 // DA用
abem 0:03dfcdd06518 70 unsigned short u16OutDA;
abem 0:03dfcdd06518 71 short TrgAD;
abem 0:03dfcdd06518 72
abem 0:03dfcdd06518 73 unsigned short cmpADch;
abem 0:03dfcdd06518 74
katak 1:40527b0f0dfa 75 short SqchkNo; // シーケンシャルチェックstep
katak 1:40527b0f0dfa 76 unsigned short SqTrgchkNo[5]; // シーケンシャルチェック時判定用ch設定
katak 1:40527b0f0dfa 77 unsigned short SqTrgDA[5]; // シーケンシャルチェック時DA値格納先(出力値)
katak 1:40527b0f0dfa 78 short SqTrgAD[5]; // シーケンシャルチェック時AD値格納先
katak 1:40527b0f0dfa 79
katak 1:40527b0f0dfa 80
abem 0:03dfcdd06518 81 // pc-SIO
abem 0:03dfcdd06518 82 char rx_buf_PC[50];
abem 0:03dfcdd06518 83 char rx_ch_PC;
abem 0:03dfcdd06518 84 short rx_cnt_PC;
abem 0:03dfcdd06518 85 short rx_endflg_PC;
abem 0:03dfcdd06518 86
abem 0:03dfcdd06518 87 // SIO1
abem 0:03dfcdd06518 88 char rx_buf_SIO1[50];
abem 0:03dfcdd06518 89 char rx_ch_SIO1;
abem 0:03dfcdd06518 90 short rx_cnt_SIO1;
abem 0:03dfcdd06518 91 short rx_endflg_SIO1;
abem 0:03dfcdd06518 92
abem 0:03dfcdd06518 93 // SIO2
abem 0:03dfcdd06518 94 char rx_buf_SIO2[50];
abem 0:03dfcdd06518 95 char rx_ch_SIO2;
abem 0:03dfcdd06518 96 short rx_cnt_SIO2;
abem 0:03dfcdd06518 97 short rx_endflg_SIO2;
abem 0:03dfcdd06518 98
abem 0:03dfcdd06518 99 // 汎用
abem 0:03dfcdd06518 100 short i;
abem 0:03dfcdd06518 101
abem 0:03dfcdd06518 102 int len;
abem 0:03dfcdd06518 103 int intdaout;
abem 0:03dfcdd06518 104 int intbuf;
abem 0:03dfcdd06518 105
abem 0:03dfcdd06518 106 char cbufstr[50];
abem 0:03dfcdd06518 107
abem 0:03dfcdd06518 108 // Flag
abem 0:03dfcdd06518 109 unsigned short flgCHKrun;
abem 0:03dfcdd06518 110 unsigned short flgRxAD;
abem 0:03dfcdd06518 111
katak 1:40527b0f0dfa 112 unsigned short flgSqADchk;
katak 1:40527b0f0dfa 113
katak 1:40527b0f0dfa 114
abem 0:03dfcdd06518 115 /* 割込ハンドラ */
abem 0:03dfcdd06518 116 /* pc-SIO_受信 */
abem 0:03dfcdd06518 117 void isr_Rx_PC()
abem 0:03dfcdd06518 118 {
abem 0:03dfcdd06518 119 rx_ch_PC = pc.getc();
abem 0:03dfcdd06518 120 rx_buf_PC[rx_cnt_PC] = rx_ch_PC;
abem 0:03dfcdd06518 121 if( rx_ch_PC == '\r'){
abem 0:03dfcdd06518 122 rx_endflg_PC = 1;
abem 0:03dfcdd06518 123 myled3 = 1;
abem 0:03dfcdd06518 124 }else{
abem 0:03dfcdd06518 125 rx_cnt_PC++;
abem 0:03dfcdd06518 126 myled2 = 1;
abem 0:03dfcdd06518 127 }
abem 0:03dfcdd06518 128 }
abem 0:03dfcdd06518 129
abem 0:03dfcdd06518 130 /* SIO1_受信 */
abem 0:03dfcdd06518 131 void isr_Rx_SIO1()
abem 0:03dfcdd06518 132 {
abem 0:03dfcdd06518 133 rx_ch_SIO1 = sio1.getc();
abem 0:03dfcdd06518 134 rx_buf_SIO1[rx_cnt_SIO1] = rx_ch_SIO1;
abem 0:03dfcdd06518 135 if( rx_ch_SIO1 == '\r'){
abem 0:03dfcdd06518 136 rx_endflg_SIO1 = 1;
abem 0:03dfcdd06518 137 }else{
abem 0:03dfcdd06518 138 rx_cnt_SIO1++;
abem 0:03dfcdd06518 139 myled2 = 1;
abem 0:03dfcdd06518 140 }
abem 0:03dfcdd06518 141 }
abem 0:03dfcdd06518 142 /* SIO2_受信 */
abem 0:03dfcdd06518 143 void isr_Rx_SIO2()
abem 0:03dfcdd06518 144 {
abem 0:03dfcdd06518 145 rx_ch_SIO2 = sio2.getc();
abem 0:03dfcdd06518 146 rx_buf_SIO2[rx_cnt_SIO2] = rx_ch_SIO2;
abem 0:03dfcdd06518 147 if( rx_ch_SIO2 == '\r'){
abem 0:03dfcdd06518 148 rx_endflg_SIO2 = 1;
abem 0:03dfcdd06518 149 myled3 = 1;
abem 0:03dfcdd06518 150 }else{
abem 0:03dfcdd06518 151 rx_cnt_SIO2++;
abem 0:03dfcdd06518 152 myled2 = 1;
abem 0:03dfcdd06518 153 }
abem 0:03dfcdd06518 154 }
abem 0:03dfcdd06518 155
abem 0:03dfcdd06518 156 /* flip_設定時間後ワンショット動作 */
abem 0:03dfcdd06518 157 void flip()
abem 0:03dfcdd06518 158 {
abem 0:03dfcdd06518 159 led4flic.detach();
abem 0:03dfcdd06518 160 // タイムアウトにてLED点灯
abem 0:03dfcdd06518 161 myled4 = 1;
abem 0:03dfcdd06518 162 flgCHKrun = 0;
abem 0:03dfcdd06518 163 pc.puts("TimeOut CHK\r");
abem 0:03dfcdd06518 164 sio1.puts("NG\r");
abem 0:03dfcdd06518 165 }
abem 0:03dfcdd06518 166
abem 0:03dfcdd06518 167 /* flic_設定時間繰り返し動作 */
abem 0:03dfcdd06518 168 void flic()
abem 0:03dfcdd06518 169 {
abem 0:03dfcdd06518 170 myled4 = !myled4;
abem 0:03dfcdd06518 171 }
abem 0:03dfcdd06518 172
abem 0:03dfcdd06518 173
abem 0:03dfcdd06518 174 /* main */
abem 0:03dfcdd06518 175 int main() {
abem 0:03dfcdd06518 176 /* シリアル初期化 */
abem 0:03dfcdd06518 177 initSIO();
abem 0:03dfcdd06518 178
abem 0:03dfcdd06518 179 /* mbed上LED初期化 */
abem 0:03dfcdd06518 180 myled2 = 0;
abem 0:03dfcdd06518 181 myled3 = 0;
abem 0:03dfcdd06518 182 /* 出力ポート初期化 */
abem 0:03dfcdd06518 183 outRSTDRV = 1; // '1'=Hi(mbed),出力=Open
abem 0:03dfcdd06518 184 outPWMON = 1; // '1'=Hi(mbed),出力=Open
abem 0:03dfcdd06518 185
abem 0:03dfcdd06518 186 /* DA出力初期化 */
abem 0:03dfcdd06518 187 da1.write_u16(0);
abem 0:03dfcdd06518 188 flgRxAD = 0; // ターゲットAD受信フラグ
katak 1:40527b0f0dfa 189 flgSqADchk = 0; // シーケンシャルチェックフラグ
katak 1:40527b0f0dfa 190
katak 1:40527b0f0dfa 191 SqTrgDA[0] = 0; // 未使用
katak 1:40527b0f0dfa 192 SqTrgDA[1] = outDA0v0; // 0.0V
katak 1:40527b0f0dfa 193 SqTrgDA[2] = outDA2v5; // 2.5V
katak 1:40527b0f0dfa 194 SqTrgDA[3] = outDA5v0; // 5.0V
katak 1:40527b0f0dfa 195 SqTrgDA[4] = outDA0v0; // 0.0V
katak 1:40527b0f0dfa 196
katak 1:40527b0f0dfa 197 SqTrgchkNo[0] = 0; // 未使用
katak 1:40527b0f0dfa 198 SqTrgchkNo[1] = 1; // 0.0V
katak 1:40527b0f0dfa 199 SqTrgchkNo[2] = 2; // 2.5V
katak 1:40527b0f0dfa 200 SqTrgchkNo[3] = 3; // 5.0V
katak 1:40527b0f0dfa 201 SqTrgchkNo[4] = 1; // 0.0V
abem 0:03dfcdd06518 202
abem 0:03dfcdd06518 203 /* 起動出力 */
abem 0:03dfcdd06518 204 pc.printf("SIOpc test start \r");
abem 0:03dfcdd06518 205 sio1.printf("PW ON\r");
abem 0:03dfcdd06518 206 myled1 = 1;
abem 0:03dfcdd06518 207
abem 0:03dfcdd06518 208 while(1){
abem 0:03dfcdd06518 209 /* SIO処理 */
abem 0:03dfcdd06518 210 if( rx_endflg_PC == 1 ){
abem 0:03dfcdd06518 211 cmdSIOpc(); // コマンド処理 pc-SIO
abem 0:03dfcdd06518 212 }else if( rx_endflg_SIO1 == 1 ){
abem 0:03dfcdd06518 213 cmdSIOsio1(); // コマンド処理 SIO1
abem 0:03dfcdd06518 214 }else if( rx_endflg_SIO2 == 1 ){
abem 0:03dfcdd06518 215 cmdSIOsio2(); // コマンド処理 SIO2
abem 0:03dfcdd06518 216 }
abem 0:03dfcdd06518 217
abem 0:03dfcdd06518 218 /* AD値判定処理 */
abem 0:03dfcdd06518 219 if( flgRxAD == 1){
katak 1:40527b0f0dfa 220 if( flgSqADchk == 0 ){
katak 1:40527b0f0dfa 221 /* AD値 個別判定 */
katak 1:40527b0f0dfa 222 if( trgADcmp(TrgAD, cmpADch) == 0){
katak 1:40527b0f0dfa 223 // OK
katak 1:40527b0f0dfa 224 sprintf(cbufstr,"OK,%05d\r",(int)TrgAD);
katak 1:40527b0f0dfa 225 }else{
katak 1:40527b0f0dfa 226 // NG
katak 1:40527b0f0dfa 227 sprintf(cbufstr,"NG,%05d\r",(int)TrgAD);
katak 1:40527b0f0dfa 228 }
katak 1:40527b0f0dfa 229 sio1.puts(cbufstr);
katak 1:40527b0f0dfa 230 }else{
katak 1:40527b0f0dfa 231 /* AD値 シーケンシャル判定 */
katak 1:40527b0f0dfa 232 SqTrgAD[SqchkNo] = TrgAD; // 受信AD値保存
katak 1:40527b0f0dfa 233 if( trgADcmp(SqTrgAD[SqchkNo], SqTrgchkNo[SqchkNo]) == 0){
katak 1:40527b0f0dfa 234 // OK
katak 1:40527b0f0dfa 235 switch(SqchkNo){
katak 1:40527b0f0dfa 236 case 1:
katak 1:40527b0f0dfa 237 // 指令値2.5V設定&ターゲットモニタ値リクエスト
katak 1:40527b0f0dfa 238 trgADreq(2);
katak 1:40527b0f0dfa 239 SqchkNo++;
katak 1:40527b0f0dfa 240 break;
katak 1:40527b0f0dfa 241 case 2:
katak 1:40527b0f0dfa 242 // 指令値5.0V設定&ターゲットモニタ値リクエスト
katak 1:40527b0f0dfa 243 trgADreq(3);
katak 1:40527b0f0dfa 244 SqchkNo++;
katak 1:40527b0f0dfa 245 break;
katak 1:40527b0f0dfa 246 case 3:
katak 1:40527b0f0dfa 247 // 指令値0.0V設定&ターゲットモニタ値リクエスト
katak 1:40527b0f0dfa 248 trgADreq(1);
katak 1:40527b0f0dfa 249 SqchkNo++;
katak 1:40527b0f0dfa 250 break;
katak 1:40527b0f0dfa 251 case 4:
katak 1:40527b0f0dfa 252 // シーケンシャル処理終了
katak 1:40527b0f0dfa 253 sprintf(cbufstr,"OK\r");
katak 1:40527b0f0dfa 254 sio1.puts(cbufstr);
katak 1:40527b0f0dfa 255 for(i=1;i<=4;i++){
katak 1:40527b0f0dfa 256 sprintf(cbufstr,"%05d,%05d\r",(int)SqTrgDA[i],(int)SqTrgAD[i]);
katak 1:40527b0f0dfa 257 sio1.puts(cbufstr);
katak 1:40527b0f0dfa 258 }
katak 1:40527b0f0dfa 259 flgSqADchk = 0; //シーケンシャルチェック終了
katak 1:40527b0f0dfa 260 SqchkNo = 0; //シーケンシャルチェックstepリセット
katak 1:40527b0f0dfa 261 default:
katak 1:40527b0f0dfa 262 // シーケンシャル処理終了
katak 1:40527b0f0dfa 263 flgSqADchk = 0; //シーケンシャルチェック終了
katak 1:40527b0f0dfa 264 SqchkNo = 0; //シーケンシャルチェックstepリセット
katak 1:40527b0f0dfa 265 break;
katak 1:40527b0f0dfa 266 }
katak 1:40527b0f0dfa 267 }else{
katak 1:40527b0f0dfa 268 // NG
katak 1:40527b0f0dfa 269 sprintf(cbufstr,"NG,%05d\r",(int)SqchkNo);
katak 1:40527b0f0dfa 270 sio1.puts(cbufstr);
katak 1:40527b0f0dfa 271 for(i=1;i<=SqchkNo;i++){
katak 1:40527b0f0dfa 272 sprintf(cbufstr,"%05d,%05d\r",(int)SqTrgDA[i],(int)SqTrgAD[i]);
katak 1:40527b0f0dfa 273 sio1.puts(cbufstr);
katak 1:40527b0f0dfa 274 }
katak 1:40527b0f0dfa 275 flgSqADchk = 0; //シーケンシャルチェック終了
katak 1:40527b0f0dfa 276 SqchkNo = 0; //シーケンシャルチェックstepリセット
katak 1:40527b0f0dfa 277 }
katak 1:40527b0f0dfa 278 }
abem 0:03dfcdd06518 279 }
abem 0:03dfcdd06518 280 }
abem 0:03dfcdd06518 281 }
abem 0:03dfcdd06518 282
abem 0:03dfcdd06518 283
abem 0:03dfcdd06518 284 /* 関数 */
abem 0:03dfcdd06518 285 /* シリアルイニシャライズ */
abem 0:03dfcdd06518 286 void initSIO(void)
abem 0:03dfcdd06518 287 {
abem 0:03dfcdd06518 288 /* シリアル-割込ハンドラ登録 */
abem 0:03dfcdd06518 289 /* pc-SIO */
abem 0:03dfcdd06518 290 pc.attach(isr_Rx_PC,Serial::RxIrq); // 受信割込ハンドラ
abem 0:03dfcdd06518 291 /* SIO1 */
abem 0:03dfcdd06518 292 sio1.attach(isr_Rx_SIO1,Serial::RxIrq); // 受信割込ハンドラ
abem 0:03dfcdd06518 293 /* SIO2 */
abem 0:03dfcdd06518 294 sio2.attach(isr_Rx_SIO2,Serial::RxIrq); // 受信割込ハンドラ
abem 0:03dfcdd06518 295
abem 0:03dfcdd06518 296 /* シリアル初期化 */
abem 0:03dfcdd06518 297 /* pc-SIO */
abem 0:03dfcdd06518 298 pc.baud(38400);
abem 0:03dfcdd06518 299 pc.format(8, SerialBase::None ,1);
abem 0:03dfcdd06518 300 /* pc-SIO */
abem 0:03dfcdd06518 301 sio1.baud(38400);
abem 0:03dfcdd06518 302 sio1.format(8, SerialBase::None ,1);
abem 0:03dfcdd06518 303 /* pc-SIO */
abem 0:03dfcdd06518 304 sio2.baud(38400);
abem 0:03dfcdd06518 305 sio2.format(8, SerialBase::None ,1);
abem 0:03dfcdd06518 306
abem 0:03dfcdd06518 307 /* pc-SIO チェック用初期化 */
abem 0:03dfcdd06518 308 rx_cnt_PC = 0;
abem 0:03dfcdd06518 309 rx_endflg_PC = 0;
abem 0:03dfcdd06518 310 /* SIO1 チェック用初期化 */
abem 0:03dfcdd06518 311 rx_cnt_SIO1 = 0;
abem 0:03dfcdd06518 312 rx_endflg_SIO1 = 0;
abem 0:03dfcdd06518 313 /* SIO2 チェック用初期化 */
abem 0:03dfcdd06518 314 rx_cnt_SIO2 = 0;
abem 0:03dfcdd06518 315 rx_endflg_SIO2 = 0;
abem 0:03dfcdd06518 316
abem 0:03dfcdd06518 317 /* 受信領域初期化 */
abem 0:03dfcdd06518 318 memset(cbufstr,'\0',sizeof(cbufstr));
abem 0:03dfcdd06518 319 memset(rx_buf_PC,'\0',sizeof(rx_buf_PC));
abem 0:03dfcdd06518 320 memset(rx_buf_SIO1,'\0',sizeof(rx_buf_SIO1));
abem 0:03dfcdd06518 321 memset(rx_buf_SIO2,'\0',sizeof(rx_buf_SIO2));
abem 0:03dfcdd06518 322 }
abem 0:03dfcdd06518 323
abem 0:03dfcdd06518 324
abem 0:03dfcdd06518 325 /* コマンド処理 */
abem 0:03dfcdd06518 326 /* 20141008 現状ではターミネート受信後返信処理 */
abem 0:03dfcdd06518 327 /* SIO-pc */
abem 0:03dfcdd06518 328 void cmdSIOpc(void)
abem 0:03dfcdd06518 329 {
abem 0:03dfcdd06518 330 memset(cbufstr,'\0',sizeof(cbufstr));
abem 0:03dfcdd06518 331
abem 0:03dfcdd06518 332 /* 文字長チェック */
abem 0:03dfcdd06518 333 len = strlen(rx_buf_PC);
abem 0:03dfcdd06518 334 strncpy(cbufstr,rx_buf_PC,3);
abem 0:03dfcdd06518 335
abem 0:03dfcdd06518 336 /* コマンド判定 */
abem 0:03dfcdd06518 337 if( strlen(rx_buf_PC) <= 4){
abem 0:03dfcdd06518 338 if(strcmp(cbufstr,cmdCHK) == 0){
abem 0:03dfcdd06518 339 // コマンド可
abem 0:03dfcdd06518 340 pc.puts("Res CHK\r");
abem 0:03dfcdd06518 341 flipper.detach();
abem 0:03dfcdd06518 342 led4flic.detach();
abem 0:03dfcdd06518 343 if( flgCHKrun == 1){
abem 0:03dfcdd06518 344 flgCHKrun = 0;
abem 0:03dfcdd06518 345 myled4 = 0;
abem 0:03dfcdd06518 346 sio1.puts("OK\r");
abem 0:03dfcdd06518 347 }
abem 0:03dfcdd06518 348 }else{
abem 0:03dfcdd06518 349 // コマンド不可
abem 0:03dfcdd06518 350 pc.puts("No CHK\r");
abem 0:03dfcdd06518 351 }
abem 0:03dfcdd06518 352 }else if( strlen(rx_buf_PC) <= 10){
abem 0:03dfcdd06518 353 if(strcmp(cbufstr,cmdDAC) == 0){
abem 0:03dfcdd06518 354 // コマンド可 DAC
abem 0:03dfcdd06518 355 strncpy(cbufstr,&rx_buf_PC[4],5);
abem 0:03dfcdd06518 356 intbuf = atoi( cbufstr );
abem 0:03dfcdd06518 357 TrgAD = (short)intbuf;
abem 0:03dfcdd06518 358 flgRxAD = 1;
abem 0:03dfcdd06518 359 }else{
abem 0:03dfcdd06518 360 // コマンド不可
abem 0:03dfcdd06518 361 pc.puts("No DAC\r");
abem 0:03dfcdd06518 362 }
abem 0:03dfcdd06518 363
abem 0:03dfcdd06518 364 }else{
abem 0:03dfcdd06518 365 pc.puts("Lengs error\r");
abem 0:03dfcdd06518 366 pc.puts(cbufstr);
abem 0:03dfcdd06518 367 }
abem 0:03dfcdd06518 368
abem 0:03dfcdd06518 369 memset(rx_buf_PC,'\0',sizeof(rx_buf_PC));
abem 0:03dfcdd06518 370 rx_cnt_PC = 0;
abem 0:03dfcdd06518 371 myled2 = 0;
abem 0:03dfcdd06518 372 myled3 = 0;
abem 0:03dfcdd06518 373 rx_endflg_PC = 0;
abem 0:03dfcdd06518 374 }
abem 0:03dfcdd06518 375
abem 0:03dfcdd06518 376 /* SIO1 */
abem 0:03dfcdd06518 377 void cmdSIOsio1(void)
abem 0:03dfcdd06518 378 {
abem 0:03dfcdd06518 379 memset(cbufstr,'\0',sizeof(cbufstr));
abem 0:03dfcdd06518 380 /* 文字長チェック */
abem 0:03dfcdd06518 381 len = strlen(rx_buf_SIO1);
abem 0:03dfcdd06518 382 /* コマンド判定 */
abem 0:03dfcdd06518 383 strncpy(cbufstr,rx_buf_SIO1,3);
abem 0:03dfcdd06518 384 if( len == 4){
abem 0:03dfcdd06518 385 if(strcmp(cbufstr,cmdCHK) == 0){
abem 0:03dfcdd06518 386 // コマンド可:CHK
abem 0:03dfcdd06518 387 if( flgCHKrun == 1){
abem 0:03dfcdd06518 388 flipper.detach();
abem 0:03dfcdd06518 389 led4flic.detach();
abem 0:03dfcdd06518 390 }
abem 0:03dfcdd06518 391 flipper.attach(&flip,5.0);
abem 0:03dfcdd06518 392 led4flic.attach(&flic,0.3);
abem 0:03dfcdd06518 393 flgCHKrun = 1;
abem 0:03dfcdd06518 394 sio2.puts("CHK\r");
katak 1:40527b0f0dfa 395 }else if(strcmp(cbufstr,cmdIOC) == 0){
katak 1:40527b0f0dfa 396 // コマンド可:IOC
katak 1:40527b0f0dfa 397 if( trgIO1check(0) == 0){ // IO1 = OFF check
katak 1:40527b0f0dfa 398 if( trgIO1check(1) == 0){ // IO1 = ON check
katak 1:40527b0f0dfa 399 if( trgIO1check(0) == 0){ // IO1 = OFF check
katak 1:40527b0f0dfa 400 if( trgIO2check(0) == 0){ // IO2 = OFF check
katak 1:40527b0f0dfa 401 if( trgIO2check(1) == 0){ // IO2 = ON check
katak 1:40527b0f0dfa 402 if( trgIO2check(0) == 0){ // IO2 = OFF check
katak 1:40527b0f0dfa 403 sio1.puts("OK\r");
katak 1:40527b0f0dfa 404 }else sio1.puts("NG.6\r");
katak 1:40527b0f0dfa 405 }else sio1.puts("NG.5\r");
katak 1:40527b0f0dfa 406 }else sio1.puts("NG.4\r");
katak 1:40527b0f0dfa 407 }else sio1.puts("NG.3\r");
katak 1:40527b0f0dfa 408 }else sio1.puts("NG.2\r");
katak 1:40527b0f0dfa 409 }else sio1.puts("NG.1\r");
abem 0:03dfcdd06518 410 }else{
abem 0:03dfcdd06518 411 // コマンド不可
abem 0:03dfcdd06518 412 sio1.puts("CMD Error 3\r");
abem 0:03dfcdd06518 413 }
abem 0:03dfcdd06518 414 }else if( len == 6){
abem 0:03dfcdd06518 415 if(strcmp(cbufstr,cmdIO1) == 0){
abem 0:03dfcdd06518 416 // コマンド可:IO1
katak 1:40527b0f0dfa 417 // sio1.puts("res IO1\r");
abem 0:03dfcdd06518 418 if( rx_buf_SIO1[4] == '0' ){
katak 1:40527b0f0dfa 419 if( trgIO1check(0) == 0){
abem 0:03dfcdd06518 420 sio1.puts("OK\r");
katak 1:40527b0f0dfa 421 }else sio1.puts("NG\r");
abem 0:03dfcdd06518 422 }else if(rx_buf_SIO1[4] == '1'){
katak 1:40527b0f0dfa 423 if( trgIO1check(1) == 0){
abem 0:03dfcdd06518 424 sio1.puts("OK\r");
katak 1:40527b0f0dfa 425 }else sio1.puts("NG\r");
abem 0:03dfcdd06518 426 }else{
abem 0:03dfcdd06518 427 sio1.puts("Data Error cmdIO1\r");
abem 0:03dfcdd06518 428 }
abem 0:03dfcdd06518 429 }else if(strcmp(cbufstr,cmdIO2) == 0){
abem 0:03dfcdd06518 430 // コマンド可:IO2
katak 1:40527b0f0dfa 431 // sio1.puts("res IO2\r");
abem 0:03dfcdd06518 432 if( rx_buf_SIO1[4] == '0' ){
katak 1:40527b0f0dfa 433 if( trgIO2check(0) == 0){
abem 0:03dfcdd06518 434 sio1.puts("OK\r");
katak 1:40527b0f0dfa 435 }else sio1.puts("NG\r");
abem 0:03dfcdd06518 436 }else if(rx_buf_SIO1[4] == '1'){
katak 1:40527b0f0dfa 437 if( trgIO2check(1) == 0){
abem 0:03dfcdd06518 438 sio1.puts("OK\r");
katak 1:40527b0f0dfa 439 }else sio1.puts("NG\r");
abem 0:03dfcdd06518 440 }else{
abem 0:03dfcdd06518 441 sio1.puts("Data Error cmdIO2\r");
abem 0:03dfcdd06518 442 }
abem 0:03dfcdd06518 443 }else if(strcmp(cbufstr,cmdDAC) == 0){
abem 0:03dfcdd06518 444 // コマンド可:DAC
katak 1:40527b0f0dfa 445 // sio1.puts("res DAC\r");
abem 0:03dfcdd06518 446 if(rx_buf_SIO1[4] == '1'){
katak 1:40527b0f0dfa 447 // 指令値0.0V設定&ターゲットモニタ値リクエスト
katak 1:40527b0f0dfa 448 trgADreq(1);
abem 0:03dfcdd06518 449 }else if(rx_buf_SIO1[4] == '2'){
katak 1:40527b0f0dfa 450 // 指令値2.5V設定&ターゲットモニタ値リクエスト
katak 1:40527b0f0dfa 451 trgADreq(2);
abem 0:03dfcdd06518 452 }else if(rx_buf_SIO1[4] == '3'){
katak 1:40527b0f0dfa 453 // 指令値5.0V設定&ターゲットモニタ値リクエスト
katak 1:40527b0f0dfa 454 trgADreq(3);
katak 1:40527b0f0dfa 455 }else if(rx_buf_SIO1[4] == '4'){
katak 1:40527b0f0dfa 456 // 格納先リセット
katak 1:40527b0f0dfa 457 for(i=0;i<=4;i++){
katak 1:40527b0f0dfa 458 SqTrgAD[i] = 0;
katak 1:40527b0f0dfa 459 }
katak 1:40527b0f0dfa 460 // シーケンシャルチェックフラグ = ON
katak 1:40527b0f0dfa 461 flgSqADchk = 1;
katak 1:40527b0f0dfa 462 // シーケンシャルチェックstep = 1
katak 1:40527b0f0dfa 463 SqchkNo = 1;
katak 1:40527b0f0dfa 464 // 指令値0.0V設定&ターゲットモニタ値リクエスト
katak 1:40527b0f0dfa 465 trgADreq(1);
abem 0:03dfcdd06518 466 }else{
abem 0:03dfcdd06518 467 sio1.puts("Data Error cmdDAC\r");
abem 0:03dfcdd06518 468 }
abem 0:03dfcdd06518 469 }else{
abem 0:03dfcdd06518 470 // コマンド不可
abem 0:03dfcdd06518 471 sio1.puts("CMD Error 5\r");
abem 0:03dfcdd06518 472 sio1.printf("SIO1Rx= %s ",rx_buf_SIO1);
abem 0:03dfcdd06518 473 }
abem 0:03dfcdd06518 474 }else if( len == 10){
abem 0:03dfcdd06518 475 if(strcmp(cbufstr,cmdDAM) == 0){
abem 0:03dfcdd06518 476 // コマンド可:DAM
katak 1:40527b0f0dfa 477 // sio1.puts("res DAM\r");
katak 1:40527b0f0dfa 478 sio1.puts("DAM\r");
abem 0:03dfcdd06518 479 strncpy(cbufstr,&rx_buf_SIO1[4],5);
abem 0:03dfcdd06518 480 intdaout = atoi( cbufstr );
abem 0:03dfcdd06518 481 // DA出力設定
abem 0:03dfcdd06518 482 da1.write_u16((unsigned short)intdaout);
abem 0:03dfcdd06518 483
abem 0:03dfcdd06518 484 }else{
abem 0:03dfcdd06518 485 // コマンド不可
abem 0:03dfcdd06518 486 sio1.puts("CMD Error 9\r");
abem 0:03dfcdd06518 487 }
abem 0:03dfcdd06518 488 }else{
abem 0:03dfcdd06518 489 sio1.puts("CMD Lengs Error\r");
abem 0:03dfcdd06518 490 }
abem 0:03dfcdd06518 491
abem 0:03dfcdd06518 492 memset(rx_buf_SIO1,'\0',sizeof(rx_buf_SIO1));
abem 0:03dfcdd06518 493 rx_cnt_SIO1 = 0;
abem 0:03dfcdd06518 494 myled2 = 0;
abem 0:03dfcdd06518 495 myled3 = 0;
abem 0:03dfcdd06518 496 rx_endflg_SIO1 = 0;
abem 0:03dfcdd06518 497 }
abem 0:03dfcdd06518 498
abem 0:03dfcdd06518 499 /* SIO2 */
abem 0:03dfcdd06518 500 void cmdSIOsio2(void)
abem 0:03dfcdd06518 501 {
abem 0:03dfcdd06518 502 memset(cbufstr,'\0',sizeof(cbufstr));
abem 0:03dfcdd06518 503
abem 0:03dfcdd06518 504 /* 文字長チェック */
abem 0:03dfcdd06518 505 len = strlen(rx_buf_SIO2);
abem 0:03dfcdd06518 506 strncpy(cbufstr,rx_buf_SIO2,3);
abem 0:03dfcdd06518 507
abem 0:03dfcdd06518 508 /* コマンド判定 */
abem 0:03dfcdd06518 509 if( strlen(rx_buf_SIO2) <= 4){
abem 0:03dfcdd06518 510 if(strcmp(cbufstr,cmdCHK) == 0){
abem 0:03dfcdd06518 511 // コマンド可
abem 0:03dfcdd06518 512 pc.puts("Res CHK\r");
abem 0:03dfcdd06518 513 flipper.detach();
abem 0:03dfcdd06518 514 led4flic.detach();
abem 0:03dfcdd06518 515 if( flgCHKrun == 1){
abem 0:03dfcdd06518 516 flgCHKrun = 0;
abem 0:03dfcdd06518 517 myled4 = 0;
abem 0:03dfcdd06518 518 sio1.puts("OK\r");
abem 0:03dfcdd06518 519 }
abem 0:03dfcdd06518 520 }else{
abem 0:03dfcdd06518 521 // コマンド不可
abem 0:03dfcdd06518 522 pc.puts("No CHK\r");
abem 0:03dfcdd06518 523 }
abem 0:03dfcdd06518 524 }else if( strlen(rx_buf_SIO2) <= 10){
abem 0:03dfcdd06518 525 if(strcmp(cbufstr,cmdDAC) == 0){
abem 0:03dfcdd06518 526 // コマンド可 DAC
abem 0:03dfcdd06518 527 strncpy(cbufstr,&rx_buf_SIO2[4],5);
abem 0:03dfcdd06518 528 intbuf = atoi( cbufstr );
abem 0:03dfcdd06518 529 TrgAD = (short)intbuf;
abem 0:03dfcdd06518 530 flgRxAD = 1;
abem 0:03dfcdd06518 531 }else{
abem 0:03dfcdd06518 532 // コマンド不可
abem 0:03dfcdd06518 533 pc.puts("No DAC\r");
abem 0:03dfcdd06518 534 }
abem 0:03dfcdd06518 535
abem 0:03dfcdd06518 536 }else{
abem 0:03dfcdd06518 537 pc.puts("Lengs error\r");
abem 0:03dfcdd06518 538 pc.puts(cbufstr);
abem 0:03dfcdd06518 539 }
abem 0:03dfcdd06518 540
abem 0:03dfcdd06518 541 memset(rx_buf_SIO2,'\0',sizeof(rx_buf_SIO2));
abem 0:03dfcdd06518 542 rx_cnt_SIO2 = 0;
abem 0:03dfcdd06518 543 myled2 = 0;
abem 0:03dfcdd06518 544 myled3 = 0;
abem 0:03dfcdd06518 545 rx_endflg_SIO2 = 0;
abem 0:03dfcdd06518 546 }
abem 0:03dfcdd06518 547
abem 0:03dfcdd06518 548
katak 1:40527b0f0dfa 549 /* ターゲットIO1チェック処理 */
katak 1:40527b0f0dfa 550 /* 引数: */
katak 1:40527b0f0dfa 551 /* unsigned short mode :処理条件(0=OFF,1=ON) */
katak 1:40527b0f0dfa 552 /* 戻値: */
katak 1:40527b0f0dfa 553 /* unsigned short 0:OK,1:NG,2:mode error */
katak 1:40527b0f0dfa 554 /* */
katak 1:40527b0f0dfa 555 unsigned short trgIO1check(unsigned short mode)
katak 1:40527b0f0dfa 556 {
katak 1:40527b0f0dfa 557 if( mode == 0 ){
katak 1:40527b0f0dfa 558 outRSTDRV = 1;
katak 1:40527b0f0dfa 559 wait(0.5);
katak 1:40527b0f0dfa 560 if( inDrvAlm == 1 ){
katak 1:40527b0f0dfa 561 return 0;
katak 1:40527b0f0dfa 562 }else{
katak 1:40527b0f0dfa 563 return 1;
katak 1:40527b0f0dfa 564 }
katak 1:40527b0f0dfa 565 }else if( mode == 1){
katak 1:40527b0f0dfa 566 outRSTDRV = 0;
katak 1:40527b0f0dfa 567 wait(0.5);
katak 1:40527b0f0dfa 568 if( inDrvAlm == 0 ){
katak 1:40527b0f0dfa 569 return 0;
katak 1:40527b0f0dfa 570 }else{
katak 1:40527b0f0dfa 571 return 1;
katak 1:40527b0f0dfa 572 }
katak 1:40527b0f0dfa 573 }else{
katak 1:40527b0f0dfa 574 return 2;
katak 1:40527b0f0dfa 575 }
katak 1:40527b0f0dfa 576 }
katak 1:40527b0f0dfa 577
katak 1:40527b0f0dfa 578
katak 1:40527b0f0dfa 579 /* ターゲットIO2チェック処理 */
katak 1:40527b0f0dfa 580 /* 引数: */
katak 1:40527b0f0dfa 581 /* unsigned short mode :処理条件(0=OFF,1=ON) */
katak 1:40527b0f0dfa 582 /* 戻値: */
katak 1:40527b0f0dfa 583 /* unsigned short 0:OK,1:NG,2:mode error */
katak 1:40527b0f0dfa 584 /* */
katak 1:40527b0f0dfa 585 unsigned short trgIO2check(unsigned short mode)
katak 1:40527b0f0dfa 586 {
katak 1:40527b0f0dfa 587 if( mode == 0 ){
katak 1:40527b0f0dfa 588 outPWMON = 1;
katak 1:40527b0f0dfa 589 wait(0.5);
katak 1:40527b0f0dfa 590 if( inReady == 1 ){
katak 1:40527b0f0dfa 591 return 0;
katak 1:40527b0f0dfa 592 }else{
katak 1:40527b0f0dfa 593 return 1;
katak 1:40527b0f0dfa 594 }
katak 1:40527b0f0dfa 595 }else if( mode == 1){
katak 1:40527b0f0dfa 596 outPWMON = 0;
katak 1:40527b0f0dfa 597 wait(0.5);
katak 1:40527b0f0dfa 598 if( inReady == 0 ){
katak 1:40527b0f0dfa 599 return 0;
katak 1:40527b0f0dfa 600 }else{
katak 1:40527b0f0dfa 601 return 1;
katak 1:40527b0f0dfa 602 }
katak 1:40527b0f0dfa 603 }else{
katak 1:40527b0f0dfa 604 return 2;
katak 1:40527b0f0dfa 605 }
katak 1:40527b0f0dfa 606 }
katak 1:40527b0f0dfa 607
katak 1:40527b0f0dfa 608
abem 0:03dfcdd06518 609 /* ターゲットAD値判定処理 */
katak 1:40527b0f0dfa 610 /* 変数名:int trgADcmp(short ADdata, unsigned short ch) */
abem 0:03dfcdd06518 611 /* 引数: */
abem 0:03dfcdd06518 612 /* unsigned short ADdata :判定値(受信ADデータ) */
abem 0:03dfcdd06518 613 /* unsigned short ch :判定レンジ指定[1:0V0,2:2v5,3,5v0] */
katak 1:40527b0f0dfa 614 /* 戻値:int 0:OK, 1:NG */
abem 0:03dfcdd06518 615 /* */
abem 0:03dfcdd06518 616 int trgADcmp(short ADdata, unsigned short ch)
abem 0:03dfcdd06518 617 {
abem 0:03dfcdd06518 618 // フラグリセット
abem 0:03dfcdd06518 619 flgRxAD = 0;
abem 0:03dfcdd06518 620
abem 0:03dfcdd06518 621 memset(cbufstr,'\0',sizeof(cbufstr));
abem 0:03dfcdd06518 622
abem 0:03dfcdd06518 623 // 比較範囲チェック
abem 0:03dfcdd06518 624 if( ch == 1 ){
abem 0:03dfcdd06518 625 // 0V比較
abem 0:03dfcdd06518 626 if( ADdata >= AD0v0l && ADdata <= AD0v0h){
abem 0:03dfcdd06518 627 // OK
katak 1:40527b0f0dfa 628 return 0;
abem 0:03dfcdd06518 629 }else{
abem 0:03dfcdd06518 630 // NG
katak 1:40527b0f0dfa 631 return 1;
abem 0:03dfcdd06518 632 }
abem 0:03dfcdd06518 633 }else if( ch == 2 ){
abem 0:03dfcdd06518 634 // 2V5比較
abem 0:03dfcdd06518 635 if( ADdata >= AD2v5l && ADdata <= AD2v5h){
abem 0:03dfcdd06518 636 // OK
katak 1:40527b0f0dfa 637 return 0;
abem 0:03dfcdd06518 638 }else{
abem 0:03dfcdd06518 639 // NG
katak 1:40527b0f0dfa 640 return 1;
abem 0:03dfcdd06518 641 }
abem 0:03dfcdd06518 642 }else if( ch == 3 ){
abem 0:03dfcdd06518 643 // 5V0比較
abem 0:03dfcdd06518 644 if( ADdata >= AD5v0l && ADdata <= AD5v0h){
abem 0:03dfcdd06518 645 // OK
katak 1:40527b0f0dfa 646 return 0;
abem 0:03dfcdd06518 647 }else{
abem 0:03dfcdd06518 648 // NG
katak 1:40527b0f0dfa 649 return 1;
abem 0:03dfcdd06518 650 }
abem 0:03dfcdd06518 651 }else{
abem 0:03dfcdd06518 652 // ch error
abem 0:03dfcdd06518 653 sio1.puts("error ADch\r");
katak 1:40527b0f0dfa 654 return 1;
abem 0:03dfcdd06518 655 }
abem 0:03dfcdd06518 656 }
katak 1:40527b0f0dfa 657
katak 1:40527b0f0dfa 658
katak 1:40527b0f0dfa 659 /* ターゲットAD値出力設定&モニタ値リクエスト処理 */
katak 1:40527b0f0dfa 660 /* 変数名:short trgADreq(unsigned short ch) */
katak 1:40527b0f0dfa 661 /* 引数: */
katak 1:40527b0f0dfa 662 /* unsigned short ch :判定レンジ指定[1:0V0,2:2v5,3,5v0] */
katak 1:40527b0f0dfa 663 /* 戻値:short 0:OK, 1:NG */
katak 1:40527b0f0dfa 664 /* */
katak 1:40527b0f0dfa 665 short trgADreq(unsigned short ch)
katak 1:40527b0f0dfa 666 {
katak 1:40527b0f0dfa 667 // DA 0.0V設定
katak 1:40527b0f0dfa 668 if( ch == 1 ){
katak 1:40527b0f0dfa 669 // sprintf(cbufstr,"DAC,%05d\r",outDA0v0);
katak 1:40527b0f0dfa 670 // sio1.puts(cbufstr);
katak 1:40527b0f0dfa 671 da1.write_u16(outDA0v0);
katak 1:40527b0f0dfa 672 // DA 2.5V設定
katak 1:40527b0f0dfa 673 }else if( ch == 2 ){
katak 1:40527b0f0dfa 674 // sprintf(cbufstr,"DAC,%05d\r",outDA2v5);
katak 1:40527b0f0dfa 675 // sio1.puts(cbufstr);
katak 1:40527b0f0dfa 676 da1.write_u16(outDA2v5);
katak 1:40527b0f0dfa 677 // DA 5.0V設定
katak 1:40527b0f0dfa 678 }else if( ch == 3 ){
katak 1:40527b0f0dfa 679 // sprintf(cbufstr,"DAC,%05d\r",outDA5v0);
katak 1:40527b0f0dfa 680 // sio1.puts(cbufstr);
katak 1:40527b0f0dfa 681 da1.write_u16(outDA5v0);
katak 1:40527b0f0dfa 682 }
katak 1:40527b0f0dfa 683
katak 1:40527b0f0dfa 684 // wait(0.2sec)後、trgAD値リクエスト
katak 1:40527b0f0dfa 685 wait(0.2);
katak 1:40527b0f0dfa 686 sio2.puts("DAC\r");
katak 1:40527b0f0dfa 687
katak 1:40527b0f0dfa 688 // DA 0.0V設定
katak 1:40527b0f0dfa 689 if( ch == 1 ){
katak 1:40527b0f0dfa 690 cmpADch = 1; // 比較用chセット
katak 1:40527b0f0dfa 691 return 0;
katak 1:40527b0f0dfa 692 // DA 2.5V設定
katak 1:40527b0f0dfa 693 }else if( ch == 2 ){
katak 1:40527b0f0dfa 694 cmpADch = 2; // 比較用chセット
katak 1:40527b0f0dfa 695 return 0;
katak 1:40527b0f0dfa 696 // DA 5.0V設定
katak 1:40527b0f0dfa 697 }else if( ch == 3 ){
katak 1:40527b0f0dfa 698 cmpADch = 3; // 比較用chセット
katak 1:40527b0f0dfa 699 return 0;
katak 1:40527b0f0dfa 700 }else{
katak 1:40527b0f0dfa 701 return 1;
katak 1:40527b0f0dfa 702 }
katak 1:40527b0f0dfa 703 }