using HslCommunication;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using System.Threading;
|
using WIDESEA_Common;
|
using WIDESEA_Common.Tools;
|
using WIDESEA_Core.Utilities;
|
using WIDESEA_Entity.DomainModels;
|
using WIDESEA_Services;
|
using WIDESEA_Services.IRepositories;
|
using WIDESEA_Services.Repositories;
|
using WIDESEA_Services.Services;
|
using WIDESEA_WCS.WCSClient;
|
|
namespace WIDESEA_WCS.Jobs.ConveyorLine.InboundArea
|
{
|
public partial class InboundAreaDispatch
|
{
|
private static string MeasureStationNo = "10301";
|
public static void MeasureStationAction(IDt_TaskWCSinfoRepository taskWCSinfoRepository, PLCClient client,string lineCode)
|
{
|
//读取设备正常
|
try
|
{
|
//出库测量到达终点处理逻辑
|
string rfidResult = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), MeasureStationNo).ToString();
|
//出库测量到达终点处理逻辑
|
int taskResult = Int32.Parse(client.ReadValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), MeasureStationNo).ToString());
|
//机械手是否开始工作
|
bool workingResult = bool.Parse(client.ReadValue(CLineInfoDBName.R_RobotArm_Catch_Moving.ToString(), "RobotArm").ToString());
|
//读取轴承是否被机械手放回10301
|
bool backResult = bool.Parse(client.ReadValue(CLineInfoDBName.R_RobotArm_Back_Normal.ToString(), "RobotArm").ToString());
|
|
string str = string.Empty;
|
//准备测量,出库测量到达目的地
|
Dt_TaskWCSinfo taskWCSinfo = taskWCSinfoRepository.FindFirst(x => x.wcstask_barcode == rfidResult && x.wcstask_state == TaskState.TaskState_Measure_Out_Line_Executing.ToString());
|
if (null != taskWCSinfo)
|
{
|
WebResponseContent content = WMSApi.PostTaskStateToWMS(rfidResult, TaskState.TaskState_Measure_Out_Line_Finished.ToString());
|
if (content.Status)
|
{
|
taskWCSinfo.wcstask_state = TaskState.TaskState_Measure_Out_Line_Finished.ToString();
|
taskWCSinfo.wcstask_dispatcherTime = DateTime.Now;
|
taskWCSinfoRepository.Update(taskWCSinfo, true);
|
}
|
}
|
//测量完毕后,机械手把轴承放回该工位,准备走测量回库流程
|
Dt_TaskWCSinfo back_TaskWCSinfo = taskWCSinfoRepository.FindFirst(x => x.wcstask_barcode == rfidResult && x.wcstask_state == TaskState.TaskState_Measureing.ToString());
|
if (null != back_TaskWCSinfo && backResult)
|
{
|
WebResponseContent content = WMSApi.PostTaskStateToWMS(rfidResult, TaskState.TaskState_Measure_Back_Line_Wait_Executing.ToString());
|
if (content.Status)
|
{
|
//将任务类型改为回库中
|
back_TaskWCSinfo.wcstask_type = TaskType.TaskType_Box_Pallet_Measure_Back.ToString();
|
//将任务起始站台和目的站台对调,准备回库
|
back_TaskWCSinfo.wcstask_endPoint = back_TaskWCSinfo.wcstask_startPoint;
|
back_TaskWCSinfo.wcstask_startPoint = "10301";
|
back_TaskWCSinfo.wcstask_endLocation = back_TaskWCSinfo.wcstask_startLocation;
|
back_TaskWCSinfo.wcstask_startLocation = back_TaskWCSinfo.wcstask_endPoint;
|
back_TaskWCSinfo.wcstask_state = TaskState.TaskState_Measure_Back_Line_Wait_Executing.ToString();
|
back_TaskWCSinfo.wcstask_dispatcherTime = DateTime.Now;
|
taskWCSinfoRepository.Update(back_TaskWCSinfo, true);
|
}
|
}
|
//测量完毕
|
Dt_TaskWCSinfo backMoving_TaskWCSinfo = taskWCSinfoRepository.FindFirst(x => x.wcstask_barcode == rfidResult && (x.wcstask_state == TaskState.TaskState_Measure_Back_Line_Wait_Executing.ToString() ||
|
x.wcstask_state == TaskState.TaskState_Measure_Back_Line_Executing.ToString()));
|
if (null != backMoving_TaskWCSinfo)
|
{
|
//回库这里需要考虑冲突, 即穿梭车可能要放货到回库的目标地址,看是否有该类型已经开始
|
//出库测量任务
|
//起始站台为回库目的站台
|
//已经开始
|
//还没有到达托盘码校验位置
|
Dt_TaskWCSinfo tmpMeasureOutTask = taskWCSinfoRepository.FindFirst(x =>
|
x.wcstask_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString() &&
|
x.wcstask_startPoint.Contains(backMoving_TaskWCSinfo.wcstask_endPoint) &&
|
x.wcstask_state != TaskState.TaskState_Assigned.ToString() &&
|
string.IsNullOrEmpty(x.wcstask_backUp_1));
|
if (tmpMeasureOutTask != null)
|
{
|
Console.WriteLine($"当前有该站台:【{backMoving_TaskWCSinfo.wcstask_endPoint}】的出库测量任务正在进行,回库任务:【{backMoving_TaskWCSinfo.wcstask_taskNumber}】等待执行");
|
return;
|
}
|
|
//string lineCode = "Measure_B";
|
|
//读取逻辑控制值
|
int logicValue = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_Logic.ToString(), lineCode).ToString());
|
|
//说明工位在等待调度,准备下发任务
|
if (logicValue == 1 || logicValue == 2)
|
{
|
WriteTaskInfo.WriteTaskInfoAction(backMoving_TaskWCSinfo, client, lineCode);
|
}
|
else if (logicValue == 3) //说明站台已经收到任务数据,等待WCS的启动指令
|
{
|
client.WriteValue(CLineInfoDBName.W_Line_Logic.ToString(), lineCode, 1);//启动任务
|
}
|
else if (logicValue == 4 || logicValue == 5)
|
{
|
if (backMoving_TaskWCSinfo.wcstask_state == TaskState.TaskState_Measure_Back_Line_Executing.ToString())
|
return;
|
|
//启动成功后,在此更新任务状态、上报WMS任务状态
|
WebResponseContent content1 = WMSApi.PostTaskStateToWMS(backMoving_TaskWCSinfo.wcstask_barcode, TaskState.TaskState_Measure_Back_Line_Executing.ToString());
|
if (content1.Status)
|
{
|
backMoving_TaskWCSinfo.wcstask_state = TaskState.TaskState_Measure_Back_Line_Executing.ToString();
|
backMoving_TaskWCSinfo.wcstask_dispatcherTime = DateTime.Now;
|
taskWCSinfoRepository.Update(backMoving_TaskWCSinfo, true);
|
}
|
}
|
}
|
|
//说明机械手在抓取轴承到测量设备,在此修改任务状态为:正在测量中
|
if (workingResult)
|
{
|
Dt_TaskWCSinfo executingTask = taskWCSinfoRepository.FindFirst(x => x.wcstask_barcode == rfidResult && x.wcstask_state == TaskState.TaskState_Measure_Out_Line_Finished.ToString());
|
if (null != executingTask)
|
{
|
WebResponseContent content = WMSApi.PostTaskStateToWMS(rfidResult, TaskState.TaskState_Measureing.ToString());
|
if (content.Status)
|
{
|
executingTask.wcstask_state = TaskState.TaskState_Measureing.ToString();
|
executingTask.wcstask_dispatcherTime = DateTime.Now;
|
taskWCSinfoRepository.Update(executingTask, true);
|
}
|
}
|
}
|
|
/***********************************************/
|
/*****************机械手逻辑********************/
|
/***********************************************/
|
|
//查看机械手是否待测量等待状态
|
bool robotReadyResult = bool.Parse(client.ReadValue(CLineInfoDBName.R_RobotArm_Ready.ToString(), "RobotArm").ToString());
|
if (robotReadyResult)
|
{
|
//通知机械手抓取轴承
|
Dt_TaskWCSinfo _taskWCSinfo = taskWCSinfoRepository.FindFirst(x => x.wcstask_barcode == rfidResult && x.wcstask_state == TaskState.TaskState_Measure_Out_Line_Finished.ToString());
|
if (_taskWCSinfo != null)
|
{
|
//查看机械手是否已经启动
|
bool robotWorkResult = bool.Parse(client.ReadValue(CLineInfoDBName.R_RobotArm_Working.ToString(), "RobotArm").ToString());
|
if (!robotWorkResult)//说明机械手还没启动,发送启动指令
|
client.WriteValue(CLineInfoDBName.W_RobotArm_Catch.ToString(), true);
|
}
|
}
|
//机械手已启动
|
bool flag = bool.Parse(client.ReadValue(CLineInfoDBName.R_RobotArm_Working.ToString(), "RobotArm").ToString());
|
if (flag)
|
client.WriteValue(CLineInfoDBName.W_RobotArm_Catch.ToString(), false);
|
|
//查看机械手是否已经启动
|
//bool _robotWorkResult = bool.Parse(client.ReadValue(CLineInfoDBName.R_RobotArm_Catch_Moving.ToString(), "RobotArm").ToString());
|
//if (_robotWorkResult)//启动成功后,置位机械手启动信号为 false
|
// client.WriteValue(CLineInfoDBName.W_RobotArm_Catch.ToString(), false);
|
}
|
catch (Exception ex)
|
{
|
WriteLog.Info(MeasureStationNo).Write($"{ DateTime.Now }测量站台调度失败:{ex.Message}", MeasureStationNo);
|
}
|
}
|
|
}
|
|
|
}
|