using DeviceDriver_BasicData;
using ExternalDataSync;
using Newtonsoft.Json;
using NJ_ZC;
using NPOI.OpenXmlFormats.Spreadsheet;
using OpcBasic;
using Rhino.Geometry;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Security.Policy;
using System.Threading;
using System.Windows.Forms;
using SystemFramework;
using static Focas1;
using static System.Configuration.ConfigurationManager;
namespace MesWork
{
public partial class Temp {
public static MesWorkForm mesWorkForm = null;
}
public partial class MesWorkForm
{
///
///
///
public static int IsWriteMonitorLog = Convert.ToInt32(AppSettings["IsWriteMonitorLog"]);
public static int IsDemoMesServer = Convert.ToInt32(AppSettings["IsDemoMesServer"]);
public static string BasicDataTableFile = AppSettings["BasicDataTableFile"];
///
///
///
public static int ConnectType = Convert.ToInt32(AppSettings["ConnectType"]);
public static string IpPortSub = AppSettings["IpPortSub"];
public static string MesServer_SendProtocol_Tag = AppSettings["MesServer_SendProtocol_Tag"];
public static string MesServer_SendProtocol_Joint = AppSettings["MesServer_SendProtocol_Joint"];
public static string MesServer_SendProtocol_Info_Fast = AppSettings["MesServer_SendProtocol_Info_Fast"];
public static string MesServer_SendProtocol_Info_Slow = AppSettings["MesServer_SendProtocol_Info_Slow"];
public static string MesServer_SendProtocol_Plc = AppSettings["MesServer_SendProtocol_Plc"];
public static string MesServer_SendProtocol_DeviceInfo = AppSettings["MesServer_SendProtocol_DeviceInfo"];
public static string ConnectionString = AppSettings["ConnectionString"];
public static string WebSvrUrlPort = AppSettings["WebSvrUrlPort"];
public static string MarkingMachine_Ip = AppSettings["MarkingMachine_Ip"];
public static string MarkingMachine_Port = AppSettings["MarkingMachine_Port"];
public static string Url_WebApi_Char = AppSettings["Url_WebApi_Char"];
public static string AK = AppSettings["AK"];
public static string SK = AppSettings["SK"];
public static string salt = AppSettings["salt"];
public static int TokenSyncTime = Convert.ToInt32(AppSettings["TokenSyncTime"]);
public static int SyncTime = Convert.ToInt32(AppSettings["SyncTime"]);
public static string charDataToken = "";
public static long charDataTokenTime = 0;
///
///
///
public static Dictionary dc_Robot = new Dictionary();
///
///
///
public static Dictionary dc_Name_Axis = new Dictionary();
public static Dictionary dc_Name_Axis_Card = new Dictionary();
///
///
///
public static AgvRead agvRead = null;
///
///
///
public static ScadaConfig scadaConfig = null;
///
///
///
public static ConcurrentQueue taskSql = new ConcurrentQueue();
///
///
///
public static string StationName = "DDV_SXYJ";
///
///
///
public static bool OnLine_PLC_1 = false;
public static bool OnLine_PLC_2 = false;
///
///
///
public static bool OnLine_SQL = false;
///
/// 监控数据的所有变化,从这里产生
///
///
///
public override void OPCTagData_TagDataOnChangeMIS(object sender, CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(MIS_Funtion, e);
}
///
/// 定时触发,检测PLC在线状态,周期:3 s
///
///
///
public override void PlcStateEvent(object sender, PlcStateEvetnArgs eState)
{
var ip = eState.IP.ToString();
var onLine = (bool)eState.OnLine;
switch (ip)
{
case "192.168.10.40":
OnLine_PLC_1 = onLine;
break;
default:
break;
}
}
///
///
///
///
///
///
public override void E_WriteLog(Enum_LogType t, string location, string content)
{
WriteLog(content);
}
///
///
///
[STAThread]
static void Main()
{
new System.Threading.Mutex(true, $"DT_SCADA_{IpPortSub}", out bool bCanRun);
if (!bCanRun)
{
MessageBox.Show("产线信号监控 程序 已经在运行!不可重复启动!");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(Temp.mesWorkForm = new MesWorkForm());
}
///
/// 读写取方法
///
///
///
private void DemoRead(string doWhat, string opOrIp)
{
try
{
string opName = "OP1010";
object tagValue = 1;
bool result = false;
ConcurrentDictionary tagAdrListTagFormat = null;
switch (doWhat)
{
case "TagID":
tagValue = ReadPLC("71010001");
result = WritePLC("71010001", tagValue);
break;
case "TagTypeCodeID":
tagValue = ReadPLC(10, opName);
result = WritePLC(10, opName, tagValue);
break;
case "OpAllTag"://OP所有点
tagAdrListTagFormat = ReadPLC_GroupData(opOrIp);
break;
case "OpMonitorTag"://OP监控点
tagAdrListTagFormat = ReadPLC_GroupMonitor(opOrIp);
break;
case "IpAllTag"://IP所有点
tagAdrListTagFormat = ReadPLC_IpTag(opOrIp);
break;
case "IpMonitorTag"://IP监控点
tagAdrListTagFormat = ReadPLC_IpMonitorTag(opOrIp);
break;
case "RegionRead"://按区域读取(起始地址 + 长度)
{
string tagStartAdr = "DB411.10";
ushort tagAdrListMaxLength = 100;
GetDbAndMaxLengthByOpName(opOrIp, out tagStartAdr, out tagAdrListMaxLength);
tagAdrListTagFormat = ReadQualityDataList(opOrIp, tagStartAdr, tagAdrListMaxLength);
}
break;
case "ReadBytes"://按区域读取(起始地址 + 长度)
{
string tagStartAdr = "DB411.10";
ushort tagAdrListMaxLength = 100;
var bates1 = ReadByteData_Op(opOrIp, tagStartAdr, tagAdrListMaxLength);
var bates2 = ReadByteData_Ip(opOrIp, tagStartAdr, tagAdrListMaxLength);
}
break;
case "WriteBytes"://按区域读取(起始地址 + 长度)
{
string tagStartAdr = "DB411.10";
var result1 = WritePLC_Bytes_Op(opOrIp, tagStartAdr, new byte[1024]);
var result2 = WritePLC_Bytes_Ip(opOrIp, tagStartAdr, new byte[1024]);
}
break;
default:
break;
}
//ReadByteData_Op(string opName, string startAdrr, ushort length)
foreach (System.Collections.Generic.KeyValuePair de in tagAdrListTagFormat)//得到工位监控点哈希表
{
TagFormat TF = (TagFormat)de.Value;
string recResult = TF.OpName + " (" + TF.TagTypeCodeID + ")" + TF.TagValue.ToString(); ;
}
}
catch (System.Exception err)
{
ApplicationLog.WriteLog("listView_ShowQualityData_Init" + err);
}
//var tagTypeCodeIDList = DriverCache[CacheType.Cache_OpTagTypeCodeIDList];
}
///
///
///
///
///
private string Hello_You_All_Never_Know(string[] args)
{
return Guid.NewGuid().ToString()+ Guid.NewGuid().ToString();
}
///
///
///
static private void Loop()
{
while (true)
{
taskSql.TryDequeue(out ParamT tp);
if (tp != null)
{
var procedureName = tp.procedureName;
var sqlParameter = tp.sqlParameter;
DataLinkMesWork.SQLCommon.ExecuteStoredProcedure(procedureName, MesWorkForm.ConnectionString, ref sqlParameter, out string errorMessage);
if (errorMessage.Length > 0)
{
errorMessage = errorMessage.Replace("'", "**");
LogRecord.LogRecord.Insert_Log(LogRecord.LogRecord.Type_Log.Alarm, errorMessage);
}
}
if (taskSql.Count < 5)
{
Thread.Sleep(15);
}
}
}
private void CommunicationCheckOnLine()
{
new Thread(new ThreadStart(delegate ()
{
while (true)
{
try
{
MesWorkForm.OnLine_SQL = DataLinkMesWork.SQLCommon.ExecuteDataTable("select getdate()", ConnectionString, out DataTable dt, out string err);
}
catch (Exception) { }
Thread.Sleep(5000);
}
}))
{ IsBackground = true }.Start();
}
static private void LineCount()
{
while (true)
{
try
{
foreach (var opName in MesWorkForm.opNameList)
{
var count_Total = ReadPLC(10, opName).ToString();
var count_OK = count_Total;
var count_NG = count_Total;
var pName = "Event_ProduceCount_Update";
var sqlParameter = new SqlParameter[] {
new SqlParameter("@DeviceCode", opName),
new SqlParameter("@Online", true.ToString()),
new SqlParameter("@StationName", opName),
new SqlParameter("@Count_OK", count_OK),
new SqlParameter("@Count_NG", count_NG),
new SqlParameter("@Count_Total", count_Total),
};
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = pName,
sqlParameter = sqlParameter
});
}
}
catch (Exception err)
{
}
Thread.Sleep(5000);
}
}
static private void StationNameStatus_Insert()
{
while (true)
{
try
{
foreach (var opName in MesWorkForm.opNameList)
{
/*
1 警报数
2 运行
*/
var status = "-1";
try
{
var alarm = ReadPLC(1, opName).ToString().ToLower().Replace("true","1").Replace("false", "0");
var run = ReadPLC(2, opName).ToString().ToLower().Replace("true", "1").Replace("false", "0");
if (Convert.ToInt32(alarm) > 0)
{
status = "2";
}
else
{
if (Convert.ToInt32(run) > 0)
{
status = "1";
}
else
{
status = "0";
}
}
if (alarm == "-1" & run == "-1")
{
status = "-1";
}
}
catch (Exception errr)
{
}
var pName = "Event_StationStatus_Insert";
var sqlParameter = new SqlParameter[] {
new SqlParameter("@OpName", opName),
new SqlParameter("@Status", status),
new SqlParameter("@ChangeTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")),
};
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = pName,
sqlParameter = sqlParameter
});
}
}
catch (Exception err)
{
}
Thread.Sleep(60_000);
}
}
static private void StationNameStatus_Update()
{
while (true)
{
try
{
foreach (var opName in MesWorkForm.opNameList)
{
/*
1 警报数
2 运行
*/
var status = "-1";
try
{
var alarm = ReadPLC(1, opName).ToString().ToLower().Replace("true", "1").Replace("false", "0");
var run = ReadPLC(2, opName).ToString().ToLower().Replace("true", "1").Replace("false", "0");
if (Convert.ToInt32(alarm) > 0)
{
status = "2";
}
else
{
if (Convert.ToInt32(run) > 0)
{
status = "1";
}
else
{
status = "0";
}
}
if (alarm == "-1" & run == "-1")
{
status = "-1";
}
}
catch (Exception errr)
{
}
var pName = "Event_StationStatus_Update";
var sqlParameter = new SqlParameter[] {
new SqlParameter("@OpName", opName),
new SqlParameter("@Status", status),
new SqlParameter("@ChangeTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")),
};
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = pName,
sqlParameter = sqlParameter
});
}
}
catch (Exception err)
{
}
Thread.Sleep(2000);
}
}
static private void StationNameDeviceData_Insert()
{
while (true)
{
try
{
foreach (var opName in MesWorkForm.opNameList)
{
var CreatTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var opData = ReadPLC_GroupData(opName);
foreach (KeyValuePair item in opData)
{
var thisTagID = item.Key;
var thisTF = (TagFormat)item.Value;
var thisTagTypeCodeID = thisTF.TagTypeCodeID;
var thisItemName = thisTF.ItemName;
var thisValue = thisTF.TagValue;
var pName = "Event_DeviceData_Insert";
var sqlParameter = new SqlParameter[] {
new SqlParameter("@DeviceCode", opName),
new SqlParameter("@Online", true.ToString()),
new SqlParameter("@StationName", opName),
new SqlParameter("@TagTypeCodeID", thisTagTypeCodeID),
new SqlParameter("@ItemName", thisItemName),
new SqlParameter("@TagValue", thisValue),
new SqlParameter("@TagID", thisTagID),
new SqlParameter("@CreateTime", CreatTime),
};
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = pName,
sqlParameter = sqlParameter
});
}
}
}
catch (Exception err)
{
}
Thread.Sleep(60_000);
}
}
static private void StationNameDeviceData_Update()
{
while (true)
{
try
{
foreach (var opName in MesWorkForm.opNameList)
{
var CreatTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var opData = ReadPLC_GroupData(opName);
foreach (KeyValuePair item in opData)
{
var thisTagID = item.Key;
var thisTF = (TagFormat)item.Value;
var thisTagTypeCodeID = thisTF.TagTypeCodeID;
var thisItemName = thisTF.ItemName;
var thisValue = thisTF.TagValue;
var pName = "Event_DeviceData_Update";
var sqlParameter = new SqlParameter[] {
new SqlParameter("@DeviceCode", opName),
new SqlParameter("@Online", true.ToString()),
new SqlParameter("@StationName", opName),
new SqlParameter("@TagTypeCodeID", thisTagTypeCodeID),
new SqlParameter("@ItemName", thisItemName),
new SqlParameter("@TagValue", thisValue),
new SqlParameter("@TagID", thisTagID),
new SqlParameter("@CreateTime", CreatTime),
};
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = pName,
sqlParameter = sqlParameter
});
}
}
}
catch (Exception err)
{
}
Thread.Sleep(2000);
}
}
static private void SelectData_WritePLC_Task()
{
while (true)
{
try
{
B_DB_Opera.SelectData_WritePLC();
}
catch (Exception err)
{
}
Thread.Sleep(5000);
}
}
public static void WriteLog(string msg)
{
MW_Log.LoggerHelper.Info("Alarm", msg);
}
}
}