/// <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); }
/// <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); }
public static bool StartMotor(Electromotor Motor, AbstractComm Comm) { var result = Motor.IsStarted || Comm.SetCoilOn(Motor.StartCoil.Addr); Motor.IsStarted = result; return(result); }
/// <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); }
/// <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); }
/// <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); }
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>(); }
/// <summary> /// 破孔器 /// </summary> public Piercer(bool Init) { if (Init) { YMotor = new Electromotor(); ZMotor = new Electromotor(); } }
/// <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); }
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); } }
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); }
/// <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); }
/// <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); }
/// <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); }
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); }
/// <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); }
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); }
/// <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); }
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); }
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; }
public bool ChangeSpeed(Electromotor motor, int speed) { var res = SetRegister(motor.Speed.Addr, speed); return(res); }
public static void SetMotor(Electromotor Motor, AbstractComm Comm) { Set2PLC(Motor.Maximum, typeof(Int32), Motor.Factor.SetValue, Comm); Set2PLC(Motor.Speed, Comm); }
public bool ChangeSpeed(Electromotor motor, int speed, AbstractComm Comm) { var res = Comm.SetRegister(motor.Speed.Addr, speed); return(res); }