ACServerManager.cs 5.5 KB
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;

namespace OnlineStore.DeviceLibrary
{ 
    /// <summary>
    /// 外部调用的接口放在此文件中
    /// </summary>
    public partial class ACServerManager
    {
        public static bool IsShowMsg = false ;
        static HCAxisManager HCAxis = new HCAxisManager();
        public static bool OpenPort(string portName)
        {            
            return true;
        }
        public static void ColsePort(string portName)
        {            
        }

        public static void CloseAllPort()
        {

        }
              
     
        /// <summary>
        /// 是否成功打开伺服
        /// </summary> 
        public static bool ServerOnStatus(string portName, short slvAddr)
        {
            return HCAxis.IsServeoOn(portName, slvAddr);
        }
        /// <summary>
        /// 是否原点返回完成
        /// </summary> 
        public static bool IsHomeMoveEnd(string portName, short slvAddr)
        {
            return HCAxis.IsHomeMoveEnd(portName, slvAddr);
        }
        public static void InitSlvAddr(string portName, int slvAddr)
        {            
        }

        public static void InitSlvAddr(string portName, int slvAddr,int targetSpeed,int addSpeed,int delSpeed )
        {
            
        }
        public static void ServoOn(string portName, short slvAddr)
        {
            HCAxis.ServoOn(portName, slvAddr);
        }

        public static void ServoOff(string portName, short slvAddr)
        {
            HCAxis.ServoOff(portName, slvAddr);
        }

        public static void RelMove(string portName, short slvAddr, int targetPosition, int targetSpeed, int ptpAcc, int ptpDec)
        {
            HCAxis.RelMove(portName, slvAddr, targetPosition, targetSpeed, ptpAcc, ptpDec);
        }

        public static void HomeMove(string portName, short slvAddr, int highVel,int lowVel,int acc)
        {
            try
            {
                //先判断是否在原点,如果已经在原点,先向正方向走2000
                int homeSingle = GetHomeSingle(portName, slvAddr);
                if (homeSingle.Equals(1))
                {
                    int isHomeEnd = GetHomeEndStatus(portName, slvAddr);
                    if (isHomeEnd.Equals(1))
                    {
                        int value = 2000;
                        LogUtil.info("轴【" + portName + "_" + slvAddr + "】原点返回时发现原点已亮且回过原点,需要先相对走" + value);
                        HCAxis.RelMove(portName, slvAddr, value, highVel, acc, acc);
                        bool isStop = false;
                        for (int i = 0; i <= 10; i++)
                        {
                            Thread.Sleep(200);
                            if (GetBusyStatus(portName, slvAddr).Equals(0))
                            {
                                isStop = true;
                                LogUtil.info("轴【" + portName + "_" + slvAddr + "】 相对走" + value + "已结束");
                                break;
                            }
                        }
                        if (!isStop)
                        {
                            LogUtil.info("轴【" + portName + "_" + slvAddr + "】 相对走" + value + "已等待2分钟,直接停止");
                            SuddenStop(portName, slvAddr);
                        }
                    }
                    else
                    {
                        int volSpeed = Math.Abs(acc / 5);
                        int time = 1500;
                        LogUtil.info("轴【" + portName + "_" + slvAddr + "】原点返回时发现原点已亮但未回过原点,先匀速向上走" + time + ",速度[" + volSpeed + "]");

                        //需要匀速向上走
                        ACServerManager.SpeedMove(portName, slvAddr, volSpeed);
                        Thread.Sleep(time);
                        LogUtil.info("轴【" + portName + "_" + slvAddr + "】匀速 已等待" + time + ",直接停止");
                        SuddenStop(portName, slvAddr);
                        Thread.Sleep(100);
                    }
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("轴【" + portName + "_" + slvAddr + "】原点返回前验证是否在原点出错:" + ex.StackTrace);
            }
            HCAxis.HomeMove(portName, slvAddr, highVel, lowVel, acc);
        }
        public static void SpeedMove(string portName, short slvAddr, int speed)
        {
            HCAxis.SpeedMove(portName, slvAddr, speed);
        }

        public static bool isInPosition(ConfigMoveAxis Axis, int PPosition)
        {
            int outCount = ACServerManager.GetActualtPosition(Axis.DeviceName, Axis.GetAxisValue());
            int errorCount = Math.Abs(outCount - PPosition);
            if (errorCount <= Axis.CanErrorCountMin)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static void AbsMove(string portName, short slvAddr, int targetPosition, int targetSpeed, int ptpAcc, int ptpDec)
        {            
            //绝对运动
            HCAxis.AbsMove(portName, slvAddr, targetPosition, targetSpeed, ptpAcc, ptpDec);
        }
    }
}