// 0.5秒したらOffにする。 public bool autoOffAction2(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { // ONの場合 if (SystemConstants.BTN_ON == BtnStatus) { // 0.5秒後にOFFにする処理を予約する ThreadPool.QueueUserWorkItem( new WaitCallback(delegate(object o) { Thread.Sleep(500); WritePushBtn(WorkID, SystemConstants.BTN_OFF, true); }) ); } return true; }
// セレクター切り替えアクション public bool selectorChangeAction(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { int statusLoad = 0; int statusSelector = 0; // ロードの値を取得 ReadPushBtnPC(SystemConstants.LOAD1_BTN, ref statusLoad); // ONだった場合 if (statusLoad == SystemConstants.BTN_ON) { // falseを返す。 return false; } // 押されたセレクターの値を取得 ReadPushBtnPC(WorkID, ref statusSelector); // ONだった場合 if (statusSelector == SystemConstants.BTN_ON) { // falseを返す。 return false; } // 切断対象ボタン int[] OffBtnIDs = new int[] { SystemConstants.SELECTOR1_BTN, SystemConstants.SELECTOR2_BTN }; // 自分のボタン以外はOffにする foreach (int btnID in OffBtnIDs) { if (WorkID != btnID) { WritePushBtn(btnID, SystemConstants.BTN_OFF, false); } } return true; }
/// <summary> /// 加工値メモリから取得したデータをLearnDataに入れて返す /// </summary> /// <param name="LearnData"></param> /// <returns></returns> public int GetArray(ref LearnDataStruct[] LearnData) { int i = 0; MemAllocStruct memAllocStruct = null; // LearnDataがnullの場合、構造体を割当てる if (LearnData == null) LearnData = new LearnDataStruct[0]; foreach (WorkDataStruct learndata in map.Values) { if (learndata.Type == SystemConstants.WORKMEM_TYPE_WORKDATA) { // WorkIDのメモリ割当データを取得する try { memAllocStruct = memAllocData.GetEntry(SystemConstants.WORKID_TYPE_WORKDATA, learndata.WorkID); } catch (MemoryAllocationDataException) { memAllocStruct = new MemAllocStruct(); memAllocStruct.learn_key_code = SystemConstants.DB_GROUP_SEARCH_TYPE_NONE; } // 学習データ対象の場合 if (LearnDataStorage.IsLearnSearchKeyCode(memAllocStruct.learn_key_code)) { // 配列を一つ増やす Array.Resize(ref LearnData, LearnData.Length + 1); // LearnDataに加工値メモリの値を設定 LearnData[i].Type = learndata.Type; LearnData[i].SearchType = memAllocStruct.learn_key_code; LearnData[i].ID = learndata.WorkID; LearnData[i].value = learndata.Value; i++; } } else if (learndata.Type == SystemConstants.WORKMEM_TYPE_WORKBTN) { // ボタンIDの学習データ保存対象を取得 ButtonActionStruct btnLearnStore = new ButtonActionStruct(); try { btnLearnStore = buttonControl.Get(learndata.WorkID); } catch { btnLearnStore.SearchType = SystemConstants.DB_GROUP_SEARCH_TYPE_BTN; } if(btnLearnStore.SearchType != SystemConstants.DB_GROUP_SEARCH_TYPE_BTN) { // 配列の要素を1つ増やす Array.Resize(ref LearnData, LearnData.Length + 1); // LearnDataにデータを追加 LearnData[i].Type = learndata.Type; LearnData[i].SearchType = btnLearnStore.SearchType; LearnData[i].ID = learndata.WorkID; LearnData[i].value = learndata.Value; i++; } /* // 動作処理ボタンの場合 if (LearnDataStorage.IsLearnedModeBtn(learndata.WorkID)) { // 配列の要素を1つ増やす Array.Resize(ref LearnData, LearnData.Length + 1); // LearnDataにデータを追加 LearnData[i].Type = learndata.Type; LearnData[i].SearchType = SystemConstants.DB_GROUP_SEARCH_TYPE_BTN; LearnData[i].ID = learndata.WorkID; LearnData[i].value = learndata.Value; i++; } */ } } return SystemConstants.DCPF_SUCCESS; }
// 2側端子サイド/エンド切り替えアクション public bool termType2ChangeAction(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { int statusType = 0; // 押された値を取得 ReadPushBtnPC(WorkID, ref statusType); // ONだった場合 if (statusType == SystemConstants.BTN_ON) { // falseを返す。 return false; } // 切断対象ボタン int[] OffBtnIDs = new int[] { #if !HCSM40 SystemConstants.END_TERM2_BTN, SystemConstants.SIDE_TERM2_BTN #endif }; // 自分のボタン以外はOffにする foreach (int btnID in OffBtnIDs) { if (WorkID != btnID) { WritePushBtn(btnID, SystemConstants.BTN_OFF, false); } } return true; }
// ストリップ2をOFFにする場合、圧着2, 防水2, ハーフストリップ2で、 // ONになっているボタンをOFFにして、ストリップ2をOFFにする。 public bool strip2Action(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { if (SystemConstants.BTN_OFF == BtnStatus) { #if !HCSM40 WritePushBtn(SystemConstants.CRIMP2_BTN, SystemConstants.BTN_OFF, false); WritePushBtn(SystemConstants.SEAL2_BTN, SystemConstants.BTN_OFF, false); WritePushBtn(SystemConstants.CRIMP2_SW_BTN, SystemConstants.BTN_OFF, false); #endif WritePushBtn(SystemConstants.SEMISTRIP2_BTN, SystemConstants.BTN_OFF, false); } return true; }
// 読み取り専用 public bool readonlyAction(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { return false; }
// OFF動作禁止 public bool forbidOffAction(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { // OFFの場合は、falseを返す if (SystemConstants.BTN_OFF == BtnStatus) { return false; } else { return true; } }
// 圧着2をOFFにする場合、圧着機2スイッチをOFFにして、圧着2をOFFにする。 public bool crimp2Action(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { #if !HCSM40 if (SystemConstants.BTN_OFF == BtnStatus) { WritePushBtn(SystemConstants.CRIMP2_SW_BTN, SystemConstants.BTN_OFF, false); } #endif return true; }
// 圧着機1のON-> OFFチェック public bool checkCrimpSw1and2Off(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { #if HCSM40 return false; #else int statusInching = 0; // インチング1の値を取得 if (WorkID == SystemConstants.CRIMP1_SW_BTN) { ReadPushBtnPC(SystemConstants.INCHING1_BTN, ref statusInching); } else { ReadPushBtnPC(SystemConstants.INCHING2_BTN, ref statusInching); } //ストリップ1がONかつ、ハーフストリップ1がOFFだった場合 if ( statusInching == SystemConstants.BTN_OFF) { // trueを返す。 return true; } else { // falseを返す。 return false; } #endif }
// 圧着機2スイッチのOFF-> ONチェック public bool checkCrimp2_Sw_Btn(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { #if HCSM40 return false; #else int statusCrimp2 = 0; // 圧着2の値を取得 ReadPushBtnPC(SystemConstants.CRIMP2_BTN, ref statusCrimp2); // 圧着2がONだった場合 if (statusCrimp2 == SystemConstants.BTN_ON) { // trueを返す。 return true; } else { // falseを返す。 return false; } #endif }
// 圧着2のOFF-> ONチェック public bool checkCrimp2_Btn(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { // 加工が学習モードの時は動作不可 int workMode = Program.DataController.GetWorkMode(); if (workMode == SystemConstants.WORKMODE_LEARN) return false; int statusStrip2 = 0; int statusSemiStrip2 = 0; // ストリップ2の値を取得 ReadPushBtnPC(SystemConstants.STRIP2_BTN, ref statusStrip2); // ハーフストリップ2の値を取得 ReadPushBtnPC(SystemConstants.SEMISTRIP2_BTN, ref statusSemiStrip2); //ストリップ2がONかつ、ハーフストリップ2がOFFだった場合 if (statusStrip2 == SystemConstants.BTN_ON && statusSemiStrip2 == SystemConstants.BTN_OFF) { // trueを返す。 return true; } else { // falseを返す。 return false; } }
// 端子送りONチェック(端子送りOFF->ONチェック) public bool checkATermAirFeed_BtnOn(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { int statusTermAirFeed = 0; if(WorkID == SystemConstants.TERM_FEED1_BTN) ReadPushBtnPC(SystemConstants.TERM_AIRFEED1_BTN, ref statusTermAirFeed); else ReadPushBtnPC(SystemConstants.TERM_AIRFEED2_BTN, ref statusTermAirFeed); if (statusTermAirFeed == SystemConstants.BTN_OFF) return false; return true; }
// フィード開閉OFFチェック(フィード、ロードOFF->ONチェック) public bool checkFeedOpen_BtnOff(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { int statusFeedOpen = 0; ReadPushBtnPC(SystemConstants.FEED_OPEN1_BTN, ref statusFeedOpen); if (statusFeedOpen == SystemConstants.BTN_ON) return false; return true; }
// インチング1ボタン及びインチング2ボタンのON-> OFFチェック public bool checkInching1and2_BtnOff(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { double statusInching = 0; // PRESS SWの値取得 if (WorkID == SystemConstants.INCHING1_BTN) Program.DataController.ReadWorkData(SystemConstants.STATUS_INCHING1, ref statusInching); else Program.DataController.ReadWorkData(SystemConstants.STATUS_INCHING2, ref statusInching); if (statusInching == SystemConstants.BTN_ON) return false; return true; }
// ビットを操作するアクション public bool bitControlAction(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { bitControl(WorkID, actionStruct.Digit, BtnStatus); return true; }
// ストリップのOFF->ON, ON->OFFチェック public bool checkStripBtn(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { // 加工モードを取得 int workMode = Program.DataController.GetWorkMode(); if (workMode == SystemConstants.WORKMODE_BANK) return true; else return false; }
/// <summary> /// 空運転モードON時、電線がロードしていればメッセージを出し空運転モードにしない。 /// </summary> /// <param name="actionStruct"></param> /// <param name="WorkID"></param> /// <param name="BtnStatus"></param> /// <returns></returns> public bool checkWireLoad_FreeOn(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { int statusLoad = 0; ReadPushBtn(SystemConstants.LOAD1_STATUS, ref statusLoad); if (statusLoad == SystemConstants.BTN_ON) { Utility.ShowErrorMsg(SystemConstants.SYSTEM_MSG038); return false; } return true; }
// サイクルモード OFF -> ON チェック public bool checkCycleMode(ButtonActionStruct actionstruct, int WorkID, int BtnStatus) { // サイクルモードがJOGの場合は、常にOK if (WorkID == SystemConstants.JOG_BTN) return true; int statusInching1 = SystemConstants.BTN_OFF, statusInching2 = SystemConstants.BTN_OFF; #if !HCSM40 // インチング1, インチング2の値を取得 ReadPushBtnPC(SystemConstants.INCHING1_BTN, ref statusInching1); ReadPushBtnPC(SystemConstants.INCHING2_BTN, ref statusInching2); #endif // インチングボタンが両方ともOFFの場合、サイクルモードの変更を許可 if (statusInching1 == SystemConstants.BTN_OFF && statusInching2 == SystemConstants.BTN_OFF) return true; else return false; }
// サイクルモードの関連アクション public bool cycleModeAction(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { // 切断対象ボタン int[] OffBtnIDs = new int[] { SystemConstants.CYCLE_BTN, SystemConstants.JOG_BTN, SystemConstants.AUTO_BTN }; // 自分のボタン以外はOffにする foreach (int btnID in OffBtnIDs) { if (WorkID != btnID) { WritePushBtn(btnID, SystemConstants.BTN_OFF, false); } } return true; }
/// <summary> /// ロードボタンON時、空運転中ならメッセージをロードさせない。 /// </summary> /// <param name="actionStruct"></param> /// <param name="WorkID"></param> /// <param name="BtnStatus"></param> /// <returns></returns> public bool checkFreeMode_LoadOn(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { int statusFree = 0; ReadPushBtn(SystemConstants.FREE_BTN, ref statusFree); if (statusFree == SystemConstants.BTN_ON) { Utility.ShowErrorMsg(SystemConstants.SYSTEM_MSG038); return false; } return true; }
// 動作モードグループの関連アクション public bool modeGroupAction(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { // 切断対象ボタン int[] OffBtnIDs = new int[] { SystemConstants.NORMAL_BTN, SystemConstants.EJECT_BTN, SystemConstants.TEST_BTN, SystemConstants.SAMPLE_BTN, SystemConstants.FREE_BTN }; // 自分のボタン以外はOffにする foreach (int btnID in OffBtnIDs) { if (WorkID != btnID) { WritePushBtn(btnID, SystemConstants.BTN_OFF, false); } } #if !HCSM40 // フリーモードの時は圧着機スイッチをOffにする if (WorkID == SystemConstants.FREE_BTN) { WritePushBtn(SystemConstants.CRIMP1_SW_BTN, SystemConstants.BTN_OFF, false); WritePushBtn(SystemConstants.CRIMP2_SW_BTN, SystemConstants.BTN_OFF, false); } #endif return true; }
// インチング1ボタン及びインチング2ボタンのOFF-> ONチェック public bool checkInching1and2_Btn(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { #if HCSM40 return false; #else int statusJog = 0; int statusPressSw = 0; // JOGの値を取得 ReadPushBtnPC(SystemConstants.JOG_BTN, ref statusJog); // PRESS SWの値取得 if (WorkID == SystemConstants.INCHING1_BTN) ReadPushBtnPC(SystemConstants.CRIMP1_SW_BTN, ref statusPressSw); else ReadPushBtnPC(SystemConstants.CRIMP2_SW_BTN, ref statusPressSw); // JOGがONだった場合 /*if (statusJog == SystemConstants.BTN_ON) { // trueを返す。 return true; } else { // falseを返す。 return false; }*/ if (statusJog != SystemConstants.BTN_ON) return false; if (statusPressSw != SystemConstants.BTN_ON) return false; return true; #endif }
// 防水2がOFFになった際、チャック開閉2もOFFにする public bool seal2Action(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { #if !HCSM40 if (SystemConstants.BTN_OFF == BtnStatus) { WritePushBtn(SystemConstants.SEAL_CHUCK2_BTN, SystemConstants.BTN_OFF, false); } #endif return true; }
// インチングスイッチの OFF -> ON チェック public bool checkInchingMode(ButtonActionStruct actionstruct, int WorkID, int BtnStatus) { // JOGモードかを判断する int statusCycleJogMode = SystemConstants.BTN_OFF; ReadPushBtnPC(SystemConstants.JOG_BTN, ref statusCycleJogMode); if (statusCycleJogMode == SystemConstants.BTN_ON) return true; else return false; }
// 防水2のOFF-> ONチェック public bool checkSeal2_Btn(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { int statusSemiStrip2 = 0; // ハーフストリップ2の値を取得 ReadPushBtnPC(SystemConstants.SEMISTRIP2_BTN, ref statusSemiStrip2); //ハーフストリップ2がOFFだった場合 if (statusSemiStrip2 == SystemConstants.BTN_OFF) { // trueを返す return true; } else { // falseを返す return false; } }
// シーンセット2のOFF-> ONチェック // チャック開閉2のOFF-> ONチェック及びON-> OFF条件 public bool checkSeal_Set2_Btn_and_Seal_Chack2_Btn(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { #if HCSM40 return false; #else int statusSeal2_Btn = 0; // 防水2の値を取得 ReadPushBtnPC(SystemConstants.SEAL2_BTN, ref statusSeal2_Btn); // 防水2がONだった場合 if (statusSeal2_Btn == SystemConstants.BTN_ON) { // trueを返す。 return true; } else { // falseを返す。 return false; } #endif }
// 値を直接セットするアクション public bool valueSetAction(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { // ONの場合 if (BtnStatus == SystemConstants.BTN_ON) { //加工値メモリに保存する。 workDataMemory.Set(SystemConstants.WORKMEM_TYPE_WORKBTN, WorkID, actionStruct.Digit.ToString()); // ビット演算結果をMemWriteする machineConnector.MemWrite(actionStruct.Address, actionStruct.Digit); } // OFFの場合 else if (BtnStatus == SystemConstants.BTN_OFF) { //加工値メモリに保存する。 workDataMemory.Set(SystemConstants.WORKMEM_TYPE_WORKBTN, WorkID, "0"); // ビット演算結果をMemWriteする machineConnector.MemWrite(actionStruct.Address, 0); } return true; }
// ハーフストリップ2のOFF-> ONチェック public bool checkSemiStrip2_Btn(ButtonActionStruct actionStruct, int WorkID, int BtnStatus) { int statusStrip2 = 0; //int statusCrimp2 = 0; //int statusSeal2 = 0; // ストリップ2の値を取得 ReadPushBtnPC(SystemConstants.STRIP2_BTN, ref statusStrip2); // 圧着2の値を取得 //ReadPushBtnPC(SystemConstants.CRIMP2_BTN, ref statusCrimp2); // 防水2の値を取得 //ReadPushBtnPC(SystemConstants.SEAL2_BTN, ref statusSeal2); //ストリップ1がONかつ、圧着2がOFFだった場合 if (statusStrip2 == SystemConstants.BTN_ON) //&& statusCrimp2 == SystemConstants.BTN_OFF && statusSeal2 == SystemConstants.BTN_OFF) { // trueを返す。 return true; } else { // falseを返す。 return false; } }
/// <summary> /// 加工値メモリから取得したデータをBankDataに入れて返す /// </summary> /// <param name="BankData"></param> public int GetArray(ref BankDataStruct[] BankData) { int i = 0; MemAllocStruct memAllocStruct = null; int[] btnWorkID = new int[0]; // BankDataがnullだった場合構造体を割り当てる if (BankData == null) { BankData = new BankDataStruct[0]; } foreach (WorkDataStruct bankdata in map.Values) { if (bankdata.Type == SystemConstants.WORKMEM_TYPE_WORKDATA) { // work idのメモリ割当データを取得する try { // メモリ割当データを使用し、WorkIDに対応する共有メモリのアドレスを取得 memAllocStruct = memAllocData.GetEntry(SystemConstants.WORKID_TYPE_WORKDATA, bankdata.WorkID); } // WorkIDがメモリ割当データに存在していない場合 catch (MemoryAllocationDataException) { // データがあるものとして処理する memAllocStruct = new MemAllocStruct(); memAllocStruct.BankStore = true; } // bank_storeが保存対象だった場合 if (memAllocStruct.BankStore == true) { // 配列の要素を1つ増やす Array.Resize(ref BankData, BankData.Length + 1); // BankDataに加工値メモリの値を設定 BankData[i].Type = bankdata.Type; BankData[i].ID = bankdata.WorkID; BankData[i].value = bankdata.Value; i++; } } else { // ボタンIDのバンク保存対象を取得 ButtonActionStruct btnBankStore = new ButtonActionStruct(); try { btnBankStore = buttonControl.Get(bankdata.WorkID); } catch { btnBankStore.BankStore = SystemConstants.BTN_BANK_UNSAVED; } if (btnBankStore.BankStore == SystemConstants.BTN_BANK_SAVED) { // 配列の要素を1つ増やす Array.Resize(ref BankData, BankData.Length + 1); // BankDataに加工値メモリの値を設定 BankData[i].Type = bankdata.Type; BankData[i].ID = bankdata.WorkID; BankData[i].value = bankdata.Value; i++; } } } return SystemConstants.DCPF_SUCCESS; }
// ボタン動作設定登録関数 private void Add(int WorkID, BoolDelegate Action, int Digit, BoolDelegate OnOffCheck, BoolDelegate OffOnCheck, BoolDelegate RelatedDelegate, int Address, int BankStore, int SearchType = SystemConstants.DB_GROUP_SEARCH_TYPE_BTN, int DefaultMode = SystemConstants.BTN_OFF) { ButtonActionStruct actionStruct = new ButtonActionStruct(); actionStruct.WorkID = WorkID; actionStruct.ActionDelegate = Action; actionStruct.OnOffCheck = OnOffCheck; actionStruct.OffOnCheck = OffOnCheck; actionStruct.RelatedDelegate = RelatedDelegate; actionStruct.Digit = Digit; actionStruct.Address = Address; actionStruct.BankStore = BankStore; actionStruct.SearchType = SearchType; actionStruct.DefaultMode = DefaultMode; map.Add( WorkID, actionStruct ); }