MES系统通常都会与SCADA系统集成使用,尤其具备中控管理需求的工厂,集控SCADA需要集成MES系统的计划工单数据实现工单数据、工艺配方数据、SN数据、打码数据等下发,执行状态、关键参数反馈等上传。本文介绍在WinCC画面集成基于C#开发的计划管理界面,以下代码主要是C#开发计划管理组件代码。
项目代码:https://download.youkuaiyun.com/download/bjhtgy/89696770
namespace ProUserLib
{
[ProgId("ProUserLib.BatchPlan")]
[ClassInterface(ClassInterfaceType.AutoDual)]
public partial class BatchPlan : UserControl
{
BusinessLogic.CommonLogic logic = null;
BusinessLogic.WebServiceLogic weblogic = null;
BusinessLogic.MqLogic mq = null;
BusinessLogic.HandleMesXmlLogic hxml = null;
public BatchPlan()
{
InitializeComponent();
logic = (BusinessLogic.CommonLogic)(Activator.GetObject(typeof(BusinessLogic.CommonLogic), "tcp://" + ServerIp + ":8505/CommonLogic"));
weblogic = (BusinessLogic.WebServiceLogic)(Activator.GetObject(typeof(BusinessLogic.WebServiceLogic), "tcp://" + ServerIp + ":8505/WebServiceLogic"));
mq = (BusinessLogic.MqLogic)(Activator.GetObject(typeof(BusinessLogic.MqLogic), "tcp://" + ServerIp + ":8601/MqLogic"));
hxml = (BusinessLogic.HandleMesXmlLogic)(Activator.GetObject(typeof(BusinessLogic.HandleMesXmlLogic), "tcp://" + ServerIp + ":8601/HandleMesXmlLogic"));
//mq.queuemanagername = QueueManagerName;
}
private string m_serverIp = "172.17.129.97";
public string ServerIp
{
get { return m_serverIp; }
set { m_serverIp = value; }
}
//private string m_QueueManagerName = "cczs2";
//private string m_QueueName = "channelformes";
//public string QueueManagerName
//{
// get { return m_QueueManagerName; }
// set { m_QueueManagerName = value; }
//}
//public string QueueName
//{
// get { return m_QueueName; }
// set { m_QueueName = value; }
//}
/// <summary>
/// 更新生产单元计划
/// </summary>
/// <param name="m_startorend">开始或者结束 0-开始 1-结束</param>
/// <param name="m_unitno">生产单元编码</param>
/// <param name="m_batch">批次号</param>
/// <param name="m_grade">班次</param>
/// <returns>更新是否成功 0-不成功 1-成功</returns>
public string UpdatePlanUnit(string m_startorend, string m_unitno, string m_batch, string m_grade)
{
string m_time="";
ArrayList field = new ArrayList();
if (m_startorend == "0")
{
field.Add("PlanStartDate");
field.Add("ProductGrade");
}
else
{
field.Add("PlanEndDate");
field.Add("ProductGrade");
}
field.Add("PlanState");
ArrayList value = new ArrayList();
if (m_startorend == "0")
{
m_time=System.DateTime.Now.ToString();
value.Add(System.DateTime.Now.ToString());
value.Add(m_grade);
value.Add(6);
}
else
{
m_time=System.DateTime.Now.ToString();
value.Add(System.DateTime.Now.ToString());
value.Add(m_grade);
value.Add(7);
}
ArrayList type = new ArrayList();
type.Add("string");
type.Add("string");
type.Add("int");
ArrayList confield = new ArrayList();
confield.Add("Batch");
confield.Add("productionUnit");
ArrayList convalue = new ArrayList();
convalue.Add(m_batch);
convalue.Add(int.Parse(m_unitno));
ArrayList contype = new ArrayList();
contype.Add("string");
contype.Add("int");
int flag = logic.UpDateClass("T_BatchPlan", field, value, type, confield, convalue, contype);
FeedBackUnitPlanTime(m_startorend, m_batch, m_unitno, m_time);// m_startorend, string m_unitno, string m_batch, string m_grade)
if (flag == 1)
{
return "1";
}
else
{
return "0";
}
}
/// <summary>
/// 更新生产段计划,需要查询工艺段包含的生产单元
/// </summary>
/// <param name="m_startorend">开始或者结束 0-开始 1-结束</param>
/// <param name="m_unitno">生产段编码</param>
/// <param name="m_batch">批次号</param>
/// /// <param name="m_grade">班次</param>
public void UpdatePlanSeg(string m_startorend, string m_segno, string m_batch, string m_grade)
{
ArrayList field = new ArrayList();
field.Add("PuNo");
ArrayList confield = new ArrayList();
confield.Add("Sno");
ArrayList convalue = new ArrayList();
convalue.Add(int.Parse(m_segno));
ArrayList contype = new ArrayList();
contype.Add("int");
DataSet ds = logic.SearchClass("T_ProductionUnit", field, confield, convalue, contype);
if (ds != null)
{
if (ds.Tables.Count > 0)
{
DataTable dt = ds.Tables[0];
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
string puno = dr[0].ToString();
UpdatePlanUnit(m_startorend, puno, m_batch, m_grade);
}
}
}
}
}
/// <summary>
/// 记录贮柜信息
/// </summary>
/// <param name="m_unitno">生产单元</param>
/// <param name="m_batch">批次号</param>
/// <param name="m_brand">烟牌</param>
/// <param name="m_grade">班次</param>
/// <param name="m_fromcab">来源柜</param>
/// <param name="m_tocab">去向柜</param>
/// <returns>返回记录状态</returns>
public string BatchCabInfo(strin