using iWareCommon.Utils;
using iWareModel;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace iWareSda
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“RgvService”。
public class RgvService : IRgvService
{
public SdaResEntity ClearAlarm(int deviceId)
{
SdaResEntity sdaResult = new SdaResEntity();
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
string msg;
var result = rgv.ClearAlarm(deviceId, out msg);
Log4NetHelper.WriteInfoLog(LogType.RgvSdaService, "下发deviceId=" + deviceId + "的RGV消警指令" + (result ? "成功" : "失败") + "原因:" + msg);
sdaResult.result = result;
sdaResult.resMsg = msg;
return sdaResult;
}
catch (Exception ex)
{
sdaResult.result = false;
sdaResult.resMsg = JsonConvert.SerializeObject(ex);
return sdaResult;
}
}
///
/// 下发RGV任务
///
///
///
///
///
///
///
public SdaResEntity SendRgvTask(int deviceId, int taskId, string sourcePlce, string toPlace)
{
SdaResEntity sdaResult = new SdaResEntity();
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
//如果STP为TRUE,表示不能发任务
string msg;
var result = rgv.SendTask(deviceId, taskId, sourcePlce, toPlace, out msg);
Log4NetHelper.WriteInfoLog(LogType.RgvSdaService, "下发deviceId=" + deviceId + ",taskId=" + taskId + ",fromPlace=" +
sourcePlce + ",toPlace=" + toPlace + "的RGV任务" + (result ? "成功" : "失败") + "原因:" + msg);
sdaResult.result = result;
sdaResult.resMsg = msg;
return sdaResult;
}
catch (Exception ex)
{
sdaResult.result = false;
sdaResult.resMsg = JsonConvert.SerializeObject(ex);
return sdaResult;
}
}
///
/// 任务下发确认(收到PLC反馈后WCS清除)
///
///
///
///
public SdaResEntity WriteStp(int deviceId, bool value, string stationCode)
{
SdaResEntity _SdaResEntity = new SdaResEntity();
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
string msg = "";
var result = rgv.WriteStp(deviceId, stationCode, value, out msg);
Log4NetHelper.WriteInfoLog(LogType.RgvSdaService,
"下发deviceId=" + deviceId + ",站点号=" + stationCode + "的任务下发确认(收到PLC反馈后WCS清除)指令" + (result ? "成功" : "失败") + "原因:" + msg);
_SdaResEntity.result = result;
_SdaResEntity.resMsg = msg;
return _SdaResEntity;
}
catch (Exception ex)
{
_SdaResEntity.result = false;
_SdaResEntity.resMsg = ex.Message;
return _SdaResEntity;
}
}
public SdaResEntity DeleteRgvTask(int deviceId, int taskId)
{
SdaResEntity sdaResult = new SdaResEntity();
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
string msg = "";
var result = rgv.DeleteTask(deviceId, taskId, out msg);
Log4NetHelper.WriteInfoLog(LogType.RgvSdaService, "下发deviceId = " + deviceId + "的删除RGV任务指令" + (result ? "成功" : "失败") + "原因:" + msg);
sdaResult.result = result;
sdaResult.resMsg = msg;
return sdaResult;
}
catch (Exception ex)
{
sdaResult.result = false;
sdaResult.resMsg = JsonConvert.SerializeObject(ex);
return sdaResult;
}
}
/////
///// RGV急停
/////
/////
/////
//public SdaResEntity EmergencyStop(int deviceId)
//{
// SdaResEntity sdaResult = new SdaResEntity();
// try
// {
// var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
// if (!rgvResult.result)
// {
// return rgvResult;
// }
// var rgv = rgvResult.resData as RgvEntity;
// string msg = "";
// var result = rgv.EmergencyStop(deviceId, out msg);
// Log4NetHelper.WriteInfoLog(LogType.RgvSdaService, "下发deviceId = " + deviceId + "的急停任务指令" + (result ? "成功" : "失败") + "原因:" + msg);
// sdaResult.result = result;
// sdaResult.resMsg = msg;
// return sdaResult;
// }
// catch (Exception ex)
// {
// sdaResult.result = false;
// sdaResult.resMsg = JsonConvert.SerializeObject(ex);
// return sdaResult;
// }
//}
///
/// 获取整个RGV对象
///
///
///
public RgvView GetRgvInfo(int deviceId)
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return null;
}
var rgv = (rgvResult.resData as RgvEntity).View;
return rgv;
}
///
/// RGV任务是否完成
///
///
///
///
public SdaResEntity IsTaskFinish(int deviceId, int taskId)
{
SdaResEntity sdaResult = new SdaResEntity();
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
var stationCode = ((int)EDevice.RGV1040).ToString();
var readData = rgv.View.R_RgvForReadCommList.Where(x => x.StationCode == stationCode).FirstOrDefault();
sdaResult.result = readData.R_TaskID == taskId && rgv.View.R_RGV_Finish;
sdaResult.resMsg = "成功";
}
catch (Exception ex)
{
sdaResult.result = false;
sdaResult.resMsg = JsonConvert.SerializeObject(ex);
return sdaResult;
}
return sdaResult;
}
///
/// RGV是否是自动模式
///
///
public SdaResEntity IsRgvAuto(int deviceId, string stationCode)
{
SdaResEntity sdaResult = new SdaResEntity();
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
var msg = "";
var result = rgv.RgvIsAuto(stationCode, out msg);
if (!rgvResult.result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return rgvResult;
}
sdaResult.result = true;
}
catch (Exception ex)
{
sdaResult.result = false;
sdaResult.resMsg = JsonConvert.SerializeObject(ex);
Log4NetHelper.WriteErrorLog(LogType.RgvSdaService, "判断RGV是否是自动模式出现异常,ex:" + JsonConvert.SerializeObject(ex), ex);
}
return sdaResult;
}
///
/// RGV是否是自动待机模式
///
///
public SdaResEntity RgvIsAutoAwaitMode(int deviceId, string stationCode)
{
SdaResEntity sdaResult = new SdaResEntity();
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
var msg = "";
var result = rgv.RgvIsAutoAwaitMode(stationCode, out msg);
if (!rgvResult.result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return rgvResult;
}
sdaResult.result = true;
}
catch (Exception ex)
{
sdaResult.result = false;
sdaResult.resMsg = JsonConvert.SerializeObject(ex);
Log4NetHelper.WriteErrorLog(LogType.RgvSdaService, "判断RGV是否是自动待机模式出现异常,ex:" + JsonConvert.SerializeObject(ex), ex);
}
return sdaResult;
}
///
/// 判断RGV是否可用,是否可以发送新任务给RGV
///
///
///
///
/// 是否是涉及到RGV的任务
///
public SdaResEntity IsAllowSendTask(bool isNeedValidateRealSourceAndToPlace, int deviceId, string sourceStationCode, string toStationCode, bool isRgvTask)
{
var msg = "";
SdaResEntity sdaResult = new SdaResEntity();
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
var result = false;
if (isNeedValidateRealSourceAndToPlace)
{
//判断起点是否是自动待机模式
result = rgv.RgvIsAutoAwaitMode(sourceStationCode, out msg);
if (!result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return sdaResult;
}
//判断起点是否是空闲状态
result = rgv.RgvIsStateFree(sourceStationCode, out msg);
if (!result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return sdaResult;
}
}
//判断RGV是否是自动模式
result = rgv.RgvIsAuto(((int)EDevice.RGV1040).ToString(), out msg);
if (!result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return sdaResult;
}
if (isRgvTask)
{//如果是涉及到RGV的任务,需要去验证下RGV是否是空闲状态
//判断RGV是否是自动待机模式
result = rgv.RgvIsAutoAwaitMode(((int)EDevice.RGV1040).ToString(), out msg);
if (!result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return sdaResult;
}
result = rgv.RgvIsStateFree(((int)EDevice.RGV1040).ToString(), out msg);
if (!result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return sdaResult;
}
}
if (isNeedValidateRealSourceAndToPlace)
{
//判断目标点是否是自动模式
result = rgv.RgvIsAuto(toStationCode, out msg);
if (!result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return sdaResult;
}
}
sdaResult.result = true;
return sdaResult;
}
catch (Exception ex)
{
sdaResult.result = false;
sdaResult.resMsg = "出现异常:" + JsonConvert.SerializeObject(ex);
return sdaResult;
}
}
///
/// 判断是否有心跳
///
///
///
public SdaResEntity IsHaveHeatBeat(int deviceId)
{
SdaResEntity sdaResult = new SdaResEntity();
string msg;
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
var result = rgv.IsHaveHeatBeat();
sdaResult.result = true;
sdaResult.resData = result;
return sdaResult;
}
catch (Exception ex)
{
msg = "验证是否有心跳出现异常:" + ex.Message;
sdaResult.result = false;
sdaResult.resMsg = msg;
return sdaResult;
}
}
///
/// 1015重新扫码
///
///
///
///
public SdaResEntity Write1015ReScan(int deviceId, bool value)
{
SdaResEntity _SdaResEntity = new SdaResEntity();
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
string msg = "";
var result = rgv.Write1015ReScan(deviceId, value, out msg);
_SdaResEntity.result = result;
_SdaResEntity.resMsg = msg;
return _SdaResEntity;
}
catch (Exception ex)
{
_SdaResEntity.result = false;
_SdaResEntity.resMsg = ex.Message;
return _SdaResEntity;
}
}
///
/// 1019重新扫码
///
///
///
///
public SdaResEntity Write1019ReScan(int deviceId, bool value)
{
SdaResEntity _SdaResEntity = new SdaResEntity();
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
string msg = "";
var result = rgv.Write1019ReScan(deviceId, value, out msg);
_SdaResEntity.result = result;
_SdaResEntity.resMsg = msg;
return _SdaResEntity;
}
catch (Exception ex)
{
_SdaResEntity.result = false;
_SdaResEntity.resMsg = ex.Message;
return _SdaResEntity;
}
}
///
/// RGV的任务完成ACK赋值
///
///
///
///
public SdaResEntity WriteRGV_FinishACK(int deviceId, bool value, int plcTaskId)
{
SdaResEntity _SdaResEntity = new SdaResEntity();
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
string msg = "";
var result = rgv.WriteRGV_FinishACK(deviceId, value, plcTaskId, out msg);
_SdaResEntity.result = result;
_SdaResEntity.resMsg = msg;
return _SdaResEntity;
}
catch (Exception ex)
{
_SdaResEntity.result = false;
_SdaResEntity.resMsg = ex.Message;
return _SdaResEntity;
}
}
///
/// 四个入库口扫描验证ACK赋值
///
///
///
///
public SdaResEntity WriteScanValidateACK(bool isReset, int deviceId, string stationCode, bool value, int plcTaskId)
{
SdaResEntity _SdaResEntity = new SdaResEntity();
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
string msg = "";
var result = rgv.WriteScanValidateACK(isReset, deviceId, stationCode, value, plcTaskId, out msg);
_SdaResEntity.result = result;
_SdaResEntity.resMsg = msg;
return _SdaResEntity;
}
catch (Exception ex)
{
_SdaResEntity.result = false;
_SdaResEntity.resMsg = ex.Message;
return _SdaResEntity;
}
}
///
/// 发动机出库,给西港PLC发送发动机数据 【Editby shaocx,2023-07-23】
///
///
///
///
///
///
///
public SdaResEntity WriteRGV_XigangGetDataForOut(int deviceId, string value__Out_MaterialModel,
string value_Out_OrderNo,
string value_Out_SerialNumber,
int plcTaskId)
{
SdaResEntity _SdaResEntity = new SdaResEntity();
try
{
var rgvResult = Rgv_CacheEntity.GetDeviceObj(deviceId);
if (!rgvResult.result)
{
return rgvResult;
}
var rgv = rgvResult.resData as RgvEntity;
string msg = "";
var result = rgv.WriteRGV_XigangGetDataForOut(deviceId, value__Out_MaterialModel, value_Out_OrderNo, value_Out_SerialNumber, plcTaskId, out msg);
_SdaResEntity.result = result;
_SdaResEntity.resMsg = msg;
return _SdaResEntity;
}
catch (Exception ex)
{
_SdaResEntity.result = false;
_SdaResEntity.resMsg = ex.Message;
return _SdaResEntity;
}
}
}
}