using CCYQ_JieFang;
using DeviceDriver_BasicData;
using DK_DC_Tool;
using NJ_ZC;
using OpcBasic;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Windows.Forms;
using SystemFramework;
using static System.Configuration.ConfigurationManager;
namespace MesWork
{
public partial class Temp {
public static MesWorkForm mesWorkForm = null;
public static DAS_OP10 mesWorkForm1 = null;
public static DAS_OP20 mesWorkForm2 = null;
public static DAS_OP30 mesWorkForm3 = null;
public static DAS_OP40 mesWorkForm4 = null;
public static DAS_OP50 mesWorkForm5 = null;
}
public partial class MesWorkForm
{
public static string BasicDataTableFile = AppSettings["BasicDataTableFile"];
public static int IsDemoMesServer = Convert.ToInt32(AppSettings["IsDemoMesServer"]);
public static int IsWriteMonitorLog = Convert.ToInt32(AppSettings["IsWriteMonitorLog"]);
public static string ConnectionString = AppSettings["ConnectionString"];
public static string MesServer_IpPortName = AppSettings["MesServer_IpPortName"];
public static string MesServer_SendProtocol = AppSettings["MesServer_SendProtocol"];
public static string MesServer_SendTagProtocol = AppSettings["MesServer_SendTagProtocol"];
public static string MesServer_SendTagProtocol_MES = AppSettings["MesServer_SendTagProtocol_MES"];
//机床测量数据
public static string MeasureDataString = AppSettings["MeasureDataString"];
public static string ProgramDataString = AppSettings["ProgramDataString"];
public static string WebSvrUrlPort = AppSettings["WebSvrUrlPort"];
public static string ResponseEnterOrLeaveUrl = AppSettings["ResponseEnterOrLeaveUrl"];
public static string FinishCallUrl = AppSettings["FinishCallUrl"];
public static string DeviceStatusUrl = AppSettings["DeviceStatusUrl"];
public static string IPC_product = AppSettings["IPC_product"];
public static string IPC_RequestEnterOrLeave = AppSettings["IPC_RequestEnterOrLeave"];
public static string IPC_WorkFinsih = AppSettings["IPC_WorkFinsih"];
// MQTT
// public static int connectType = Convert.ToInt32(AppSettings["connectType"]);
// public static string MqttUrl = AppSettings["MqttUrl"];
// public static string MqttTargetTopic = AppSettings["MqttTargetTopic"];
public static int TimerUpdateSql = Convert.ToInt32(AppSettings["TimerUpdateSql"]);
public static int StationStatus_Interval_Read = Convert.ToInt32(AppSettings["StationStatus_Interval_Read"]);
public static int StationStatus_Interval_Update = Convert.ToInt32(AppSettings["StationStatus_Interval_Update"]);
public static int StationStatus_Interval_Insert = Convert.ToInt32(AppSettings["StationStatus_Interval_Insert"]);
public static int ExecSql_Interval = Convert.ToInt32(AppSettings["ExecSql_Interval"]);
public static string IsLogFilePath = AppSettings["IsLogFilePath"];
public static string LogFilePath = AppSettings["LogFilePath"];
public static string IpcConfigPath = AppSettings["IpcConfigPath"];
private static StreamWriter streamWriter;
///
///
///
public static ConcurrentQueue taskSql = new ConcurrentQueue();
///
///
///
public static string StationName = "DDV";
///
///
///
public static DataTable dt_Robot = null;
///
///
///
public static DataTable dt_EEM = null;
///
///
///
public static DataTable dt_EEM_PLC = null;
///
///
///
public static DataTable dt_CNC = null;
///
///
///
public static DataTable dt_pmc = null;
///
///
///
public static DataTable dt_pmc_Simplify = null;
///
///
///
public static DataTable dt_PLC_Data = null;
///
///
///
public static Hashtable ht_PLM_Old = new Hashtable();
///
///
///
public static Hashtable ht_PLM_Curr = new Hashtable();
///
///
///
public static Hashtable ht_OpName_Status = new Hashtable();
///
///
///
public static Hashtable ht_OpName_PMCReadTagIDArray = new Hashtable();
///
/// 监控数据的所有变化,从这里产生
///
///
///
public override void OPCTagData_TagDataOnChangeMIS(object sender, CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(MIS_Funtion, e);
}
public void Tighten_E_ScanContent(string hex_str, string raw_str)
{
ThreadPool.QueueUserWorkItem(MIS_Tighten, new TightenParam
{
hex = hex_str ,
raw = raw_str
});
}
///
/// 定时触发,检测PLC在线状态,周期:3 s
///
///
///
public override void PlcStateEvent(object sender, PlcStateEvetnArgs eState)
{
}
public static string currentOpName = "";
///
///
///
[STAThread]
static void Main()
{
new System.Threading.Mutex(true, "Device Data SCADA", 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 "Cmd":
// tagValue = ReadPLC((int)EnumTagTypeCodeID.EngineID, opName);
// result = WritePLC((int)EnumTagTypeCodeID.EngineID, 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);
}
}
public string Hello_You_All_Never_Know(string[] args)
{
return Guid.NewGuid().ToString()+ Guid.NewGuid().ToString();
}
private void Button1_Click(object sender, System.EventArgs e)
{
ConcurrentDictionary tagTypeCodeIDList = DriverCache[CacheType.Cache_OpTagTypeCodeIDList];
}
public static void SavePrintLog(int type, string message)
{
try
{
if (IsLogFilePath == "0") return;
string directPath = LogFilePath.Trim();
if (!Directory.Exists(directPath)) //判断文件夹是否存在,如果不存在则创建
{
Directory.CreateDirectory(directPath);
}
directPath += string.Format(@"\{0}.log", DateTime.Now.ToString("yyyy-MM-dd"));
if (streamWriter == null)
{
streamWriter = !File.Exists(directPath) ? File.CreateText(directPath) : File.AppendText(directPath); //判断文件是否存在如果不存在则创建,如果存在则添加。
}
streamWriter.WriteLine("***********************************************************************");
streamWriter.WriteLine(DateTime.Now.ToString("HH:mm:ss"));
if (message != null)
{
if (type == 0)
{
streamWriter.WriteLine("记录信息:\r\n" + message);
}
else
{
streamWriter.WriteLine("异常信息:\r\n" + message);
}
}
}
finally
{
if (streamWriter != null)
{
streamWriter.Flush();
streamWriter.Dispose();
streamWriter = null;
}
}
}
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 DatatableCol_Simplify(DataTable dt_pmc)
{
dt_pmc_Simplify = new DataTable();
dt_pmc_Simplify.Columns.Add("TagID");
dt_pmc_Simplify.Columns.Add("TagName");
dt_pmc_Simplify.Columns.Add("TagValue");
dt_pmc_Simplify.Columns.Add("工位号");
dt_pmc_Simplify.Columns.Add("数据来源");
dt_pmc_Simplify.Columns.Add("IP");
dt_pmc_Simplify.Columns.Add("TagTypeID");
dt_pmc_Simplify.Columns.Add("TagLong");
dt_pmc_Simplify.Columns.Add("DbName");
dt_pmc_Simplify.Columns.Add("变量类型");
dt_pmc_Simplify.Columns.Add("变量地址");
dt_pmc_Simplify.Columns.Add("变量其它");
dt_pmc_Simplify.Columns.Add("列位置");
dt_pmc_Simplify.Columns.Add("变量类型代码");
dt_pmc_Simplify.Columns.Add("变量类型名称");
dt_pmc_Simplify.Columns.Add("是否启用");
dt_pmc_Simplify.Columns.Add("是否监控");
var dt_pmcT = dt_pmc.Copy();
for (int i = 0; i < dt_pmcT.Rows.Count; i++)
{
var TagID = dt_pmcT.Rows[i]["TagID"].ToString();
var TagName = dt_pmcT.Rows[i]["TagName"].ToString();
var TagValue = "0";
var 工位号 = dt_pmcT.Rows[i]["工位号"].ToString();
var 数据来源 = dt_pmcT.Rows[i]["数据来源"].ToString();
var IP = dt_pmcT.Rows[i]["IP"].ToString();
var TagTypeID = dt_pmcT.Rows[i]["TagTypeID"].ToString();
var TagLong = dt_pmcT.Rows[i]["TagLong"].ToString();
var DbName = dt_pmcT.Rows[i]["DbName"].ToString();
var 变量类型 = dt_pmcT.Rows[i]["变量类型"].ToString();
var 变量地址 = dt_pmcT.Rows[i]["变量地址"].ToString();
var 变量其它 = dt_pmcT.Rows[i]["变量其它"].ToString();
var 列位置 = dt_pmcT.Rows[i]["列位置"].ToString();
var 变量类型代码 = dt_pmcT.Rows[i]["变量类型代码"].ToString();
var 变量类型名称 = dt_pmcT.Rows[i]["变量类型名称"].ToString();
var 是否启用 = dt_pmcT.Rows[i]["是否启用"].ToString();
var 是否监控 = dt_pmcT.Rows[i]["是否监控"].ToString();
ht_PLM_Old.Add(TagID, "0");
dt_pmc_Simplify.Rows.Add(
TagID,
TagName,
TagValue,
工位号 ,
数据来源 ,
IP ,
TagTypeID ,
TagLong ,
DbName ,
变量类型,
变量地址 ,
变量其它 ,
列位置,
变量类型代码,
变量类型名称,
是否启用,
是否监控
);
}
}
}
}