/// <summary>
        /// CorrectData.xmlから補正値、タイミング値を取得します。
        ///ファイルが見つからない場合、
        ///ファイルに書き込みができない場合、例外を発生させます。
        /// </summary>
        /// <param name="CorrectData">読出した補正値・タイミング値を格納する構造体</param>
        /// <returns></returns>
        public void GetCorrectData(ref CorrectDataStruct[] CorrectData)
        {
            // XMLファイルを読む
            var nodes = from n in xmlAccessor.document.Elements("correctdata")
                        select n;

            // エントリの数を数える
            var bank = nodes.First();
            int count = bank.Elements("entry").Count();

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

            // 構造体に読み込む
            int i = 0;
            foreach (var entry in bank.Elements())
            {
                CorrectData[i].Type = Int32.Parse(entry.Attribute("type").Value);
                CorrectData[i].ID = Int32.Parse(entry.Attribute("workid").Value.Remove(0, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
                CorrectData[i].value = entry.Attribute("value").Value;
                i++;
            }
        }
Exemple #2
0
        /// <summary>
        /// 補正値を同期後に保存する
        /// </summary>
        public void CorrectDataSave()
        {
            int[] groupIDList = null;
            int[] workid = null;

            List<CorrectDataStruct> correctDataStructList = new List<CorrectDataStruct>();
            CorrectDataStruct[] correctDataStruct_old = null;
            CorrectDataStruct[] correctDataStruct_new = null;
            CorrectDataStruct correctDataStruct_tmp;
            MemAllocStruct memAllocStruct = null;

            //システムデータを参照
            correctdata.GetCorrectData(ref correctDataStruct_old);

            //ArrayListにコピー
            correctDataStructList.AddRange(correctDataStruct_old);

            foreach (var type in new[] { SystemConstants.WORKID_TYPE_CORRECTDATA, SystemConstants.WORKID_TYPE_TIMINGDATA })
            {
                //group codeを全取得
                GetMemryDataGroupList(type, SystemConstants.WORKGROUP_ROOT, ref groupIDList);

                for (int i = 0; i < groupIDList.Length; i++)
                {
                    //グループごとのworkidを全取得
                    GetMemryDataGroupList(type, groupIDList[i], ref workid);

                    for (int j = 0; j < workid.Length; j++)
                    {
                        //該当workidのメモリ割り当てデータを取得
                        memAllocStruct = memalloc.GetEntry(type, workid[j]);

                        //CorrectDataにtypeがタイミングでwork[j]が存在するかチェック
                        var nodes = from n in correctDataStruct_old
                                    where n.Type == type && n.ID == workid[j]
                                    select n;

                        //システムデータに該当するIDの補正値が存在しない場合
                        if (nodes.Count() == 0)
                        {
                            //システムデータに存在しなしworkidの構造体作成
                            correctDataStruct_tmp.Type = type;
                            correctDataStruct_tmp.ID = workid[j];
                            correctDataStruct_tmp.value = memAllocStruct.DefaultValue.ToString();

                            //ArrayListに追加
                            correctDataStructList.Add(correctDataStruct_tmp);
                        }
                        // 存在する場合
                        else
                        {
                            double WorkData = 0;
                            ReadData(workid[j], ref WorkData, type);

                            CorrectDataStruct correct = nodes.First();
                            correct.ID = workid[j];
                            correct.Type = type;
                            correct.value = WorkData.ToString();
                        }
                    }
                }
            }

            //システムデータに反映
            correctDataStruct_new = new CorrectDataStruct[correctDataStructList.Count];

            for (int k = 0; k < correctDataStructList.Count; k++)
            {
                correctDataStruct_new[k] = correctDataStructList[k];
            }
            //xmlに書き込み
            correctdata.WriteCorrectData(correctDataStruct_new);
        }
        /// <summary>
        /// 補正値、タイミング値をCorrectData.xmlに書き込みます。
        ///ファイルが見つからない場合、
        ///ファイルに書き込みができない場合、例外を発生させます。
        /// </summary>
        /// <param name="CorrectData">書き込む補正値・タイミング値を格納する構造体</param>
        /// <returns></returns>
        public void WriteCorrectData(CorrectDataStruct[] CorrectData)
        {
            // XMLファイルを読む
            var nodes = from n in xmlAccessor.document.Elements("correctdata")
                        select n;

            XElement entry;
            entry = nodes.First();
            entry.RemoveNodes();

            // エントリを作る
            for (int i = 0; i < CorrectData.Length; i++)
            {
                var elem = new XElement("entry");

                elem.SetAttributeValue("type", CorrectData[i].Type);
                elem.SetAttributeValue("workid", string.Format("0x{0:X4}", CorrectData[i].ID));
                elem.SetAttributeValue("value", CorrectData[i].value);

                entry.Add(elem);
            }
            // XMLファイルにセーブする
            try
            {
                // XMLファイルを開く
                xmlAccessor.SaveXmlFile(xmlFileName);

            }
            finally
            {
                Utility.DeleteBackupFile(xmlFileName);
            }
        }
        /// <summary>
        /// 同期処理(データの送信)
        /// </summary>
        /// <param name="type"></param>
        private int DataSend(int type, bool sendFlag = true)
        {
            int[] groupIDList = null;
            int[] workid = null;
            int sendCount = 0;

            List<CorrectDataStruct> correctDataStructList = new List<CorrectDataStruct>();
            CorrectDataStruct[] correctDataStruct_old = null;
            CorrectDataStruct[] correctDataStruct_new = null;
            CorrectDataStruct correctDataStruct_tmp;
            MemAllocStruct memAllocStruct = null;

            //システムデータを参照
            correctdata.GetCorrectData(ref correctDataStruct_old);

            //ArrayListにコピー
            correctDataStructList.AddRange(correctDataStruct_old);

            //group codeを全取得
            GetMemryDataGroupList(type, SystemConstants.WORKGROUP_ROOT, ref groupIDList);

            for (int i = 0; i < groupIDList.Length; i++)
            {
                //グループごとのworkidを全取得
                GetMemryDataGroupList(type, groupIDList[i], ref workid);

                for (int j = 0; j < workid.Length; j++)
                {
                    //該当workidのメモリ割り当てデータを取得
                    memAllocStruct = memalloc.GetEntry(type, workid[j]);

                    //CorrectDataにtypeがタイミングでwork[j]が存在するかチェック
                    var nodes = from n in correctDataStruct_old
                                where n.Type == type && n.ID == workid[j]
                                select n;

                    //システムデータに該当するIDの補正値が存在しない場合
                    if (nodes.Count() == 0)
                    {
                        if (sendFlag)
                        {
                            //標準値を書き込み
                            writeCorrectData(type, workid[j], memAllocStruct.DefaultValue, false);
                        }

                        //システムデータに存在しなしworkidの構造体作成
                        correctDataStruct_tmp.Type = type;
                        correctDataStruct_tmp.ID = workid[j];
                        correctDataStruct_tmp.value = memAllocStruct.DefaultValue.ToString();

                        //ArrayListに追加
                        correctDataStructList.Add(correctDataStruct_tmp);
                        sendCount++;
                    }
                    //存在する場合
                    else
                    {
                        if (sendFlag)
                        {
                            // メモリへ書き込み
                            writeCorrectData(type, workid[j], Convert.ToDouble(nodes.First().value), false);
                        }
                        sendCount++;
                    }
                }
            }
            //システムデータに反映
            correctDataStruct_new = new CorrectDataStruct[correctDataStructList.Count];

            for (int k = 0; k < correctDataStructList.Count; k++)
            {
                correctDataStruct_new[k] = correctDataStructList[k];
            }
            //xmlに書き込み
            correctdata.WriteCorrectData(correctDataStruct_new);

            return sendCount;
        }