Files
2026-05-29 10:07:05 +08:00

309 lines
9.5 KiB
C#
Raw Permalink 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 System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Text;
namespace BasicData
{
/// <summary>
/// 变量类型代码
/// 101 合格数据变量
/// 102 不合格数据变量
/// 103 机床报警变量
/// 1 MES通讯状态PLC
///2 MES激发变量开始扫描
///3 MES激发变量返修标志
///4 MES通讯状态MES
///5 MES激发变量扫描完成
///6 MES激发变量允许工作
///7 MES激发变量物料验证完毕
///8 MES激发变量返修放行
///9 MES发动机机型标志
///10 MES发动机号
///11 MES发动机机型
///25 MES发动机追踪代码
///12 机床状态变量
///13 MES激发变量托盘到位离开
///14 监控系统通讯状态PLC
///15 监控系统通讯状态MIS
///16 加工时间变量激发
///17 加工时间变量目标时间
///18 加工时间变量实际时间
///19 质量数据可以读数据
///21 质量数据总成合格标志
///20 MES保存完数据
///26 加工时间保存完数据
///22 质量数据发动机机型标志
///23 质量数据发动机号
///24 质量数据发动机机型
///27 操作者工号
///28 订单号
///29 工位具体零件合格标志
/// </summary>
public struct QualityDataType
{
/// <summary>
/// 变量类型代码
/// 101 合格数据变量
/// 102 不合格数据变量
/// 103 机床报警变量
/// 1 MES通讯状态PLC
///2 MES激发变量开始扫描
///3 MES激发变量返修标志
///4 MES通讯状态MES
///5 MES激发变量扫描完成
///6 MES激发变量允许工作
///7 MES激发变量物料验证完毕
///8 MES激发变量返修放行
///9 MES发动机机型标志
///10 MES发动机号
///11 MES发动机机型
///25 MES发动机追踪代码
///12 机床状态变量
///13 MES激发变量托盘到位离开
///14 监控系统通讯状态PLC
///15 监控系统通讯状态MIS
///16 加工时间变量激发
///17 加工时间变量目标时间
///18 加工时间变量实际时间
///19 质量数据可以读数据
///21 质量数据总成合格标志
///20 MES保存完数据
///26 加工时间保存完数据
///22 质量数据发动机机型标志
///23 质量数据发动机号
///24 质量数据发动机机型
///27 操作者工号
///28 订单号
/// 10 前提条件不满足
///20 不合格
///251 合格
///254 直通
///255 不要求工作
///253 备用工位完成
///254 返修工位完成
///0 未定义
///29 工位具体零件合格标志
/// </summary>
public int tagValueType;
/// <summary>
/// 变量类型
/// </summary>
public int tagTypeID;
/// <summary>
/// 工位号
/// </summary>
public string opName;
/// <summary>
/// 变量代码
/// </summary>
public int tagID;
/// <summary>
/// 变量值
/// </summary>
public object tagValue;
/// <summary>
/// 数据质量代码
/// 192 数据正常
/// </summary>
public int tagQuality;
/// <summary>
/// 列位置1234
/// </summary>
public int tagOrderBy;
/// <summary>
/// 变量排序(1:拧矩2转角)
/// </summary>
public int tagItemOrderBy;
/// <summary>
/// 变量代码与变量特点
/// 0:没定义1工位合格标志2需要合格标志的测量数据3每个工位的合格标志4:物料5:IQA码6:压装数据
/// 7:压装合格标志8(自动拧紧)工位合格标志
/// </summary>
public int tagProperty;
/// <summary>
/// 合格标志01
/// </summary>
public int isGoodBad;
}
[Serializable]
public class jsonobj
{
public string Type;
public string Name;
public string Param;
public string Pagination;
public bool HasReturn;
}
[Serializable]
public class jsonobjV2
{
public string Type;
public string Name;
public object Param;
public string Pagination;
public bool HasReturn;
}
/// <summary>
///
/// </summary>
public class MesBasicData
{
/// <summary>
/// 通过指定路径将 文本文件 转换成 DataTable
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static DataTable GetBasicData(string fileName)
{
string[] strFileLines = File.ReadAllLines(fileName, Encoding.Default);
if (strFileLines.Length < 2) return null;
string[] strFieldName = strFileLines[0].Split('\t');
DataTable dtBasicData;
dtBasicData = new DataTable();
for (int i = 0; i < strFieldName.Length; i++)
{
dtBasicData.Columns.Add(strFieldName[i]);
}
DataRow dr = dtBasicData.NewRow();
for (int i = 1; i < strFileLines.Length; i++)
{
string[] strColumns = strFileLines[i].Split('\t');
for (int j = 0; j < strColumns.Length; j++)
{
strColumns[j] = strColumns[j].Trim('"').TrimEnd('"');
dr[j] = strColumns[j];
}
if (dr["是否启用"].ToString() == "1")
{
dtBasicData.Rows.Add(strColumns);
}
}
return dtBasicData;
}
/// <summary>
///
/// </summary>
public class DataTableSelect
{
static public DataTable SelectTable(DataTable SourceTable, string filterString)
{
DataTable dt = SourceTable.Clone();
var rows = SourceTable.Select(filterString);
if (rows != null && rows.Length > 0)
{
foreach (DataRow row in rows)
{
dt.ImportRow(row);
}
}
return dt;
}
/// <summary>
/// 返回执行Select distinct后的DataTable
/// </summary>
/// <param name="SourceTable">源数据表</param>
/// <param name="filterString">字段集</param>
/// <param name="FieldNames">字段集</param>
/// <returns></returns>
static public DataTable SelectDistinctGroup(DataTable SourceTable, string filterString, params string[] FieldNames)
{
DataTable dtFilter;
DataTable newTable;
dtFilter = SelectTable(SourceTable, filterString);
newTable = SelectDistinct(dtFilter, FieldNames);
return newTable;
}
/// <summary>
/// 返回执行Select distinct后的DataTable
/// </summary>
/// <param name="SourceTable">源数据表</param>
/// <param name="FieldNames">字段集</param>
/// <returns></returns>
static public DataTable SelectDistinct(DataTable SourceTable, params string[] FieldNames)
{
object[] lastValues;
DataTable newTable;
DataRow[] orderedRows;
if (FieldNames == null || FieldNames.Length == 0)
throw new ArgumentNullException("FieldNames");
lastValues = new object[FieldNames.Length];
newTable = new DataTable();
foreach (string fieldName in FieldNames)
newTable.Columns.Add(fieldName, SourceTable.Columns[fieldName].DataType);
orderedRows = SourceTable.Select("", string.Join(",", FieldNames));
foreach (DataRow row in orderedRows)
{
if (!fieldValuesAreEqual(lastValues, row, FieldNames))
{
newTable.Rows.Add(createRowClone(row, newTable.NewRow(), FieldNames));
setLastValues(lastValues, row, FieldNames);
}
}
return newTable;
}
static private bool fieldValuesAreEqual(object[] lastValues, DataRow currentRow, string[] fieldNames)
{
bool areEqual = true;
for (int i = 0; i < fieldNames.Length; i++)
{
if (lastValues[i] == null || !lastValues[i].Equals(currentRow[fieldNames[i]]))
{
areEqual = false;
break;
}
}
return areEqual;
}
static private DataRow createRowClone(DataRow sourceRow, DataRow newRow, string[] fieldNames)
{
foreach (string field in fieldNames)
newRow[field] = sourceRow[field];
return newRow;
}
static private void setLastValues(object[] lastValues, DataRow sourceRow, string[] fieldNames)
{
for (int i = 0; i < fieldNames.Length; i++)
lastValues[i] = sourceRow[fieldNames[i]];
}
}
}
}