Commit e004515f LN

复位时去校准位进行声波信号检测。

1 个父辈 f8461585
......@@ -164,7 +164,7 @@ namespace DeviceLibrary
if (r > 0)
{
var recvdata = Encoding.ASCII.GetString(recv, 0, r);
log("recvdata: " + recvdata);
debuglog("recvdata: " + recvdata);
return recv.Take(r).ToArray();//.Split(',');
}
}
......@@ -192,6 +192,11 @@ namespace DeviceLibrary
loge.Info(Name + $"[{comPortName}]" + ":" + msg);
Console.WriteLine(msg);
}
void debuglog(string msg)
{
loge.Info(Name + $"[{comPortName}]" + ":" + msg);
Console.WriteLine(msg);
}
static class CommandByte
{
public static byte[] GetDeviceID = ConvertStringToByteArray("DD 55 EE 00 00 00 00 00 8F 01 00 00 00 03 00 01 00 00 00 AA BB");
......
......@@ -237,7 +237,7 @@ namespace DeviceLibrary
port.DiscardInBuffer();
CalculateCRC(recvdata, recvdata.Length - 2, out ushort checksun);
var crcbyte = BitConverter.GetBytes(checksun);
log(cmdname + "\trecvdata: " + BitConverter.ToString(recvdata).Replace("-", " ") + " crc:" + BitConverter.ToString(crcbyte).Replace("-", " "));
debuglog(cmdname + "\trecvdata: " + BitConverter.ToString(recvdata).Replace("-", " ") + " crc:" + BitConverter.ToString(crcbyte).Replace("-", " "));
if (recvdata.Length > 5
&& recvdata[1] == buff[1]
&& recvdata[recvdata.Length - 2] == crcbyte[0]
......@@ -388,5 +388,10 @@ namespace DeviceLibrary
loge.Info("x光高压:" + msg);
Console.WriteLine(msg);
}
void debuglog(string msg)
{
loge.Debug("x光高压:" + msg);
Console.WriteLine(msg);
}
}
}
......@@ -204,7 +204,6 @@ namespace DeviceLibrary
UpDown_Axis.AbsMove(MoveInfo, Fix.UpDown_PH, Config.UpDown_P1_speed);
MoveInfo.log($"{storeMoveType}:升降轴去取料高点【{Fix.UpDown_PH}】【{Config.UpDown_P1_speed}】");
SensorProcess();
break;
case MoveStep.StoreFIX02:
MoveInfo.NextMoveStep(MoveStep.StoreFIX03);
......@@ -214,11 +213,6 @@ namespace DeviceLibrary
MoveInfo.log($"{storeMoveType}:进出轴去取料点【{Fix.InOut_P2}】【{Config.InOut_P2_speed}】");
break;
case MoveStep.StoreFIX03:
bool sCheck= SensorProcess();
if (!sCheck)
{
}
RobotManage.CameraA.CameraGrabOne(RobotManage.CameraA.GetFixtureStateFilename(To.posid, WareCode, storeMoveType, FixtureState.ToFix));
MoveInfo.NextMoveStep(MoveStep.StoreFIX04);
......@@ -230,6 +224,14 @@ namespace DeviceLibrary
break;
case MoveStep.StoreFIX04:
if (To.Reel.PlateW.Equals(7) && RobotManage.NeedSensorPro())
{
MoveInfo.NextMoveStep(MoveStep.StoreFIX041_Sensor);
MoveInfo.log($"{storeMoveType}:等待500ms进行声波传感器检测");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(500));
}
else
{
if (Setting_Init.Enable_CheckReelLocInFix)
{
MoveInfo.NextMoveStep(MoveStep.StoreFIX04_01_InoutBackToP1);
......@@ -241,8 +243,23 @@ namespace DeviceLibrary
MoveInfo.NextMoveStep(MoveStep.StoreFIX05);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
}
}
break;
case MoveStep.StoreFIX041_Sensor:
RobotManage.SensorProcess();
if (Setting_Init.Enable_CheckReelLocInFix)
{
MoveInfo.NextMoveStep(MoveStep.StoreFIX04_01_InoutBackToP1);
InOut_Axis.AbsMove(MoveInfo, Config.InOut_P1, Config.InOut_P1_speed);
MoveInfo.log($"{storeMoveType}:进出轴回到待机点【{Config.InOut_P1}】【{Config.InOut_P1_speed}】");
}
else
{
MoveInfo.NextMoveStep(MoveStep.StoreFIX05);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
}
break;
#region 料盘放置位置检查
case MoveStep.StoreFIX04_01_InoutBackToP1:
MoveInfo.NextMoveStep(MoveStep.StoreFIX04_02_UpToCamLoc);
......@@ -461,46 +478,5 @@ namespace DeviceLibrary
// return RobotManage.CameraA;
//}
/// <summary>
/// 返回ture表示没问题,返回false需要报警
/// </summary>
/// <returns></returns>
private bool SensorProcess()
{
try
{
if (Setting_Init.Device_DauxiKS107_PortName == "" || RobotManage.dauxiKS107Controller == null || RobotManage.dauxiKS107Controller.PortIsOpen ()== false)
{
return true ;
}
if (RobotManage.dauxiKS107Controller.Quary(out int value, out string errMsg))
{
int cha = value - Setting_Init.Device_DauxiKS107_BaseValue;
if (cha > Setting_Init.Device_DauxiKS107_ErrorValue)
{
TimeSpan span = DateTime.Now - RobotManage.LastResetTime;
RobotManage.SensorNeedReset = true;
if (span.TotalHours > 1)
{
LogUtil.error($"传感器误差过大,需要复位:当前值:{value},基准值:{Setting_Init.Device_DauxiKS107_BaseValue},SensorErroCount={RobotManage.SensorNeedReset}, 最大误差:{Setting_Init.Device_DauxiKS107_ErrorValue}," +
$"上次复位时间{RobotManage.LastResetTime.ToShortDateString()},一小时内出现红外传感器检测错误,需要报警");
RobotManage.SensorNeedAlarm = true;
return false;
}
else
{
LogUtil.error($"传感器误差过大,需要复位:当前值:{value},基准值:{Setting_Init.Device_DauxiKS107_BaseValue},SensorErroCount={RobotManage.SensorNeedReset},最大误差:{Setting_Init.Device_DauxiKS107_ErrorValue}");
}
}
}
}
catch (Exception ex)
{
LogUtil.error("SensorProcess 出错:" + ex.ToString());
}
return true;
}
}
}
......@@ -224,7 +224,6 @@ namespace DeviceLibrary
if (_alarmType.Equals(AlarmType.AxisAlarm) || _alarmType.Equals(AlarmType.AxisMoveError))
{
LogUtil.error(Name + "轴报警, 停止运动, 打开报警灯");
StopMove(true);
}
else if (_alarmType == AlarmType.SuddenStop)
......
......@@ -498,9 +498,17 @@ namespace DeviceLibrary
}
else
{
if (RobotManage.NeedSensorPro())
{
ResetMoveInfo.NextMoveStep(MoveStep.H21_HomeStartCheck);
ResetMoveInfo.log("夹爪上没有料盘,开始去进行超声感应器检测");
}
else
{
ResetMoveInfo.NextMoveStep(MoveStep.HEND_HomeReset);
ResetMoveInfo.log("夹爪上上没有料盘");
}
}
break;
case MoveStep.H08_HomeReset:
ResetMoveInfo.NextMoveStep(MoveStep.H09_HomeReset);
......@@ -596,8 +604,16 @@ namespace DeviceLibrary
}
else if (IOValue(IO_Type.SafetyLightCurtains).Equals(IO_VALUE.HIGH) && !h.Value)
{
if (RobotManage.NeedSensorPro())
{
ResetMoveInfo.NextMoveStep(MoveStep.H21_HomeStartCheck);
ResetMoveInfo.log("关门NG口门,开始去进行超声感应器检测");
}
else
{
ResetMoveInfo.NextMoveStep(MoveStep.HEND_HomeReset);
ResetMoveInfo.log("关门NG口门");
}
CloseSingleDoor(ResetMoveInfo);
OpenFlipDoor(ResetMoveInfo);
}
......@@ -606,6 +622,93 @@ namespace DeviceLibrary
Msg.add(crc.GetString(L.wait_put_reel_into_ngdoor, "等待阻挡物离开光栅"), MsgLevel.warning);
}
break;
#region 声波传感器检测
case MoveStep.H21_HomeStartCheck:
FixPos = BoxStorePosition.GetFixPos(Config, new ReelParam("",7,8));
if (FixPos == null)
{
ResetMoveInfo.NextMoveStep(MoveStep.HEND_HomeReset);
ResetMoveInfo.log("未找到校准库位,不进行声波传感器检测");
}
else
{
ResetMoveInfo.NextMoveStep(MoveStep.H22_HomeCheck);
Middle_Axis.AbsMove(ResetMoveInfo, FixPos.Middle_P2, Config.Middle_P2_speed);
ResetMoveInfo.log($"{FixPos.posid} 旋转轴去取料点P2【{FixPos.Middle_P2}】【{Config.Middle_P2_speed}】");
UpDown_Axis.AbsMove(ResetMoveInfo, FixPos.UpDown_PH, Config.UpDown_P1_speed);
ResetMoveInfo.log($" {FixPos.posid}升降轴去取料高点【{FixPos.UpDown_PH}】【{Config.UpDown_P1_speed}】");
Comp_Axis.AbsMove(ResetMoveInfo, FixPos.Comp_PL, Config.Comp_P2_speed);
ResetMoveInfo.log($"{FixPos.posid}:压紧轴去压紧低点【{FixPos.Comp_PL}】【{Config.Comp_P2_speed}】");
}
break;
case MoveStep.H22_HomeCheck:
ResetMoveInfo.NextMoveStep(MoveStep.H23_HomeCheck);
InOut_Axis.AbsMove(ResetMoveInfo, FixPos.InOut_P2, Config.InOut_P2_speed);
InOut_Axis.SensorDetection(Setting_Init.Device_WeightSensor_MaxValue);
ResetMoveInfo.log($"{FixPos.posid}:进出轴去取料点【{FixPos.InOut_P2}】【{Config.InOut_P2_speed}】");
break;
case MoveStep.H23_HomeCheck:
ResetMoveInfo.NextMoveStep(MoveStep.H24_HomeCheck);
Comp_Axis.AbsMove(ResetMoveInfo, FixPos.Comp_PH, Config.Comp_P2_speed);
ResetMoveInfo.log($"{FixPos.posid}:压紧轴去压紧高点【{FixPos.Comp_PH}】【{Config.Comp_P2_speed}】");
UpDown_Axis.AbsMove(ResetMoveInfo, FixPos.UpDown_PL, Config.UpDown_P3_speed / 2);
ResetMoveInfo.log($"{FixPos.posid}:升降轴去取料低点【{FixPos.UpDown_PL}】【{Config.UpDown_P3_speed / 2}】");
break;
case MoveStep.H24_HomeCheck:
ResetMoveInfo.NextMoveStep(MoveStep.H25_HomeCheck);
ResetMoveInfo.log($"{FixPos.posid}:等待500ms进行声波传感器检测");
ResetMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(500));
break;
case MoveStep.H25_HomeCheck:
bool checkOk= RobotManage.SensorProcess();
if (checkOk)
{
ResetMoveInfo.NextMoveStep(MoveStep.H27_HomeCheck);
InOut_Axis.AbsMove(ResetMoveInfo, Config.InOut_P1, Config.InOut_P1_speed);
ResetMoveInfo.log($"{FixPos.posid}:进出轴返回待机点【{Config.InOut_P1}】【{Config.InOut_P1_speed}】");
}
else
{
//直接到报警步骤
ResetMoveInfo.NextMoveStep(MoveStep.H31_HomeError);
ResetMoveInfo.log($"{FixPos.posid}:声波感应器误差过大,需要报警");
}
break;
case MoveStep.H27_HomeCheck:
ResetMoveInfo.NextMoveStep(MoveStep.H28_HomeCheck);
ResetMoveInfo.log("旋转轴,升降轴,压紧轴,到P1待机点");
Middle_Axis.AbsMove(ResetMoveInfo, Config.Middle_P1, Config.Middle_P1_speed);
UpDown_Axis.AbsMove(ResetMoveInfo, Config.UpDown_P1, Config.UpDown_P1_speed);
Comp_Axis.AbsMove(ResetMoveInfo,Config.Comp_P1,Config.Comp_P1_speed);
break;
case MoveStep.H28_HomeCheck:
ResetMoveInfo.NextMoveStep(MoveStep.HEND_HomeReset);
ResetMoveInfo.log("声波感应器检测OK");
break;
case MoveStep.H31_HomeError:
ResetMoveInfo.NextMoveStep(MoveStep.HEND_HomeReset);
ResetMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
Msg.add(crc.GetString("shengboError", "声波感应器误差过大,请检查后重新复位"), MsgLevel.alarm);
break;
// H22_HomeCheck,//旋转轴到校准为止,升降轴到高点,压紧轴压紧
//H23_HomeCheck,//进出轴进入
//H24_HomeCheck,//升降轴下降,压紧轴放松
//H25_HomeCheck,//等待500毫秒
//H26_HomeCheck,//开始检测
//H27_HomeCheck,//进出轴返回待机点
//H28_HomeCheck,//旋转轴升降轴到待机点
//H31_HomeError,//检测错误,报警
#endregion
case MoveStep.HEND_HomeReset:
//forceHome = false;
StringMoveInfo.NewMove(MoveStep.Wait);
......@@ -651,6 +754,7 @@ namespace DeviceLibrary
break;
}
}
private BoxStorePosition FixPos = null;
//bool _IgnoreSafecheck = false;
public bool IgnoreSafecheck
{
......
......@@ -37,6 +37,18 @@ namespace DeviceLibrary
H14_HomeReset,
H15_HomeReset,
H16_HomeReset,
//回原点后,声波传感器检测
H21_HomeStartCheck,
H22_HomeCheck,//旋转轴到校准为止,升降轴到高点,压紧轴压紧
H23_HomeCheck,//进出轴进入
H24_HomeCheck,//升降轴下降,压紧轴放松
H25_HomeCheck,//等待500毫秒
H26_HomeCheck,//开始检测
H27_HomeCheck,//进出轴返回待机点
H28_HomeCheck,//旋转轴升降轴到待机点
H31_HomeError,//检测错误,报警
HEND_HomeReset,
......@@ -148,6 +160,7 @@ namespace DeviceLibrary
StoreFIX02,
StoreFIX03,
StoreFIX04,
StoreFIX041_Sensor,//等待500ms后超声感应器检测
StoreFIX04_01_InoutBackToP1,
StoreFIX04_02_UpToCamLoc,
StoreFIX04_03_CheckLocation,
......
......@@ -301,8 +301,57 @@ namespace DeviceLibrary
Setting_Init.Buffer_FixBuffInfo = "";
}
#endregion
public static bool NeedSensorPro()
{
if (Setting_Init.Device_DauxiKS107_PortName == "" || RobotManage.dauxiKS107Controller == null || RobotManage.dauxiKS107Controller.PortIsOpen() == false)
{
return false;
}
return true;
}
/// <summary>
/// 返回ture表示没问题,返回false需要报警
/// </summary>
/// <returns></returns>
public static bool SensorProcess()
{
try
{
if (Setting_Init.Device_DauxiKS107_PortName == "" || RobotManage.dauxiKS107Controller == null || RobotManage.dauxiKS107Controller.PortIsOpen() == false)
{
return true;
}
if (RobotManage.dauxiKS107Controller.Quary(out int value, out string errMsg))
{
int cha = value - Setting_Init.Device_DauxiKS107_BaseValue;
if (cha > Setting_Init.Device_DauxiKS107_ErrorValue)
{
TimeSpan span = DateTime.Now - RobotManage.LastResetTime;
RobotManage.SensorNeedReset = true;
if (span.TotalHours > 1)
{
LogUtil.error($"传感器误差过大,需要复位:当前值:{value},基准值:{Setting_Init.Device_DauxiKS107_BaseValue},SensorErroCount={RobotManage.SensorNeedReset}, 最大误差:{Setting_Init.Device_DauxiKS107_ErrorValue}," +
$"上次复位时间{RobotManage.LastResetTime.ToShortDateString()},一小时内出现红外传感器检测错误,需要报警");
RobotManage.SensorNeedAlarm = true;
return false;
}
else
{
LogUtil.error($"传感器误差过大,需要复位:当前值:{value},基准值:{Setting_Init.Device_DauxiKS107_BaseValue},SensorErroCount={RobotManage.SensorNeedReset},最大误差:{Setting_Init.Device_DauxiKS107_ErrorValue}");
}
}
}
}
catch (Exception ex)
{
LogUtil.error("SensorProcess 出错:" + ex.ToString());
}
return true;
}
}
public enum StoreType
{
TypeA, TypeB
......
......@@ -431,3 +431,4 @@ comDataError 串口{0}数据错误{1} Serial port {0} data error {1}
comOpenFail 串口{0}打开失败 Serial port {0} open failed
shengbosensor 声波传感器 Acoustic Sensors
yalisensor 压力传感器 Pressure sensors
shengboError 声波感应器误差过大,请检查后重新复位 Acoustic sensor error is too large, please check and reset
......@@ -433,4 +433,5 @@ comDataError 涓插彛{0}鏁版嵁閿欒{1} 銈枫儶銈€儷銉濄兗銉 {0} 銉囥兗銈裤偍銉
comOpenFail 串口{0}打开失败 シリアルポート {0} のオープンに失敗
shengbosensor 声波传感器 音響センサー
yalisensor 压力传感器 圧力センサー
shengboError 声波感应器误差过大,请检查后重新复位 音響センサーのエラーが大きすぎます
......@@ -418,3 +418,4 @@ comDataError 串口{0}数据错误{1} 串口{0}数据错误{1}
comOpenFail 串口{0}打开失败 串口{0}打开失败
shengbosensor 声波传感器 声波传感器
yalisensor 压力传感器 压力传感器
shengboError 声波感应器误差过大,请检查后重新复位 声波感应器误差过大,请检查后重新复位
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!