示例#1
0
        /// <summary>
        /// 初始化电机,先归零,再初始化
        /// </summary>
        /// <param name="Motor"></param>
        /// <param name="Comm"></param>
        /// <returns></returns>
        public static bool InitMotor(Electromotor Motor, AbstractComm Comm, bool OnlyStart = false, decimal gap = 0m)
        {
            Constants.UserAbort = false;
            //var result=MoveMotor(Motor, Comm, 0);
            var result = StopMotor(Motor, Comm, true);

            result = result && Comm.SetRegister(Motor.Distance.Addr, 0);
            result = result && Comm.SetCoilOff(Motor.InitCoil.Addr);
            result = result && Comm.SetCoilOn(Motor.InitCoil.Addr);
            Motor.CurrentDistance = 0m;
            Motor.IsBack          = true;
            Motor.IsStarted       = false;
            if (!OnlyStart)
            {
                result = result && Comm.Doned(30000, false, Motor.InitCoil);
                if (Motor.ProgramZero > 0)
                {
                    result = result && MoveMotor(Motor, Comm, 0, false, true, gap);
                }
            }
            else
            {
                if (Motor.ProgramZero > 0)
                {
                    Task.Run(() =>
                    {
                        MoveMotor(Motor, Comm, 0, false, true, gap);
                    });
                }
            }
            return(result);
        }
示例#2
0
        /// <summary>
        /// 停止电机
        /// </summary>
        /// <param name="Motor"></param>
        /// <param name="ForceStope"></param>
        /// <returns></returns>
        public bool StopMotor(Electromotor Motor)
        {
            var result = SetCoilOff(Motor.StartCoil.Addr);

            Motor.IsStarted = false;
            return(result);
        }
示例#3
0
        public static bool StartMotor(Electromotor Motor, AbstractComm Comm)
        {
            var result = Motor.IsStarted || Comm.SetCoilOn(Motor.StartCoil.Addr);

            Motor.IsStarted = result;
            return(result);
        }
示例#4
0
        /// <summary>
        /// 移到指定位置,移动前关闭反馈完成信号
        /// </summary>
        /// <param name="Motor">马达</param>
        /// <param name="Distance">运动位置</param>
        /// <param name="mask">掩码,如果不为null,要在调用前关闭程序中完成信号</param>
        /// <param name="OnlyStart">是否仅仅起动,不等待完成</param>
        /// <param name="Start">如果电机启动线圈没有打开,是否马上起动电机</param>
        /// <param name="gap">电机反向运动时的间隙</param>
        /// <returns></returns>
        public bool MoveMotor(Electromotor Motor, decimal?Distance, bool OnlyStart = false, bool Start = true, decimal gap = 0m, bool MinValueIsZero = true, bool IsSignal = true)
        {
            Constants.PauseResetEvent.WaitOne();
            if (Constants.UserAbort)
            {
                return(false);
            }
            if (!Distance.HasValue)
            {
                return(false);
            }
            if (MinValueIsZero && Distance.Value < 0)
            {
                Distance = 0;
            }
            var realdis = Distance.Value + gap;

            Motor.CurrentDistance = realdis;
            int  distance = Convert.ToInt32(Distance.Value * Convert.ToDecimal(Motor.Factor.SetValue));
            bool result   = true;

            //信号
            if (IsSignal)
            {
                //加速测试代码
                if (Start)
                {
                    result = SetCoilOff(Motor.DoneCoil.Addr);
                    result = result && StartMotor(Motor);
                }
                result = result && SetRegister(Motor.Distance.Addr, distance);
            }
            return(result);
        }
示例#5
0
        /// <summary>
        /// 设置电机启动线圈ON
        /// </summary>
        /// <param name="Motor"></param>
        /// <returns></returns>
        public bool StartMotor(Electromotor Motor, bool ForceStart = false)
        {
            var result = SetCoilOn(Motor.StartCoil.Addr);// (Motor.IsStarted && !ForceStart) || SetCoilOn(Motor.StartCoil.Addr);

            Motor.IsStarted = result;
            return(result);
        }
