using IWareCC.Properties;
|
using IWareCommon.Enum.Common;
|
using IWareCommon.Enum.Rgv;
|
using IWareCommon.Help;
|
using S7.Net;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
|
namespace IWareCC.RGV.Entity
|
{
|
public class RgvEntity
|
{
|
private System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();
|
/// <summary>
|
/// Rgv名称
|
/// </summary>
|
public string RgvName { get; set; }
|
/// <summary>
|
/// 设备编号
|
/// </summary>
|
public int DeviceId { get; set; }
|
/// <summary>
|
/// 根据心跳判断堆垛机是否在线
|
/// </summary>
|
public bool IsOnline { get; set; }
|
/// <summary>
|
/// 下线次数
|
/// </summary>
|
public int OffLineTimes { get; set; }
|
|
/// <summary>
|
/// 上一次心跳数
|
/// </summary>
|
public int LastHandShake { get; set; }
|
|
/// <summary>
|
/// 连接PLC读的对象
|
/// </summary>
|
public PlcS7 RRGVS71200 { get; set; }
|
/// <summary>
|
/// 连接PLC写的对象
|
/// </summary>
|
public PlcS7 WRGVS71200 { get; set; }
|
|
|
#region 写入设备的信息
|
/// <summary>
|
/// 心跳
|
/// </summary>
|
public int WHandShake { get; set; }
|
/// <summary>
|
/// 设备编号
|
/// </summary>
|
public string WRgvNo { get; set; }
|
/// <summary>
|
/// 急停
|
/// </summary>
|
public bool WEStop { get; set; }
|
/// <summary>
|
/// 起始站点
|
/// </summary>
|
public string WStartPos { get; set; }
|
/// <summary>
|
/// 目标站点
|
/// </summary>
|
public string WEndPos { get; set; }
|
/// <summary>
|
/// 任务号
|
/// </summary>
|
public int WTaskNo { get; set; }
|
/// <summary>
|
/// 任务类型
|
/// </summary>
|
public int WRgvCMD { get; set; }
|
/// <summary>
|
/// 任务完成确认
|
/// </summary>
|
public bool WAckTaskFinish { get; set; }
|
/// <summary>
|
/// 设备复位
|
/// </summary>
|
public bool WReset { get; set; }
|
|
/// <summary>
|
/// 托盘类型
|
/// </summary>
|
public int WPallType { get; set; }
|
/// <summary>
|
/// 任务下完成信号
|
/// </summary>
|
public bool WStb { get; set; }
|
#endregion
|
|
#region 读取设备的信息
|
/// <summary>
|
/// 心跳
|
/// </summary>
|
public int RHandShake { get; set; }
|
/// <summary>
|
/// Rgv编号
|
/// </summary>
|
public string RRgvNo { get; set; }
|
/// <summary>
|
/// 是否有报警
|
/// </summary>
|
public bool RAlarm { get; set; }
|
/// <summary>
|
/// 报警代码
|
/// </summary>
|
public int RAlarmCode { get; set; }
|
|
/// <summary>
|
/// 是否有货
|
/// </summary>
|
public bool RLoaded { get; set; }
|
/// <summary>
|
/// 任务完成信号
|
/// </summary>
|
public bool RTaskFinish { get; set; }
|
/// <summary>
|
/// 任务号
|
/// </summary>
|
public int RTaskNo { get; set; }
|
/// <summary>
|
/// 起始站点
|
/// </summary>
|
public int RSPos { get; set; }
|
/// <summary>
|
/// 目标站点
|
/// </summary>
|
public int RTPos { get; set; }
|
/// <summary>
|
/// Rgv位置
|
/// </summary>
|
public int RRgvPosition { get; set; }
|
/// <summary>
|
/// Rgv状态
|
/// </summary>
|
public int RState { get; set; }
|
/// <summary>
|
/// Rgv模式
|
/// </summary>
|
public int RMode { get; set; }
|
/// <summary>
|
/// 任务接收成功信号
|
/// </summary>
|
public bool RAck { get; set; }
|
#endregion
|
|
public OpcReadItem OpcReadItems { get; set; }
|
|
public OpcWriteItem OpcWriteItems { get; set; }
|
|
|
public RgvEntity() { }
|
|
public RgvEntity(string rgvName, int deviceId, PlcS7 plc)
|
{
|
this.RgvName = rgvName;
|
this.DeviceId = deviceId;
|
this.RRgvNo = deviceId.ToString();
|
this.WRgvNo = deviceId.ToString();
|
this.WRGVS71200 = plc;
|
OpcWriteItems = new OpcWriteItem
|
{
|
HandShake = "DB601.DBX8.4",
|
EStop = "DB601.DBX8.0",
|
StartPos = "DB601.DBW4",
|
EndPos = "DB601.DBW6",
|
TaskNo = "DB601.DBD0",
|
AckTaskFinish = "DB601.DBX8.3",
|
Reset = "DB601.DBX8.1",
|
Stb = "DB601.DBX8.2",
|
PallType = "DB601.DBW10"
|
|
};
|
OpcReadItems = new OpcReadItem
|
{
|
HandShake = "DB600.DBW0",
|
Alarm = "DB600.DBX8.0",
|
AlarmCode = "DB600.DBW10",
|
Loaded = "DB600.DBX4.0",
|
TaskFinish = "DB600.DBX24.1",
|
TaskNo = "DB600.DBD12",
|
SPos = "DB600.DBD16",
|
TPos = "DB600.DBD20",
|
RgvPosition = "DB600.DBD26",
|
State = "DB600.DBW6",
|
Mode = "DB600.DBW2",
|
Ack = "DB600.DBX24.0"
|
};
|
}
|
/// <summary>
|
/// Rgv任务发送
|
/// </summary>
|
/// <param name="deviceId"></param>
|
/// <param name="taskId"></param>
|
/// <param name="sourcePlce"></param>
|
/// <param name="toPlace"></param>
|
/// <param name="taskType"></param>
|
/// <param name="msg"></param>
|
/// <returns></returns>
|
public bool SendTask(int deviceId, int taskId, string sourcePlce, string toPlace, int pallType, out string msg)
|
{
|
try
|
{
|
msg = "";
|
if (!CanSendTask(deviceId, out msg))
|
{
|
return false;
|
}
|
|
bool b2 = this.WriteValue(this.OpcWriteItems.StartPos, sourcePlce);
|
bool b3 = this.WriteValue(this.OpcWriteItems.EndPos, toPlace);
|
bool b1 = this.WriteValue(this.OpcWriteItems.TaskNo, taskId);
|
bool b4 = this.WriteValue(this.OpcWriteItems.PallType, pallType);
|
bool b5 = this.WriteValue(this.OpcWriteItems.Stb, 1);
|
if (!(b1 && b2 && b3 && b4&&b5))
|
{
|
msg = "写入OPC失败";
|
return false;
|
}
|
return true;
|
}
|
catch (Exception ex)
|
{
|
msg = ex.Message;
|
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendTask", msg);
|
return false;
|
}
|
}
|
/// <summary>
|
/// 取消报警
|
/// </summary>
|
/// <param name="deviceId"></param>
|
/// <param name="msg"></param>
|
/// <returns></returns>
|
public bool ResolveRGV(int deviceId, out string msg)
|
{
|
try
|
{
|
msg = "";
|
bool confirm_flag =this.WriteValue(this.OpcWriteItems.Reset, true);
|
if (!confirm_flag)
|
{
|
msg = string.Format("向RGV{0}复位失败", RgvName);
|
return false;
|
}
|
return true;
|
}
|
catch (Exception ex)
|
{
|
msg = ex.Message;
|
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "ClearAlarm", msg);
|
return false;
|
}
|
}
|
|
/// <summary>
|
/// 任务删除
|
/// </summary>
|
/// <param name="deviceId"></param>
|
/// <param name="taskId"></param>
|
/// <param name="msg"></param>
|
/// <returns></returns>
|
public bool DeleteTask(int deviceId, int taskId, out string msg)
|
{
|
try
|
{
|
msg = "";
|
//if (this.RTaskNo != taskId)
|
//{
|
// msg = string.Format("RGV当前非执行taskId={0}的任务", taskId);
|
// return false;
|
//}
|
//bool b1 = this.WriteValue(this.OpcWriteItems.TaskNo, taskId);
|
bool b2 = this.WriteValue(this.OpcWriteItems.Reset, 1);
|
if (!(b2))
|
{
|
msg = string.Format("写入OPC失败", RgvName);
|
return false;
|
}
|
return true;
|
}
|
catch (Exception ex)
|
{
|
msg = ex.Message;
|
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DeleteTask", msg);
|
return false;
|
}
|
}
|
|
/// <summary>
|
/// 急停
|
/// </summary>
|
/// <param name="deviceId"></param>
|
/// <param name="msg"></param>
|
/// <returns></returns>
|
public bool EmergencyStop(int deviceId, out string msg)
|
{
|
try
|
{
|
msg = "";
|
bool flag = this.WriteValue(this.OpcWriteItems.EStop, 1);
|
if (!flag)
|
{
|
msg = string.Format("向RGV{0}写入急停指令失败", RgvName);
|
return false;
|
}
|
return true;
|
}
|
catch (Exception ex)
|
{
|
msg = ex.Message;
|
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "EmergencyStop", msg);
|
return false;
|
}
|
}
|
|
/// <summary>
|
/// 是否可以发送任务
|
/// </summary>
|
/// <param name="deviceId"></param>
|
/// <param name="taskType"></param>
|
/// <param name="msg"></param>
|
/// <returns></returns>
|
public bool CanSendTask(int deviceId, out string msg)
|
{
|
msg = "";
|
if (!IsOnline)
|
{
|
msg = "已离线";
|
return false;
|
}
|
if (RMode != (int)ERgvMode.连机自动模式)
|
{
|
msg = "当前非自动模式";
|
return false;
|
}
|
if (RState != (int)ERgvState.空闲)
|
{
|
msg = "设备状态非空闲,无法执行其他任务";
|
return false;
|
}
|
return true;
|
}
|
|
public bool WriteValue(string addr, object value)
|
{
|
string msg = string.Empty;
|
if (!string.IsNullOrEmpty(addr))
|
{
|
try
|
{
|
if (!this.WRGVS71200.IsConnected)
|
{
|
this.WRGVS71200.Close();
|
Thread.Sleep(100);
|
this.WRGVS71200.Open();
|
}
|
|
msg = this.WRGVS71200.Write(addr, value).ToString();
|
if (msg != "NoError")
|
{
|
string msg1 = this.WRGVS71200.Write(addr, value).ToString();
|
if (msg1 != "NoError")
|
{
|
this.WRGVS71200.Close();
|
Thread.Sleep(100);
|
this.WRGVS71200.Open();
|
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.RgvName + "WriteValue" + addr, msg);
|
return false;
|
}
|
else
|
{
|
return true;
|
}
|
|
}
|
else
|
{
|
return true;
|
}
|
}
|
catch
|
{
|
|
msg = addr + "写入失败 ";
|
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.RgvName+"WriteValue", msg);
|
return false;
|
}
|
}
|
else
|
{
|
msg = addr + "写入失败 ";
|
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.RgvName + "WriteValue", msg);
|
return false;
|
}
|
}
|
public object ReadValuePoint(string add)
|
{
|
|
try
|
{
|
if (!this.WRGVS71200.IsConnected)
|
{
|
this.WRGVS71200.Close();
|
Thread.Sleep(100);
|
this.WRGVS71200.Open();
|
}
|
object MyPlcData = this.WRGVS71200.Read(add);
|
if (MyPlcData.ToString() == "WrongVarFormat" || MyPlcData.ToString() == "10")
|
{
|
MyPlcData = this.WRGVS71200.Read(add);
|
if (MyPlcData.ToString() == "WrongVarFormat" || MyPlcData.ToString() == "10")
|
{
|
MyPlcData = this.WRGVS71200.Read(add);
|
}
|
}
|
return MyPlcData;
|
}
|
catch (Exception ex)
|
{
|
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.RgvName + "ReadValuePoint", ex.Message);
|
return 0;
|
}
|
|
}
|
}
|
}
|