Commit 58ba6080 刘韬

1

1 个父辈 8563a8cf
using CodeLibrary;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace DeviceLibrary
{
partial class MainMachine
{
/// <summary>
/// InMoveInfo.MoveStep == MoveStep.InWaitServerCallback
/// </summary>
public bool IsInStoreReady {
get=> StringMoveInfo.MoveStep == MoveStep.InWaitServerCallback;
}
/// <summary>
/// if (InMoveInfo.MoveStep == MoveStep.InWaitServerCallback)
/// </summary>
/// <param name="jobInfo"></param>
/// <returns></returns>
public bool StartInStore(JobInfo jobInfo) {
if (IsInStoreReady)
{
StringMoveInfo.MoveParam.WareCode = jobInfo.WareNum;
StringMoveInfo.MoveParam.PosID = jobInfo.PosId;
StringMoveInfo.NextMoveStep(MoveStep.StartInStore);
return true;
}
return false;
}
double CurrentWeight
{
get
{ if (RobotManage.StoreType == StoreType.TypeA)
{
for(int i=0;i<5;i++)
{
if (OKLEController.queryData(Config.WeightSensorPort, out double weight))
{
return weight - Config.WeightSensorBase;
}
Thread.Sleep(1000);
}
LogUtil.info("读取重量超时");
return double.MaxValue;
}
else
return 0;
}
}
void InProcess()
{
if (CheckWait(StringMoveInfo))
return;
switch (StringMoveInfo.MoveStep)
{
case MoveStep.Wait:
if (CurrentWeight > Config.StoreWeightLimited)
{
Msg.add($"周转箱超重,当前重量:{CurrentWeight}kg,最大限重{Config.StoreWeightLimited}kg", MsgLevel.warning);
}else if (IOValue(IO_Type.InStart_BTN).Equals(IO_VALUE.HIGH))
{
StringMoveInfo.log($"踩下启动脚踏");
StringMoveInfo.NextMoveStep(MoveStep.InPre01);
}else if (IOValue(IO_Type.InStopMaterial_Check).Equals(IO_VALUE.HIGH))
{
StringMoveInfo.NextMoveStep(MoveStep.In01);
StringMoveInfo.log($"检测到周转箱到位信号");
}
break;
case MoveStep.InPre01:
StringMoveInfo.NextMoveStep(MoveStep.InPre02);
if (IOValue(IO_Type.InStopMaterial_Check).Equals(IO_VALUE.HIGH))
{
StringMoveInfo.NextMoveStep(MoveStep.InPre02);
}
else
{
StringMoveInfo.log($"线体运转5秒");
LineIn.LineRun("prework", 5);
}
break;
case MoveStep.InPre02:
if (IOValue(IO_Type.InStopMaterial_Check).Equals(IO_VALUE.HIGH))
{
StringMoveInfo.log($"检测到周转箱到位信号,线体运转2秒");
LineIn.LineRun("prework", 2);
StringMoveInfo.NextMoveStep(MoveStep.In01);
StringMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
}
else
{
StringMoveInfo.NextMoveStep(MoveStep.Wait);
StringMoveInfo.log($"没有检测到周转箱到位信号");
}
break;
case MoveStep.In01:
StringMoveInfo.NextMoveStep(MoveStep.In02);
var boxCurrentWeight = CurrentWeight;
if (boxCurrentWeight <= Config.StoreWeightLimited)
{
StringMoveInfo.log($"开始拍照扫码,重量:{boxCurrentWeight}kg");
if (RobotManage.InoutDebugMode)
{
StringMoveInfo.NextMoveStep(MoveStep.InWaitServerCallback);
}
else ScanCode();
}
else
{
Msg.add("周转箱超重", MsgLevel.warning);
StringMoveInfo.log($"周转箱超重 重量:{boxCurrentWeight}");
StringMoveInfo.NextMoveStep(MoveStep.Wait);
}
break;
case MoveStep.In02:
if (InScanTask.IsCompleted)
{
var x = InScanTask.Result;
if (x.Count == 0)
{
StringMoveInfo.NextMoveStep(MoveStep.In01);
StringMoveInfo.log($"未识别到有效二维码,重新拍照");
return;
}
else
{
StringMoveInfo.NextMoveStep(MoveStep.InWaitServerCallback);
StringMoveInfo.log($"已完成扫码,等待服务器反馈库位 Count={x.Count}");
StringMoveInfo.MoveParam.IsNg = false;
StringMoveInfo.MoveParam.codeInfos = x;
var cc = x.Select((a) =>a.CodeStr);
ServerCM.SendInStoreRequest(cc.ToArray());
}
}
else if (StringMoveInfo.IsTimeOut(10))
{
StringMoveInfo.NextMoveStep(MoveStep.In01);
StringMoveInfo.log($"等待扫码超时,重新扫码");
}
break;
case MoveStep.InWaitServerCallback:
if (RobotManage.InoutDebugMode)
{
Msg.add("等待手动选择入库库位", MsgLevel.info);
}
else if (StringMoveInfo.IsTimeOut(5))
Msg.add("等待服务器返回库位", MsgLevel.info);
else if (StringMoveInfo.IsTimeOut(15))
{
StringMoveInfo.NextMoveStep(MoveStep.Wait);
StringMoveInfo.log($"等待服务器返回库位超时");
}
break;
case MoveStep.StartInStore:
StringMoveInfo.NextMoveStep(MoveStep.In06);
CylinderMove(StringMoveInfo, IO_Type.InStop_Down, IO_Type.InStop_Up,IO_VALUE.LOW);
InSideLift.LiftDown(StringMoveInfo);
StringMoveInfo.log($"放下入料阻挡");
break;
case MoveStep.In06:
StringMoveInfo.NextMoveStep(MoveStep.In07);
LineIn.LineRun("work", 999);
//if (RobotManage.StoreType == StoreType.TypeA)
//{
// CylinderMove(InMoveInfo, IO_Type.InMaterialLocation_Bck, IO_Type.InMaterialLocation_Fwd, IO_VALUE.HIGH);
// InMoveInfo.log($"料箱定位前进");
//}
break;
case MoveStep.In07:
if (RobotManage.StoreType == StoreType.TypeA && IOValue(IO_Type.InOverHead_Check).Equals(IO_VALUE.LOW)) {
LineIn.LineStop("work");
StringMoveInfo.log($"X18检测到物料超高,停止滚筒");
StringMoveInfo.NextMoveStep(MoveStep.InOverHead);
ServerCM.cancelPutInTask("", StringMoveInfo.MoveParam.WareCode);
return;
}
//IOValue(IO_Type.InEndMaterialTop_Check).Equals(IO_VALUE.HIGH) &&
if(IOValue(IO_Type.InEndMaterialBottom_Check).Equals(IO_VALUE.HIGH))
{
StringMoveInfo.NextMoveStep(MoveStep.In09);
CylinderMove(StringMoveInfo, IO_Type.InStop_Down, IO_Type.InStop_Up, IO_VALUE.HIGH);
LineIn.LineRun("work", 1);
StringMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(500));
}
else if (StringMoveInfo.IsTimeOut(10))
{
Msg.add("周转箱进入等待X26信号超时", MsgLevel.warning);
StringMoveInfo.log($"周转箱进入超时");
}
break;
case MoveStep.In08:
StringMoveInfo.NextMoveStep(MoveStep.In09);
//if (RobotManage.StoreType == StoreType.TypeA)
//{
// CylinderMove(InMoveInfo, IO_Type.InMaterialLocation_Bck, IO_Type.InMaterialLocation_Fwd, IO_VALUE.LOW);
// InMoveInfo.log("料箱定位后退");
//}
break;
case MoveStep.In09:
StringMoveInfo.NextMoveStep(MoveStep.In10);
InSideLift.LiftUp(StringMoveInfo);
StringMoveInfo.log("顶升上升,等待周转箱到位");
StringMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.InEndMaterialTop_Check, IO_VALUE.HIGH));
break;
case MoveStep.In10:
StringMoveInfo.NextMoveStep(MoveStep.InWaitBoxLeave);
break;
case MoveStep.InWaitBoxLeave:
Msg.add("周转箱等待入库", MsgLevel.info);
ServerCM.storeStatus = StoreStatus.InStoreExecute;
break;
case MoveStep.InBoxLeaved:
StringMoveInfo.NextMoveStep(MoveStep.Wait);
InSideLift.LiftDown(StringMoveInfo);
CylinderMove(StringMoveInfo, IO_Type.InStop_Down, IO_Type.InStop_Up, IO_VALUE.HIGH);
StringMoveInfo.log("周转箱已取走,顶升下降");
break;
case MoveStep.InOverHead:
Msg.add("X18检测到物料超高,请取出周转箱", MsgLevel.warning);
if (IOMonitor.IODebound(IO_Type.InStopMaterial_Check, Config, IO_VALUE.LOW)) {
CylinderMove(StringMoveInfo, IO_Type.InStop_Down, IO_Type.InStop_Up, IO_VALUE.HIGH);
StringMoveInfo.NewMove(MoveStep.Wait);
}
break;
case MoveStep.InReset:
CylinderMove(StringMoveInfo, IO_Type.InStop_Down, IO_Type.InStop_Up, IO_VALUE.HIGH);
CylinderMove(StringMoveInfo, IO_Type.InMaterialLocation_Bck, IO_Type.InMaterialLocation_Fwd, IO_VALUE.LOW);
InSideLift.LiftDown(StringMoveInfo);
LineIn.LineStop("work");
StringMoveInfo.NewMove(MoveStep.Wait);
StringMoveInfo.log("入库线体状态重置");
break;
default:
StringMoveInfo.log($"未找到对应步骤:{StringMoveInfo.MoveStep}");
break;
}
}
string InState() {
string state = "";
if (StringMoveInfo.MoveStep >= MoveStep.In02)
{
return StringMoveInfo.MoveParam.ToStr();
}
else if (StringMoveInfo.MoveStep >= MoveStep.Wait)
{
state = "空闲中";
}
else if (StringMoveInfo.MoveStep < MoveStep.In02)
{
state = "入库扫描";
}
return state;
}
public bool IsScanRunning() {
if (InScanTask == null)
return false;
return !InScanTask.IsCompleted;
}
/// <summary>
/// 扫码线程
/// </summary>
Task<List<CodeInfo>> InScanTask;
void ScanCode() {
StringMoveInfo.log("开始扫码");
//RightMoveInfo.OneWaitCanEndStep = true;
//RightMoveInfo.WaitList.Add(WaitResultInfo.WaitScanCode());
//RightMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
try
{
InScanTask = Task.Run(new Func<List<CodeInfo>>(()=>
{
IOMove(IO_Type.Camera_Led, IO_VALUE.HIGH);
Task.Delay(10).Wait();
List<CodeInfo> LastCodeList;
LastCodeList = CodeManager.CameraScan(new List<string> { Config.CameraName });
//BoxParam labelParam = new BoxParam();
//labelParam.codeInfos = new List<CodeInfo>(LastCodeList);
//if (!Common.codeProcess(labelParam, out _))
//{
// Task.Delay(500).Wait();
// LastCodeList2 = CodeManager.CameraScan(new List<string> { Config.CameraName });
// LastCodeList.AddRange(LastCodeList2);
//}
//IOMove(IO_Type.Camera_Led, IO_VALUE.LOW);
return LastCodeList;
}));
}
catch (Exception ex)
{
LogUtil.error("FI_13_ScanCode扫码出错:", ex);
}
}
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!