init: 导入项目到 meswork Gitea
This commit is contained in:
438
MisData_3.0_2022.08.23.1622.LLX/MesDataFunction/OpcOperation.cs
Normal file
438
MisData_3.0_2022.08.23.1622.LLX/MesDataFunction/OpcOperation.cs
Normal file
@@ -0,0 +1,438 @@
|
||||
using BasicData;
|
||||
using MesWork;
|
||||
using OpcBasic;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using System.Runtime.Remoting.Messaging;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MesDataFunction
|
||||
{
|
||||
|
||||
/*
|
||||
HeartBeatMIS 15
|
||||
EngineTypeGetOverMES 5
|
||||
PartPalletGoOver 6
|
||||
MaterialVerifyOver 7
|
||||
FalseGo 8
|
||||
ConfirmOkGo 51
|
||||
PartLoadFinish 52
|
||||
UnloadCompleted 53
|
||||
MachineTime_ReadOver 54
|
||||
FixAllow 66
|
||||
FixOver 67
|
||||
MatchingCompleted 68
|
||||
Match 69
|
||||
Reserved_1 70
|
||||
IsAutoGetEngineID 71
|
||||
RepairUplineMES 72
|
||||
ProcessCode 77
|
||||
BoltCode 88
|
||||
RepairStatus 93
|
||||
Reserved_3 24
|
||||
Reserved_4 25
|
||||
Reserved_5 26
|
||||
Reserved_6 27
|
||||
Reserved_7 28
|
||||
Reserved_8 29
|
||||
Reserved_9 30
|
||||
Reserved_10 31
|
||||
Reserved_11 32
|
||||
Reserved_12 33
|
||||
Reserved_13 34
|
||||
Reserved_14 35
|
||||
MesReadOver 20
|
||||
Reserved_15 110
|
||||
Reserved_16 111
|
||||
Reserved_17 112
|
||||
OnLineState 79
|
||||
EngineTypeID_MES 73
|
||||
EngineID_MES 74
|
||||
EngineType_MES 75
|
||||
MarkID 42
|
||||
RepairPathString 4
|
||||
SPareint1 113
|
||||
SPareint2 114
|
||||
SPareint3 115
|
||||
Sparestring1 116
|
||||
Sparestring2 117
|
||||
HeartBeatPLC 14
|
||||
WorkStart 2
|
||||
RepairPartStatusPLC 3
|
||||
PartLoad 43
|
||||
EngineTypeGetOverPLC 44
|
||||
PartLoadOK 48
|
||||
Reserved_18 49
|
||||
PalletDown 50
|
||||
Reserved_19 58
|
||||
FixOK 59
|
||||
Reserved_20 76
|
||||
Reserved_21 61
|
||||
Reserved_22 62
|
||||
Reserved_23 63
|
||||
Reserved_24 64
|
||||
Reserved_25 65
|
||||
EngineTypeID 9
|
||||
EngineID 10
|
||||
EngineType 11
|
||||
PartPalletCode 80
|
||||
PalletInfo 22
|
||||
MesRead 19
|
||||
PutOn 1000
|
||||
WorkOn 1001
|
||||
Alarm 1002
|
||||
NoPart 1003
|
||||
Block 1004
|
||||
PartPalletStatus 13
|
||||
TargetTimeRead 16
|
||||
QualityMask 21
|
||||
RepairStatusPLC 23
|
||||
MachineTargetTime 17
|
||||
MachineActualTime 18
|
||||
PLCSPareint1 36
|
||||
PLCSPareint2 37
|
||||
PLCSPareint3 38
|
||||
PLCSarestring1 39
|
||||
PLCSarestring2 40
|
||||
*/
|
||||
|
||||
|
||||
|
||||
public class OpcOperation
|
||||
{
|
||||
|
||||
|
||||
/// <summary>
|
||||
///引用程序集Hashtable
|
||||
/// </summary>
|
||||
public static Hashtable Hashtable_assembly = new Hashtable();
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
static public NameValueCollection hashtable_TagType = null;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
static public NameValueCollection hashtable_TagTypeTagName = null;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
static public NameValueCollection hashtable_TagTypeChange = null;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
static public NameValueCollection hashtable_WebTagTypeChange = null;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
static public NameValueCollection hashtable_MesTagTypeChange = null;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
static public NameValueCollection hashtable_TagTypeDataType = null;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
static readonly object l = new object();
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="tagTypeCodeID"></param>
|
||||
/// <param name="opName"></param>
|
||||
/// <returns></returns>
|
||||
public static object ReadPLC(int tagTypeCodeID, string opName)
|
||||
{
|
||||
try
|
||||
{
|
||||
return PlcLinkForm.ReadPLC(tagTypeCodeID, opName);
|
||||
|
||||
}
|
||||
catch { return "-3"; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="tagID"></param>
|
||||
/// <param name="tagValue"></param>
|
||||
public static void ReadPLC(string tagID, out object tagValue)
|
||||
{
|
||||
tagValue = PlcLinkForm.ReadPLC(tagID);
|
||||
}
|
||||
/// <summary>
|
||||
/// 20230218
|
||||
/// 按组读质量数据,返回带合格标志的质量数据列表
|
||||
/// </summary>
|
||||
/// <param name="opName"></param>
|
||||
/// <returns></returns>
|
||||
public static Hashtable ReadPLC_Sync_DataList_MesRead_ByOnlyDataGroupBak(string opName)
|
||||
{
|
||||
lock (l)
|
||||
{
|
||||
var tagValues = PlcLinkForm.ReadPLC_GroupData_Qd(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, object> _cd in keyValues)
|
||||
{
|
||||
tagFormatTemp = (TagFormat)_cd.Value;
|
||||
if (tagIndex % 3 == 1)
|
||||
{
|
||||
isOK = Convert.ToInt32(tagFormatTemp.TagValue);
|
||||
}
|
||||
else if (tagIndex % 3 == 2)
|
||||
{
|
||||
var TF = (TagFormat)_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 ConcurrentDictionary<string, object> ReadPLC_OpName(string opName)
|
||||
{
|
||||
return GetDbAndMaxLengthByOpNameByBytes(opName);
|
||||
}
|
||||
public static Hashtable ReadPLC_Sync_DataList_MesRead_ByOnlyDataGroup(string opName)
|
||||
{
|
||||
lock (l)
|
||||
{
|
||||
|
||||
var tagValues = 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, object> _cd in keyValues)
|
||||
{
|
||||
if (_cd.Key.ToString()[0].ToString() == "7")
|
||||
{
|
||||
tagFormatTemp = (TagFormat)_cd.Value;
|
||||
if (tagIndex % 3 == 1)
|
||||
{
|
||||
isOK = Convert.ToInt32(tagFormatTemp.TagValue);
|
||||
}
|
||||
else if (tagIndex % 3 == 2)
|
||||
{
|
||||
var TF = (TagFormat)_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 ConcurrentDictionary<string, object> GetDbAndMaxLengthByOpNameByBytes(string opName)
|
||||
{
|
||||
string tagStartAdr = "";
|
||||
ushort tagAdrListMaxLength = 0;
|
||||
PlcLinkForm.GetDbAndMaxLengthByOpName(opName, out tagStartAdr, out tagAdrListMaxLength);
|
||||
var tagAdrListTagFormat = PlcLinkForm.ReadQualityDataList(opName, tagStartAdr, tagAdrListMaxLength);
|
||||
return tagAdrListTagFormat;
|
||||
}
|
||||
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;
|
||||
}
|
||||
public static object ReadPLC_Sync_DataList_MesRead(string opName)
|
||||
{
|
||||
lock (l)
|
||||
{
|
||||
Hashtable ht = new Hashtable();
|
||||
|
||||
var cd = PlcLinkForm.ReadPLC_GroupData(opName);
|
||||
foreach (KeyValuePair<string, object> _cd in cd)
|
||||
{
|
||||
var tagID = Convert.ToInt32(_cd.Key);
|
||||
var TF = (TagFormat)_cd.Value;
|
||||
|
||||
QualityDataType qualityDataType;
|
||||
qualityDataType = new QualityDataType();
|
||||
|
||||
qualityDataType.tagID = TF.TagID;
|
||||
qualityDataType.tagTypeID = TF.TagTypeID;//变量类型
|
||||
qualityDataType.opName = opName;
|
||||
qualityDataType.isGoodBad = 192;
|
||||
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;//变量值
|
||||
|
||||
ht.Add(tagID, qualityDataType);
|
||||
}
|
||||
return ht;
|
||||
}
|
||||
|
||||
}
|
||||
///// <summary>
|
||||
/////
|
||||
///// </summary>
|
||||
///// <param name="tagTypeCodeID"></param>
|
||||
///// <param name="opName"></param>
|
||||
///// <param name="tagValue"></param>
|
||||
//public static void ReadTagValue(string tagID, out string tagValue)
|
||||
//{
|
||||
// tagValue = "0";
|
||||
// var tagValueObj = PlcLinkForm.ReadPLC(tagID);
|
||||
// var type = tagValueObj.GetType().Name.ToLower();
|
||||
// if (type == "bool" | type == "boolean")
|
||||
// {
|
||||
// var val = tagValueObj.ToString().ToLower();
|
||||
|
||||
// if (val == "true")
|
||||
// {
|
||||
// tagValue = "1";
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// tagValue = tagValueObj.ToString();
|
||||
// }
|
||||
//}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="tagTypeCodeID"></param>
|
||||
/// <param name="opName"></param>
|
||||
/// <param name="tagValue"></param>
|
||||
public static void ReadTagValue(int tagTypeCodeID, string opName, out string tagValue)
|
||||
{
|
||||
tagValue = "0";
|
||||
try
|
||||
{
|
||||
var tagValueObj = PlcLinkForm.ReadPLC(tagTypeCodeID, opName);
|
||||
var type = tagValueObj.GetType().Name.ToLower();
|
||||
if (type == "bool" | type == "boolean")
|
||||
{
|
||||
var val = tagValueObj.ToString().ToLower();
|
||||
|
||||
if (val == "true")
|
||||
{
|
||||
tagValue = "1";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tagValue = tagValueObj.ToString();
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="tagID"></param>
|
||||
/// <param name="tagValue"></param>
|
||||
/// <returns></returns>
|
||||
public static bool WritePLC(string tagID, object tagValue)
|
||||
{
|
||||
return PlcLinkForm.WritePLC(tagID, tagValue);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="tagTypeCodeID"></param>
|
||||
/// <param name="opName"></param>
|
||||
/// <param name="tagValue"></param>
|
||||
/// <returns></returns>
|
||||
public static bool WritePLC(int tagTypeCodeID, string opName, object tagValue)
|
||||
{
|
||||
return PlcLinkForm.WritePLC(tagTypeCodeID, opName, tagValue);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="tagTypeCodeID"></param>
|
||||
/// <param name="opName"></param>
|
||||
/// <param name="tagValue"></param>
|
||||
/// <returns></returns>
|
||||
public static bool WriteTagValue(int tagTypeCodeID, string opName, object tagValue)
|
||||
{
|
||||
return PlcLinkForm.WritePLC(tagTypeCodeID, opName, tagValue);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user