예제 #1
0
        /// <summary>
        /// バンクデータのBandkNoにBankDataで渡される(Type,ID,値)の構造体一覧を保存する。
        /// BankNoが存在しない場合は、新規に追加し、存在している場合は、上書きを行います。
        /// 正常に終了した場合は、BSPF_SUCCESSを返します。
        /// </summary>
        /// <param name="BankNo">書き込むバンクナンバー</param>
        /// <param name="BankData[]">書き込むバンクデータを格納する構造体</param>
        /// <returns></returns>
        public int WriteBankData(int BankNo, BankDataStruct[] BankData)
        {
            //ロードチェック
            if (initFlag != true)
            {
                return SystemConstants.ERR_UNINITIALIZED;
            }

            // バンクナンバー範囲チェック
            bool BankNoCheck = Utility.CheckRange(BankNo, 0, SystemConstants.BANK_MAX - 1);
            // チェック結果がflaseだった場合
            if (BankNoCheck == false)
            {
                // バンクナンバー範囲外のエラーを返す
                return SystemConstants.ERR_BANKNO_RANGE;
            }

            // バンクの番号
            xmlAccessor.document.Element("bankdata").Attribute("selectedno").Value = SelectedNo.ToString();

            // バンク番号からノードを見つける
            // XMLファイルを読む
            var nodes = from n in xmlAccessor.document.Elements("bankdata").Elements("bank")
                        where n.Attribute("no").Value == BankNo.ToString()
                        select n;
            XElement bank;
            // バンクがある場合
            if (nodes.Count() >= 1)
            {
                // エントリを消す
                bank = nodes.First();
                bank.RemoveNodes();
            }
            // バンクがない場合
            else
            {
                // バンクを作る
                bank = new XElement("bank");
                bank.SetAttributeValue("no", BankNo);
                bank.SetAttributeValue("comment", "");
                xmlAccessor.document.Element("bankdata").Add(bank);
            }
            // エントリを作る
            for (int i = 0; i < BankData.Length; i++)
            {
                var elem = new XElement("entry");

                elem.SetAttributeValue("type", BankData[i].Type);
                elem.SetAttributeValue("workid", string.Format("0x{0:X4}", BankData[i].ID));
                elem.SetAttributeValue("value", BankData[i].value);
                bank.Add(elem);
            }
            // XMLファイルにセーブする
            try
            {
                // XMLファイルを開く
                xmlAccessor.SaveXmlFile(xmlFileName);
            }
            catch (Exception)
            {
                return SystemConstants.ERR_BANK_FILE_ERROR;
            }
            finally
            {
                Utility.DeleteBackupFile(xmlFileName);
            }

            return SystemConstants.BSPF_SUCCESS;
        }
예제 #2
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;
        }
