Esempio n. 1
0
        // 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;
        }
Esempio n. 2
0
        // セレクター切り替えアクション
        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;
        }
Esempio n. 3
0
        /// <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;
        }
Esempio n. 4
0
        // 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;
        }
Esempio n. 5
0
        // ストリップ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;
        }
Esempio n. 6
0
 // 読み取り専用
 public bool readonlyAction(ButtonActionStruct actionStruct, int WorkID, int BtnStatus)
 {
     return false;
 }
Esempio n. 7
0
 // OFF動作禁止
 public bool forbidOffAction(ButtonActionStruct actionStruct, int WorkID, int BtnStatus)
 {
     // OFFの場合は、falseを返す
     if (SystemConstants.BTN_OFF == BtnStatus)
     {
         return false;
     }
     else
     {
         return true;
     }
 }
Esempio n. 8
0
 // 圧着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;
 }
Esempio n. 9
0
        // 圧着機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
        }
Esempio n. 10
0
        // 圧着機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
        }
Esempio n. 11
0
        // 圧着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;
            }
        }
Esempio n. 12
0
        // 端子送り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;
        }
Esempio n. 13
0
        // フィード開閉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;
        }
Esempio n. 14
0
        // インチング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;
        }
Esempio n. 15
0
        // ビットを操作するアクション
        public bool bitControlAction(ButtonActionStruct actionStruct, int WorkID, int BtnStatus)
        {
            bitControl(WorkID, actionStruct.Digit, BtnStatus);

            return true;
        }
Esempio n. 16
0
        // ストリップの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;
        }
Esempio n. 17
0
        /// <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;
        }
Esempio n. 18
0
        // サイクルモード 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;
        }
Esempio n. 19
0
        // サイクルモードの関連アクション
        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;
        }
Esempio n. 20
0
        /// <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;
        }
Esempio n. 21
0
        // 動作モードグループの関連アクション
        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;
        }
Esempio n. 22
0
        // インチング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
        }
Esempio n. 23
0
 // 防水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;
 }
Esempio n. 24
0
        // インチングスイッチの 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;
        }
Esempio n. 25
0
        // 防水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;
            }
        }
Esempio n. 26
0
        // シーンセット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
        }
Esempio n. 27
0
        // 値を直接セットするアクション
        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;
        }
Esempio n. 28
0
        // ハーフストリップ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;
            }
        }
Esempio n. 29
0
        /// <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;
        }
Esempio n. 30
0
        // ボタン動作設定登録関数
        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
            );
        }