示例#6
0
        /// <summary>
        /// 移到指定位置,移动前关闭反馈完成信号
        /// </summary>
        /// <param name="Motor">马达</param>
        /// <param name="Distance">运动位置</param>
        /// <param name="mask">掩码,如果不为null,要在调用前关闭程序中完成信号</param>
        /// <param name="OnlyStart">是否仅仅起动,不等待完成</param>
        /// <param name="Start">如果电机启动线圈没有打开,是否马上起动电机</param>
        /// <param name="gap">电机反向运动时的间隙</param>
        /// <returns></returns>
        public bool MoveMotorBegin(Electromotor Motor)
        {
            var result = SetCoilOff(Motor.DoneCoil.Addr);

            result = result && StartMotor(Motor);
            return(result);
        }
示例#7
0
        public OtherPart()
        {
            IpAddress       = "10.139.1.2";
            Port            = 502;
            ScanMotor       = new Electromotor();
            SampleRackCoils = new PLCParameter <bool> [Constants.SampleRackCount];
            for (byte i = 0; i < Constants.SampleRackCount; i++)
            {
                SampleRackCoils[i] = new PLCParameter <bool>();
            }

            DoorCoil                = new PLCParameter <bool>();
            this.CameraLightCoil    = new PLCParameter <bool>();
            this.CameraFLightCoil   = new PLCParameter <bool>();
            this.HandStopCoil       = new PLCParameter <bool>();
            this.EmergencyStopCoil  = new PLCParameter <bool>();
            this.ErrorCode          = new PLCParameter <short>();
            this.LightAlarmCoil     = new PLCParameter <bool>();
            this.LightCoil          = new PLCParameter <bool>();
            this.PauseCoil          = new PLCParameter <bool>();
            this.PLCLightAlarmCoil  = new PLCParameter <bool>();
            this.PLCVoiceAlarmCoil  = new PLCParameter <bool>();
            this.StartSwitchCoil    = new PLCParameter <bool>();
            this.StopCode           = new PLCParameter <short>();
            this.TestSelfSwitchCoil = new PLCParameter <bool>();
            this.VoiceAlarmCoil     = new PLCParameter <bool>();
            this.AvoidanceTotal     = new PLCParameter <int>();
            this.AvoidanceSpace     = new PLCParameter <int>();
        }
示例#8
0
文件: Piercer.cs 项目: jume2003/SK800
 /// <summary>
 /// 破孔器
 /// </summary>
 public Piercer(bool Init)
 {
     if (Init)
     {
         YMotor = new Electromotor();
         ZMotor = new Electromotor();
     }
 }
示例#9
0
        /// <summary>
        /// 移到指定位置,移动前关闭反馈完成信号
        /// </summary>
        /// <param name="Motor">马达</param>
        /// <param name="Distance">运动位置</param>
        /// <param name="mask">掩码,如果不为null,要在调用前关闭程序中完成信号</param>
        /// <param name="OnlyStart">是否仅仅起动,不等待完成</param>
        /// <param name="Start">如果电机启动线圈没有打开,是否马上起动电机</param>
        /// <param name="gap">电机反向运动时的间隙</param>
        /// <returns></returns>
        public bool MoveMotorBegin(Electromotor Motor)
        {
            //关闭完成信号
            bool result = this.SetDoneCoilOff(Motor.DoneCoil.Addr);

            result = result && StartMotor(Motor);
            return(result);
        }
示例#10
0
 public Injector(byte count)
 {
     XMotor      = new Electromotor();
     TMotor      = new Electromotor();
     Entercloses = new Enterclose[count];
     for (byte i = 0; i < count; i++)
     {
         Entercloses[i] = new Enterclose(i);
     }
 }
示例#11
0
 public static void LoadMotor(Electromotor Motor, AbstractComm Comm)
 {
     LoadPLC <Boolean>(Motor.InitCoil, Comm);
     LoadPLC <Boolean>(Motor.StartCoil, Comm);
     LoadPLC <bool>(Motor.DoneCoil, Comm);
     LoadPLC <bool>(Motor.Zero, Comm);
     LoadPLC <float>(Motor.Distance, typeof(Int32), Motor.Factor.SetValue, Comm);
     //LoadPLC<float>(Motor.Factor, Comm);
     LoadPLC <float>(Motor.Maximum, Comm);
     LoadPLC <Int32>(Motor.Speed, Comm);
 }
