Files
37-BeiHangDaXue-BH-DAS/CCYQ_JieFang/OP/publicCore.cs
2026-06-08 17:06:10 +08:00

677 lines
28 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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();
}
/// <summary>
/// PLC事件变化委托
/// </summary>
public static Action<OpcData.CustomeEvetnArgs> MIS_Funtion_PLC_OP = null;
/// <summary>
/// 读取PLC正在装配第几个件
/// </summary>
/// <param name="opName"></param>
/// <returns></returns>
public static int Get_PartPosition(string opName)
{
// 当前装配第几个件 54
int PartPosition = -1;
PartPosition = Convert.ToInt32(MesWorkForm.ReadPLC(54, opName)) ;
return PartPosition;
}
/// <summary>
/// 设备状态发生变化,处理完成之后,发给管控系统
/// 1工作中 2空闲请求上料 3完成请求下料 4 报警
/// </summary>
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));
}
/// <summary>
/// 设备状态发生变化,处理完成之后,发给管控系统
/// 1工作中 2空闲请求上料 3完成请求下料 4 报警
/// 接口用 不重复保存质量数据
/// </summary>
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));
}
/// <summary>
/// 设备状态发生变化,处理完成之后,发给管控系统
/// 1工作中 2空闲请求上料 3完成请求下料 4 报警
/// </summary>
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;
}
/// <summary>
/// AGV任务号
/// </summary>
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;
}
}
/// <summary>
/// 读取泄漏量的数据
/// </summary>
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);
}
/// <summary>
/// 拧紧数据的变化
/// </summary>
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);
}
/// <summary>
/// 读压力的数据
/// </summary>
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);
}
/// <summary>
/// 质量数据的保存
/// </summary>
/// <param name="PartPosition"></param>
/// <param name="MeasurePosition"></param>
/// <param name="opName"></param>
/// <param name="TagValue"></param>
/// <param name="IsOK"></param>
/// <returns></returns>
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);
}
/// <summary>
/// 质量数据的保存
/// </summary>
/// <param name="PartPosition"></param>
/// <param name="MeasurePosition"></param>
/// <param name="opName"></param>
/// <param name="TagValue"></param>
/// <param name="IsOK"></param>
/// <returns></returns>
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);
}
/// <summary>
/// 质量数据的保存
/// </summary>
/// <param name="PartPosition"></param>
/// <param name="MeasurePosition"></param>
/// <param name="opName"></param>
/// <param name="TagValue"></param>
/// <param name="IsOK"></param>
/// <returns></returns>
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);
}
/// <summary>
/// 判断来料是否满托盘
/// </summary>
public static void JudgeMaterialFull(string opName, List<IPC_product_AssemblyInformation> 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);
}
}
/// <summary>
/// 是否允许工作
/// </summary>
/// <param name="opName"></param>
/// <param name="isAllowWork"></param>
public static void FixedAllow(string opName, object isAllowWork)
{
MesWorkForm.WritePLC(85, opName, isAllowWork);
}
/// <summary>
/// 测量数据_测量信息_初始化查询
/// </summary>
/// <param name="PartPosition"></param>
/// <param name="MeasurePosition"></param>
/// <param name="opName"></param>
/// <param name="TagValue"></param>
/// <param name="IsOK"></param>
/// <returns></returns>
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
/// <summary>
/// 提供通用的调用存储过程的方法(需要返回查询的记录集的调用)
/// </summary>
/// <param name="procedureName">存储过程名称</param>
/// <param name="connectionString">连库字符串</param>
/// <param name="sqlParameters">存储过程参数数组</param>
/// <param name="ds">存储过程里面返回的记录集</param>
/// <param name="errorMessage">错误信息</param>
/// <returns>布尔值true表示该执行成功false表示执行失败</returns>
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;
}
/// <summary>
/// 提供通用的调用存储过程的方法(需要返回查询的记录集的调用)
/// </summary>
/// <param name="procedureName">存储过程名称</param>
/// <param name="connectionString">连库字符串</param>
/// <param name="sqlParameters">存储过程参数数组</param>
/// <param name="dt">存储过程里面返回的记录表</param>
/// <param name="errorMessage">错误信息</param>
/// <returns>布尔值true表示该执行成功false表示执行失败</returns>
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;
}
/// <summary>
/// 提供通用的调用存储过程的方法(需要返回查询的记录集的调用)
/// </summary>
/// <param name="procedureName">存储过程名称</param>
/// <param name="connectionString">连库字符串</param>
/// <param name="sqlParameters">存储过程参数数组</param>
/// <param name="dt">存储过程里面返回的记录表</param>
/// <param name="errorMessage">错误信息</param>
/// <returns>布尔值true表示该执行成功false表示执行失败</returns>
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
}
}