// private void DoDiTask(int id) { if (DiCntMdStp >= 99) { ResStr01 = "Failed"; ProcessView(new ListViewData() { Ch = Ref_IO_Mod.Ch, Step = DiCntMdStp.ToString(), Result = ResStr01 }); FailCnt++; DiCntMdStp = 0; mainTaskStp++; } else if (DiCntMdStp > 8 && DiCntMdStp < 99) { ResStr01 = "Passed"; mainTaskStp++; Thread.Sleep(50); ProcessView(new ListViewData() { Ch = Ref_IO_Mod.Ch, Step = ProcessStep, Result = ResStr01 }); DiCntMdStp = 0; } else if (DiCntMdStp == 8) //判斷cnt start Modbus status =0(0x33) { GetDeviceItems(id); if (!ReadDiCntStart(di_id_offset + Ref_IO_Mod.Ch)) { DiCntMdStp++; } else { DiCntMdStp = 99; } } else if (DiCntMdStp == 7) //cnt start =0(stop), (0x33) { GetDeviceItems(id); ProcessView(new ListViewData() { Ch = Ref_IO_Mod.Ch, Step = DiCntMdStp.ToString(), RowData = "Set cnt to Stop " }); SetDiCntStart(0); DiCntMdStp++; } else if (DiCntMdStp == 6) //判斷Cnt val Modbus status =0 (4x01) { GetDeviceItems(id); ProcessView(new ListViewData() { Ch = Ref_IO_Mod.Ch, Step = DiCntMdStp.ToString(), RowData = "Check Mds cnt val = 0" }); //add ascii cmd bool chkAscii = CheckAsciicmd(di_id_offset + Ref_IO_Mod.Ch, "0"); if (ReadCntVal(di_id_offset + Ref_IO_Mod.Ch) == 0 && chkAscii) { DiCntMdStp++; } else { DiCntMdStp = 99; } } else if (DiCntMdStp == 5) //clear cnt=1(0x34) { ClrDiCntVal(); ProcessView(new ListViewData() { Ch = Ref_IO_Mod.Ch, Step = DiCntMdStp.ToString(), RowData = "Clear Mds 0x val " }); //getTxtbox[0].Text = IOitem.Val.ToString(); DiCntMdStp++; } else if (DiCntMdStp == 4)//判斷 Cnt val Modbus status =10 (4x01) { GetDeviceItems(id); ProcessView(new ListViewData() { Ch = Ref_IO_Mod.Ch, Step = DiCntMdStp.ToString(), RowData = "Check Mds cnt val =10" }); MBData01 = ReadCntVal(di_id_offset + Ref_IO_Mod.Ch).ToString(); //add ascii cmd bool chkAscii = CheckAsciicmd(di_id_offset + Ref_IO_Mod.Ch, "A"); if (ReadCntVal(di_id_offset + Ref_IO_Mod.Ch) >= 10 && chkAscii) { DiCntMdStp++; } else { DiCntMdStp = 99; } } else if (DiCntMdStp == 3)//out apax5070 DO to H for 10 times { ProcessView(new ListViewData() { Ch = Ref_IO_Mod.Ch, Step = DiCntMdStp.ToString(), RowData = "Out5070 DO from H to L for 10 times" }); for (int i = 0; i < 10; i++) { OutData01 = OutputDO(1); Thread.Sleep(10); GetDeviceItems(id); getTxtbox[0].Text = IOitem.Val.ToString(); OutData01 = OutputDO(0); Thread.Sleep(10); } GetDeviceItems(id); getTxtbox[0].Text = IOitem.Val.ToString(); DiCntMdStp++; } else if (DiCntMdStp == 2)//判斷cnt start Modbus status =1(0x33) { if (ReadDiCntStart(di_id_offset + Ref_IO_Mod.Ch)) { DiCntMdStp++; } else { DiCntMdStp = 99; } } else if (DiCntMdStp == 1)//切換到cnt mode, chk cnt=0 cntotherwise break { GetDeviceItems(id); //md 0=DI, md 1=counter, md 2=L to H ,md 3=H to L, md 4=f IOitem.Md = 1; //Cnt mode if (Device.ModuleType == "Adam6052") { IOitem.Inv = 0; //only 6052 different } else { IOitem.Inv = 1; //enable inverse } ADAM6KReqService.UpdateIOConfig(IOitem); if (ReadClrCntVal(di_id_offset + Ref_IO_Mod.Ch)) { SetDiCntStart(1); DiCntMdStp++; } else { DiCntMdStp = 99; } } else if (DiCntMdStp == 0)//initial, clr cnt value, stop cnt, DO to L { ResStr01 = MBData01 = ""; ClrDiCntVal(); SetDiCntStart(0); //set cnt to Stop OutData01 = OutputDO(0); //initail APAX Do out 0 DiCntMdStp++; } }
// private void DoDiTask(int id) { if (DiCntMdStp >= 99) { ResStr01 = "Failed"; ProcessView(new ListViewData() { Ch = Ref_IO_Mod.Ch, Step = DiCntMdStp.ToString(), Result = ResStr01 }); FailCnt++; s1.Abort(); DiCntMdStp = 0; mainTaskStp++; } else if (DiCntMdStp > 3 && DiCntMdStp < 99) { ResStr01 = "Passed"; mainTaskStp++; s1.Abort(); Thread.Sleep(50); OutputDO(0); //initail APAX Do out 0 ProcessView(new ListViewData() { Ch = Ref_IO_Mod.Ch, Step = ProcessStep, Result = ResStr01 }); DiCntMdStp = 0; } else if (DiCntMdStp == 3)//判斷Fq val Modbus status >=99 (4x01) 約99/10=9.9hz up { Thread.Sleep(200); MBData01 = ReadFreqVal(di_id_offset + Ref_IO_Mod.Ch).ToString(); ProcessView(new ListViewData() { Ch = Ref_IO_Mod.Ch, Step = DiCntMdStp.ToString(), RowData = "Check Mds equal 10hz , read 4x = " + MBData01 }); //GetDeviceItems(id); //getTxtbox[0].Text = IOitem.Val.ToString(); if (ReadFreqVal(di_id_offset + Ref_IO_Mod.Ch) >= 99) { DiCntMdStp++; } else { DiCntMdStp = 99; } } else if (DiCntMdStp == 2)//Out APAX5070 DO High Low =10hz(delay 40ms) { ProcessView(new ListViewData() { Ch = Ref_IO_Mod.Ch, Step = DiCntMdStp.ToString(), RowData = "Out5070 DO from H to L for 10hz" }); s1 = new Thread(FrqOut); s1.Start(); DiCntMdStp++; } else if (DiCntMdStp == 1)//切換到Fq mode, chk cnt/fq =0 cntotherwise break { GetDeviceItems(id); //md 0=DI, md 1=counter, md 2=L to H ,md 3=H to L, md 4=f IOitem.Md = 4; //Fq mode ADAM6KReqService.UpdateIOConfig(IOitem); if (ReadClrCntVal(di_id_offset + Ref_IO_Mod.Ch)) { DiCntMdStp++; } else { DiCntMdStp = 99; } } else if (DiCntMdStp == 0)//initial, clr cnt value, stop cnt, DO to L { ResStr01 = MBData01 = ""; ClrDiCntVal(); SetDiCntStart(0); //set cnt to Stop //OutData01 = OutputDO(0); //initail APAX Do out 0 OutputDO(0); //initail APAX Do out 0 DiCntMdStp++; } }