Ejemplo n.º 1
0
        protected virtual void DisposeSelf()
        {
            /* [d20210220]
             * 沒人參考它時,  有機率被釋放
             * 但其參考的 Task, 其實還沒完工
             * 1. 若此 Task 只是沒人參考, 不應強制Dispose
             * 2. 若此 Task 是應用程式結束時, 應被強制關閉
             * 原生Task選擇不關閉, 應自主結束
             * 但這邊考量的是應正確釋放資源
             *
             * 或許原生才是對的, 你不應強制關閉Task,
             * (1) 該Task要有自主判斷停止的功能,
             * (2) 應用程式強制關閉時, 其實Task也會被關閉
             * 所以, 若你要用一個不受控的Task, 那不如用原生的
             *
             * 結論: 其實原生Task 你也沒辦法強制關閉它, 你也只能直接Try/Catch起來
             */



            if (this.Task != null)
            {
                //只增加Cancel的呼叫, 剩的用父類別的
                if (this.Status < TaskStatus.RanToCompletion)
                {
                    this.CancelTokenSource.Cancel();
                }
                //統一Dispose的方法, 有例外仍舊扔出, 確保在預期內
                MvaUtil.DisposeTask(this.Task);
                this.Task = null;
            }
        }
Ejemplo n.º 2
0
        public HalRobotMotion Clone()
        {
            var buffer = MvaUtil.SerializeBinary(this);
            var rtn    = MvaUtil.DeserializeBinary <HalRobotMotion>(buffer);

            return(rtn);
        }
Ejemplo n.º 3
0
        public Dictionary <EnumMacHalPlcVariable, Object> ReadMulti(IEnumerable <EnumMacHalPlcVariable> varNames)
        {
            var names = varNames.Select(x => x.ToString()).ToArray();
            var table = this.PlcLdd.ReadMulti(names);
            var rtn   = new Dictionary <EnumMacHalPlcVariable, Object>();

            foreach (DictionaryEntry kv in table)
            {
                var key = MvaUtil.EnumParse <EnumMacHalPlcVariable>(kv.Key as String);
                rtn[key] = kv.Value;
            }
            return(rtn);
        }
Ejemplo n.º 4
0
        public void TestRobotPathSerialize()
        {
            var robotPath = new HalRobotPath()
            {
                Name   = "Test",
                Remark = "Test",
            };

            var robotMotion = new HalRobotMotion()
            {
                X          = 1.1f,
                Y          = 2.2f,
                Z          = 3.3f,
                W          = 4.4f,
                P          = 5.5f,
                R          = 6.6f,
                E1         = 7.7f,
                UserFrame  = 1,
                UserTool   = 1,
                Speed      = 60,
                MotionType = HalRobotEnumMotionType.Position,
            };

            robotPath.Motions.Add(robotMotion);

            robotMotion    = robotMotion.Clone();
            robotMotion.X += 1;
            robotPath.Motions.Add(robotMotion);

            robotMotion    = robotMotion.Clone();
            robotMotion.X += 1;
            robotPath.Motions.Add(robotMotion);



            MvaUtil.SaveXmlToFile(robotPath, robotPath.Name + ".xml");
            var loadPath   = MvaUtil.LoadFromXmlFile <HalRobotPath>(robotPath.Name + ".xml");
            var loadMotion = loadPath.Motions.LastOrDefault();



            Assert.AreEqual(robotMotion.X, loadMotion.X);
            Assert.AreEqual(robotMotion.Z, loadMotion.Z);
            Assert.AreEqual(robotMotion.Y, loadMotion.Y);
            Assert.AreEqual(robotMotion.W, loadMotion.W);
            Assert.AreEqual(robotMotion.P, loadMotion.P);
            Assert.AreEqual(robotMotion.R, loadMotion.R);
            Assert.AreEqual(robotMotion.E1, loadMotion.E1);

            Assert.AreEqual(robotMotion.J1, loadMotion.J1);
            Assert.AreEqual(robotMotion.J2, loadMotion.J2);
            Assert.AreEqual(robotMotion.J3, loadMotion.J3);
            Assert.AreEqual(robotMotion.J4, loadMotion.J4);
            Assert.AreEqual(robotMotion.J5, loadMotion.J5);
            Assert.AreEqual(robotMotion.J6, loadMotion.J6);
            Assert.AreEqual(robotMotion.J7, loadMotion.J7);

            Assert.AreEqual(robotMotion.UserFrame, loadMotion.UserFrame);
            Assert.AreEqual(robotMotion.UserTool, loadMotion.UserTool);
            Assert.AreEqual(robotMotion.Speed, loadMotion.Speed);
        }
Ejemplo n.º 5
0
 public T GetDevConnStrEnum <T>(string key)
 {
     return(MvaUtil.EnumParse <T>(this.DevSettings[key] as string));
 }
Ejemplo n.º 6
0
 /// <summary>
 /// serialize (序列化) manifest object, and save as xml file
 /// </summary>
 /// <param name="manifest">MachineManifest object</param>
 /// <param name="filePath">xml file path for saving</param>
 public static void SaveToXmlFile(MacManifestCfg manifest, string filePath)
 {
     MvaUtil.SaveXmlToFile(manifest, filePath);
 }
Ejemplo n.º 7
0
 /// <summary>
 /// deserialize (反序列化) MachineManifest object from xml file
 /// </summary>
 /// <param name="filePath">xml file path for loading</param>
 /// <returns></returns>
 public static MacManifestCfg LoadFromXmlFile(string filePath)
 {
     return(MvaUtil.LoadFromXmlFile <MacManifestCfg>(filePath));
 }
Ejemplo n.º 8
0
 public void SaveToXmlFile(string fn)
 {
     MvaUtil.SaveXmlToFile(this, fn);
 }
Ejemplo n.º 9
0
 public T GetDevConnSettingEnum <T>(string key)
 {
     return(MvaUtil.EnumParse <T>(this.GetDevConnSetting(key)));
 }