示例#12
0
        /// <summary>
        /// 设置电机启动线圈ON
        /// </summary>
        /// <param name="Motor"></param>
        /// <returns></returns>
        public bool StartMotor(Electromotor Motor, bool is_wait = true)
        {
            //加速测试代码
            var result = true;

            if (Motor.IsStarted == false)
            {
                result = SetCoilOn(Motor.StartCoil.Addr, is_wait);
            }
            Motor.IsStarted = result;
            return(result);
        }
示例#13
0
        /// <summary>
        /// 初始化电机
        /// </summary>
        /// <param name="Motor"></param>
        /// <returns></returns>
        public bool InitMotor(Electromotor Motor, bool OnlyStart = false)
        {
            Constants.UserAbort = false;
            var result = StopMotor(Motor);

            result = result && SetCoilOff(Motor.DoneCoil.Addr);
            result = result && SetCoilOn(Motor.InitCoil.Addr);
            Motor.CurrentDistance = 0m;
            Motor.IsBack          = true;
            Motor.IsStarted       = false;
            return(result);
        }
示例#14
0
        /// <summary>
        /// 移到指定位置,移动前关闭反馈完成信号
        /// </summary>
        /// <param name="Motor">马达</param>
        /// <param name="Distance">运动位置</param>
        /// <param name="mask">掩码,如果不为null,要在调用前关闭程序中完成信号</param>
        /// <param name="OnlyStart">是否仅仅起动,不等待完成</param>
        /// <param name="Start">如果电机启动线圈没有打开,是否马上起动电机</param>
        /// <param name="gap">电机反向运动时的间隙</param>
        /// <returns></returns>
        public bool MoveMotorEnd(Electromotor Motor, decimal?Distance, decimal gap = 0m)
        {
            if (!Distance.HasValue)
            {
                return(false);
            }
            bool result  = true;
            var  realdis = Distance.Value + gap;

            Motor.CurrentDistance = realdis;
            int distance = Convert.ToInt32(Distance.Value * Convert.ToDecimal(Motor.Factor.SetValue));

            result = this.SetRegister(Motor.Distance.Addr, distance);
            return(result);
        }
示例#15
0
        public static bool StopMotor(Electromotor Motor, AbstractComm Comm, bool ForceStope = false)
        {
            var result = true;

            if (ForceStope)
            {
                result = result && Comm.SetCoilOff(Motor.StartCoil.Addr);
            }
            else
            {
                result = result && (!Motor.IsStarted || Comm.SetCoilOff(Motor.StartCoil.Addr));
            }

            Motor.IsStarted = false;
            return(result);
        }
示例#16
0
        /// <summary>
        /// 停止电机
        /// </summary>
        /// <param name="Motor"></param>
        /// <param name="ForceStope"></param>
        /// <returns></returns>
        public bool StopMotor(Electromotor Motor, bool ForceStop = false)
        {
            var result = true;

            if (ForceStop)
            {
                result = result && SetCoilOff(Motor.StartCoil.Addr);
            }
            else
            {
                result = result && (!Motor.IsStarted || SetCoilOff(Motor.StartCoil.Addr));
            }

            Motor.IsStarted = false;
            return(result);
        }
示例#17
0
 public void SetMotor(Electromotor Motor)
 {
     Set2PCB(Motor.Maximum, typeof(Int32), Motor.Factor.SetValue);
     Thread.Sleep(50);
     Set2PCB(Motor.Speed);
     Thread.Sleep(50);
     Set2PCB(Motor.InitSpeed);
     Thread.Sleep(50);
     Set2PCB(Motor.InitDistance);
     Thread.Sleep(50);
     Set2PCB(Motor.InitTime);
     Thread.Sleep(50);
     Set2PCB(Motor.DistanceTime);
     Thread.Sleep(50);
     Set2PCB(Motor.PressureTime);
     Thread.Sleep(50);
     Set2PCB(Motor.PressureSwitch);
     Thread.Sleep(50);
     Set2PCB(Motor.StopCoil);
     Thread.Sleep(50);
 }
