Commit 28ae4782 张东亮

添加校准库位缓存,以在复位时处理校准库位的料。出入库状态在料串动作时就开始变化

1 个父辈 52856290
......@@ -14,10 +14,12 @@ namespace DeviceLibrary
public class ServerCommunication
{
volatile StoreStatus _storeStatus = StoreStatus.Debugging;
public StoreStatus storeStatus {
public StoreStatus storeStatus
{
get => _storeStatus;
set {
if (_storeStatus!= value)
set
{
if (_storeStatus != value)
LogUtil.info($"set storeStatus to {value}");
_storeStatus = value;
}
......@@ -25,13 +27,14 @@ namespace DeviceLibrary
static string server = Setting_Init.Device_Server_Address;
static string CID = Setting_Init.Device_CID;
int StoreID = 1;
string StoreName="";
string StoreName = "";
string WarnMsg = "";
private System.Timers.Timer serverConnectTimer = new System.Timers.Timer();
object serverclock = new object();
public ServerCommunication() {
public ServerCommunication()
{
serverConnectTimer.Interval = 1000;
serverConnectTimer.AutoReset = true;
serverConnectTimer.Enabled = true;
......@@ -62,17 +65,22 @@ namespace DeviceLibrary
{
LogUtil.info($"ServerConnectTimer_Elapsed:{ex}");
}
finally {
finally
{
//Monitor.Exit(serverConnectTimer);
}
}
public void StartConnectServer() {
public void StartConnectServer()
{
//serverConnectTimer.Enabled = true;
}public void StopConnectServer() {
}
public void StopConnectServer()
{
//serverConnectTimer.Enabled = false;
}
public void ProcessMsg(List<Msg> msg) {
public void ProcessMsg(List<Msg> msg)
{
WarnMsg = string.Join(",", msg.Select(x =>
{
if (x.msgLevel == MsgLevel.warning || x.msgLevel == MsgLevel.alarm)
......@@ -81,9 +89,10 @@ namespace DeviceLibrary
}
return null;
}
).Where(x=>!string.IsNullOrEmpty(x)));
).Where(x => !string.IsNullOrEmpty(x)));
}
public void SendInStoreRequest(string[] codelist, ReelParam reel,bool printlog=false) {
public void SendInStoreRequest(string[] codelist, ReelParam reel, bool printlog = false)
{
if (RobotManage.InoutDebugMode)
return;
......@@ -94,7 +103,7 @@ namespace DeviceLibrary
operation.op = 1;
operation.data = new Dictionary<string, string>() { { "code", code }, { "boxId", StoreID.ToString() }, { "doorReelSignal", "1" } };
if (reel.PlateH==100 && Setting_Init.Device_SingleInSingleOut)
if (reel.PlateH == 100 && Setting_Init.Device_SingleInSingleOut)
{
//singleIn 单盘入库
operation.data.Add("singleIn", "true");
......@@ -104,9 +113,9 @@ namespace DeviceLibrary
operation.data.Add("singleIn", "false");
}
int retrytimes = 0;
retry:
retry:
Operation resultOperation = HttpHelper.Post(GetPostApi(), operation, 15000, printlog);
if (RobotManage.isRunning &&( resultOperation==null || operation.seq != resultOperation.seq))
if (RobotManage.isRunning && (resultOperation == null || operation.seq != resultOperation.seq))
{
Thread.Sleep(1000);
//SendInStoreRequest(codelist, reel, printlog);
......@@ -124,15 +133,7 @@ namespace DeviceLibrary
Operation operation = getLineBoxStatus();
if (!string.IsNullOrEmpty(posid))
operation.boxStatus[StoreID].data.Add(ParamDefine.posId, posid);
if (storeStatus == StoreStatus.OutStoreEnd ||
storeStatus == StoreStatus.OutStoreBoxEnd ||
storeStatus == StoreStatus.InStoreEnd)
{
}
else
operation.boxStatus[StoreID].status = (int)storeStatus;
operation.boxStatus[StoreID].status = (int)storeStatus;
LogUtil.info(JsonHelper.SerializeObject(operation));
if (RobotManage.InoutDebugMode)
return true;
......@@ -143,7 +144,8 @@ namespace DeviceLibrary
LogUtil.info($"SendStoreState error,posid:{posid}, storeStatus:{storeStatus}");
return false;
}
if (operation.seq != resultOperation.seq) {
if (operation.seq != resultOperation.seq)
{
LogUtil.info($"SendStoreState seq error,posid:{posid}, storeStatus:{storeStatus}");
return false;
}
......@@ -157,15 +159,17 @@ namespace DeviceLibrary
//{
// this.storeStatus = StoreStatus.StoreOnline;
//}
if (RobotManage.mainMachine.StringMoveInfo.MoveStep == MoveStep.StringOut_Released)
{
this.storeStatus = StoreStatus.StoreOnline;
}
//if (RobotManage.mainMachine.StringMoveInfo.MoveStep == MoveStep.StringOut_Released
// || RobotManage.mainMachine.StringMoveInfo.MoveStep == MoveStep.Wait)
//{
// this.storeStatus = StoreStatus.StoreOnline;
// LogUtil.info($"StringOut_Released StoreState change,storeStatus:{storeStatus}");
//}
}
return true;
}
public string spiltStr = "##";
private string ProcessCode(string[] codeList,int reelw,int reelh)
private string ProcessCode(string[] codeList, int reelw, int reelh)
{
string message = "";
......@@ -183,7 +187,8 @@ namespace DeviceLibrary
message = message + "=" + "1+0x0-" + codeSize + "=" + code + spiltStr;
LogUtil.info($"加载到fixcode,{w}x{h},remove:{rcode}");
}else
}
else
message = message + "=" + "1+0x0-" + codeSize + "=" + code + spiltStr;
}
return message;
......@@ -235,7 +240,8 @@ namespace DeviceLibrary
{
sendmsg = string.Join(",", new string[] { WarnMsg });
}
else if (!RobotManage.isRunning){
else if (!RobotManage.isRunning)
{
sendmsg = "设备未启动";
}
......@@ -287,13 +293,14 @@ namespace DeviceLibrary
}
}
if (lineOperation.status != laststatus) {
if (lineOperation.status != laststatus)
{
laststatus = lineOperation.status;
printlog = true;
}
Operation resultOperation = HttpHelper.Post(GetPostApi(), lineOperation,700, printlog);
Operation resultOperation = HttpHelper.Post(GetPostApi(), lineOperation, 700, printlog);
if (resultOperation != null)
getthtime = 0;
//LogUtil.info(JsonHelper.SerializeObject(resultOperation.data));
......@@ -305,7 +312,7 @@ namespace DeviceLibrary
}
}
}
public int queueTaskCount=-1;
public int queueTaskCount = -1;
ConcurrentQueue<string> commandResultMsg = new ConcurrentQueue<string>();
void ResultProcess(Operation resultOperation)
{
......@@ -407,19 +414,19 @@ namespace DeviceLibrary
map.Add(ParamDefine.confirmReelOut, ParamDefine.disable);
map.Add(ParamDefine.singleReelIn, ParamDefine.disable);
if (storeStatus == StoreStatus.ResetMove
if (storeStatus == StoreStatus.ResetMove
|| storeStatus == StoreStatus.SuddenStop
|| storeStatus == StoreStatus.Debugging
)
return map;
if (IOManager.IOValue(IO_Type.DoorClose_LoadMaterial).Equals(IO_VALUE.HIGH)
if (IOManager.IOValue(IO_Type.DoorClose_LoadMaterial).Equals(IO_VALUE.HIGH)
&& RobotManage.mainMachine.StringMoveInfo.MoveStep == MoveStep.Wait)
{
map[ParamDefine.startBatchIn] = ParamDefine.enable;
}
if (RobotManage.mainMachine.StringMoveInfo.MoveStep == MoveStep.Wait
if (RobotManage.mainMachine.StringMoveInfo.MoveStep == MoveStep.Wait
&& IOManager.IOValue(IO_Type.BatchDoor_Open).Equals(IO_VALUE.LOW))
{
//map.Add(ParamDefine.doorStatus, "料串门关闭");
......@@ -427,18 +434,18 @@ namespace DeviceLibrary
}
if (!Setting_Init.Device_Allow_SingleIn)
map[ParamDefine.singleReelIn] = ParamDefine.hide;
else
else
if (Setting_Init.Device_Allow_SingleIn && IOManager.IOValue(IO_Type.NGDoor_Close).Equals(IO_VALUE.HIGH))
{
map[ParamDefine.singleReelIn] = ParamDefine.enable;
}
if (IOManager.IOValue(IO_Type.BatchDoor_Close).Equals(IO_VALUE.LOW)
if (IOManager.IOValue(IO_Type.BatchDoor_Close).Equals(IO_VALUE.LOW)
&& IOManager.IOValue(IO_Type.DoorClose_LoadMaterial).Equals(IO_VALUE.HIGH))
{
map[ParamDefine.closeLock] = ParamDefine.enable;
}
if (RobotManage.mainMachine.StringMoveInfo.MoveStep >= MoveStep.StringLoad_04
if (RobotManage.mainMachine.StringMoveInfo.MoveStep >= MoveStep.StringLoad_04
&& RobotManage.mainMachine.StringMoveInfo.MoveStep < MoveStep.StringOut_01)
map[ParamDefine.takeOutReel] = ParamDefine.enable;
......@@ -447,7 +454,7 @@ namespace DeviceLibrary
map[ParamDefine.confirmReelOut] = ParamDefine.enable;
}
return map;
}
......@@ -482,7 +489,7 @@ namespace DeviceLibrary
{
//出入库没有找到服务器发送的库位,需要打印日志方便查询原因
//SetWarnMsg(ResourceControl.InStoreNoPosition, message, posId);
WarnMsg = crc.GetString(L.in_store_nothave_position,"入库未找到库位:") + posId;//0505
WarnMsg = crc.GetString(L.in_store_nothave_position, "入库未找到库位:") + posId;//0505
LogUtil.info("收到服务器入库命令:入库未找到库位:二维码【" + message + "】库位【" + posId + "】");
return;
}
......@@ -510,10 +517,11 @@ namespace DeviceLibrary
RobotManage.mainMachine.ClampMoveInfo.MoveParam.NgMsg = msg;
RobotManage.mainMachine.ClampMoveInfo.NextMoveStep(MoveStep.WaitInStore);
//RobotManage.mainMachine.NGPuted(msg);
LogUtil.info("服务器没有正确返回库位. msg="+ msg);
LogUtil.info("服务器没有正确返回库位. msg=" + msg);
}
else {
else
{
}
}
......@@ -533,13 +541,13 @@ namespace DeviceLibrary
{
string maxHumidity = data[ParamDefine.maxHumidity];
string maxTemp = data[ParamDefine.maxTemperature];
LogUtil.info( "收到服务器温湿度预警值:maxHumidity=" + maxHumidity + ",maxTemperature=" + maxTemp);
LogUtil.info("收到服务器温湿度预警值:maxHumidity=" + maxHumidity + ",maxTemperature=" + maxTemp);
try
{
this.Max_Humidity = (float)Convert.ToDouble(maxHumidity);
this.Max_Temperature = (float)Convert.ToDouble(maxTemp);
LogUtil.info( "保存温湿度预警值:Max_Humidity=" + Max_Humidity + ",Max_Temperature=" + Max_Temperature);
LogUtil.info("保存温湿度预警值:Max_Humidity=" + Max_Humidity + ",Max_Temperature=" + Max_Temperature);
}
catch (Exception ex)
{
......@@ -585,7 +593,7 @@ namespace DeviceLibrary
{
//出入库没有找到服务器发送的库位,需要打印日志方便查询原因
WarnMsg = StoreName + "出库未找库位:【" + posId + "】";
LogUtil.error( "收到服务器出库命令:未找到【" + posId + "】的库位信息");
LogUtil.error("收到服务器出库命令:未找到【" + posId + "】的库位信息");
continue;
}
else
......@@ -764,6 +772,6 @@ namespace DeviceLibrary
/// 扫码入库失败
/// </summary>
InStoreError = 14,
}
}
......@@ -30,13 +30,13 @@ namespace DeviceLibrary
public event Action<string, StoreMoveType, bool> InOutEndProcessEvent;
public bool IsComplateOrFree { get => MoveInfo.MoveStep == MoveStep.Wait && !movelock; }
public bool IsTakedReel { get => MoveInfo.MoveStep >= MoveStep.StoreTS10; }
public bool IsPutOnOut {get=> MoveInfo.MoveStep >= MoveStep.StoreTS16; }
public bool IsPutOnOut { get => MoveInfo.MoveStep >= MoveStep.StoreTS16; }
public ReelTransport(Robot_Config _Config, MainMachine _mainMachine)
{
Config = _Config;
mainMachine = _mainMachine;
MoveInfo = new MoveInfo(crc.GetString(L.transfer_equipment, "出入库机构"),false);
MoveInfo = new MoveInfo(crc.GetString(L.transfer_equipment, "出入库机构"), false);
To = null;
From = null;
#region 初始化伺服轴
......@@ -47,18 +47,19 @@ namespace DeviceLibrary
#endregion
}
public void Reset() {
public void Reset()
{
MoveInfo.NewMove(MoveStep.Wait);
MoveInfo.log("执行重置");
To = null;
From = null;
}
StoreMoveType storeMoveType = StoreMoveType.None;
string WareCode="";
string WareCode = "";
int plateH = 0;
bool PreMove = false;
bool ignoreFixtureCheck = false;
public bool Start(BoxStorePosition from, BoxStorePosition to, StoreMoveType _storeMoveType, bool premove=false)
public bool Start(BoxStorePosition from, BoxStorePosition to, StoreMoveType _storeMoveType, bool premove = false)
{
if (MoveInfo.MoveStep != MoveStep.Wait)
......@@ -72,9 +73,11 @@ namespace DeviceLibrary
WareCode = "NG";
plateH = 56;
To = to.clone();
MoveInfo.NewMove(MoveStep.StoreTS10);
MoveInfo.log($"{storeMoveType}:开始运输料盘,直接到:{to.posid}");
MoveInfo.MoveParam.PosID = $"NA=>{To.posid}";
{
MoveInfo.NewMove(MoveStep.StoreTS10);
MoveInfo.log($"{storeMoveType}:开始运输料盘,直接到:{to.posid}");
MoveInfo.MoveParam.PosID = $"NA=>{To.posid}";
}
}
else
{
......@@ -93,15 +96,16 @@ namespace DeviceLibrary
Fix = BoxStorePosition.GetFixPos(Config, To.Reel);
}
MoveInfo.MoveParam.WareCode = WareCode;
ErrMsgTxt = "";
return true;
//thread = new Thread(new ThreadStart(Run));
//thread.Start();
}
public bool ReadyToTakeBox() {
if (MoveInfo.MoveStep != MoveStep.StoreTS05)
public bool ReadyToTakeBox()
{
if (MoveInfo.MoveStep != MoveStep.StoreTS05)
return false;
MoveInfo.NextMoveStep(MoveStep.StoreTS06);
......@@ -130,8 +134,9 @@ namespace DeviceLibrary
MoveInfo.log($"{storeMoveType}:检查安全状态");
}
break;
case MoveStep.StoreTS02:
if (MoveInfo.MoveParam.ReelOnFixture) {
case MoveStep.StoreTS02:
if (MoveInfo.MoveParam.ReelOnFixture)
{
MoveInfo.NextMoveStep(MoveStep.StoreTS08);
MoveInfo.log($"{storeMoveType}:料盘已在料叉上,压紧轴压紧,Comp_PL:{From.Comp_PL}");
Comp_Axis.AbsMove(MoveInfo, From.Comp_PL, Config.Comp_P2_speed);
......@@ -173,11 +178,12 @@ namespace DeviceLibrary
{
RobotManage.mainMachine.CylinderMove(MoveInfo, IO_Type.Clamping_Relax, IO_Type.Clamping_Work, IO_VALUE.LOW);
}
else {
else
{
MoveInfo.NextMoveStep(MoveStep.StoreTS08);
UpDown_Axis.AbsMove(MoveInfo, From.UpDown_PH, Config.UpDown_P4_speed);
MoveInfo.log($"{storeMoveType}:上下轴到达取料高点");
}
}
break;
case MoveStep.StoreTS07:
MoveInfo.NextMoveStep(MoveStep.StoreTS08);
......@@ -196,7 +202,7 @@ namespace DeviceLibrary
InOut_Axis.AbsMove(MoveInfo, Config.InOut_P1, Config.InOut_P1_speed);
}
IgnoreX09 = false;
break;
case MoveStep.StoreTS09:
RobotManage.CameraA.CameraGrabOne(RobotManage.CameraA.GetFixtureStateFilename(From.posid, WareCode, storeMoveType, FixtureState.FromOut));
......@@ -208,7 +214,8 @@ namespace DeviceLibrary
}
else
{
if (!ignoreFixtureCheck && IOManager.IOValue(IO_Type.TrayCheck_Fixture).Equals(IO_VALUE.LOW)) {
if (!ignoreFixtureCheck && IOManager.IOValue(IO_Type.TrayCheck_Fixture).Equals(IO_VALUE.LOW))
{
MoveInfo.log($"忽略物料:Device_DisableStorePosition:{Setting_Init.Device_DisableStorePosition.Val},库位:{From.posid},{WareCode}");
if (Setting_Init.Device_DisableStorePosition && From.posid != BoxStorePosition.strings && From.posid != BoxStorePosition.ngdoor && From.posid != BoxStorePosition.clamp)
{
......@@ -228,6 +235,7 @@ namespace DeviceLibrary
break;
case MoveStep.StoreFIX01:
MoveInfo.NextMoveStep(MoveStep.StoreFIX02);
RobotManage.PutReelInFixPos(To.Reel);
Middle_Axis.AbsMove(MoveInfo, Fix.Middle_P2, Config.Middle_P2_speed);
MoveInfo.log($"{storeMoveType}:行走机构到达目的地:{Fix.Middle_P2}");
UpDown_Axis.AbsMove(MoveInfo, Fix.UpDown_PH, Config.UpDown_P1_speed);
......@@ -248,9 +256,8 @@ namespace DeviceLibrary
break;
case MoveStep.StoreFIX04:
MoveInfo.NextMoveStep(MoveStep.StoreFIX05);
RobotManage.PutReelInFixPos(MoveInfo.MoveParam);
Comp_Axis.AbsMove(MoveInfo, Fix.Comp_PL, Config.Comp_P2_speed);
UpDown_Axis.AbsMove(MoveInfo, Fix.UpDown_PH, Config.UpDown_P3_speed/2);
UpDown_Axis.AbsMove(MoveInfo, Fix.UpDown_PH, Config.UpDown_P3_speed / 2);
MoveInfo.log($"{storeMoveType}:压紧轴压紧点:{Fix.Comp_PL}");
MoveInfo.log($"{storeMoveType}:上下轴到达目的高点:{Fix.UpDown_PH}");
break;
......@@ -268,7 +275,8 @@ namespace DeviceLibrary
MoveInfo.log($"{storeMoveType}:上下轴到达目的地高点:{To.UpDown_PH}");
break;
case MoveStep.StoreTS11:
if (To.posid==BoxStorePosition.strings) {
if (To.posid == BoxStorePosition.strings)
{
if (!mainMachine.IsPutReelReady)
{
//if (MoveInfo.IsTimeOut(20))
......@@ -276,31 +284,33 @@ namespace DeviceLibrary
MoveInfo.log($"等待料串准备好放料");
return false;
}
}else if (To.posid == BoxStorePosition.ngdoor)
}
else if (To.posid == BoxStorePosition.ngdoor)
{
if (mainMachine.ClampMoveInfo.MoveStep!=MoveStep.Wait)
if (mainMachine.ClampMoveInfo.MoveStep != MoveStep.Wait)
{
//if (MoveInfo.IsTimeOut(20))
Msg.add(crc.GetString(L.out_store_wait_ngdoor_ready,"等待单料口空闲."), MsgLevel.warning);
Msg.add(crc.GetString(L.out_store_wait_ngdoor_ready, "等待单料口空闲."), MsgLevel.warning);
MoveInfo.log($"等待单料口空闲");
return false;
}
}
MoveInfo.NextMoveStep(MoveStep.StoreTS12);
MoveInfo.NextMoveStep(MoveStep.StoreTS12);
break;
case MoveStep.StoreTS12:
MoveInfo.NextMoveStep(MoveStep.StoreTS13);
MoveInfo.log($"{storeMoveType}:进出轴到达目的地");
InOut_Axis.AbsMove(MoveInfo, To.InOut_P2, Config.InOut_P2_speed);
InOut_Axis.AbsMove(MoveInfo, To.InOut_P2, Config.InOut_P2_speed);
break;
case MoveStep.StoreTS13:
RobotManage.CameraA.CameraGrabOne(RobotManage.CameraA.GetFixtureStateFilename(To.posid, WareCode, storeMoveType, FixtureState.ToIn));
MoveInfo.NextMoveStep(MoveStep.StoreTS14);
MoveInfo.NextMoveStep(MoveStep.StoreTS14);
UpDown_Axis.AbsMove(MoveInfo, To.UpDown_PL, Config.UpDown_P3_speed);
Comp_Axis.AbsMove(MoveInfo, To.Comp_PH, Config.Comp_P2_speed);
MoveInfo.log($"{storeMoveType}:压紧轴压紧点:{To.Comp_PH}");
MoveInfo.log($"{storeMoveType}:上下轴到达目的地低点:{To.UpDown_PL}");
if (To.posid == BoxStorePosition.ngdoor) {
if (To.posid == BoxStorePosition.ngdoor)
{
MoveInfo.NextMoveStep(MoveStep.StoreTS_WaitOutProcess);
MoveInfo.log($"{storeMoveType}:目的地为单料口,转运后等待处理");
}
......@@ -336,26 +346,28 @@ namespace DeviceLibrary
)
{
MoveInfo.log($"{storeMoveType}:库位测试模式,上下轴,旋转不返回待机点");
break;
break;
}
//if (To.posid==BoxStorePosition.strings)
// UpDown_Axis.AbsMove(MoveInfo, Config.UpDown_P5, Config.UpDown_P1_speed);
//else
// UpDown_Axis.AbsMove(MoveInfo, Config.UpDown_P2, Config.UpDown_P1_speed);
if (!RobotManage.mainMachine.HasJob) {
if (!RobotManage.mainMachine.HasJob)
{
UpDown_Axis.AbsMove(MoveInfo, Config.UpDown_P1, Config.UpDown_P1_speed);
Middle_Axis.AbsMove(MoveInfo, Config.Middle_P1, Config.Middle_P1_speed);
MoveInfo.log($"{storeMoveType}:上下轴,旋转返回待机点P1");
}else
}
else
MoveInfo.log($"{storeMoveType}:后续还有任务不返回待机点");
ErrMsgTxt = "";
break;
case MoveStep.StoreTS17:
//MoveInfo.NextMoveStep(MoveStep.StoreTS16);
MoveInfo.log($"{storeMoveType}:转移料盘完成");
MoveInfo.EndMove();
ErrMsgTxt = "";
MoveInfo.EndMove();
ErrMsgTxt = "";
To.posid = "";
storeMoveType = StoreMoveType.None;
break;
......@@ -364,7 +376,7 @@ namespace DeviceLibrary
case MoveStep.StoreTS_Continue:
MoveInfo.NextMoveStep(MoveStep.StoreTS17);
MoveInfo.log($"{storeMoveType}:继续运行进出轴到达待机点");
InOut_Axis.AbsMove(MoveInfo, Config.InOut_P1, Config.InOut_P1_speed);
InOut_Axis.AbsMove(MoveInfo, Config.InOut_P1, Config.InOut_P1_speed);
break;
default:
MoveInfo.log($"{storeMoveType}:未找到对应步骤:{MoveInfo.MoveStep}");
......@@ -374,13 +386,15 @@ namespace DeviceLibrary
return false;
}
public void Continue() {
public void Continue()
{
if (MoveInfo.MoveStep == MoveStep.StoreTS_WaitOutProcess)
{
MoveInfo.NextMoveStep(MoveStep.StoreTS_Continue);
MoveInfo.log($"{storeMoveType}:外部处理完成,继续");
}
else {
else
{
MoveInfo.log($"{storeMoveType}:当前不在外部处理状态");
}
}
......@@ -399,7 +413,8 @@ namespace DeviceLibrary
InOutEndProcessEvent?.Invoke(posid, storeMoveType, true);
}
HIKCamera GetCamera(int pos) {
HIKCamera GetCamera(int pos)
{
//return pos > 0 ? RobotManage.CameraA : RobotManage.CameraB;
return RobotManage.CameraA;
}
......
......@@ -459,16 +459,15 @@ namespace DeviceLibrary
boxTransport.Reset();
ResetMoveInfo.log("回原完成");
ResetMoveInfo.EndMove();
if ((RobotManage.HasReelInFixPos(out ReelParam reelParam)) && boxTransport.IsComplateOrFree && ClampMoveInfo.MoveStep == MoveStep.Wait && ConfigHelper.Config.Get("Device_Use_Fixpos", false))
if ((RobotManage.HasReelInFixPos(out ReelParam reelParam))
&& boxTransport.IsComplateOrFree &&
ClampMoveInfo.MoveStep == MoveStep.Wait && ConfigHelper.Config.Get("Device_Use_Fixpos", false)
&& IOValue(IO_Type.TrayCheck_Fixture).Equals(IO_VALUE.LOW))
{
StoreMoveInfo.NewMove(MoveStep.StoreOut_NGPre);
StoreMoveInfo.MoveParam = reelParam.clone();
StoreMoveInfo.MoveParam.PosID = "NG";
StoreMoveInfo.MoveParam.IsNg = true;
StoreMoveInfo.MoveParam.NgMsg = "检测到校准库位有料盘信息,请人工确认";
StoreMoveInfo.log($"开始校准库位料盘出库");
ServerCM.storeStatus = StoreStatus.OutStoreExecute;
//CloseFlipDoor(StoreMoveInfo);
var pos = BoxStorePosition.GetFixPos(Config, reelParam);
LogUtil.info($"复位完成,校准库位出库:{pos.posid}");
RobotManage.mainMachine.AddSingleStoreTask("", pos.posid, reelParam.PlateW, reelParam.PlateH);
RobotManage.ClearReelInFixPos();
}
runStatus = RunStatus.Running;
ServerCM.storeStatus = StoreStatus.StoreOnline;
......
......@@ -15,13 +15,14 @@ namespace DeviceLibrary
{
StoreJobList OutStoreJobList = new StoreJobList("批量");
StoreJobList OutSingleJobList = new StoreJobList("单盘");
public bool HasJob { get => OutStoreJobList.Count > 0 || OutSingleJobList.Count>0; }
public void AddOutStoreTask(string warecode, string posId,int plateW,int plateH) {
JobInfo jobInfo = new JobInfo(warecode, posId,plateW,plateH);
public bool HasJob { get => OutStoreJobList.Count > 0 || OutSingleJobList.Count > 0; }
public void AddOutStoreTask(string warecode, string posId, int plateW, int plateH)
{
JobInfo jobInfo = new JobInfo(warecode, posId, plateW, plateH);
OutStoreJobList.Enqueue(jobInfo);
LogUtil.info($"添加出库任务队列: {posId},当前任务数量: {OutStoreJobList.Count}");
}
public void AddSingleStoreTask(string warecode,string posId, int plateW, int plateH)
public void AddSingleStoreTask(string warecode, string posId, int plateW, int plateH)
{
JobInfo jobInfo = new JobInfo(warecode, posId, plateW, plateH);
OutSingleJobList.Enqueue(jobInfo);
......@@ -85,7 +86,8 @@ namespace DeviceLibrary
ServerCM.storeStatus = StoreStatus.OutStoreExecute;
}
}
else if (OutStoreJobList.Count > 0 && !IsBatchDoorClosed) {
else if (OutStoreJobList.Count > 0 && !IsBatchDoorClosed)
{
Msg.add("出库任务等待关闭批量舱门", MsgLevel.warning);
}
//判断有没有出库任务, 需要入库空闲, 出口空闲
......@@ -96,7 +98,7 @@ namespace DeviceLibrary
if (!boxTransport.IgnoreX09 && IOMonitor.IODebound(IO_Type.TrayCheck_Fixture, Config, IO_VALUE.HIGH, 5000))
{
Msg.add("收到出库任务,但料叉上有料,无法启动,请检查", MsgLevel.alarm, ErrInfo.X09_BoxNotDetect);
}
else
Msg.add("收到出库任务,但料叉上有料,无法启动,请检查", MsgLevel.warning);
......@@ -120,9 +122,10 @@ namespace DeviceLibrary
case MoveStep.StoreIn01:
if (!StoreMoveInfo.MoveParam.IsNg && !ServerCM.SendStoreState(StoreMoveInfo.MoveParam.PosID, StoreStatus.InStoreExecute))
{
Msg.add("服务器连接异常",MsgLevel.warning);
Msg.add("服务器连接异常", MsgLevel.warning);
return;
}
ServerCM.storeStatus = StoreStatus.InStoreExecute;
StoreMoveInfo.NextMoveStep(MoveStep.StoreIn03);
if (StoreMoveInfo.MoveParam.IsNg)
......@@ -131,9 +134,9 @@ namespace DeviceLibrary
{
var ac = CSVPositionReader<ACStorePosition>.GetPositon(StoreMoveInfo.MoveParam.PosID);
boxTransport.Start(new BoxStorePosition(Config, StoreMoveInfo.MoveParam.ReelOnFixture? StoreSide.NGDoor:StoreSide.Clamp, StoreMoveInfo.MoveParam), new BoxStorePosition(Config, ac, StoreMoveInfo.MoveParam), StoreMoveType.InStore, true);
boxTransport.Start(new BoxStorePosition(Config, StoreMoveInfo.MoveParam.ReelOnFixture ? StoreSide.NGDoor : StoreSide.Clamp, StoreMoveInfo.MoveParam), new BoxStorePosition(Config, ac, StoreMoveInfo.MoveParam), StoreMoveType.InStore, true);
}
StoreMoveInfo.log($"开始转运料盘");
StoreMoveInfo.log($"开始转运料盘");
break;
case MoveStep.StoreIn02:
break;
......@@ -160,7 +163,7 @@ namespace DeviceLibrary
StoreMoveInfo.log($"料盘已到达目的地");
if (StoreMoveInfo.MoveParam.IsNg)
{
NGPuted(StoreMoveInfo.MoveParam.NgMsg);
NGPuted(StoreMoveInfo.MoveParam.NgMsg);
}
StoreMoveInfo.NextMoveStep(MoveStep.StoreIn05);
}
......@@ -185,15 +188,16 @@ namespace DeviceLibrary
Msg.add("服务器连接异常", MsgLevel.warning);
return;
}
ServerCM.storeStatus = StoreStatus.OutStoreExecute;
StoreMoveInfo.NextMoveStep(MoveStep.StoreOut11);
var outFrom = CSVPositionReader<ACStorePosition>.GetPositon(StoreMoveInfo.MoveParam.PosID);
BoxStorePosition outTo;
if (StoreMoveInfo.MoveParam.IsNg)
outTo = new BoxStorePosition(Config, StoreSide.NGDoor, StoreMoveInfo.MoveParam);
else
outTo = new BoxStorePosition(Config, StoreSide.String, StoreMoveInfo.MoveParam);
boxTransport.Start(outFrom == null ? null : new BoxStorePosition(Config, outFrom, StoreMoveInfo.MoveParam), outTo, StoreMoveType.OutStore);
StoreMoveInfo.log($"开始转运料盘{(StoreMoveInfo.MoveParam.IsNg ? "单料口" : "料串")}");
var outFrom = CSVPositionReader<ACStorePosition>.GetPositon(StoreMoveInfo.MoveParam.PosID);
BoxStorePosition outTo;
if (StoreMoveInfo.MoveParam.IsNg)
outTo = new BoxStorePosition(Config, StoreSide.NGDoor, StoreMoveInfo.MoveParam);
else
outTo = new BoxStorePosition(Config, StoreSide.String, StoreMoveInfo.MoveParam);
boxTransport.Start(outFrom == null ? null : new BoxStorePosition(Config, outFrom, StoreMoveInfo.MoveParam), outTo, StoreMoveType.OutStore);
StoreMoveInfo.log($"开始转运料盘{(StoreMoveInfo.MoveParam.IsNg ? "单料口" : "料串")}");
break;
case MoveStep.StoreOut11:
......@@ -220,10 +224,10 @@ namespace DeviceLibrary
Msg.add("服务器连接异常", MsgLevel.warning);
return;
}
StoreMoveInfo.log($"料盘已到达目的地");
StoreMoveInfo.log($"料盘已到达目的地");
if (StoreMoveInfo.MoveParam.IsNg)
{
NGPuted(StoreMoveInfo.MoveParam.NgMsg);
OutSingleJobList.ClearLastPosid(StoreMoveInfo.MoveParam.PosID);
}
......@@ -232,7 +236,7 @@ namespace DeviceLibrary
ReelPutted(StoreMoveInfo.MoveParam.PlateH);
OutStoreJobList.ClearLastPosid(StoreMoveInfo.MoveParam.PosID);
}
StoreMoveInfo.EndMove();
}
break;
......@@ -241,8 +245,9 @@ namespace DeviceLibrary
break;
}
}
string StoreState() {
string state = crc.GetString(L.free,"空闲中");
string StoreState()
{
string state = crc.GetString(L.free, "空闲中");
if (StoreMoveInfo.MoveStep >= MoveStep.StoreOut10)
{
state = $"{crc.GetString(L.reel_outting, "出库中")},{crc.GetString(L.posnum, "出库中")}:{StoreMoveInfo.MoveParam.PosID}";
......
......@@ -141,6 +141,14 @@ namespace DeviceLibrary
Batch_Axis.AbsMove(StringMoveInfo, Config.Batch_P1, Config.Batch_P1_speed);
break;
case MoveStep.StringLoad_01:
if(StringState== StringStateE.OutStore)
{
ServerCM.storeStatus = StoreStatus.OutStoreExecute;
}
else if(StringState== StringStateE.InStore)
{
ServerCM.storeStatus = StoreStatus.InStoreExecute;
}
StringMoveInfo.NextMoveStep(MoveStep.StringLoad_01a);
StringMoveInfo.log($"批量轴到待机点");
Batch_Axis.AbsMove(StringMoveInfo, Config.Batch_P1, Config.Batch_P1_speed);
......@@ -408,6 +416,7 @@ namespace DeviceLibrary
case MoveStep.StringOut_Released:
StringMoveInfo.log($"料串已回到待机点");
ServerCM.storeStatus = StoreStatus.StoreOnline;
StringMoveInfo.NewMove(MoveStep.Wait);
break;
case MoveStep.StringOut_07:
......
......@@ -186,7 +186,7 @@ namespace DeviceLibrary
reelParam = null;
try
{
string fix = ConfigHelper.Config.Get(Setting_Init.FixBuffInfo, "");
string fix = Setting_Init.FixBuffInfo;
if (!string.IsNullOrEmpty(fix))
{
reelParam = JsonHelper.DeserializeJsonToObject<ReelParam>(fix);
......@@ -201,11 +201,13 @@ namespace DeviceLibrary
}
public static void PutReelInFixPos(ReelParam reelParam)
{
ConfigHelper.Config.Set(Setting_Init.FixBuffInfo, JsonHelper.SerializeObject(reelParam));
string buff= JsonHelper.SerializeObject(reelParam);
Setting_Init.FixBuffInfo=buff;
LogUtil.info(buff);
}
public static void ClearReelInFixPos()
{
ConfigHelper.Config.Set(Setting_Init.FixBuffInfo, "");
Setting_Init.FixBuffInfo = "";
}
#endregion
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!