using iWareCommon.Utils;
using iWareModel;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace iWareSda
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“ConveyerService”。
public class ConveyerService : IConveyerService
{
public SdaResEntity ClearAlarm(int deviceId)
{
SdaResEntity sdaResult = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
string msg;
var result = Conveyer.ClearAlarm(deviceId, out msg);
Log4NetHelper.WriteInfoLog(LogType.ConveyerSdaService, "下发deviceId=" + deviceId + "的Conveyer消警指令" + (result ? "成功" : "失败") + "原因:" + msg);
sdaResult.result = result;
sdaResult.resMsg = msg;
return sdaResult;
}
catch (Exception ex)
{
sdaResult.result = false;
sdaResult.resMsg = JsonConvert.SerializeObject(ex);
return sdaResult;
}
}
///
/// 下发Conveyer任务
///
///
///
///
///
///
///
public SdaResEntity SendConveyerTask(int deviceId, int taskId, string sourcePlce, string toPlace, string containertype, string taskType)
{
SdaResEntity sdaResult = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
//如果STP为TRUE,表示不能发任务
string msg;
var result = Conveyer.SendTask(deviceId, taskId, sourcePlce, toPlace, containertype, taskType, out msg);
Log4NetHelper.WriteInfoLog(LogType.ConveyerSdaService, "下发deviceId=" + deviceId + ",taskId=" + taskId + ",fromPlace=" +
sourcePlce + ",toPlace=" + toPlace + "的Conveyer任务" + (result ? "成功" : "失败") + "原因:" + msg);
sdaResult.result = result;
sdaResult.resMsg = msg;
return sdaResult;
}
catch (Exception ex)
{
sdaResult.result = false;
sdaResult.resMsg = JsonConvert.SerializeObject(ex);
return sdaResult;
}
}
///
/// 下发Conveyer任务
///
///
///
///
///
///
///
public SdaResEntity ClearConveyerTask(int deviceId, int taskId, string sourcePlce, string toPlace, string containertype, string taskType)
{
SdaResEntity sdaResult = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
//如果STP为TRUE,表示不能发任务
string msg;
var result = Conveyer.SendTask(deviceId, taskId, sourcePlce, toPlace, containertype, taskType, out msg);
Log4NetHelper.WriteInfoLog(LogType.CCWCFService, "下发deviceId=" + deviceId + ",taskId=" + taskId + ",fromPlace=" +
sourcePlce + ",toPlace=" + toPlace + "的Conveyer任务" + (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 ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
string msg = "";
var result = Conveyer.WriteStp(deviceId, stationCode, value, out msg);
Log4NetHelper.WriteInfoLog(LogType.ConveyerSdaService,
"下发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 DeleteConveyerTask(int deviceId, int taskId)
{
SdaResEntity sdaResult = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
string msg = "";
var result = Conveyer.DeleteTask(deviceId, taskId, out msg);
Log4NetHelper.WriteInfoLog(LogType.ConveyerSdaService, "下发deviceId = " + deviceId + "的删除Conveyer任务指令" + (result ? "成功" : "失败") + "原因:" + msg);
sdaResult.result = result;
sdaResult.resMsg = msg;
return sdaResult;
}
catch (Exception ex)
{
sdaResult.result = false;
sdaResult.resMsg = JsonConvert.SerializeObject(ex);
return sdaResult;
}
}
/////
///// Conveyer急停
/////
/////
/////
//public SdaResEntity EmergencyStop(int deviceId)
//{
// SdaResEntity sdaResult = new SdaResEntity();
// try
// {
// var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
// if (!ConveyerResult.result)
// {
// return ConveyerResult;
// }
// var Conveyer = ConveyerResult.resData as ConveyerEntity;
// string msg = "";
// var result = Conveyer.EmergencyStop(deviceId, out msg);
// Log4NetHelper.WriteInfoLog(LogType.ConveyerSdaService, "下发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;
// }
//}
///
/// 获取整个Conveyer对象
///
///
///
public ConveyerView GetConveyerInfo(int deviceId)
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return null;
}
var Conveyer = (ConveyerResult.resData as ConveyerEntity).View;
return Conveyer;
}
///
/// Conveyer任务是否完成
///
///
///
///
public SdaResEntity IsTaskFinish(int deviceId, string stationCode, int taskId)
{
SdaResEntity sdaResult = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
//var stationCode = ((int)EDevice.Conveyer1040).ToString();
var readData = Conveyer.View.R_ConveyerForReadCommList.Where(x => x.StationCode == stationCode).FirstOrDefault();
sdaResult.result = readData.R_TaskID == taskId && readData.R_TaskFinish;
sdaResult.resMsg = "成功";
}
catch (Exception ex)
{
sdaResult.result = false;
sdaResult.resMsg = JsonConvert.SerializeObject(ex);
return sdaResult;
}
return sdaResult;
}
///
/// Conveyer是否是自动模式
///
///
public SdaResEntity IsConveyerAuto(int deviceId, string stationCode)
{
SdaResEntity sdaResult = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
var msg = "";
var result = Conveyer.ConveyerIsAuto(stationCode, out msg);
if (!ConveyerResult.result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return ConveyerResult;
}
sdaResult.result = true;
}
catch (Exception ex)
{
sdaResult.result = false;
sdaResult.resMsg = JsonConvert.SerializeObject(ex);
Log4NetHelper.WriteErrorLog(LogType.ConveyerSdaService, "判断Conveyer是否是自动模式出现异常,ex:" + JsonConvert.SerializeObject(ex), ex);
}
return sdaResult;
}
///
/// Conveyer是否是自动待机模式
///
///
public SdaResEntity ConveyerIsAutoAwaitMode(int deviceId, string stationCode)
{
SdaResEntity sdaResult = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
var msg = "";
var result = Conveyer.ConveyerIsAutoAwaitMode(stationCode, out msg);
if (!ConveyerResult.result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return ConveyerResult;
}
sdaResult.result = true;
}
catch (Exception ex)
{
sdaResult.result = false;
sdaResult.resMsg = JsonConvert.SerializeObject(ex);
Log4NetHelper.WriteErrorLog(LogType.ConveyerSdaService, "判断Conveyer是否是自动待机模式出现异常,ex:" + JsonConvert.SerializeObject(ex), ex);
}
return sdaResult;
}
///
/// 判断Conveyer是否可用,是否可以发送新任务给Conveyer
///
///
///
///
/// 是否是涉及到Conveyer的任务
///
public SdaResEntity IsAllowSendTask(bool isNeedValidateRealSourceAndToPlace, int deviceId, string sourceStationCode, string toStationCode, bool isConveyerTask)
{
var msg = "";
SdaResEntity sdaResult = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
var result = false;
if (isNeedValidateRealSourceAndToPlace)
{
//判断起点是否是自动待机模式
result = Conveyer.ConveyerIsAutoAwaitMode(sourceStationCode, out msg);
if (!result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return sdaResult;
}
//判断起点是否是空闲状态
result = Conveyer.ConveyerIsStateFree(sourceStationCode, out msg);
if (!result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return sdaResult;
}
}
//判断Conveyer是否是自动模式
result = Conveyer.ConveyerIsAuto(((int)EDevice.Conveyer1040).ToString(), out msg);
if (!result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return sdaResult;
}
if (isConveyerTask)
{//如果是涉及到Conveyer的任务,需要去验证下Conveyer是否是空闲状态
//判断Conveyer是否是自动待机模式
result = Conveyer.ConveyerIsAutoAwaitMode(((int)EDevice.Conveyer1040).ToString(), out msg);
if (!result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return sdaResult;
}
result = Conveyer.ConveyerIsStateFree(((int)EDevice.Conveyer1040).ToString(), out msg);
if (!result)
{
sdaResult.result = false;
sdaResult.resMsg = msg;
return sdaResult;
}
}
if (isNeedValidateRealSourceAndToPlace)
{
//判断目标点是否是自动模式
result = Conveyer.ConveyerIsAuto(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 ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
var result = Conveyer.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 ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
string msg = "";
var result = Conveyer.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;
}
}
///
/// 写入扫码接受完成
///
///
///
///
public SdaResEntity WriteReceiveScan(int deviceId, string stationCode, bool value)
{
SdaResEntity _SdaResEntity = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
string msg = "";
bool result = false;
if (stationCode == "101")
{
result = Conveyer.Write101Scan(deviceId, value, out msg);
}
Log4NetHelper.WriteInfoLog(LogType.ConveyerSdaService, "下发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;
}
}
///
/// Conveyer的任务完成ACK赋值
///
///
///
///
public SdaResEntity WriteConveyer_FinishACK(int deviceId, bool value, int plcTaskId, string stationcode)
{
SdaResEntity _SdaResEntity = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
string msg = "";
var result = Conveyer.WriteConveyer_FinishACK(deviceId, value, plcTaskId, stationcode, 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 ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
string msg = "";
var result = Conveyer.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;
}
}
///
/// AGV请求入
///
///
///
///
public SdaResEntity WriteAGVRequestIn(int deviceId, bool value)
{
SdaResEntity _SdaResEntity = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
string msg = "";
var result = Conveyer.AGVRequestIN(value, out msg);
_SdaResEntity.result = result;
_SdaResEntity.resMsg = msg;
return _SdaResEntity;
}
catch (Exception ex)
{
_SdaResEntity.result = false;
_SdaResEntity.resMsg = ex.Message;
return _SdaResEntity;
}
}
///
/// AGV请求入到位
///
///
///
///
public SdaResEntity WriteAGVRequestInArr(int deviceId, bool value)
{
SdaResEntity _SdaResEntity = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
string msg = "";
var result = Conveyer.AGVRequestINARR(value, out msg);
_SdaResEntity.result = result;
_SdaResEntity.resMsg = msg;
return _SdaResEntity;
}
catch (Exception ex)
{
_SdaResEntity.result = false;
_SdaResEntity.resMsg = ex.Message;
return _SdaResEntity;
}
}
///
/// AGV请求出
///
///
///
///
public SdaResEntity WriteAGVRequestOUT(int deviceId, bool value)
{
SdaResEntity _SdaResEntity = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
string msg = "";
var result = Conveyer.AGVRequestOUT(value, out msg);
_SdaResEntity.result = result;
_SdaResEntity.resMsg = msg;
return _SdaResEntity;
}
catch (Exception ex)
{
_SdaResEntity.result = false;
_SdaResEntity.resMsg = ex.Message;
return _SdaResEntity;
}
}
///
/// AGV请求出到位
///
///
///
///
public SdaResEntity WriteAGVRequestOutArr(int deviceId, bool value)
{
SdaResEntity _SdaResEntity = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
string msg = "";
var result = Conveyer.AGVRequestOUTARR(value, out msg);
_SdaResEntity.result = result;
_SdaResEntity.resMsg = msg;
return _SdaResEntity;
}
catch (Exception ex)
{
_SdaResEntity.result = false;
_SdaResEntity.resMsg = ex.Message;
return _SdaResEntity;
}
}
///
/// AGV任务类型
///
///
///
///
public SdaResEntity WriteAGVTaskType(int deviceId,short value)
{
SdaResEntity _SdaResEntity = new SdaResEntity();
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId);
if (!ConveyerResult.result)
{
return ConveyerResult;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
string msg = "";
var result = Conveyer.AGVTaskType(value, out msg);
_SdaResEntity.result = result;
_SdaResEntity.resMsg = msg;
return _SdaResEntity;
}
catch (Exception ex)
{
_SdaResEntity.result = false;
_SdaResEntity.resMsg = ex.Message;
return _SdaResEntity;
}
}
///
/// 读取点位
///
///
///
///
public bool ReadAddress(string address)
{
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(3);
if (!ConveyerResult.result)
{
return false;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
return Conveyer.Read(address);
}
catch (Exception ex)
{
return false;
}
}
///
/// 读取点位
///
///
///
///
public string ReadStr(string address)
{
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(3);
if (!ConveyerResult.result)
{
return null;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
return Conveyer.ReadStr(address);
}
catch (Exception ex)
{
return null;
}
}
///
/// 读取点位
///
///
///
///
public short ReadShort(string address)
{
try
{
var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(3);
if (!ConveyerResult.result)
{
return 0;
}
var Conveyer = ConveyerResult.resData as ConveyerEntity;
return Conveyer.ReadShort(address);
}
catch (Exception ex)
{
return 0;
}
}
}
}