using DataLinkMesWork;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Robot.Common;
using NPOI.SS.UserModel;
namespace MesWork
{
public partial class publicCore
{
public static int partCount = 0;
public static string FSSRequestMsgId = "";
public static string Hello_You_All_Never_Know(string[] args)
{
return Guid.NewGuid().ToString();
}
///
/// PLC事件变化委托
///
public static Action MIS_Funtion_PLC_OP = null;
///
/// 读取PLC正在装配第几个件
///
///
///
public static int Get_PartPosition(string opName)
{
// 当前装配第几个件 54
int PartPosition = -1;
PartPosition = Convert.ToInt32(MesWorkForm.ReadPLC(54, opName)) ;
return PartPosition;
}
///
/// 设备状态发生变化,处理完成之后,发给管控系统
/// 1工作中 2空闲(请求上料) 3完成(请求下料) 4 报警
///
public static void SolveDeviceStatus(string opName)
{
// 空闲(请求上料) 51
string isFree = "0";
// 完成(请求下料) 52
string isWorkFinish = "0";
// 故障 53
string isAlarm = "0";
string finalStatus = "0";
isFree = MesWorkForm.ReadPLC(51, opName).ToString();
if (isFree.ToLower() == "true" || isFree.ToLower() == "1")
{
isFree = "1";
}
isWorkFinish = MesWorkForm.ReadPLC(52, opName).ToString();
if (isWorkFinish.ToLower() == "true" || isWorkFinish.ToLower() == "1")
{
isWorkFinish = "1";
}
isAlarm = MesWorkForm.ReadPLC(53, opName).ToString();
if (isAlarm.ToLower() == "true" || isAlarm.ToLower() == "1")
{
isAlarm = "1";
}
if (isAlarm == "1")
{
finalStatus = "4";
}
else if (isWorkFinish == "1")
{
finalStatus = "3";
}
else if (isFree == "1")
{
finalStatus = "2";
}
else
{
finalStatus = "1";
}
if (finalStatus == "3")
{
QualityData_Insert_Final(opName, out string errMag);
publicCore.LogInsert("Quality", "Info", "保存质量数据:" + errMag);
}
AnalysisMsg.DeviceStatus(opName, Convert.ToInt32(finalStatus));
}
///
/// 设备状态发生变化,处理完成之后,发给管控系统
/// 1工作中 2空闲(请求上料) 3完成(请求下料) 4 报警
/// 接口用 不重复保存质量数据
///
public static void SolveDeviceStatus_WebApi_Use(string opName)
{
// 空闲(请求上料) 51
string isFree = "0";
// 完成(请求下料) 52
string isWorkFinish = "0";
// 故障 53
string isAlarm = "0";
string finalStatus = "0";
isFree = MesWorkForm.ReadPLC(51, opName).ToString();
if (isFree.ToLower() == "true" || isFree.ToLower() == "1")
{
isFree = "1";
}
isWorkFinish = MesWorkForm.ReadPLC(52, opName).ToString();
if (isWorkFinish.ToLower() == "true" || isWorkFinish.ToLower() == "1")
{
isWorkFinish = "1";
}
isAlarm = MesWorkForm.ReadPLC(53, opName).ToString();
if (isAlarm.ToLower() == "true" || isAlarm.ToLower() == "1")
{
isAlarm = "1";
}
if (isAlarm == "1")
{
finalStatus = "4";
}
else if (isWorkFinish == "1")
{
finalStatus = "3";
}
else if (isFree == "1")
{
finalStatus = "2";
}
else
{
finalStatus = "1";
}
AnalysisMsg.DeviceStatus(opName, Convert.ToInt32(finalStatus));
}
///
/// 设备状态发生变化,处理完成之后,发给管控系统
/// 1工作中 2空闲(请求上料) 3完成(请求下料) 4 报警
///
public static string SolveDeviceStatus_Read(string opName)
{
// 空闲(请求上料) 51
string isFree = "0";
// 完成(请求下料) 52
string isWorkFinish = "0";
// 故障 53
string isAlarm = "0";
string finalStatus = "0";
isFree = MesWorkForm.ReadPLC(51, opName).ToString();
if(isFree.ToLower() == "true" || isFree.ToLower() == "1")
{
isFree = "1";
}
isWorkFinish = MesWorkForm.ReadPLC(52, opName).ToString();
if (isWorkFinish.ToLower() == "true" || isWorkFinish.ToLower() == "1")
{
isWorkFinish = "1";
}
isAlarm = MesWorkForm.ReadPLC(53, opName).ToString();
if (isAlarm.ToLower() == "true" || isAlarm.ToLower() == "1")
{
isAlarm = "1";
}
if (isAlarm == "1")
{
finalStatus = "4";
}
else if (isWorkFinish == "1")
{
finalStatus = "3";
}
else if (isFree == "1")
{
finalStatus = "2";
}
else
{
finalStatus = "1";
}
return finalStatus;
}
///
/// AGV任务号
///
public static void SolveAgvTaskNum(string OpName, string PLC_AgvTaskNum)
{
// 77 反馈AGV任务
switch (PLC_AgvTaskNum)
{
// AGV已呼叫成功正在去往上料区
case "10":
MesWorkForm.WritePLC(77, OpName, "10");
break;
// AGV已到达上料区_带货,申请进入上料位置
case "11":
string previousTaskValue = MesWorkForm.ReadPLC(77, OpName).ToString();
string AgvCanEnter = MesWorkForm.ReadPLC(50, OpName).ToString();
if (previousTaskValue == "10")
{
// 写任务--满AGV是达上料区
MesWorkForm.WritePLC(77, OpName, "1");
if (AgvCanEnter == "2")
{
// 1.调用FSS-接收允许进入或离开 (类型:允许进入)的接口
AnalysisMsg.ResponseEnterOrLeave(OpName, 1);
MesWorkForm.WritePLC(77, OpName, "20");
}
}
if (previousTaskValue == "30")
{
// 写任务--空AGV是达上料区
MesWorkForm.WritePLC(77, OpName, "3");
if (AgvCanEnter == "4")
{
// 1.调用FSS-接收允许进入或离开 (类型:允许进入)的接口
AnalysisMsg.ResponseEnterOrLeave(OpName, 1);
MesWorkForm.WritePLC(77, OpName, "40");
}
}
break;
// 允许AGV进行上料 --允许进入
case "2":
string FullAgvIsRequestEnter = MesWorkForm.ReadPLC(77, OpName).ToString();
// 需要判断前序任务是否完成-- 满AGV是否到达上料区
if (FullAgvIsRequestEnter == "1")
{
// 1.调用FSS-接收允许进入或离开 (类型:允许进入)的接口
AnalysisMsg.ResponseEnterOrLeave(OpName, 1);
MesWorkForm.WritePLC(77, OpName, "20");
}
break;
case "21":
// AGV 上料完成
string previousTaskValue1 = MesWorkForm.ReadPLC(77, OpName).ToString();
if(previousTaskValue1 == "20")
{
MesWorkForm.WritePLC(77, OpName, "2");
}
if (previousTaskValue1 == "40")
{
MesWorkForm.WritePLC(77, OpName, "4");
}
break;
// PLC呼叫AGV进行下料
case "3":
// 1.调用FSS-接收IPC下料请求的接口
AnalysisMsg.FinishCall(OpName);
// 2.反馈任务号:30 AGV已呼叫成功正在去往下料区
MesWorkForm.WritePLC(77, OpName, "30");
break;
// 允许AGV进行下料 --允许进入
case "4":
string EmptyAgvIsRequestEnter = MesWorkForm.ReadPLC(77, OpName).ToString();
// 需要判断前序任务是否完成-- 空AGV是否到达上料区
if (EmptyAgvIsRequestEnter == "3")
{
// 1.调用FSS-接收允许进入或离开 (类型:允许进入)的接口
AnalysisMsg.ResponseEnterOrLeave(OpName, 1);
MesWorkForm.WritePLC(77, OpName, "40");
}
break;
// 允许AGV离开
case "5":
string FullOrEmptyAgvIsRequestLeave = MesWorkForm.ReadPLC(77, OpName).ToString();
// 需要判断前序任务是否完成-- AGV上料完成或者下料完成
if(FullOrEmptyAgvIsRequestLeave == "2" || FullOrEmptyAgvIsRequestLeave == "4")
{
// 1.调用FSS-接收允许进入或离开 (类型:允许离开)的接口
AnalysisMsg.ResponseEnterOrLeave(OpName, 2);
MesWorkForm.WritePLC(77, OpName, "50");
}
break;
case "51":
// AGV 已离开 反馈任务号:5
MesWorkForm.WritePLC(77, OpName, "5");
break;
}
switch (OpName)
{
case "OP10":
if (DAS_OP10.AGV_Task_change != null)
{
DAS_OP10.AGV_Task_change(PLC_AgvTaskNum);
}
break;
case "OP20":
if (DAS_OP20.AGV_Task_change != null)
{
DAS_OP20.AGV_Task_change(PLC_AgvTaskNum);
}
break;
case "OP30":
if (DAS_OP30.AGV_Task_change != null)
{
DAS_OP30.AGV_Task_change(PLC_AgvTaskNum);
}
break;
case "OP40":
if (DAS_OP40.AGV_Task_change != null)
{
DAS_OP40.AGV_Task_change(PLC_AgvTaskNum);
}
break;
case "OP50":
if (DAS_OP50.AGV_Task_change != null)
{
DAS_OP50.AGV_Task_change(PLC_AgvTaskNum);
}
break;
}
}
///
/// 读取泄漏量的数据
///
public static void ReadQualityData_LeakageRate(string opName)
{
string Pressure = MesWorkForm.ReadPLC(57, opName).ToString();
int partPosition = Convert.ToInt32(MesWorkForm.ReadPLC(54, opName));
int MeasurePosition = 9;
string IsOK = "1";
string NgStr = "";
//保存质量数
QualityData_MobyInsert(partPosition, MeasurePosition, opName, Pressure, IsOK, NgStr, out string errMsg);
}
///
/// 拧紧数据的变化
///
public static void MeasurePositionChange(string opName, int MeasureStatus)
{
int MeasurePosition = Convert.ToInt32(MesWorkForm.ReadPLC(55, opName));
int partPosition = Convert.ToInt32(MesWorkForm.ReadPLC(54, opName));
QualityData_MobyUpdate(partPosition, MeasurePosition, opName, MeasureStatus, out string errMsg);
}
///
/// 读压力的数据
///
public static void ReadQualityData_Pressure(string opName)
{
string LeakageRate1 = MesWorkForm.ReadPLC(57, opName).ToString();
string LeakageRate2 = MesWorkForm.ReadPLC(58, opName).ToString();
int partPosition = Convert.ToInt32(MesWorkForm.ReadPLC(54, opName));
int MeasurePosition = 1;
string IsOK1 = "1";
string NgStr1 = "";
//保存质量数
QualityData_MobyInsert(partPosition, MeasurePosition, opName, LeakageRate1, IsOK1, NgStr1, out string errMsg);
MeasurePosition = 2;
string IsOK2 = "1";
string NgStr2 = "";
QualityData_MobyInsert(partPosition, MeasurePosition, opName, LeakageRate2, IsOK1, NgStr2, out string errMsg1);
}
///
/// 质量数据的保存
///
///
///
///
///
///
///
public static bool QualityData_MobyUpdate(int PartPosition, int MeasurePosition, string opName, int MeasureStatus, out string errorMsg)
{
string procedureName;
procedureName = "测量数据合格_Moby_更新";
SqlParameter[] thisParms = new SqlParameter[4];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@测量状态", MeasureStatus);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
thisParms[2] = new System.Data.SqlClient.SqlParameter("@测量位置", MeasurePosition);
thisParms[3] = new System.Data.SqlClient.SqlParameter("@装配位置", PartPosition);
return ExecuteStoredProcedure(procedureName, MesWorkForm.ConnectionString, ref thisParms, out errorMsg);
}
///
/// 质量数据的保存
///
///
///
///
///
///
///
public static bool QualityData_MobyInsert(int PartPosition, int MeasurePosition, string opName, string TagValue, string IsOK, string NgStr, out string errorMsg)
{
string procedureName;
procedureName = "测量数据合格_Moby_增加";
SqlParameter[] thisParms = new SqlParameter[6];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@TagValue", TagValue);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@IsOK", IsOK);
thisParms[2] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
thisParms[3] = new System.Data.SqlClient.SqlParameter("@测量位置", MeasurePosition);
thisParms[4] = new System.Data.SqlClient.SqlParameter("@装配位置", PartPosition);
thisParms[5] = new System.Data.SqlClient.SqlParameter("@不合格原因", NgStr);
return ExecuteStoredProcedure(procedureName, MesWorkForm.ConnectionString, ref thisParms, out errorMsg);
}
///
/// 质量数据的保存
///
///
///
///
///
///
///
public static bool QualityData_Insert_Final(string opName, out string errorMsg)
{
string procedureName;
procedureName = "测量数据合格_增加";
SqlParameter[] thisParms = new SqlParameter[1];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
return ExecuteStoredProcedure(procedureName, MesWorkForm.ConnectionString, ref thisParms, out errorMsg);
}
///
/// 判断来料是否满托盘
///
public static void JudgeMaterialFull(string opName, List product_AssemblyInformation)
{
int partCount = product_AssemblyInformation.Count;
if (publicCore.partCount == partCount)
{
MesWorkForm.WritePLC(78, opName, true);
}
else
{
MesWorkForm.WritePLC(78, opName, false);
}
MesWorkForm.WritePLC(79, opName, false);
MesWorkForm.WritePLC(80, opName, false);
MesWorkForm.WritePLC(81, opName, false);
MesWorkForm.WritePLC(82, opName, false);
foreach (var item in product_AssemblyInformation)
{
if(item.productPosition == 1)
{
MesWorkForm.WritePLC(79, opName, true);
}
if (item.productPosition == 2)
{
MesWorkForm.WritePLC(80, opName, true);
}
if (item.productPosition == 3)
{
MesWorkForm.WritePLC(81, opName, true);
}
if (item.productPosition == 4)
{
MesWorkForm.WritePLC(82, opName, true);
}
MesWorkForm.WritePLC(60, opName, false);
}
}
///
/// 是否允许工作
///
///
///
public static void FixedAllow(string opName, object isAllowWork)
{
MesWorkForm.WritePLC(85, opName, isAllowWork);
}
///
/// 测量数据_测量信息_初始化查询
///
///
///
///
///
///
///
public static bool GetQualityInfo_Init(string opName, int PartPosition, out DataTable dt, out string errorMsg)
{
string procedureName;
procedureName = "测量数据_测量信息_初始化查询";
SqlParameter[] thisParms = new SqlParameter[2];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@装配位置", PartPosition);
return ExecuteStoredProcedure(procedureName, MesWorkForm.ConnectionString, ref thisParms, out dt, out errorMsg);
}
public static bool GetProductInfo_Init(string opName, int PartPosition, out DataTable dt, out string errorMsg)
{
string procedureName;
procedureName = "装配信息_初始化查询";
SqlParameter[] thisParms = new SqlParameter[2];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@装配位置", PartPosition);
return ExecuteStoredProcedure(procedureName, MesWorkForm.ConnectionString, ref thisParms, out dt, out errorMsg);
}
public static void LogInsert(string opName, string logType, string log)
{
string procedureName;
procedureName = "系统_操作日志_新增";
SqlParameter[] thisParms = new SqlParameter[5];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@日志类型", logType);
thisParms[2] = new System.Data.SqlClient.SqlParameter("@日志内容", log);
thisParms[3] = new System.Data.SqlClient.SqlParameter("@操作日期", DateTime.Now.ToString("yyyy-MM-dd"));
thisParms[4] = new System.Data.SqlClient.SqlParameter("@操作时间", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
ExecuteStoredProcedure(procedureName, MesWorkForm.ConnectionString, ref thisParms, out string errorMsg);
}
#region 数据库操作
///
/// 提供通用的调用存储过程的方法(需要返回查询的记录集的调用)
///
/// 存储过程名称
/// 连库字符串
/// 存储过程参数数组
/// 存储过程里面返回的记录集
/// 错误信息
/// 布尔值,true表示该执行成功,false表示执行失败
public static bool ExecuteStoredProcedure(string procedureName, string connectionString, ref SqlParameter[] sqlParameters, out DataSet ds, out string errorMessage)
{
bool result = false;
errorMessage = "";
ds = new DataSet();
if (connectionString.Length < 1) return false;
using (SqlConnection conn = new SqlConnection(connectionString))
{
try
{
//if (!SqlServerConnectionStatus) return false;
conn.Open();
using (SqlDataAdapter dsCommand = new SqlDataAdapter())
{
dsCommand.SelectCommand = new SqlCommand(procedureName, conn);
dsCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < sqlParameters.Length; i++)
{
dsCommand.SelectCommand.Parameters.Add(sqlParameters[i]);
}
dsCommand.Fill(ds);
}
// SqlServerConnectionStatus = true;
result = true;
}
catch (Exception e)
{
errorMessage = e.ToString();
// TestConnection();
//ApplicationLog.WriteLog(e, "\r\nExecuteStoredProcedure\r\n存储过程:\r\n" + procedureName + "\r\n连接字符串:\r\n" + connectionString);
}
finally
{
if (conn.State == ConnectionState.Open)
conn.Close();
}
}
return result;
}
///
/// 提供通用的调用存储过程的方法(需要返回查询的记录集的调用)
///
/// 存储过程名称
/// 连库字符串
/// 存储过程参数数组
/// 存储过程里面返回的记录表
/// 错误信息
/// 布尔值,true表示该执行成功,false表示执行失败
public static bool ExecuteStoredProcedure(string procedureName, string connectionString, ref SqlParameter[] sqlParameters, out DataTable dt, out string errorMessage)
{
bool result = false;
errorMessage = "";
dt = new DataTable();
DataSet ds = new DataSet();
if (connectionString.Length < 1) return false;
using (SqlConnection conn = new SqlConnection(connectionString))
{
try
{
//if (!SqlServerConnectionStatus) return false;
conn.Open();
using (SqlDataAdapter dsCommand = new SqlDataAdapter())
{
dsCommand.SelectCommand = new SqlCommand(procedureName, conn);
dsCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < sqlParameters.Length; i++)
{
dsCommand.SelectCommand.Parameters.Add(sqlParameters[i]);
}
dsCommand.Fill(ds);
}
if (ds.Tables.Count > 0)
{
dt = ds.Tables[0];
}
result = true;
}
catch (Exception e)
{
errorMessage = e.ToString();
// TestConnection();
//ApplicationLog.WriteLog(e, "\r\nExecuteStoredProcedure\r\n存储过程:\r\n" + procedureName + "\r\n连接字符串:\r\n" + connectionString);
}
finally
{
if (conn.State == ConnectionState.Open)
conn.Close();
}
}
return result;
}
///
/// 提供通用的调用存储过程的方法(需要返回查询的记录集的调用)
///
/// 存储过程名称
/// 连库字符串
/// 存储过程参数数组
/// 存储过程里面返回的记录表
/// 错误信息
/// 布尔值,true表示该执行成功,false表示执行失败
public static bool ExecuteStoredProcedure(string procedureName, string connectionString, ref SqlParameter[] sqlParameters, out string errorMessage)
{
bool result = false;
errorMessage = "";
DataSet ds = new DataSet();
if (connectionString.Length < 1) return false;
using (SqlConnection conn = new SqlConnection(connectionString))
{
try
{
//if (!SqlServerConnectionStatus) return false;
conn.Open();
using (SqlDataAdapter dsCommand = new SqlDataAdapter())
{
dsCommand.SelectCommand = new SqlCommand(procedureName, conn);
dsCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < sqlParameters.Length; i++)
{
dsCommand.SelectCommand.Parameters.Add(sqlParameters[i]);
}
dsCommand.Fill(ds);
}
result = true;
}
catch (Exception e)
{
errorMessage = e.ToString();
// TestConnection();
//ApplicationLog.WriteLog(e, "\r\nExecuteStoredProcedure\r\n存储过程:\r\n" + procedureName + "\r\n连接字符串:\r\n" + connectionString);
}
finally
{
if (conn.State == ConnectionState.Open)
conn.Close();
}
}
return result;
}
#endregion
}
}