Commit 791e9e5c 张东亮

入库时若翻板未放平,则报警,并将料盘送到NG口

1 个父辈 58320050
......@@ -9,8 +9,9 @@ using System.Threading.Tasks;
namespace DeviceLibrary
{
public class LiftMonitor:ISafetyDevice
public class LiftMonitor : ISafetyDevice
{
string doorClose = IO_Type.StringDoor_Close;
/// <summary>
/// 关闭端延时
/// </summary>
......@@ -26,7 +27,8 @@ namespace DeviceLibrary
int StrokeLength = 270000;
MoveInfo moveInfo1 = new MoveInfo("升降机构", false);
bool paused = false;
public LiftMonitor(string _up, string _down,string _saftylight,string _break, AxisBean _axisBean,int _StrokeLength,int _upspeed, int _downspeed= 0) {
public LiftMonitor(string _up, string _down, string _saftylight, string _break, AxisBean _axisBean, int _StrokeLength, int _upspeed, int _downspeed = 0)
{
up = _up;
down = _down;
saftylight = _saftylight;
......@@ -35,7 +37,8 @@ namespace DeviceLibrary
axisbreak = _break;
downspeed = _downspeed;
StrokeLength = _StrokeLength;
if (downspeed == 0) {
if (downspeed == 0)
{
downspeed = upspeed;
}
SafetyDevice.AddDevice(this);
......@@ -44,8 +47,10 @@ namespace DeviceLibrary
{
}
public bool isAtTOP {
get {
public bool isAtTOP
{
get
{
return IOManager.IOValue(up.ToString()).Equals(IO_VALUE.HIGH);
}
}
......@@ -56,7 +61,8 @@ namespace DeviceLibrary
return IOManager.IOValue(down.ToString()).Equals(IO_VALUE.HIGH);
}
}
public void LiftUp(MoveInfo moveInfo) {
public void LiftUp(MoveInfo moveInfo)
{
if (moveInfo == null)
moveInfo = moveInfo1;
......@@ -66,7 +72,8 @@ namespace DeviceLibrary
return;
}
paused = false;
if (IOManager.IOValue(up.ToString()).Equals(IO_VALUE.HIGH)) {
if (IOManager.IOValue(up.ToString()).Equals(IO_VALUE.HIGH))
{
moveInfo.log($"{axisBean.AxisName},已在位置,无需上升");
return;
}
......@@ -81,22 +88,26 @@ namespace DeviceLibrary
DateTime d = DateTime.Now;
moveInfo.log($"{axisBean.AxisName},LiftUp");
var wr = WaitResultInfo.WaitAction(new Func<WaitResultInfo, bool>(WaitUp), $"等待顶升[{axisBean.Config.Explain}]机构上升");
if (moveInfo!=null)
moveInfo.WaitList.Add(wr);
Task.Run(()=> {
while (!IOManager.IOValue(up.ToString()).Equals(IO_VALUE.HIGH)) {
if (moveInfo != null)
moveInfo.WaitList.Add(wr);
Task.Run(() =>
{
while (!IOManager.IOValue(up.ToString()).Equals(IO_VALUE.HIGH))
{
Task.Delay(15).Wait();
if (paused)
{
paused = false;
return;
}
if (IOManager.IOValue(IO_Type.SuddenStop_BTN).Equals(IO_VALUE.LOW)) {
if (IOManager.IOValue(IO_Type.SuddenStop_BTN).Equals(IO_VALUE.LOW))
{
moveInfo.log("设备急停");
Pause();
emergencyStop();
return;
}
if (!string.IsNullOrEmpty(saftylight) && IOManager.IOValue(saftylight).Equals(IO_VALUE.LOW) && IOManager.IOValue(down.ToString()).Equals(IO_VALUE.LOW)) {
if (!string.IsNullOrEmpty(saftylight) && IOManager.IOValue(saftylight).Equals(IO_VALUE.LOW) && IOManager.IOValue(down.ToString()).Equals(IO_VALUE.LOW))
{
moveInfo.log("安全光栅触发停止");
Pause();
return;
......@@ -112,7 +123,7 @@ namespace DeviceLibrary
IOManager.IOMove(axisbreak, IO_VALUE.LOW);
axisBean.ServoOff();
}
var t = (DateTime.Now - d).TotalSeconds;
moveInfo.log($"{axisBean.AxisName},上升到位,s:{t}");
});
......@@ -132,10 +143,11 @@ namespace DeviceLibrary
IOManager.IOMove(axisbreak, IO_VALUE.LOW);
axisBean.ServoOff();
}
return true;
return true;
}
if (!axisBean.IsBusy) {
if (!axisBean.IsBusy)
{
LogUtil.info("恢复继续上升");
LiftUp(null);
}
......@@ -170,7 +182,8 @@ namespace DeviceLibrary
if (moveInfo != null)
moveInfo.WaitList.Add(wr);
Task.Run(() => {
Task.Run(() =>
{
while (!IOManager.IOValue(down.ToString()).Equals(IO_VALUE.HIGH))
{
Task.Delay(15).Wait();
......@@ -182,7 +195,7 @@ namespace DeviceLibrary
if (IOManager.IOValue(IO_Type.SuddenStop_BTN).Equals(IO_VALUE.LOW))
{
LogUtil.info("设备急停");
Pause();
emergencyStop();
return;
}
if (!string.IsNullOrEmpty(saftylight) && IOManager.IOValue(saftylight).Equals(IO_VALUE.LOW))
......@@ -232,8 +245,11 @@ namespace DeviceLibrary
}
return false;
}
public void Pause()
bool isDoorClose()
{
return IOManager.IOValue(doorClose).Equals(IO_VALUE.HIGH);
}
void emergencyStop()
{
paused = true;
axisBean.SuddenStop();
......@@ -242,7 +258,19 @@ namespace DeviceLibrary
IOManager.IOMove(axisbreak, IO_VALUE.LOW);
axisBean.ServoOff();
}
}
public void Pause()
{
if (!isDoorClose())
{
paused = true;
axisBean.SuddenStop();
if (!string.IsNullOrEmpty(axisbreak))
{
IOManager.IOMove(axisbreak, IO_VALUE.LOW);
axisBean.ServoOff();
}
}
}
DateTime LastResumeTime = DateTime.Now;
public int ResumeWaitTimeSec = 0;
......@@ -268,7 +296,7 @@ namespace DeviceLibrary
}
}
}
catch{ }
catch { }
}
}
}
......@@ -65,7 +65,8 @@ namespace DeviceLibrary
if (ClampMoveInfo.MoveStep != MoveStep.ReelClamp_WaitGaugeHeight)
{
ClampMoveInfo.log($"不再等待测高的步骤们无法设置盘高:{height}");
return; }
return;
}
ClampMoveInfo.NextMoveStep(MoveStep.ReelClamp_GetHeight);
ClampMoveInfo.MoveParam.PlateH = height;
ClampMoveInfo.log($"设置盘高:{height}");
......@@ -76,7 +77,7 @@ namespace DeviceLibrary
{
if (CheckWait(ClampMoveInfo))
return;
switch (ClampMoveInfo.MoveStep)
{
case MoveStep.Wait:
......@@ -89,7 +90,7 @@ namespace DeviceLibrary
case MoveStep.ReelClamp_01:
ClampMoveInfo.NextMoveStep(MoveStep.ReelClamp_02);
ClampMoveInfo.log($"取料夹爪下降");
Clamp_Axis.AbsMove(ClampMoveInfo,Config.Clamp_P2,Config.Clamp_P2_speed);
Clamp_Axis.AbsMove(ClampMoveInfo, Config.Clamp_P2, Config.Clamp_P2_speed);
break;
case MoveStep.ReelClamp_02:
ClampMoveInfo.NextMoveStep(MoveStep.ReelClamp_03);
......@@ -103,7 +104,7 @@ namespace DeviceLibrary
break;
case MoveStep.ReelClamp_04:
ClampMoveInfo.NextMoveStep(MoveStep.ReelClamp_05);
ClampMoveInfo.log($"检测盘宽");
ClampMoveInfo.log($"关闭翻板门,检测盘宽");
//CylinderMove(ClampMoveInfo, IO_Type.StringPosChecker_Home, IO_Type.StringPosChecker_Work, IO_VALUE.HIGH);
ClampMoveInfo.MoveParam.PlateW = GetWidth();
CloseFlipDoor(ClampMoveInfo);
......@@ -149,23 +150,39 @@ namespace DeviceLibrary
Clamp_Axis.AbsMove(ClampMoveInfo, Config.Clamp_P1, Config.Clamp_P1_speed);
break;
case MoveStep.ReelClamp_09:
ClampMoveInfo.NextMoveStep(MoveStep.ReelClamp_10);
if (RobotManage.InoutDebugMode)
if (IOValue(IO_Type.ReelFlipDoor_L_Work).Equals(IO_VALUE.LOW))
{
ClampMoveInfo.log($"自动出入库模式,跳过拍照扫码");
ClampMoveInfo.NextMoveStep(MoveStep.InWaitServerCallback);
ClampMoveInfo.NextMoveStep(MoveStep.NGOUT_01);
ClampMoveInfo.log($"左侧翻板水平信号未亮,料盘NG:{ClampMoveInfo.MoveParam.NgMsg}");
RobotManage.UserPause(crc.GetString("l_flipDoor_no_work", "左侧翻板水平信号未亮"));
}
else if (ClampMoveInfo.MoveParam.IsNg)
else if (IOValue(IO_Type.ReelFlipDoor_R_Work).Equals(IO_VALUE.LOW))
{
ClampMoveInfo.NextMoveStep(MoveStep.NGOUT_01);
ClampMoveInfo.log($"料盘数据NG:{ClampMoveInfo.MoveParam.NgMsg}");
ClampMoveInfo.log($"右侧翻板水平信号未亮,料盘NG:{ClampMoveInfo.MoveParam.NgMsg}");
RobotManage.UserPause(crc.GetString("r_flipDoor_no_work", "右侧翻板水平信号未亮"));
}
else
{
ClampMoveInfo.log($"拍照扫码");
scantrytimes = 0;
ScanCode();
ClampMoveInfo.NextMoveStep(MoveStep.ReelClamp_10);
if (RobotManage.InoutDebugMode)
{
ClampMoveInfo.log($"自动出入库模式,跳过拍照扫码");
ClampMoveInfo.NextMoveStep(MoveStep.InWaitServerCallback);
}
else if (ClampMoveInfo.MoveParam.IsNg)
{
ClampMoveInfo.NextMoveStep(MoveStep.NGOUT_01);
ClampMoveInfo.log($"料盘数据NG:{ClampMoveInfo.MoveParam.NgMsg}");
}
else
{
ClampMoveInfo.log($"拍照扫码");
scantrytimes = 0;
ScanCode();
}
}
break;
case MoveStep.ReelClamp_10:
if (ScanTask.IsCompleted)
......@@ -187,8 +204,8 @@ namespace DeviceLibrary
ClampMoveInfo.MoveParam.IsNg = false;
ClampMoveInfo.MoveParam.codeInfos = x;
var cc = x.Select((a) => a.CodeStr);
LastCode = String.Join("##",cc);
ServerCM.SendInStoreRequest(cc.ToArray(), ClampMoveInfo.MoveParam,true);
LastCode = String.Join("##", cc);
ServerCM.SendInStoreRequest(cc.ToArray(), ClampMoveInfo.MoveParam, true);
}
}
else if (ClampMoveInfo.IsTimeOut(15))
......@@ -225,7 +242,7 @@ namespace DeviceLibrary
}
else if (ClampMoveInfo.IsTimeOut(5))
Msg.add(crc.GetString(L.wait_server_response_pos, "等待服务器返回库位"), MsgLevel.info);
break;
case MoveStep.WaitInStore:
Msg.add(crc.GetString(L.reel_wait_in_store, "料盘等待入库"), MsgLevel.info);
......@@ -284,10 +301,11 @@ namespace DeviceLibrary
if (ConfigHelper.Config.Get("Device_ManualCloseSingleDoor", false))
RobotManage.UserPause(crc.GetString("please_take_ngdoor_reel", "等待取走单口料盘"));
}
else {
else
{
if (!ConfigHelper.Config.Get("CamTestReel_Ability", false))
ClampMoveInfo.NextMoveStep(MoveStep.NGOUT_04);
RobotManage.UserPause(crc.GetString("please_take_ngdoor_reel","等待取走单口料盘"));
RobotManage.UserPause(crc.GetString("please_take_ngdoor_reel", "等待取走单口料盘"));
}
}
else
......@@ -313,7 +331,7 @@ namespace DeviceLibrary
Msg.add(crc.GetString(L.x29_low_no_reel, "检测相机打开失败."), MsgLevel.alarm);
}
else
if (IOValue(IO_Type.SafetyLightCurtains).Equals(IO_VALUE.HIGH)&& !h.Value)
if (IOValue(IO_Type.SafetyLightCurtains).Equals(IO_VALUE.HIGH) && !h.Value)
{
ClampMoveInfo.NextMoveStep(MoveStep.NGOUT_06);
ClampMoveInfo.log("关门NG口门");
......@@ -358,7 +376,8 @@ namespace DeviceLibrary
else
if (!ConfigHelper.Config.Get("CamTestReel_Ability", false) || h.Value)
{ }
else {
else
{
ClampMoveInfo.log("单盘入库没有检测到放入料盘");
ClampMoveInfo.NextMoveStep(MoveStep.Wait);
}
......@@ -380,11 +399,11 @@ namespace DeviceLibrary
}
private int GetWidth()
{
if(ConfigHelper.Config.Get("Device_IO_HasX20",true) && IOManager.IOValue(IO_Type.WidthCheck_15).Equals(IO_VALUE.HIGH))
if (ConfigHelper.Config.Get("Device_IO_HasX20", true) && IOManager.IOValue(IO_Type.WidthCheck_15).Equals(IO_VALUE.HIGH))
{
return 15;
}
else if(IOManager.IOValue(IO_Type.WidthCheck_13).Equals(IO_VALUE.HIGH))
else if (IOManager.IOValue(IO_Type.WidthCheck_13).Equals(IO_VALUE.HIGH))
{
return 13;
}
......@@ -400,11 +419,11 @@ namespace DeviceLibrary
string state = "";
if (ClampMoveInfo.MoveStep == MoveStep.Wait)
{
return crc.GetString(L.free,"空闲中");
return crc.GetString(L.free, "空闲中");
}
else if (ClampMoveInfo.MoveStep > MoveStep.NGOUT_01)
{
state = crc.GetString(L.ngdoor, "单料口:") +ClampMoveInfo.MoveParam.NgMsg;
state = crc.GetString(L.ngdoor, "单料口:") + ClampMoveInfo.MoveParam.NgMsg;
}
else if (ClampMoveInfo.MoveStep >= MoveStep.ReelClamp_09)
{
......@@ -416,7 +435,8 @@ namespace DeviceLibrary
}
return state;
}
public bool IsScanRunning() {
public bool IsScanRunning()
{
if (ScanTask == null)
return false;
......@@ -427,24 +447,25 @@ namespace DeviceLibrary
/// 扫码线程
/// </summary>
Task<List<CodeInfo>> ScanTask;
public void ScanCode() {
public void ScanCode()
{
ClampMoveInfo.log("开始扫码");
//RightMoveInfo.OneWaitCanEndStep = true;
//RightMoveInfo.WaitList.Add(WaitResultInfo.WaitScanCode());
//RightMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
try
{
ScanTask = Task.Run(new Func<List<CodeInfo>>(()=>
ScanTask = Task.Run(new Func<List<CodeInfo>>(() =>
{
IOMove(IO_Type.Device_Led, IO_VALUE.LOW);
IOMove(IO_Type.Camera_Led, IO_VALUE.HIGH);
//Task.Delay(10).Wait();
List<CodeInfo> LastCodeList;
LastCodeList = CodeManager.CameraScan(CodeManager.hikNameList);
//BoxParam labelParam = new BoxParam();
//labelParam.codeInfos = new List<CodeInfo>(LastCodeList);
//if (!Common.codeProcess(labelParam, out _))
//{
// Task.Delay(500).Wait();
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!