Files
52-NingdePDC-MesProject/MisDataFun/MisDataFun/MisDataFun.cs
XingCheng3 dff0156cdd MVP!
2026-05-26 09:41:24 +08:00

1086 lines
40 KiB
C#
Raw 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 DataLinkMesWork;
using MesDataFunction;
using MesServerWork;
using MesWork.PLC;
using MQTTnet;
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client.Receiving;
using MQTTnet.Extensions.ManagedClient;
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Threading;
using System.Windows.Forms;
using SystemFramework;
using System.IO;
using System.Net;
using System.Text;
using MesServerFunctions;
using System.Threading.Tasks;
using MesWork;
using System.Drawing;
using MES_SIGNAL_CONF;
using SlMesDbIterface;
using System.Security.Policy;
using MisDataFunDll;
//写死工位号的地方OP170质量数据、OP150打印机、OP100扫码
//Function 1056 添加判断工位 300 工位 直接给工作完成 其他给允许工作
//Function 1055 扫码完成 自动触发 拧紧判断 不然不知道咋进去
namespace MisDataSaveDate
{
/// <summary>
///
/// </summary>
public partial class MesServerMisDataFun : Form
{
public static string WebSvrUrlPort = ConfigurationManager.AppSettings["Url_WebApi"];
public static int IsWriteMonitorLog = Convert.ToInt32(ConfigurationManager.AppSettings["IsWriteMonitorLog"]);
public static string OnlineCheckDataUrl = ConfigurationManager.AppSettings["OnlineCheckDataUrl"].ToString();
public static string ConnectionString_MES = ConfigurationManager.AppSettings["ConnectionString_MES"];
public static int IsDemoMesServer = Convert.ToInt32(ConfigurationManager.AppSettings["IsDemoMesServer"]);
public static string IsRecordTagStatus = ConfigurationManager.AppSettings["IsRecordTagStatus"];
public static string BasicDataTableFile = ConfigurationManager.AppSettings["BasicDataTableFile"];
public static string PrintURL = ConfigurationManager.AppSettings["PrintURL"];
/// <summary>
///
/// </summary>
InitServer initServer = null;
/// <summary>
///
/// </summary>
static Hashtable hashtableTopicList = new Hashtable();
/// <summary>
///
/// </summary>
static bool OnLineMqtt = false;
/// <summary>
///
/// </summary>
static bool OnLine_SQL = false;
/// <summary>
///
/// </summary>
static bool OnLine_Print = false;
/// <summary>
///
/// </summary>
static bool IsLoopReadShow = false;
/// <summary>
/// 允许使用附加功能的变量只有在系统开始加载Tag时才允许读取PLC数据
/// </summary>
public static bool AllowLoad;
/// <summary>
///
/// </summary>
MesWork.OpcForm opcForm = null;
/// <summary>
///
/// </summary>
public static string WorkStationNum_Now;
/// <summary>
///
/// </summary>
DateTime StartTime;
public static Color color_Faw = Color.FromArgb(0, 44, 101);//蓝色大众0,44,101
public static Color color_Good = Color.FromArgb(132, 185, 235);//浅蓝,自定义
public static Color color_Wait = Color.FromArgb(240, 230, 140);//淡黄,显示等待状态
public static Color color_Bad = SystemColors.ActiveBorder;//灰色,显示操作过程
public static Color color_Control = SystemColors.Control;//控件默认颜色
public static Color color_Grey = Color.FromArgb(192, 192, 192);//灰色Table底色
public static Color color_Green = Color.FromArgb(22, 161, 136);//绿色
public static Color color_Yellow = Color.FromArgb(246, 227, 74);//黄色
public static Color color_Red = Color.FromArgb(255, 0, 0);//红色
[STAThread]
static void Main()
{
new System.Threading.Mutex(true, "MES_ZK_SVR", out bool bCanRun);
if (!bCanRun)
{
MessageBox.Show("MES中控程序 已经在运行!不可重复启动!");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MesServerMisDataFun());
//new MES_CONF().ShowDialog();
}
public MesServerMisDataFun()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
Never_Know.Hello_You_All_Never_Know = Hello_You_All_Never_Know;
PP.ConnectionString_MES = ConnectionString_MES;
PP.PrintURL = PrintURL;
PP.IsDemoMesServer = IsDemoMesServer;
ApplicationConfig.ConnectionString_MES = ConnectionString_MES;
CommunicationCheckOnLine();
var dt_Signal = MisDataFunDll.MisDataFun.dt_Signal();
var dt_Device = MisDataFunDll.MisDataFun.dt_Device();
var dt_TagTypeDataType = MisDataFunDll.MisDataFun.dt_TagTypeDataType();
Get_SpecialOpList();
var sql =
$" SELECT [工位号],[工位名称],[PLC],[PLC代码],[MesDll]" +
$" FROM [MES_计划BOM_工位与名称] WHERE [工位类型] = 0" +
$" ORDER BY [工位号]";
SqlOperation.ExecuteSql(sql, out DataTable dt_SqlOp, out string errorSqlOp);
dgv_OpName.DataSource = dt_SqlOp;
var mp = new MesWorkPlc();
StartTime = Convert.ToDateTime(toolStripStatusLabel_StartTime.Text = DateTime.Now.ToString());
mp.LoadOPCData(dt_Signal, dt_Device, IsDemoMesServer, IsWriteMonitorLog, true, false, out string error);
if (error.Length > 0 )
{
MessageBox.Show($"信号加载报错:{error}");
Process.GetCurrentProcess().Kill();
}
MesDataFunction.LoadTagTypeCodeID.Load(dt_TagTypeDataType);
//查询出“全部原始基本数据列表”
var drs = MesWork.PlcLinkForm.dt_BasicData.Select($"是否启用 = 1 and 变量类型代码=101 or 变量类型代码 = 102 or 变量类型代码 = 105");
if (drs.Length > 1)
{
MIS_BASE.BasicDataTagValue = MesWork.PlcLinkForm.dt_BasicData.Select($"是否启用 = 1 and 变量类型代码=101 or 变量类型代码 = 102 or 变量类型代码 = 105").CopyToDataTable<DataRow>();
if (MIS_BASE.BasicDataTagValue.Columns.Contains("上限值"))
{
MIS_BASE.BasicDataTagValue.Columns["上限值"].ColumnName = "值上限";
}
if (MIS_BASE.BasicDataTagValue.Columns.Contains("下限值"))
{
MIS_BASE.BasicDataTagValue.Columns["下限值"].ColumnName = "值下限";
}
}
// BasicDataTagValue = MesWork.PlcLinkForm.dt_BasicData.Select($"是否启用 = 1 and 监控属性代码 = '{DataLinkMesWork.ApplicationConfig.MES_Code.ToString()}'").CopyToDataTable<DataRow>();
//查询出“MES_基本数据_测量范围”
MesServerWork.MIS_BASE.BasicDataTagValueUpDown = MesWork.PlcLinkForm.dt_BasicData;
if (MesServerWork.MIS_BASE.BasicDataTagValueUpDown.Columns.Contains("上限值"))
{
MesServerWork.MIS_BASE.BasicDataTagValueUpDown.Columns["上限值"].ColumnName = "值上限";
}
if (MesServerWork.MIS_BASE.BasicDataTagValueUpDown.Columns.Contains("下限值"))
{
MesServerWork.MIS_BASE.BasicDataTagValueUpDown.Columns["下限值"].ColumnName = "值下限";
}
// 模拟时,写入质量数据
if (IsDemoMesServer == 1)
{
InitBasicDataTagValue();
}
// 变量代码与其他字段的对应关系
MesServerWork.MIS_BASE.InitHashtableTagID();
toolStripStatusLabel_WorkStationNum.Text = MesWork.PlcLinkForm.opNameList.Count.ToString();
AllowLoad = true;
if (IsDemoMesServer == 1)
{
toolStripStatusLabel_RunningStatus.Text = "变量模拟";
toolStripStatusLabel_RunningStatus.BackColor = System.Drawing.Color.Yellow;
}
else
{
toolStripStatusLabel_RunningStatus.Text = "PLC";
toolStripStatusLabel_RunningStatus.BackColor = System.Drawing.Color.Green;
}
MesWorkPlc.D_OPCTagData_TagDataOnChangeMIS -= OPCTagData_TagDataOnChange;
MesWorkPlc.D_OPCTagData_TagDataOnChangeMIS += OPCTagData_TagDataOnChange;
MIS_BASE.InitHashtable_MesServerCode();
// 获得Function调用信息
MisDataFunDll.MisDataFun.GetMesServerCodeAndMesDll(out MisDataFunDll.MisDataFun.hashtable_MesServerCode, out MisDataFunDll.MisDataFun.hashtable_MesDll);
MisDataFunDll.MisDataFun.GetBaseData_tagTable_TagName(out MisDataFunDll.MisDataFun.hashtable_TagName, out MisDataFunDll.MisDataFun.hashtable_TagTypeTagName);
FuntionMesRead.GetAlarmInit();
}
// 获取特殊工位列表
static public void Get_SpecialOpList()
{
string procedureName = "MES_特殊工位定义表_查询";
SqlParameter[] thisParms = new SqlParameter[0];
DataAccess.ExecuteStoredProcedure(procedureName, ref thisParms, out DataTable dt);
var specialOpList = new Dictionary<string, string[]>();
foreach (DataRow row in dt.Rows)
{
string type = row["type"].ToString();
string[] opList = row["opList"].ToString().Split(',');
specialOpList[type] = opList;
}
PP.SpecialOpList = specialOpList;
}
public void SaveData_Load(object sender, EventArgs e)
{
MyLog4Net.MyLogHelper.LogCommit += MyLogHelper_LogCommit;
MqttLink();
initServer = new InitServer(WebSvrUrlPort);
Thread.Sleep(200);
MesWorkPlc.StartServer(); //开启监控服务
new TaskFactory().StartNew(delegate ()
{
DataTable dt;
MisDataFunDll.MisDataFun.Alarm_Moby_Search(out dt);
DataTable dt1 = MisDataFunDll.MisDataFun.GetCheckOpName();
for (int i = 0; i < dt1.Rows.Count; i++)
{
string opName = dt1.Rows[i]["工位号"].ToString();
FuntionMesRead.Alarm_Insert_Init(opName);
}
});
}
/// <summary>
/// 模拟时,写入质量数据
/// </summary>
private void InitBasicDataTagValue()
{
string tagID;
double tagValue;
//写工位总合格标志 变量类型代码=21
for (int i = 0; i < MesWork.PlcLinkForm.dt_BasicData.Rows.Count; i++)
{
if (MesWork.PlcLinkForm.dt_BasicData.Rows[i]["变量类型代码"].ToString() == "21")
{
tagID = MesWork.PlcLinkForm.dt_BasicData.Rows[i]["TagID"].ToString();
MesServerWork.MIS_BASE.Write_TagID(tagID, 1);
}
}
if (MesServerWork.MIS_BASE.BasicDataTagValue != null)
{
for (int i = 0; i < MesServerWork.MIS_BASE.BasicDataTagValue.Rows.Count; i++)
{
try
{
switch (Convert.ToInt32(MesServerWork.MIS_BASE.BasicDataTagValue.Rows[i]["变量排序"]))
{
case 0:
tagID = MesServerWork.MIS_BASE.BasicDataTagValue.Rows[i]["TagID"].ToString();
MesServerWork.MIS_BASE.Write_TagID(tagID, 1);
break;
case 1:
case 2:
case 3:
tagID = MesServerWork.MIS_BASE.BasicDataTagValue.Rows[i]["TagID"].ToString();
tagValue = Convert.ToDouble(MesServerWork.MIS_BASE.BasicDataTagValue.Rows[i]["列位置"]) * 100
+ Convert.ToDouble(MesServerWork.MIS_BASE.BasicDataTagValue.Rows[i]["变量排序"]) / 100;
MesServerWork.MIS_BASE.Write_TagID(tagID, tagValue);
break;
}
}
catch { }
}
}
}
#region mqtt相关
private async Task MqttLink()
{
List<MqttTopicFilter> TopicFilterList = new List<MqttTopicFilter>();
string url;
string TopicList;
string[] TopicListFunItems;
string[] TopicListItems;
url = ConfigurationManager.AppSettings["MqttUrl"];
TopicList = ConfigurationManager.AppSettings["TopicList"];
TopicListItems = TopicList.Split('|');
for (int i = 0; i < TopicListItems.Length; i++)
{
TopicListFunItems = TopicListItems[i].Split(',');
hashtableTopicList.Add(TopicListFunItems[0], TopicListFunItems[1]);
}
await Mqtt.StartAsync();
foreach (var topic in TopicListItems)
{
TopicListFunItems = topic.Split(',');
Mqtt.mqttClient.SubscribeAsync(new MqttTopicFilter { Topic = TopicListFunItems[0] });
}
Mqtt.mqttClient.ConnectedHandler = new MqttClientConnectedHandlerDelegate(OnSubscriberConnected);
Mqtt.mqttClient.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(OnSubscriberDisconnected);
Mqtt.mqttClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(OnSubscriberMessageReceived);
}
private string Hello_You_All_Never_Know(string[] args)
{
return Guid.NewGuid().ToString() + Guid.NewGuid().ToString();
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
private void OnSubscriberConnected(MqttClientConnectedEventArgs x)
{
MyLog4Net.MyLogHelper.Info("Mqtt", "Mqtt连接成功");
OnLineMqtt = true;
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
private void OnSubscriberDisconnected(MqttClientDisconnectedEventArgs x)
{
try
{
MyLog4Net.MyLogHelper.Error("Mqtt", "Mqtt断开连接Reason" + x.Reason);
OnLineMqtt = false;
}
catch (Exception err)
{
}
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
public void OnSubscriberMessageReceived(MqttApplicationMessageReceivedEventArgs x)
{
ThreadPool.QueueUserWorkItem(MIS_Funtion_WEB, x);
}
#endregion
/// <summary>
/// mqtt 接收web和barcode数据
/// </summary>
/// <param name="e"></param>
public void MIS_Funtion_WEB(object e)
{
try
{
MqttApplicationMessageReceivedEventArgs x = (MqttApplicationMessageReceivedEventArgs)e;
var rec = x.ApplicationMessage.ConvertPayloadToString();
MisDataFunDll.MisDataFun.TransferInfToMES(rec);
}
catch (Exception ex)
{
//MIS_Funtion(topicFunItem, "Exception:" + ex.Message);
}
}
static public void TagTypeCodeID_Insert(string opName, string TagTypeCodeID, string TagID, string TagValue, DateTime arrivedTime, DateTime leavedTime, int TimeDiff)
{
string procedureName;
procedureName = "测量数据设备状态日志_增加数据";
SqlParameter[] thisParms = new SqlParameter[7];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@信号类型代码", TagTypeCodeID);
thisParms[2] = new System.Data.SqlClient.SqlParameter("@TagID", TagID);
thisParms[3] = new System.Data.SqlClient.SqlParameter("@TagValue", TagValue);
thisParms[4] = new System.Data.SqlClient.SqlParameter("@到达时间", arrivedTime);
thisParms[5] = new System.Data.SqlClient.SqlParameter("@离开时间", leavedTime);
thisParms[6] = new System.Data.SqlClient.SqlParameter("@在线时间", TimeDiff);
DataAccess.ExecuteStoredProcedure(procedureName, ref thisParms);
}
static public void DeviceStatusSave(string opName, string TagTypeCodeID, string TagValue)
{
string procedureName;
procedureName = "MES_设备停机时间_增加";
SqlParameter[] thisParms = new SqlParameter[3];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@TagTypeID", TagTypeCodeID);
thisParms[2] = new System.Data.SqlClient.SqlParameter("@TagValue", TagValue);
DataAccess.ExecuteStoredProcedure(procedureName, ref thisParms);
}
private void MisDataFun_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("您确认要退出MES程序吗该操作会停止MES进行数据处理", "", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
Process.GetCurrentProcess().Kill();
}
else
{
e.Cancel = true;
}
}
private void timer_Status_Tick(object sender, EventArgs e)
{
timer_Status.Enabled = false;
Show_OnLineState();
if (!AllowLoad) return;
Runtime_Thread();
timer_Status.Enabled = true;
}
private void Show_OnLineState()
{
OnLineState_C(pb_OnLine_Print, OnLine_Print);
OnLineState_C(pb_OnLine_SQL, OnLine_SQL);
OnLineState_C(pb_OnLine_MQTT, OnLineMqtt);
}
private void CommunicationCheckOnLine()
{
new Thread(new ThreadStart(delegate ()
{
while (true)
{
try
{
OnLine_SQL = DataLinkMesWork.SQLCommon.ExecuteDataTable("select getdate()", ConnectionString_MES, out DataTable dt, out string err);
}
catch (Exception) { }
Thread.Sleep(5000);
}
}))
{ IsBackground = true }.Start();
new Thread(new ThreadStart(delegate ()
{
var ip = PrintURL.Split(':')[0];
while (true)
{
try
{
OnLine_Print = new System.Net.NetworkInformation.Ping().Send(ip).Status == System.Net.NetworkInformation.IPStatus.Success;
}
catch (Exception) { }
Thread.Sleep(5000);
}
}))
{ IsBackground = true }.Start();
}
private void OnLineState_C(PictureBox pb, bool onLine)
{
pb.Image = onLine ? global::MisDataFun.Properties.Resources.
: global::MisDataFun.Properties.Resources.;
}
private void MyLogHelper_LogCommit(object sender, MyLog4Net.MyLogEventArgs e)
{
var module = e.Module;
var message = e.Message;
var log = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + " " + module + " " + message + "\r\n";
if (this.InvokeRequired)
{
this.Invoke(new Action(() =>
{
this.richTextBox1_mqtt.AppendText(log);
this.richTextBox1_mqtt.Focus();
}));
}
else
{
this.richTextBox1_mqtt.AppendText(log);
this.richTextBox1_mqtt.Focus();
}
}
public void OPCTagData_TagDataOnChange(DeviceDriver_BasicData. CustomeEvetnArgs e)
{
// 处理MIS业务 保存数据
// ThreadPool.QueueUserWorkItem(Function.MIS_Funtion, e);
// 处理MES业务 Function
ThreadPool.QueueUserWorkItem(TagData_MisData_TagDataOnChangeCustomeEvetnArgs, e);
//ThreadPool.QueueUserWorkItem(TagData_MisData_TagDataOnChange, e);
// 设备状态日志
ThreadPool.QueueUserWorkItem(TagTypeCodeID_TagDataOnChange, e);
//发送通讯服务器 MES web界面显示用 加工位号
ThreadPool.QueueUserWorkItem(TransferInfToWebServer, e);
//改变控件状态
//showMessagePLCInvoke(e);
//更新状态窗口控件状态
//ExcutePlcChange(e);
}
/// <summary>
/// 发送信号变化到function
/// </summary>
/// <param name="msgEvent"></param>
private void TagData_MisData_TagDataOnChangeCustomeEvetnArgs(object msgEvent)
{
try
{
var e = (DeviceDriver_BasicData.CustomeEvetnArgs)msgEvent;
var OpName = e.OpName.ToString();//工位号
var MesCode = e.TagType.ToString();//变量类型代码
var tagValue = e.TagValue;//变量0或者1
var TagTypeCodeID = e.TagTypeCodeID.ToString();//变量类型代码
var TagID = e.TagID.ToString();
var cmd = MIS_BASE.hashtable_TagTypeTagName[MesCode];
var mesServerdllName = GetMesServeDllByOpName(OpName);
var fun = "fun_" + cmd;
var mesServerCode = GetMesServerCodeByOpName(OpName);
var rvMsg = JsonConvert.SerializeObject(e);
if (cmd == null)
{
cmd = MesCode;
}
var msg = $"PLC|{cmd}|{OpName}|{rvMsg}";
try
{
if (TagTypeCodeID == "14")
{
MIS_BASE.Write_TagValueByTagTypeID(15, OpName, tagValue);
return;
}
if (TagTypeCodeID == "103")
{
FuntionMesRead.Send_AlarmMsg(TagID, Convert.ToInt32(tagValue).ToString());
}
}
catch (Exception err)
{
return;
}
MisDataFunDll.MisDataFun.TransferInfToMES(msg);
// asyncSendMessagePLC(mesServerdllName, msg, OpName);
}
catch (Exception err)
{
ApplicationLog.WriteLog(err, "TagData_Lable_TagDataOnChange");
}
}
/// <summary>
/// 根据工位号获取MesServerCode
/// </summary>
/// <param name="OpName"></param>
/// <returns></returns>
private static int GetMesServerCodeByOpName(string OpName)
{
try
{
if (MesServerWork.MIS_BASE.hashtable_MesServerCode.ContainsKey(OpName))
{
return Convert.ToInt32(MesServerWork.MIS_BASE.hashtable_MesServerCode[OpName]);
}
return 0;
}
catch
{
return 0;
}
}
/// <summary>
/// 根据工位号获取MesServerDll
/// </summary>
/// <param name="OpName"></param>
/// <returns></returns>
private static string GetMesServeDllByOpName(string OpName)
{
try
{
if (MesServerWork.MIS_BASE.hashtable_MesDll.ContainsKey(OpName))
{
return MesServerWork.MIS_BASE.hashtable_MesDll[OpName].ToString();
}
return "";
}
catch (Exception err)
{
ApplicationLog.WriteLog(err, "GetMesServeDllByOpName");
return "";
}
}
/// <summary>
/// 数据库记录信号变化
/// </summary>
/// <param name="msg"></param>
private void TagTypeCodeID_TagDataOnChange(object msgEvent)
{
if (IsRecordTagStatus != "1") return;
try
{
DeviceDriver_BasicData.CustomeEvetnArgs e = (DeviceDriver_BasicData.CustomeEvetnArgs)msgEvent;
string tagValue;
if (e.TagValue == null) return;
switch (e.TagValue.ToString().ToLower())
{
case "1":
case "true":
tagValue = "1";
break;
default:
tagValue = "0";
break;
}
string TagTypeCodeID;
string opName;
string TagID;
string TagValue;
DateTime arrivedTime;
DateTime leavedTime;
int TimeDiff;
opName = e.OpName.ToString();
TagValue = tagValue;
TagTypeCodeID = e.TagTypeCodeID.ToString();
TagID = e.TagID.ToString();
leavedTime = Convert.ToDateTime(e.TimeStamp);
arrivedTime = Convert.ToDateTime(e.TimeStampBefore);
TimeDiff = Convert.ToInt32(e.TagKeepTime);
if (TagTypeCodeID != "14" && TagTypeCodeID != "15")
{
TagTypeCodeID_Insert(opName, TagTypeCodeID, TagID, TagValue, arrivedTime, leavedTime, TimeDiff);
}
if (TagTypeCodeID == "1002")
{
DeviceStatusSave(opName, TagTypeCodeID,TagValue);
}
}
catch (Exception err)
{
ApplicationLog.WriteLog(err, "TagTypeCodeID_TagDataOnChange");
}
}
/// <summary>
/// 向MES通讯服务器发送消息
/// </summary>
/// <param name="msg"></param>
private void TransferInfToWebServer(object msg1)
{
int tagType;
string opName;
DeviceDriver_BasicData.CustomeEvetnArgs msgEvent = (DeviceDriver_BasicData.CustomeEvetnArgs)msg1;
//e值不能为空
if (msgEvent.TagValue == null) return;
tagType = Convert.ToInt32(msgEvent.TagType);
opName = msgEvent.OpName.ToString();
if (!MesServerWork.MIS_BASE.m_WorkStart_OpName.ContainsKey(opName)) return; //当前系统是否存在该工位
string cmd;
string tagValue;
string msgSvr;
try
{
switch (Convert.ToInt32(msgEvent.TagValueType))
{
case 11:
tagValue = (Convert.ToInt32(msgEvent.TagValue)).ToString();
break;
default:
tagValue = msgEvent.TagValue.ToString();
break;
}
cmd = MIS_BASE.hashtable_TagTypeTagName[tagType.ToString()];
if (Convert.ToInt32(MIS_BASE.hashtable_WebTagTypeChange[cmd]) == 0 && MIS_BASE.hashtable_WebTagTypeChange[cmd] != null) return;
if (cmd != "" && cmd != null)
{
msgSvr = "MES|" + cmd + "|" + opName + "|" + tagValue;
}
else
{
return;
}
//MES web界面显示用
MIS_SendMessage.asyncSendMessageQos0(msgSvr);
}
catch (Exception err)
{
ApplicationLog.WriteLog(err, "TransferInfToWebServer");
}
}
private void button_ReadData_Click(object sender, EventArgs e)
{
}
private void ToolStripMenuItem_PlcDebug_Click(object sender, EventArgs e)
{
if (opcForm != null)
{
opcForm.Close();
opcForm.Dispose();
opcForm = null;
}
opcForm = new MesWork.OpcForm(IsDemoMesServer);
opcForm.Show();
}
/// <summary>
/// 关于迈思按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("http://www.meswork.com");
}
/// <summary>
/// 版本信息按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
VersionsInformation VersionForm = new VersionsInformation();
VersionForm.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{
FuntionMesRead.GetAlarmInit();
MyLog4Net.MyLogHelper.Info($"报警更新:", "报警信息更新完成!");
//SendMessageFun.AsyncSendMessage_Materials_BarCode_Box("OP250", 1, "这是物料码", "这是批次码", "请继续进行物料验证!");
}
private void WritePLCBoolData_Click(int TagTypeCodeId)
{
string OpName = WorkStationNum_Now;
string tagValue = MIS_BASE.Read_TagValueByTagTypeID(TagTypeCodeId, OpName).ToString();
bool tagValueBool = false;
if (tagValue.ToLower() == "true" || tagValue == "1")
{
tagValueBool = false;
}
else
{
tagValueBool = true;
}
MIS_BASE.Write_TagValueByTagTypeID(TagTypeCodeId, OpName, tagValueBool);
}
private void WorkStartPLC_Click(object sender, EventArgs e)
{
WritePLCBoolData_Click(2);
}
private void PartLoadPLC_Click(object sender, EventArgs e)
{
WritePLCBoolData_Click(43);
}
private void EngineGetOverMES_Click(object sender, EventArgs e)
{
WritePLCBoolData_Click(5);
}
private void EngineGetOverPLC_Click(object sender, EventArgs e)
{
WritePLCBoolData_Click(44);
}
private void allowWorkMES_Click(object sender, EventArgs e)
{
WritePLCBoolData_Click(66);
}
private void allowSavePLC_Click(object sender, EventArgs e)
{
WritePLCBoolData_Click(19);
}
private void saveOverMES_Click(object sender, EventArgs e)
{
WritePLCBoolData_Click(20);
}
private void workOverMES_Click(object sender, EventArgs e)
{
WritePLCBoolData_Click(7);
}
private void toolPoweredPLC_Click(object sender, EventArgs e)
{
WritePLCBoolData_Click(1000);
}
private void toolStartPLC_Click(object sender, EventArgs e)
{
WritePLCBoolData_Click(1001);
}
private void toolErrorPLC_Click(object sender, EventArgs e)
{
WritePLCBoolData_Click(1002);
}
private void button1_Click(object sender, EventArgs e)
{
MIS_BASE.Write_TagValueByTagTypeID(200, WorkStationNum_Now, "001MBE0700000QF3D0000001");
MIS_BASE.Write_TagValueByTagTypeID(201, WorkStationNum_Now, "001MBE0700000QF3D0000002");
MIS_BASE.Write_TagValueByTagTypeID(202, WorkStationNum_Now, "001MBE0700000QF3D0000003");
MIS_BASE.Write_TagValueByTagTypeID(203, WorkStationNum_Now, "001MBE0700000QF3D0000004");
MIS_BASE.Write_TagValueByTagTypeID(204, WorkStationNum_Now, "001MBE0700000QF3D0000005");
MIS_BASE.Write_TagValueByTagTypeID(205, WorkStationNum_Now, "001MBE0700000QF3D0000006");
MIS_BASE.Write_TagValueByTagTypeID(206, WorkStationNum_Now, "001MBE0700000QF3D0000007");
MIS_BASE.Write_TagValueByTagTypeID(207, WorkStationNum_Now, "001MBE0700000QF3D0000008");
}
private void button3_Click(object sender, EventArgs e)
{
try
{
var bodydata = File.ReadAllText("电芯段测试数据.json");
var mrh = JsonConvert.DeserializeObject<msgResHeader>(Post(OnlineCheckDataUrl, bodydata));
if (mrh.Code == "200")
{
MyLog4Net.MyLogHelper.Error("EngineTypeGetOver", "请求发送成功!详细信息查看日志");
}
else
{
MyLog4Net.MyLogHelper.Error("EngineTypeGetOver", "【接收上传质量数据接口】失败");
}
}
catch (Exception err)
{
MyLog4Net.MyLogHelper.Error("EngineTypeGetOver", err.Message);
}
try
{
var bodydata = File.ReadAllText("其他段测试数据.json");
var mrh = JsonConvert.DeserializeObject<msgResHeader>(Post(OnlineCheckDataUrl, bodydata));
if (mrh.Code == "200")
{
MyLog4Net.MyLogHelper.Error("EngineTypeGetOver", "请求发送成功!详细信息查看日志");
}
else
{
MyLog4Net.MyLogHelper.Error("EngineTypeGetOver", "【接收上传质量数据接口】失败");
}
}
catch (Exception err)
{
MyLog4Net.MyLogHelper.Error("EngineTypeGetOver", err.Message);
}
}
public static string Post(string url, string content)
{
string result = "";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/json";
req.Timeout = 30000;
#region Post
byte[] data = Encoding.UTF8.GetBytes(content);
req.ContentLength = data.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
#endregion
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
//获取响应内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
return result;
}
private void button17_Click(object sender, EventArgs e)
{
MIS_BASE.Read_EngineID_MES(WorkStationNum_Now, out string EngineID_MES);
MIS_BASE.Read_EngineTypeID_MES(WorkStationNum_Now, out int EngineTypeID_MES);
MIS_BASE.Write_TagValueByTagTypeID(10, WorkStationNum_Now, EngineID_MES);
MIS_BASE.Write_TagValueByTagTypeID(9, WorkStationNum_Now, EngineTypeID_MES);
MIS_BASE.Write_TagValueByTagTypeID(80, WorkStationNum_Now, 12);
}
private void button18_Click(object sender, EventArgs e)
{
string EngineID = textBox1_EngineID.Text;
string EngineTypeID = textBox2_EngineTypeID.Text;
string palletCode = textBox3_palletCode.Text;
MIS_BASE.Write_TagValueByTagTypeID(10, WorkStationNum_Now, EngineID);
MIS_BASE.Write_TagValueByTagTypeID(9, WorkStationNum_Now, EngineTypeID);
MIS_BASE.Write_TagValueByTagTypeID(80, WorkStationNum_Now, palletCode);
}
private void button19_Click(object sender, EventArgs e)
{
WritePLCBoolData_Click(59);
}
/// <summary>
/// 界面上的开启时间
/// </summary>
void Runtime_Thread()
{
try
{
DateTime Now = DateTime.Now;
TimeSpan x = Now.Subtract(StartTime);
toolStripStatusLabel_RunTime.Text = x.Days.ToString() + "天" + x.Hours.ToString("00") + "小时" + x.Minutes.ToString("00") + "分" + x.Seconds.ToString("00") + "秒";
}
catch (Exception err)
{
ApplicationLog.WriteLog(err, err.Message);
}
}
private void cb_F5_CheckedChanged(object sender, EventArgs e)
{
var interval = Convert.ToInt32(txt_Interval.Text);
if (IsLoopReadShow = cb_F5.Checked)
{
var t = new Thread(new ParameterizedThreadStart(LoopReadShowTask));
t.IsBackground = true;
t.Start(interval);
}
}
private void toolStripStatusLabel_RunTime_Click(object sender, EventArgs e)
{
}
public void LoopReadShowTask(object _interval)
{
var interval = (int)_interval;
while (true)
{
try
{
if (IsLoopReadShow == false)
{
return;
}
ShowSignal(txt_PLC_9, WorkStationNum_Now);
ShowSignal(txt_PLC_10, WorkStationNum_Now);
ShowSignal(txt_PLC_11, WorkStationNum_Now);
ShowSignal(txt_PLC_39, WorkStationNum_Now);
ShowSignal(btn_PLC_2, WorkStationNum_Now);
ShowSignal(btn_PLC_43, WorkStationNum_Now);
ShowSignal(btn_MES_5, WorkStationNum_Now);
ShowSignal(btn_PLC_44, WorkStationNum_Now);
ShowSignal(btn_MES_66, WorkStationNum_Now);
ShowSignal(btn_PLC_19, WorkStationNum_Now);
ShowSignal(btn_MES_20, WorkStationNum_Now);
ShowSignal(btn_MES_7, WorkStationNum_Now);
ShowSignal(btn_PLC_1000, WorkStationNum_Now);
ShowSignal(btn_PLC_1001, WorkStationNum_Now);
ShowSignal(btn_PLC_1002, WorkStationNum_Now);
ShowSignal(btn_PLC_59, WorkStationNum_Now);
}
catch (Exception err)
{
}
Thread.Sleep(interval);
}
}
public void ShowSignal(Control c,string opName)
{
var tagTypeCodeID = Convert.ToInt32(c.Name.Split('_')[2]);
if (c is TextBox)
{
try
{
c.Text = PlcLinkForm.ReadPLC(tagTypeCodeID, opName).ToString();
}
catch (Exception err)
{
c.Text = "不存在该信号!";
}
}
if (c is Button)
{
try
{
c.BackColor = PlcLinkForm.ReadPLC(tagTypeCodeID, opName).ToString().ToLower()
.Replace("true", "1").Replace("false", "0") == "1"
? color_Green : color_Bad;
}
catch (Exception err)
{
c.BackColor = color_Red;
}
}
}
private void panel_Signal_Conf_MouseDoubleClick(object sender, MouseEventArgs e)
{
new MES_CONF().ShowDialog();
}
private void button20_Click(object sender, EventArgs e)
{
PrinterCommandCenter.PrintToPrinter("OP150", textBox1_EngineID.Text);
}
private void dgv_OpName_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex > -1)
{
if (AllowLoad)
{
WorkStationNum_Now = dgv_OpName.CurrentRow.Cells["OpCode"].Value.ToString();
}
}
}
private void button19_Click_1(object sender, EventArgs e)
{
Get_SpecialOpList();
}
private void button21_Click(object sender, EventArgs e)
{
PrinterCommandCenter.PrintToPrinter("OP490-1", textBox1_EngineID.Text);
}
}
}