關於安碩

【服務項目】

 自動化設備控制系統及機構設計
 PC Based 控制系統設計
 PLC 及 HMI 程式設計
 多軸運動控制
 機器視覺檢測系統設計
 資料收集及遠端監控
 設備電控電路設計及控制盤體配線
 機械手臂整合應用
 舊有設備整理及改善
 客製化程式開發
 IPC / 軸控模組 / IO 模組 代理

系統整合外包服務 E-mail: ling.ryan@gmail.com 歡迎來信連絡

2019年10月3日 星期四

[筆記] FAULHABER MCBL 驅動器命令控制




class clsFaulhaber
    {
        private static SerialPort conn= new SerialPort();
        private static int POS = 0x00;
        private static int OST = 0x00;
        private static bool Enable = false;
        private static bool Error = false;

        public static void Open()
        {
            conn.PortName = "COM2";
            conn.BaudRate = 9600;
            conn.DataBits = 8;
            conn.StopBits = StopBits.One;
            conn.Parity = Parity.None;
            conn.ReadTimeout = 1500;
            try
            {
                conn.Open();
            }
            catch
            {
                MessageBox.Show("Open " + conn.PortName + " Fill! Program will Run in debug Mode ");
                return;
            }

        }

        private static void SendCommend(SerialPort sp, string str)
        { 
            byte[] data = Encoding.Default.GetBytes(str + '\r');
            sp.Write(data, 0, data.Length);
        }
        private static bool GetResponse(SerialPort sp, ref string str)
        {
            sp.ReadTimeout = 3000;
            try
            {
               str = sp.ReadTo("\r\n");
               Error = false;
            }
            catch
            {
                str = string.Empty;
                Error = true;
                return false;
            }
            return true;
        }

        public static void ReadPOS()
        {
            string str = string.Empty;
            conn.DiscardInBuffer();
            conn.DiscardOutBuffer();
            SendCommend(conn, "POS");
            str = string.Empty;
            if (GetResponse(conn, ref str))
            {
                if (clsLib.IsNumber(str))
                {
                    POS = Convert.ToInt32(str);
                }
            }
        }

        public static void ReadOST()
        {
            string str = string.Empty;
            conn.DiscardInBuffer();
            conn.DiscardOutBuffer();
            SendCommend(conn, "OST");
            str = string.Empty;
            if (GetResponse(conn, ref str))
            {
                if (clsLib.IsNumber(str))
                {
                    OST = Convert.ToInt32(str);
                }

            }
        }

        public static void Task()
        {
            string str = string.Empty;
            while (true)
            {
                if (!conn.IsOpen)
                {
                    Thread.Sleep(2000);
                    continue;
                }
                ReadPOS();
                ReadOST();

                Thread.Sleep(10);
            }
            
        }
        
        public static bool SVON(bool EN)
        {
            if (!conn.IsOpen) return false;

            string str = string.Empty;
            bool flag = false;
            if (!EN) SendCommend(conn, "DI");
            else SendCommend(conn, "EN");

            Enable = false;

            if (GetResponse(conn, ref str))
            {
                if (str == "OK")
                {
                    flag = true;
                }
            }
            if (!flag) Enable = false;
            else Enable = EN;

            return flag;
        }

        public static bool SearchHome()
        {
            OST = OST & 0xFFFF;
            if (!conn.IsOpen) return false;

            string str = string.Empty;
            bool flag = false;
            conn.DiscardInBuffer();
            conn.DiscardOutBuffer();
            SendCommend(conn, "GOHOSEQ");

            if (GetResponse(conn, ref str))
            {
                if (str == "OK")
                {
                    flag = true;
                }
            }

            return flag;
        }

        public static  bool Reset()
        {
            if (!conn.IsOpen) return false;

            string str = string.Empty;
            bool flag = false;

            SendCommend(conn, "HO");

            if (GetResponse(conn, ref str))
            {
                if (str == "OK")
                {
                    flag = true;
                }
            }

            return flag;
        }

        public static bool Move(int target)
        {
            OST = OST & 0xFFFF;
            if (!conn.IsOpen) return false;

 
            string str = string.Empty;
            bool flag = false;

            SendCommend(conn, "LA" + target.ToString());

            if (!GetResponse(conn, ref str))
            {

                return flag;
            }

            if (str != "OK")
            {

                return flag;
            }

            SendCommend(conn, "M");

            if (!GetResponse(conn, ref str))
            {

                return flag;
            }

            if (str != "OK")
            {

                return flag;
            }

            flag = true;

            return flag;
        }

        public static int Encode
        {
            get
            {
                return POS;
            }
        }

        public static bool TPOS
        {
            get
            {
                return ((OST & 0x10000) > 0x00) ? true : false;
            }
        }

        public static bool Homing
        {
            get
            {
                return ((OST & 0x01) > 0x00) ? true : false;
            }
        }

        public static bool SON
        {
            get
            {
                return Enable;
            }
        }

        public static bool Alarm
        {
            get
            {
                if (!conn.IsOpen) return true;
                return Error;
            }
        }
    }

沒有留言:

張貼留言