778 lines
34 KiB
C#
778 lines
34 KiB
C#
using bizFacade;
|
||
using DataLinkMesWork;
|
||
using DoWhatPlc;
|
||
using MesServerWork;
|
||
using MesWork;
|
||
using Newtonsoft.Json;
|
||
using System;
|
||
using System.Collections;
|
||
using System.Collections.Concurrent;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Data.SqlClient;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace MisDataSaveDate
|
||
{
|
||
public partial class Funtion
|
||
{
|
||
|
||
|
||
/// <summary>
|
||
/// 允许保存(针对半自动和手动压装工位)
|
||
/// </summary>
|
||
/// <param name="OpName"></param>
|
||
/// <param name="tagValue"></param>ss
|
||
private static void MesRead(string opName, string tagValue, int tagid)
|
||
{
|
||
if (tagValue == "0")
|
||
{
|
||
MIS_BASE.Write_TagTypeID(20, opName, false);
|
||
}
|
||
else
|
||
{
|
||
DateTime arrivedTime = DateTime.Now;
|
||
DateTime leavedTime = DateTime.Now;
|
||
int TimeDiff = 0;
|
||
int QualityMark = 0;
|
||
String orderFrom = "";
|
||
String engineCount = "";
|
||
String workpieceCount = "";
|
||
|
||
|
||
// 保存物料信息
|
||
BaseDataSystemMES.Material_Insert(opName, 1);
|
||
|
||
// 记录过站信息
|
||
QualityMark = Convert.ToInt32(DtWebApi.ReadWritePLC.ReadPLC("21", opName));
|
||
//int targetTime = 0;
|
||
//订单号
|
||
orderFrom = DtWebApi.ReadWritePLC.ReadPLC("45", opName).ToString();
|
||
//产品型号
|
||
engineCount = DtWebApi.ReadWritePLC.ReadPLC("11", opName).ToString();
|
||
//壳体编号
|
||
workpieceCount = DtWebApi.ReadWritePLC.ReadPLC("10", opName).ToString();
|
||
|
||
//保存信号日志
|
||
BaseDataSystemMES.Save_saveLog(opName, QualityMark, orderFrom, engineCount, workpieceCount);
|
||
|
||
string isPass;
|
||
string SendMessage;
|
||
if (QualityMark == 1)
|
||
{
|
||
isPass = "1";
|
||
SendMessage = "MES|ConfirmOkGo|" + opName + "|" + "1";
|
||
}
|
||
else
|
||
{
|
||
isPass = "0";
|
||
SendMessage = "MES|FalseGo|" + opName + "|" + "2";
|
||
}
|
||
MIS_BASE.asyncSendMessage(SendMessage);
|
||
|
||
WorkStartInsert_V2022(opName, arrivedTime, leavedTime, TimeDiff, isPass);
|
||
|
||
// 保存质量数据
|
||
SaveQualityData(opName, Convert.ToInt32(tagValue), tagid);
|
||
|
||
MIS_BASE.asyncSendMessage("MES|ShowTimelyQuality|" + opName + "|" + QualityMark.ToString());
|
||
|
||
//if (MIS_BASE.hashtable_tagTable_OpName_SaveData==null)
|
||
//{
|
||
// MesServerWork.MIS_BASE.InitHashtable_MesServerCode();
|
||
//}
|
||
//if(MIS_BASE.hashtable_tagTable_OpName_SaveData.Contains(opName))
|
||
//{
|
||
// if (MIS_BASE.hashtable_tagTable_OpName_SaveData[opName].ToString() == "1")
|
||
// {
|
||
// SaveQualityData(opName, Convert.ToInt32(tagValue), tagid);
|
||
// MIS_BASE.Write_TagTypeID(20, opName, true);
|
||
|
||
// }
|
||
// else
|
||
// {
|
||
// MIS_BASE.Write_TagTypeID(20, opName, true);
|
||
// }
|
||
//}
|
||
//else
|
||
//{
|
||
// MIS_BASE.Write_TagTypeID(20, opName, true);
|
||
//}
|
||
|
||
}
|
||
}
|
||
private static void SaveQualityData(string opName, int tagValue, int tagID)
|
||
{
|
||
try
|
||
{
|
||
int id_tagCF;
|
||
int qualityMask = 0;
|
||
int engineTypeID = 0;
|
||
string engineID = "";
|
||
string engineType = "";
|
||
string engineTraceCode = "";
|
||
string engineCap = "";
|
||
string partPallet = "";
|
||
string orderFormPlc = "";
|
||
DataTable dt_WWW;
|
||
Hashtable valueList;
|
||
|
||
var tagValues = DtWebApi.ReadWritePLC.ReadPLC_OpName(opName); //GetDbAndMaxLengthByOpNameByBytes(opName);
|
||
valueList = ReadPLC_OpName_Qd(tagValues);
|
||
|
||
engineTypeID = Convert.ToInt32(GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.EngineTypeID)));
|
||
engineID = GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.EngineID)).ToString();
|
||
engineType = GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.EngineType)).ToString();
|
||
orderFormPlc = GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.OrderFormPLC)).ToString();
|
||
engineID = GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.EngineID)).ToString();
|
||
qualityMask = Convert.ToInt32(GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.QualityMask)));
|
||
|
||
//valueList = ReadPLC_Sync_DataList_MesRead(opName);
|
||
//ReadPLC_Sync_DataList_MesRead(opName, out valueList, out MIS_BASE.BasicDataTagValue, out MIS_BASE.BasicDataTagValueUpDown, out MIS_BASE.hashtable_EngineTypeID, out MIS_BASE.hashtable_tagTable_OpName_SaveData);
|
||
//valueList = GetQualityData_GoodBad_Values(valueList);
|
||
int mes_MustTest = 0;
|
||
int onLineState = 0;
|
||
int partMoveDirection = 0;
|
||
int pressIsOK = 0;
|
||
int pressIsNoOK = 0;
|
||
//BaseDataSystemMES.GetQualityDataTable_B5A(valueList, opName, MIS_BASE.BasicDataTagValue,
|
||
// MIS_BASE.BasicDataTagValueUpDown,
|
||
// out dt_WWW,//数据列表
|
||
// out qualityMask,//工位合格标志
|
||
// out engineTypeID,//发动机类型代码
|
||
// out engineID,//发动机编号
|
||
// out engineType, //发动机型号
|
||
// out partPallet,//托盘编号
|
||
// out engineTraceCode, //发动机条码
|
||
// out engineCap,//缸盖号,
|
||
// MIS_BASE.hashtable_EngineTypeID,//发动机类型转换表
|
||
// out mes_MustTest, out onLineState, out partMoveDirection, out pressIsOK, out pressIsNoOK);
|
||
|
||
GetQualityDataTable(valueList, opName, MIS_BASE.BasicDataTagValue,
|
||
MIS_BASE.BasicDataTagValueUpDown, out dt_WWW);
|
||
|
||
|
||
// 1:通过监控系统保存采集的质量数据;0:不通过监控系统保存采集的质量数据
|
||
if (Convert.ToInt32(MIS_BASE.hashtable_tagTable_OpName_SaveData[opName]) != 0)
|
||
{
|
||
DateTime lastupdatetime = DateTime.Now;
|
||
|
||
BaseData_tagTable_QualityData_B5A_IndexInsert(engineID, tagID, engineType, engineTypeID, opName, qualityMask, partPallet, out id_tagCF);
|
||
BaseData_tagTable_QualityData_B5A_Insert(id_tagCF, engineTypeID, engineID, opName, dt_WWW);
|
||
|
||
}
|
||
|
||
// 判断特殊工位给清料信号
|
||
if(opName == "OP1010" || opName == "OP2010" || opName == "OP2011" || opName == "OP1011")
|
||
{
|
||
string OpName2 = opName;
|
||
if (OpName2 == "OP1011") OpName2 = "OP1010";
|
||
if (OpName2 == "OP2011") OpName2 = "OP2010";
|
||
// 1.根据工位号获取上个订单盆子过站数量 判断是否全部订单都绑定了盆子 绑定了就给清料
|
||
DataTable dt2;
|
||
BaseDataSystemMES.GetMaxPartCount(OpName2, out dt2);
|
||
// 3.判断是否全部订单都绑定了盆子 绑定了就给清料
|
||
if (Convert.ToInt32(dt2.Rows[0]["未绑定数"]) == 0)
|
||
{
|
||
// 4.数量相等或大于返回清料信号
|
||
DtWebApi.ReadWritePLC.WritePLC("52", OpName2, true);
|
||
|
||
//5.删除工位小车所有信息,上料位置,抓取位置等
|
||
//BaseDataSystemMES.ClearOpCarData(OpName2);
|
||
}
|
||
}
|
||
|
||
//临时增加 清除交互区壳体码
|
||
if(opName == "OP0020")
|
||
{
|
||
MIS_BASE.Write_EngineID_MES(opName, "");
|
||
}
|
||
|
||
//启动线程保存过站信息
|
||
MIS_BASE.Write_TagTypeID(20, opName, true);
|
||
#region
|
||
#endregion
|
||
}
|
||
catch (Exception err)
|
||
{
|
||
MIS_BASE.Write_TagTypeID(20, opName, true);
|
||
////ApplicationLog.WriteLog(err, err.Message);
|
||
}
|
||
|
||
}
|
||
public static Hashtable ReadPLC_OpName_Qd(ConcurrentDictionary<string, TagFormat> tagValues)
|
||
{
|
||
//lock (l)
|
||
{
|
||
|
||
//var tagValues = DtWebApi.ReadWritePLC.ReadPLC_OpName(opName); //GetDbAndMaxLengthByOpNameByBytes(opName);
|
||
|
||
var keyValues = tagValues.OrderBy(x => x.Key).ToDictionary(k => k.Key, v => v.Value);
|
||
|
||
TagFormat tagFormatTemp;
|
||
int tagIndex = 1;
|
||
int isOK = 0;
|
||
|
||
Hashtable ht = new Hashtable();
|
||
|
||
|
||
foreach (KeyValuePair<string, TagFormat> _cd in keyValues)
|
||
{
|
||
if (_cd.Key.ToString()[0].ToString() == "7")
|
||
{
|
||
tagFormatTemp = _cd.Value;
|
||
if (tagIndex % 3 == 1)
|
||
{
|
||
isOK = Convert.ToInt32(tagFormatTemp.TagValue);
|
||
}
|
||
else if (tagIndex % 3 == 2)
|
||
{
|
||
var TF = _cd.Value;
|
||
|
||
QualityDataType qualityDataType;
|
||
qualityDataType = GetQualityDataType(TF);
|
||
qualityDataType.isGoodBad = isOK;
|
||
ht.Add(qualityDataType.tagID, qualityDataType);
|
||
}
|
||
else if (tagIndex % 3 == 0)
|
||
{
|
||
var TF = (TagFormat)_cd.Value;
|
||
|
||
QualityDataType qualityDataType;
|
||
qualityDataType = GetQualityDataType(TF);
|
||
qualityDataType.isGoodBad = isOK;
|
||
ht.Add(qualityDataType.tagID, qualityDataType);
|
||
}
|
||
|
||
tagIndex++;
|
||
}
|
||
//Console.WriteLine($"key:{kv.Key} value:{kv.Value}");
|
||
}
|
||
return ht;
|
||
}
|
||
}
|
||
public static QualityDataType GetQualityDataType(TagFormat TF)
|
||
{
|
||
QualityDataType qualityDataType;
|
||
|
||
qualityDataType = new QualityDataType();
|
||
|
||
qualityDataType.tagID = TF.TagID;
|
||
qualityDataType.tagTypeID = TF.TagTypeID;//变量类型
|
||
qualityDataType.opName = TF.OpName;
|
||
int.TryParse(TF.TagQuality, out int TagQuality);
|
||
qualityDataType.tagQuality = TagQuality;
|
||
qualityDataType.tagValueType = TF.TagTypeCodeID;
|
||
int.TryParse(TF.TagOrderBy, out int TagOrderBy);
|
||
qualityDataType.tagOrderBy = TagOrderBy;
|
||
int.TryParse(TF.TagItemOrderBy, out int TagItemOrderBy);
|
||
qualityDataType.tagItemOrderBy = TagItemOrderBy;
|
||
qualityDataType.tagProperty = TF.TagProperty;//变量特点
|
||
qualityDataType.tagValue = TF.TagValue;//变量值
|
||
|
||
return qualityDataType;
|
||
}
|
||
static public void GetQualityDataTable(Hashtable valuList, string opName, DataTable BasicDataTagValue,
|
||
DataTable BasicDataTagValueUpDown,
|
||
out DataTable dt
|
||
)
|
||
{
|
||
//78 0:屏蔽MES;1:启用MES(必须MIS)
|
||
//79 通过线体工位PC实现下达工位工作状态:工位有三种状态:在线、离线、屏蔽。在线;0正常状态,实现正常功能。1离线:2屏蔽。(必须MIS)
|
||
//41 机体流向标志(1 BYTE):0普通工位:1:上线(发动机上线);2:下线(发动机下线);(必须PLC)
|
||
//51 返修工位,修改后的数据MES将数据写入PLC ,MES通知PLC数据修改完成。(YN)
|
||
//8 只要返修,必须由mes发送此信号,plc接收此信号后才能放行
|
||
//(暂时没用)用于有扳手拧紧工位。通知设备螺钉拧紧完成。PC已经将数据保存到数据库中。(B5A)
|
||
|
||
QualityDataType qualityData;
|
||
//是否有数据
|
||
//bool isUsing;
|
||
|
||
DataRow dr;
|
||
DataRow[] dr_WWW;
|
||
//MES_基本数据_测量范围
|
||
DataRow[] dr_WWW_UpDown;
|
||
|
||
dt = BaseDataSystemMES.BuildDataTables_WWW();
|
||
|
||
//测量位置
|
||
string shaftID;
|
||
//测量项目
|
||
string item;
|
||
//测量单位
|
||
string unit;
|
||
//机体类型
|
||
//原始数据中的机型代码
|
||
int engineTypeID_Source;
|
||
//上限值
|
||
string tagValueUp;
|
||
//下限值
|
||
string tagValueDown;
|
||
//理论值
|
||
string tagValeNormal;
|
||
//TagValue
|
||
// 合格标志
|
||
//string IsGoodBad;
|
||
|
||
foreach (DictionaryEntry valueItem in valuList) //ht为一个Hashtable实例
|
||
{
|
||
try
|
||
{
|
||
qualityData = (QualityDataType)valueItem.Value;
|
||
|
||
|
||
//if ((qualityData.tagProperty != 2) || (qualityData.tagProperty != 6))
|
||
//{
|
||
// continue ;
|
||
//}
|
||
//if ((qualityData.tagProperty == 2) || (qualityData.tagProperty == 6))
|
||
{
|
||
//if (engineTypeID == 0)
|
||
//{
|
||
// engineTypeID = 1;
|
||
//}
|
||
dr_WWW = BasicDataTagValue.Select("TagID = " + qualityData.tagID);
|
||
try
|
||
{
|
||
dr_WWW_UpDown = BasicDataTagValueUpDown.Select("TagID = " + qualityData.tagID);
|
||
}
|
||
catch { dr_WWW_UpDown = null; }
|
||
|
||
|
||
//if (dr_WWW.Length > 0)
|
||
//{
|
||
// {
|
||
// engineTypeID_Source = Convert.ToInt32(dr_WWW[0]["机体类型"]);
|
||
// int temp;
|
||
// temp = engineTypeID_Source & engineTypeID;
|
||
// if (temp == 0)
|
||
// {
|
||
// continue;
|
||
// }
|
||
// if (qualityData.isGoodBad == -1)
|
||
// {
|
||
// continue;
|
||
// }
|
||
// }
|
||
//}
|
||
//else
|
||
//{
|
||
// continue;
|
||
|
||
//}
|
||
|
||
try
|
||
{
|
||
shaftID = dr_WWW[0]["测量位置"].ToString();
|
||
}
|
||
catch
|
||
{
|
||
shaftID = "";
|
||
}
|
||
try
|
||
{
|
||
item = dr_WWW[0]["测量项目"].ToString();
|
||
}
|
||
catch
|
||
{
|
||
item = "";
|
||
}
|
||
try
|
||
{
|
||
unit = dr_WWW[0]["测量单位"].ToString();
|
||
}
|
||
catch
|
||
{
|
||
unit = "";
|
||
}
|
||
try
|
||
{
|
||
tagValueUp = "";
|
||
if (dr_WWW_UpDown != null && dr_WWW_UpDown.Length > 0)
|
||
{
|
||
tagValueUp = dr_WWW_UpDown[0]["值上限"].ToString();
|
||
}
|
||
else
|
||
{
|
||
tagValueUp = "";
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
tagValueUp = "";
|
||
}
|
||
try
|
||
{
|
||
tagValueDown = "";
|
||
if (dr_WWW_UpDown != null && dr_WWW_UpDown.Length > 0)
|
||
{
|
||
tagValueDown = dr_WWW_UpDown[0]["值下限"].ToString();
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
tagValueDown = "";
|
||
}
|
||
try
|
||
{
|
||
tagValeNormal = "";
|
||
if (dr_WWW_UpDown != null && dr_WWW_UpDown.Length > 0)
|
||
{
|
||
tagValeNormal = dr_WWW_UpDown[0]["理论值"].ToString();
|
||
}
|
||
|
||
}
|
||
catch
|
||
{
|
||
tagValeNormal = "";
|
||
}
|
||
|
||
dr = dt.NewRow();
|
||
|
||
dr["TagID"] = qualityData.tagID;
|
||
dr["测量位置"] = shaftID;
|
||
dr["测量项目"] = item;
|
||
dr["测量单位"] = unit;
|
||
dr["上限值"] = tagValueUp;
|
||
dr["下限值"] = tagValueDown;
|
||
dr["理论值"] = tagValeNormal;
|
||
dr["工位号"] = opName;
|
||
dr["列位置"] = qualityData.tagOrderBy;
|
||
dr["变量排序"] = qualityData.tagItemOrderBy;
|
||
|
||
dr["IsGoodBad"] = qualityData.isGoodBad;
|
||
|
||
switch (qualityData.tagTypeID)//
|
||
{
|
||
//合格标志数组
|
||
case 8203:
|
||
dr["TagValue"] = BaseDataSystemMES.GetQualityData_GoodBad_String((bool[])qualityData.tagValue);
|
||
break;
|
||
case 8209:
|
||
dr["TagValue"] = "";
|
||
break;
|
||
//非标准REAL
|
||
case 8210:
|
||
dr["TagValue"] = BaseDataSystemMES.GetNoNormalReal(qualityData.tagValue);
|
||
dt.Rows.Add(dr);
|
||
break;
|
||
default:
|
||
dr["TagValue"] = Convert.ToString(qualityData.tagValue);
|
||
dt.Rows.Add(dr);
|
||
break;
|
||
}
|
||
//对质量数据特殊处理,保留2位小数点
|
||
dr["TagValue"] = Convert.ToDouble(dr["TagValue"]).ToString("0.##");
|
||
}
|
||
}
|
||
catch (Exception err)
|
||
{
|
||
//ApplicationLog.WriteLog(err, err.Message);
|
||
}
|
||
}
|
||
}
|
||
private static object GetValueByTagTypeCodeID(ConcurrentDictionary<string, TagFormat> opTagList, int TagTypeCodeID)
|
||
{
|
||
try
|
||
{
|
||
return opTagList.Where(x => x.Value.TagTypeCodeID == TagTypeCodeID).ToList()[0].Value.TagValue;
|
||
|
||
}
|
||
catch (Exception err) { return "-3"; }
|
||
}
|
||
private static void SaveQualityDataBak(string opName, int tagValue, int tagID)
|
||
{
|
||
try
|
||
{
|
||
int id_tagCF;
|
||
int qualityMask = 0;
|
||
int engineTypeID = 0;
|
||
string engineID = "";
|
||
string engineType = "";
|
||
string engineTraceCode = "";
|
||
string engineCap = "";
|
||
string partPallet = "";
|
||
DataTable dt_WWW;
|
||
dt_WWW = BaseDataSystemMES.BuildDataTables_WWW();
|
||
Hashtable valueList;
|
||
//valueList = ReadPLC_Sync_DataList_MesRead(opName);
|
||
ReadPLC_Sync_DataList_MesRead(opName, out valueList, out MIS_BASE.BasicDataTagValue, out MIS_BASE.BasicDataTagValueUpDown, out MIS_BASE.hashtable_EngineTypeID, out MIS_BASE.hashtable_tagTable_OpName_SaveData);
|
||
valueList = GetQualityData_GoodBad_Values(valueList);
|
||
int mes_MustTest = 0;
|
||
int onLineState = 0;
|
||
int partMoveDirection = 0;
|
||
int pressIsOK = 0;
|
||
int pressIsNoOK = 0;
|
||
BaseDataSystemMES.GetQualityDataTable_B5A(valueList, opName, MIS_BASE.BasicDataTagValue,
|
||
MIS_BASE.BasicDataTagValueUpDown,
|
||
out dt_WWW,//数据列表
|
||
out qualityMask,//工位合格标志
|
||
out engineTypeID,//发动机类型代码
|
||
out engineID,//发动机编号
|
||
out engineType, //发动机型号
|
||
out partPallet,//托盘编号
|
||
out engineTraceCode, //发动机条码
|
||
out engineCap,//缸盖号,
|
||
MIS_BASE.hashtable_EngineTypeID,//发动机类型转换表
|
||
out mes_MustTest, out onLineState, out partMoveDirection, out pressIsOK, out pressIsNoOK);
|
||
|
||
|
||
|
||
|
||
// 1:通过监控系统保存采集的质量数据;0:不通过监控系统保存采集的质量数据
|
||
if (Convert.ToInt32(MIS_BASE.hashtable_tagTable_OpName_SaveData[opName]) != 0)
|
||
{
|
||
DateTime lastupdatetime = DateTime.Now;
|
||
|
||
BaseData_tagTable_QualityData_B5A_IndexInsert(engineID, tagID, engineType, engineTypeID, opName, qualityMask, partPallet, out id_tagCF);
|
||
BaseData_tagTable_QualityData_B5A_Insert(id_tagCF, engineTypeID, engineID, opName, dt_WWW);
|
||
|
||
}
|
||
|
||
//启动线程保存过站信息
|
||
|
||
|
||
|
||
MIS_BASE.Write_TagTypeID(20, opName, true);
|
||
#region
|
||
//string orderForm = "";
|
||
//string operatorCode = "";
|
||
//int shiftCode = 1;
|
||
//DateTime arrivedTime;
|
||
//DateTime leavedTime;
|
||
//int TimeDiff;
|
||
//int targetTime = 0;
|
||
//string lineType = "";
|
||
//string isPass;
|
||
//int machineWorkOn = 0;
|
||
//int arrivedOrLeaved = 2;
|
||
//int cartColorOpName = 0;
|
||
//int cartColorConfirm = 0;
|
||
//// int partMoveDirection;
|
||
//int partGoOver = 0;
|
||
//if (qualityMask == 1)
|
||
//{
|
||
// isPass = "PASS";
|
||
//}
|
||
//else
|
||
//{
|
||
// isPass = "FAIL";
|
||
//}
|
||
|
||
////工位上下线类型
|
||
////(0普通工位)(1正常上线)(2正常下线)(3返修上线)(4返修下线)
|
||
//int OpNameUpDownType;
|
||
//OpNameUpDownType = Convert.ToInt32(hashtableOpName_OpType[opName]);
|
||
//arrivedTime = (DateTime)m_WorkStart_OpName_Time[opName];
|
||
//leavedTime = DateTime.Now;
|
||
//TimeDiff = Convert.ToInt32(leavedTime.Subtract(arrivedTime).TotalSeconds);
|
||
|
||
//lineType = hashtableOpName_LineType[opName].ToString();
|
||
|
||
//string isHaveComputer = hashtableOpName_IsHaveComputer[opName].ToString();
|
||
////isHaveComputer = MIS_BASE.hashtable_tagTable_OpName_SaveData[opName].ToString();
|
||
////有计算机的工位,通过工位计算机保存[测量数据发动机在线状态]。
|
||
//if (Convert.ToInt32(isHaveComputer) == 0)
|
||
//{
|
||
// //1->0 工件离开 工件刚刚离开
|
||
// if (Convert.ToInt32(m_WorkStart_OpName[opName]) == 1)
|
||
// {
|
||
|
||
// //[测量数据发动机在线状态]
|
||
// QualityDataSystem.WorkStartInsert
|
||
// (opName, orderForm, engineTypeID, engineType, engineID, partPallet.ToString(), operatorCode, shiftCode,
|
||
// arrivedTime, leavedTime, TimeDiff, targetTime, lineType, isPass, machineWorkOn,
|
||
// arrivedOrLeaved, cartColorOpName, cartColorConfirm, partMoveDirection, partGoOver, mes_MustTest, onLineState, OpNameUpDownType);
|
||
// }
|
||
//}
|
||
#endregion
|
||
}
|
||
catch (Exception err)
|
||
{
|
||
MIS_BASE.Write_TagTypeID(20, opName, true);
|
||
////ApplicationLog.WriteLog(err, err.Message);
|
||
}
|
||
|
||
}
|
||
public static bool BaseData_tagTable_QualityData_B5A_IndexInsert
|
||
(string EngineID, int tagID, string EngineType, int EngineTypeID, string opName,
|
||
int isGoodBad, string PartPalletCode, out int Id_tagCF)
|
||
{
|
||
string procedureName;
|
||
procedureName = "测量数据合格索引_增加";
|
||
Id_tagCF = 0;
|
||
SqlParameter[] thisParms = new SqlParameter[8];
|
||
thisParms[0] = new System.Data.SqlClient.SqlParameter("@EngineID", EngineID);
|
||
thisParms[1] = new System.Data.SqlClient.SqlParameter("@TagID_CF", tagID);
|
||
thisParms[2] = new System.Data.SqlClient.SqlParameter("@EngineType", EngineType);
|
||
thisParms[3] = new System.Data.SqlClient.SqlParameter("@EngineTypeID", EngineTypeID);
|
||
thisParms[4] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
|
||
thisParms[5] = new System.Data.SqlClient.SqlParameter("@托盘编号", PartPalletCode);
|
||
thisParms[6] = new System.Data.SqlClient.SqlParameter("@合格标志", isGoodBad);
|
||
thisParms[7] = new System.Data.SqlClient.SqlParameter("@Id_tagCF", Id_tagCF);
|
||
thisParms[7].Direction = ParameterDirection.Output;
|
||
|
||
if (DataAccess.ExecuteStoredProcedure(procedureName, ref thisParms))
|
||
{
|
||
Id_tagCF = Convert.ToInt32(thisParms[7].Value.ToString());
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
public static bool BaseData_tagTable_QualityData_B5A_Insert
|
||
(int Id_tagCF, int engineTypeID, string engineID, string opName, DataTable dt)
|
||
{
|
||
string procedureName;
|
||
procedureName = "测量数据合格_增加";
|
||
SqlParameter[] thisParms = new SqlParameter[6];
|
||
thisParms[0] = new System.Data.SqlClient.SqlParameter("@Id_tagCF", Id_tagCF);
|
||
thisParms[1] = new System.Data.SqlClient.SqlParameter("@EngineTypeID", engineTypeID);
|
||
thisParms[2] = new System.Data.SqlClient.SqlParameter("@EngineID", engineID);
|
||
thisParms[3] = new System.Data.SqlClient.SqlParameter("@TagID", SqlDbType.Int, 4, "TagID");
|
||
thisParms[4] = new System.Data.SqlClient.SqlParameter("@TagValue", SqlDbType.NVarChar, 100, "TagValue");
|
||
thisParms[5] = new System.Data.SqlClient.SqlParameter("@IsGoodBad", SqlDbType.Int, 4, "IsGoodBad");
|
||
//thisParms[6] = new System.Data.SqlClient.SqlParameter("@测量位置", SqlDbType.NVarChar, 50, "测量位置");
|
||
//thisParms[7] = new System.Data.SqlClient.SqlParameter("@测量项目", SqlDbType.NVarChar, 50, "测量项目");
|
||
//thisParms[8] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
|
||
//thisParms[9] = new System.Data.SqlClient.SqlParameter("@理论值", SqlDbType.NVarChar, 50, "理论值");
|
||
//thisParms[10] = new System.Data.SqlClient.SqlParameter("@上限值", SqlDbType.NVarChar, 50, "上限值");
|
||
//thisParms[11] = new System.Data.SqlClient.SqlParameter("@下限值", SqlDbType.NVarChar, 50, "下限值");
|
||
//thisParms[12] = new System.Data.SqlClient.SqlParameter("@测量单位", SqlDbType.NVarChar, 50, "测量单位");
|
||
//thisParms[13] = new System.Data.SqlClient.SqlParameter("@列位置", SqlDbType.Int, 4, "列位置");
|
||
//thisParms[14] = new System.Data.SqlClient.SqlParameter("@变量排序", SqlDbType.Int, 4, "变量排序");
|
||
//table.Columns.Add("TagID", typeof(System.Int32));
|
||
//table.Columns.Add("TagValue", typeof(System.String));
|
||
//table.Columns.Add("IsGoodBad", typeof(System.Int32));
|
||
//table.Columns.Add("测量位置", typeof(System.String));
|
||
//table.Columns.Add("测量项目", typeof(System.String));
|
||
//table.Columns.Add("工位号", typeof(System.String));
|
||
//table.Columns.Add("理论值", typeof(System.String));
|
||
//table.Columns.Add("上限值", typeof(System.String));
|
||
//table.Columns.Add("下限值", typeof(System.String));
|
||
//table.Columns.Add("测量单位", typeof(System.String));
|
||
//table.Columns.Add("列位置", typeof(System.Int32));
|
||
//table.Columns.Add("变量排序", typeof(System.Int32));
|
||
return DataAccess.ExecuteStoredProcedure(procedureName, ref thisParms, dt);
|
||
}
|
||
public static void ReadPLC_Sync_DataList_MesRead(string opName, out Hashtable valueList, out DataTable BasicDataTagValue, out DataTable BasicDataTagValueUpDown, out Hashtable hashtable_EngineTypeID, out Hashtable hashtable_tagTable_OpName_SaveData)
|
||
{
|
||
//QualityDataSaveList QualityDataType
|
||
valueList = new Hashtable();
|
||
var qualityDataSaveList = DtWebApi.SaveData.ReadPLC_Sync_DataList_MesRead(opName);
|
||
foreach (DictionaryEntry de in qualityDataSaveList.valuList)
|
||
{
|
||
valueList.Add(de.Key, JsonConvert.DeserializeObject<QualityDataType>(de.Value.ToString()));
|
||
}
|
||
BasicDataTagValue = qualityDataSaveList.BasicDataTagValue;
|
||
BasicDataTagValueUpDown = qualityDataSaveList.BasicDataTagValueUpDown;
|
||
hashtable_EngineTypeID = qualityDataSaveList.hashtable_EngineTypeID;
|
||
hashtable_tagTable_OpName_SaveData = qualityDataSaveList.hashtable_tagTable_OpName_SaveData;
|
||
}
|
||
/// <summary>
|
||
/// 确定合格标志
|
||
/// </summary>
|
||
/// <param name="valuList"></param>
|
||
/// <returns></returns>
|
||
static public Hashtable GetQualityData_GoodBad_Values(Hashtable valuList)
|
||
{
|
||
try
|
||
{
|
||
Hashtable valuList_Temp;
|
||
valuList_Temp = (Hashtable)valuList.Clone();
|
||
int[] value_GoodBad_New = new int[128];
|
||
int tagID;
|
||
QualityDataType value;
|
||
//1:获得合格标志
|
||
foreach (DictionaryEntry de in valuList) //ht为一个Hashtable实例
|
||
{
|
||
tagID = Convert.ToInt32(de.Key);
|
||
value = (QualityDataType)de.Value;
|
||
|
||
//拧紧数据合格标志
|
||
if (value.tagProperty == 1)
|
||
{
|
||
if (value.tagTypeID == 8203)
|
||
{
|
||
value_GoodBad_New = (int[])value.tagValue;
|
||
break;
|
||
}
|
||
else
|
||
{
|
||
value_GoodBad_New[value.tagOrderBy - 1] = Convert.ToInt32(value.tagValue);
|
||
}
|
||
}
|
||
//拧紧数据合格标志
|
||
if (value.tagProperty == 8)
|
||
{
|
||
if (value.tagTypeID == 8203)
|
||
{
|
||
value_GoodBad_New = (int[])value.tagValue;
|
||
break;
|
||
}
|
||
else
|
||
{
|
||
value_GoodBad_New[value.tagOrderBy - 1] = Convert.ToInt32(value.tagValue);
|
||
}
|
||
}
|
||
//压装数据合格标志
|
||
if (value.tagProperty == 7)
|
||
{
|
||
value_GoodBad_New[value.tagOrderBy - 1] = Convert.ToInt32(value.tagValue);
|
||
}
|
||
}
|
||
//将合格标志赋予每个变量
|
||
foreach (DictionaryEntry de in valuList) //ht为一个Hashtable实例
|
||
{
|
||
tagID = Convert.ToInt32(de.Key);
|
||
value = (QualityDataType)de.Value;
|
||
//201706061720新加
|
||
if (value.tagTypeID == 11)
|
||
{
|
||
if (value.tagValue.ToString() == "False")
|
||
{
|
||
value.tagValue = "0";
|
||
}
|
||
else
|
||
{
|
||
value.tagValue = "1";
|
||
}
|
||
valuList_Temp[tagID] = value;
|
||
//value.tagValue = Convert.ToInt32(value.tagValue);
|
||
}
|
||
|
||
|
||
//测量变量
|
||
if (value.tagProperty == 2 || value.tagProperty == 6)
|
||
{
|
||
try
|
||
{
|
||
if (value_GoodBad_New != null)
|
||
{
|
||
value.isGoodBad = Convert.ToInt32(value_GoodBad_New[value.tagOrderBy - 1]);
|
||
valuList_Temp[tagID] = value;
|
||
}
|
||
else
|
||
{
|
||
value.isGoodBad = 0;
|
||
valuList_Temp[tagID] = value;
|
||
}
|
||
}
|
||
catch (Exception err)
|
||
{
|
||
////ApplicationLog.WriteLog(err, err.Message);
|
||
|
||
}
|
||
}
|
||
}
|
||
return valuList_Temp;
|
||
}
|
||
catch//转换出了故障时
|
||
{
|
||
return valuList;
|
||
}
|
||
}
|
||
}
|
||
}
|