示例#18
0
        /// <summary>
        /// 移到指定位置,移动前关闭反馈完成信号
        /// </summary>
        /// <param name="Motor"></param>
        /// <param name="Comm"></param>
        /// <returns></returns>
        public static bool MoveMotor(Electromotor Motor, AbstractComm Comm, decimal?Distance, bool OnlyStart = false, bool Start = true, decimal gap = 0m)
        {
            Constants.PauseResetEvent.WaitOne();
            if (Constants.UserAbort)
            {
                return(false);
            }
            if (!Distance.HasValue)
            {
                return(false);
            }
            if (Distance.Value < 0)
            {
                Distance = 0;
            }
            var realdis = Motor.GetRealDistance(Distance.Value, gap);

            if (Motor.CurrentDistance == realdis)
            {
                return(true);
            }
            else
            {
                //关闭完成信号
                Comm.SetCoil(false, Motor.DoneCoil.Addr);
            }
            Motor.CurrentDistance = realdis;
            int distance = Convert.ToInt32(realdis * Convert.ToDecimal(Motor.Factor.SetValue));
            var result   = Comm.SetRegister(Motor.Distance.Addr, distance);

            if (Start)
            {
                StartMotor(Motor, Comm);
            }
            if (!OnlyStart)
            {
                result = Comm.Doned(30000, true, Motor.DoneCoil);
            }
            return(result);
        }
示例#19
0
        public bool InitMotorForNoZero(Electromotor Motor, bool OnlyStart = false)
        {
            bool result = true;

            result = result && SetRegister(Motor.InitSpeed.Addr, Motor.InitSpeed.SetValue);
            result = result && MoveMotor(Motor, 1m * Convert.ToDecimal(Motor.InitDistance.SetValue), null, OnlyStart, true, 0, false);
            ReadRegister(Motor.DoneCoil.Addr, 0b111, 1, (int valuei, bool valueb) => {
                MoveMotor(Motor, 0, null, OnlyStart, true, 0, false);
                ReadRegister(Motor.DoneCoil.Addr, 0b111, 1, (int a, bool b) => {
                    Motor.IsBack          = true;
                    result                = result && StopMotor(Motor, true);
                    Motor.IsStarted       = false;
                    result                = result && SetRegister(Motor.Distance.Addr, 0);
                    result                = result && SetRegister(Motor.RealDistance.Addr, 0);
                    result                = result && SetRegister(Motor.Speed.Addr, Motor.Speed.SetValue);
                    Motor.CurrentDistance = 0m;
                });
            });

            //result =result && this.MoveMotor(Motor, 1m*Convert.ToDecimal( Motor.InitDistance.SetValue),null,OnlyStart,true,0,false);
            //result = result && this.MoveMotor(Motor, 0, null, OnlyStart, true, 0, false);
            return(result);
        }
示例#20
0
 public void ReadMotor(Electromotor Motor)
 {
     Read2PLC(Motor.Maximum);
     Thread.Sleep(50);
     Read2PLC(Motor.Speed);
     Thread.Sleep(50);
     Read2PLC(Motor.InitSpeed);
     Thread.Sleep(50);
     Read2PLC(Motor.InitDistance);
     Thread.Sleep(50);
     Read2PLC(Motor.InitTime);
     Thread.Sleep(50);
     Read2PLC(Motor.DistanceTime);
     Thread.Sleep(50);
     Read2PLC(Motor.PressureTime);
     Thread.Sleep(50);
     Read2PLC(Motor.PressureSwitch);
     Thread.Sleep(50);
     Read2PLC(Motor.StopCoil);
     Thread.Sleep(50);
     Read2PLC(Motor.StartAfter);
     Thread.Sleep(50);
 }
 private void CopyStatus(Electromotor sorce, Electromotor target)
 {
     target.CurrentDistance = sorce.CurrentDistance;
     target.IsBack          = sorce.IsBack;
     target.IsStarted       = sorce.IsStarted;
 }
示例#22
0
        public bool ChangeSpeed(Electromotor motor, int speed)
        {
            var res = SetRegister(motor.Speed.Addr, speed);

            return(res);
        }
示例#23
0
 public static void SetMotor(Electromotor Motor, AbstractComm Comm)
 {
     Set2PLC(Motor.Maximum, typeof(Int32), Motor.Factor.SetValue, Comm);
     Set2PLC(Motor.Speed, Comm);
 }
示例#24
0
        public bool ChangeSpeed(Electromotor motor, int speed, AbstractComm Comm)
        {
            var res = Comm.SetRegister(motor.Speed.Addr, speed);

            return(res);
        }