예제 #3
0
        /// <summary>
        /// バンクデータからBankNoに該当するデータをBankDataに構造体にして返します。
        /// 正常に終了した場合、BSPF_SUCCESSを返します。
        /// 該当バンクデータが無い場合、ERR_NO_BANK_DATAを返します。
        /// </summary>
        /// <param name="BankNo">読出すバンクナンバー</param>
        /// <param name="BankData[]">読出したバンクデータを格納する構造体</param>
        /// <returns></returns>
        public int GetBankData(int BankNo, ref BankDataStruct[] BankData)
        {
            //ロードチェック
            if(initFlag !=true){
                return SystemConstants.ERR_UNINITIALIZED;
            }

            // バンクナンバー範囲チェック
            bool BankNoCheck = Utility.CheckRange(BankNo, 0, SystemConstants.BANK_MAX - 1);

            // チェック結果がflaseだった場合
            if (BankNoCheck == false)
            {
                // バンクナンバー範囲外のエラーを返す
                return SystemConstants.ERR_BANKNO_RANGE;
            }

            // XMLファイルを読む
            var nodes = from n in xmlAccessor.document.Elements("bankdata").Elements("bank")
                        where n.Attribute("no").Value == BankNo.ToString()
                        select n;

            // 見つかったノードが1でなければエラーを返す。
            if (nodes.Count() != 1)
            {
                BankData = new BankDataStruct[0];
                return SystemConstants.ERR_NO_BANK_DATA;
            }

            //昇順に並び変え
            nodes = from n in nodes.Elements("entry")
                    orderby n.Attribute("type").Value, n.Attribute("workid").Value
                    select n;

            int count = nodes.Count();

            // 構造体を割り当てる
            BankData = new BankDataStruct[count];

            // 構造体に読み込む
            int i = 0;
            foreach (var entry in nodes)
            {
                BankData[i].Type = Int32.Parse(entry.Attribute("type").Value);
                BankData[i].ID = Int32.Parse(entry.Attribute("workid").Value.Remove(0, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
                BankData[i].value = entry.Attribute("value").Value;
                i++;
            }
            return SystemConstants.BSPF_SUCCESS;
        }
예제 #4
0
        /// <summary>
        /// バンクデータをまるごと加工値メモリに設定する
        /// </summary>
        /// <param name="BankData"></param>
        public int SetArray(BankDataStruct[] BankData)
        {
            int[] groupID = null;
            int[] temp_workID = null;
            List<int> workID = new List<int>();
            MemAllocStruct memAllocStruct = null;
            int[] btnWorkID = new int[0];
            int result = SystemConstants.DCPF_SUCCESS;

            // 加工メモリをクリアする
            map.Clear();

            // バンクデータ配列がnullの場合、長さ0の配列を作る
            if (BankData == null)
            {
                BankData = new BankDataStruct[0];
            }

            // 受け取ったBankDataを全て加工値メモリに書く
            for (int i = 0; i < BankData.Length; i++)
            {
                Set(BankData[i].Type, BankData[i].ID, BankData[i].value);
            }

            // *メモリ割当データに存在するが、BankDataにないものは初期値で補填する
            // 加工値のgroup codeの一覧を取得
            try
            {
                memAllocData.GetMemoryDataGroupList(SystemConstants.WORKID_TYPE_WORKDATA, SystemConstants.WORKGROUP_ROOT, ref groupID);
            }
            catch (MemoryAllocationDataException)
            {
                return SystemConstants.ERR_WORKID_RANGE;
            }

            // 一覧取得したgroup codeのwork idの一覧を取得
            for (int i = 0; i < groupID.Length; i++)
            {
                try
                {
                    memAllocData.GetMemoryDataGroupList(SystemConstants.WORKID_TYPE_WORKDATA, groupID[i], ref temp_workID);
                }
                catch (MemoryAllocationDataException)
                {
                    return SystemConstants.ERR_WORKID_RANGE;
                }

                for (int j = 0; j < temp_workID.Length; j++)
                {
                    // ArrayListにtemp_workID追加
                    workID.Add(temp_workID[j]);
                }
            }

            // メモリ割当にあって加工値メモリにない値を補う
            for (int i = 0; i < workID.Count; i++)
            {
                // work idのメモリ割当データを取得する
                try
                {
                    // メモリ割当データを使用し、WorkIDに対応する共有メモリのアドレスを取得
                    memAllocStruct = memAllocData.GetEntry(SystemConstants.WORKID_TYPE_WORKDATA, workID[i]);
                }
                // WorkIDがメモリ割当データに存在していない場合
                catch (MemoryAllocationDataException)
                {
                    continue;
                }

                // 加工値メモリに存在しない場合は、デフォルト値で補う
                KeyStruct key = new KeyStruct(SystemConstants.WORKMEM_TYPE_WORKDATA, workID[i]);
                if (!map.ContainsKey(key))
                {
                    // 加工値メモリへ当該不足IDを、メモリ割当データの初期値で追加
                    Set(SystemConstants.WORKMEM_TYPE_WORKDATA, workID[i], memAllocStruct.DefaultValue.ToString());

                    // バンク保存ありの値が欠損していた場合は、ERR_BANK_PARTS_BREKEを返す。
                    if (memAllocStruct.BankStore)
                    {
                        result = SystemConstants.ERR_BANK_PARTS_BREAK;
                    }
                }
            }

            // 全てのボタンIDを取得
            buttonControl.GetAllBtnWorkID(ref btnWorkID);

            // ボタンIDの数だけループする
            for (int i = 0; i < btnWorkID.Length; i++)
            {
                // ボタンIDのバンク保存対象を取得
                ButtonActionStruct btnBankStore = buttonControl.Get(btnWorkID[i]);

                KeyStruct key = new KeyStruct(SystemConstants.WORKMEM_TYPE_WORKBTN, btnWorkID[i]);

                // 加工値メモリに存在しない場合は、デフォルト値で補う
                if (!map.ContainsKey(key))
                {
                    Set(SystemConstants.WORKMEM_TYPE_WORKBTN, btnWorkID[i], btnBankStore.DefaultMode.ToString());

                    // バンク保存ありの値が欠損していた場合は、ERR_BANK_PARTS_BREKEを返す。
                    if (btnBankStore.BankStore == SystemConstants.BTN_BANK_SAVED)
                    {
                        result = SystemConstants.ERR_BANK_PARTS_BREAK;
                    }
                }
            }

            return result;
        }
예제 #5
0
        /// <summary>
        /// ��������
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void syncroprogressfrm_Shown(object sender, EventArgs e)
        {
            try
            {
                //�t�H�[�}�b�g�f�[�^�擾
                Program.DataController.MemorySynchro(SystemConstants.ADDR_FORMAT_CHECK, SystemConstants.FORMAT_CHECK_COUNT);
                waitForQueue(false);

                // �t�H�[�}�b�g�`�F�b�N
                formatType = Program.DataController.FomatCheck();

                // bankno
                int bankno = 0;

                // �w�K�f�[�^���ڃL�[��擾
                int workmode = SystemConstants.WORKMODE_BANK;
                string[] itemkeys = new string[10];
                if (Program.DataController.LearnItemKeysRead(ref itemkeys) == SystemConstants.DCPF_SUCCESS)
                {
                    workmode = SystemConstants.WORKMODE_LEARN;
                }

                if (workmode == SystemConstants.WORKMODE_LEARN)
                {
                    LearnDataStruct[] learndataStruct = new LearnDataStruct[0];
                    Program.DataController.LearnDataRead(itemkeys, ref learndataStruct);
                    bankDataQueue = learndataStruct.Length;
                    workDataQueue = learndataStruct.Length;
                }
                else
                {
                    Program.DataController.BankNoRead(ref bankno);
                    BankDataStruct[] bankdataStruct = new BankDataStruct[0];
                    Program.DataController.BankDataRead(bankno, ref bankdataStruct);
                    bankDataQueue = bankdataStruct.Length;
                    workDataQueue = bankdataStruct.Length;
                }

                //�t�H�[�}�b�g�ς݂̏ꍇ
                if (formatType == SystemConstants.FORMAT_DONE)
                {
                    // ���M����l�̐�����߂�
                    correctDataQueue = Program.DataController.CorrectDataRead(false);
                    timingDataQueue = Program.DataController.TimingDataRead(false);
                    statusDataQueue = Program.DataController.MachineStatusRead(false);
                    workDataQueue = Program.DataController.WorkDataRead(false);
                    allQueue = correctDataQueue + timingDataQueue + statusDataQueue + workDataQueue + bankDataQueue;

                    // �␳�l�̎�M
                    Program.DataController.CorrectDataRead();
                    waitForQueue(true, Phase.CorrectReading);

                    // �^�C�~���O�l�̎�M
                    Program.DataController.TimingDataRead();
                    waitForQueue(true, Phase.TimingReading);

                    // �X�e�[�^�X�l�̎�M
                    Program.DataController.MachineStatusRead();
                    waitForQueue(true, Phase.StatusReading);

                    // ���H�l�̓���
                    Program.DataController.WorkDataRead();
                    waitForQueue(true, Phase.WorkdataReading);

                    if (workmode == SystemConstants.WORKMODE_LEARN)
                    {
                        // �w�K�f�[�^���M
                        mainfrm.LearnDataLoad(itemkeys);
                        waitForQueue(true, Phase.BankWriting);
                    }
                    else
                    {
                        // �o���N�f�[�^�̑��M
                        mainfrm.BankDataLoad(bankno);
                        waitForQueue(true, Phase.BankWriting);
                    }

                }
                // �t�H�[�}�b�g�ς݂łȂ��ꍇ
                else
                {
                    // ���M����l�̐�����߂�
                    correctDataQueue = Program.DataController.CorrectDataSend(false);
                    timingDataQueue = Program.DataController.TimingDataSend(false);
                    statusDataQueue = Program.DataController.MachineStatusRead(false);
                    workDataQueue = Program.DataController.WorkDataRead(false);
                    allQueue = correctDataQueue + timingDataQueue + statusDataQueue + workDataQueue + bankDataQueue;

                    // �A�v���P�[�V�����̑��s�m�F
                    if (!Utility.ShowConfirmMsg(SystemConstants.SYSTEM_MSG007))
                    {
                        DialogResult = DialogResult.No;
                        return;
                    }

                    // �␳�l�𑗂�
                    try
                    {
                        Program.DataController.CorrectDataSend();
                        waitForQueue(true, Phase.CorrectWriting);

                        Program.DataController.TimingDataSend();
                        waitForQueue(true, Phase.TimingWriting);
                    }
                    catch
                    {
                        Result = SystemConstants.ERR_CORRECT_FILE_ERROR;
                        DialogResult = System.Windows.Forms.DialogResult.No;
                        return;
                    }

                    // �X�e�[�^�X�l�̎�M
                    Program.DataController.MachineStatusRead();
                    waitForQueue(true, Phase.StatusReading);

                    // ���H�l�̓���
                    Program.DataController.WorkDataRead();
                    waitForQueue(true, Phase.WorkdataReading);

                    if (workmode == SystemConstants.WORKMODE_LEARN)
                    {
                        // �w�K�f�[�^���M
                        mainfrm.LearnDataLoad(itemkeys);
                        waitForQueue(true, Phase.BankWriting);
                    }
                    else
                    {
                        // �o���N�f�[�^�̑��M
                        mainfrm.BankDataLoad(bankno);
                        waitForQueue(true, Phase.BankWriting);
                    }

                    // �t�H�[�}�b�g������������݂܂��B
                    Program.DataController.FormatWrite();
                }

                if (workmode == SystemConstants.WORKMODE_LEARN)
                {
                    // �w�K�f�[�^��ۑ�����B
                    mainfrm.LearnDataSave(itemkeys);
                }
                else
                {
                    // �o���N�f�[�^��ۑ�����B
                    mainfrm.BankDataSave(bankno);
                }
                // �␳�l��ۑ�����
                Program.DataController.CorrectDataSave();
            }
            catch (TimeoutException)
            {
                /* �^�C���A�E�g�����������ꍇ�́A�����փW�����v */
                DialogResult = DialogResult.No;
                Result = SystemConstants.ERR_SYNC_TIMEOUT;
                return;
            }

            //�v���O���X�o�[�t�H�[����‚���B
            DialogResult = DialogResult.OK;
        }
예제 #6
0
        /// <summary>
        /// BankData[]の値をバンクデータ保存クラスの、WriteBankDataを使用して、バンクに保存します。
        /// 正常に処理が行われた場合、DCPF_SUCCESSを返します。
        /// </summary>
        /// <param name="BankNo">書き込むバンクナンバー</param>
        /// <param name="BankData">書き込むバンクデータ</param>
        /// <returns></returns>
        public int BankDataWrite(int BankNo, BankDataStruct[] BankData)
        {
            // BankData[]の値をバンクデータ保存クラスの、WriteBankDataを使用して、バンクに保存
            int result = bankDataStorage.WriteBankData(BankNo, BankData);

            // 正常に処理が行われた場合
            if (result == SystemConstants.BSPF_SUCCESS)
            {
                // DCPF_SUCCESSを返します
                return SystemConstants.DCPF_SUCCESS;
            }
            else
            {
                // WriteBankDataから、BSPF_SUCCESS以外を受取った場合、そのコードを返します
                return result;
            }
        }
예제 #7
0
        /// <summary>
        /// メモリ割当データのバンク保存対象の現在の値を、BankDataWrite、
        /// BankDataCommentWriteを使用して、バンクに保存します。
        /// 正常に処理が行われた場合、DCPF_SUCCESSを返します。
        /// </summary>
        /// <param name="BankNo">セーブするバンクナンバー</param>
        /// <returns></returns>
        public int BankDataSave(int BankNo)
        {
            BankDataStruct[] bankData = new BankDataStruct[0];
            int result = 0;

            //加工値メモリからBankStoreがTrueのデータのみを取得する。
            result = workDataMemory.GetArray(ref bankData);
            if (result != SystemConstants.DCPF_SUCCESS)
            {
                return result;
            }

            // メモリ割当データのバンク保存対象の現在の値を
            // BankDataWriteを使用してバンクに保存
            result = BankDataWrite(BankNo, bankData);

            return result;
        }
예제 #8
0
        /// <summary>
        /// バンクデータ保存クラスのGetBankDataを使用し、BankNoのバンクデータを取得し、
        /// 構造体BankDataに入れて返します。BankDataは、(Type, ID, 値) の構造体です。
        /// GetBankDataから受け取ったBankDataにメモリ割当データのバンク保存対象のIDの一部が不足していた場合、
        /// BankDataへ当該不足IDを、メモリ割当データの初期値で追加を行い、ERR_BANK_PARTS_BREKEと一緒に返します。
        /// GetBankDataから、ERR_NO_BANK_DATAを受取った場合、BankDataへメモリ割当データのバンク保存対象のIDを
        /// メモリ割当データの初期値で追加を行い、ERR_NO_BANK_DATAと一緒に返します。
        /// 正常に処理が行われた場合、DCPF_SUCCESSを返します。
        /// </summary>
        /// <param name="BankNo">読み込むバンクナンバー</param>
        /// <param name="BankData">読み込んだバンクデータを格納する構造体</param>
        /// <returns></returns>
        public int BankDataRead(int BankNo, ref BankDataStruct[] BankData)
        {
            // バンクデータ保存クラスのGetBankDataを使用し、BankNoのバンクデータを取得
            int result = bankDataStorage.GetBankData(BankNo, ref BankData);

            // 正常に処理が行われた場合
            if ((result != SystemConstants.BSPF_SUCCESS) && (result != SystemConstants.ERR_NO_BANK_DATA))
            {
                return result;
            }

            // 補完処理を行う
            WorkDataMemory memory = new WorkDataMemory();
            memory.Initialize(memalloc, buttonControl);
            result = memory.SetArray(BankData);

            BankData = new BankDataStruct[0];
            memory.GetArray(ref BankData);

            return result;
        }