init: CATL电池线SCADA首次入库

This commit is contained in:
XingCheng3
2026-06-08 17:12:01 +08:00
commit fe8a3187f5
119 changed files with 42649 additions and 0 deletions

12
.gitignore vendored Normal file
View File

@@ -0,0 +1,12 @@
.vs/
packages/
bin/
obj/
*.user
*.suo
*.cache
*.log
*.zip
*.rar
*.7z
_system~.ini

Binary file not shown.

BIN
DLL/BasicData.dll Normal file

Binary file not shown.

BIN
DLL/BouncyCastle.Crypto.dll Normal file

Binary file not shown.

BIN
DLL/BsRmlib.EDM.dll Normal file

Binary file not shown.

BIN
DLL/BsRmlib32.dll Normal file

Binary file not shown.

BIN
DLL/BsRmlib64.dll Normal file

Binary file not shown.

BIN
DLL/ConLink.dll Normal file

Binary file not shown.

BIN
DLL/ConLink19.dll Normal file

Binary file not shown.

BIN
DLL/DataLinkMesWork.dll Normal file

Binary file not shown.

BIN
DLL/EnBaseM.dll Normal file

Binary file not shown.

BIN
DLL/Fwlib32.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
DLL/MQTTnet.dll Normal file

Binary file not shown.

BIN
DLL/MW_Log.dll Normal file

Binary file not shown.

Binary file not shown.

BIN
DLL/MesWork.MQTT.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
DLL/MySql.Data.dll Normal file

Binary file not shown.

17803
DLL/MySql.Data.xml Normal file

File diff suppressed because it is too large Load Diff

BIN
DLL/NPOI.OOXML.dll Normal file

Binary file not shown.

BIN
DLL/NPOI.OpenXml4Net.dll Normal file

Binary file not shown.

BIN
DLL/NPOI.OpenXmlFormats.dll Normal file

Binary file not shown.

BIN
DLL/NPOI.dll Normal file

Binary file not shown.

Binary file not shown.

BIN
DLL/Newtonsoft.Json.dll Normal file

Binary file not shown.

BIN
DLL/Opc.Ua.Client.dll Normal file

Binary file not shown.

Binary file not shown.

BIN
DLL/Opc.Ua.Core.dll Normal file

Binary file not shown.

BIN
DLL/OpcUaHelper.dll Normal file

Binary file not shown.

BIN
DLL/Rhino3dm.dll Normal file

Binary file not shown.

BIN
DLL/Robot.Common.dll Normal file

Binary file not shown.

BIN
DLL/Robot.MessageBus.dll Normal file

Binary file not shown.

BIN
DLL/RobotMapper.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
DLL/Robots.dll Normal file

Binary file not shown.

BIN
DLL/S7.Net.dll Normal file

Binary file not shown.

Binary file not shown.

BIN
DLL/Serilog.dll Normal file

Binary file not shown.

BIN
DLL/SqlCmd.dll Normal file

Binary file not shown.

Binary file not shown.

BIN
DLL/System.Net.Http.dll Normal file

Binary file not shown.

BIN
DLL/System.Web.Cors.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
DLL/System.Web.Http.dll Normal file

Binary file not shown.

BIN
DLL/Ubiety.Dns.Core.dll Normal file

Binary file not shown.

Binary file not shown.

BIN
DLL/Zstandard.Net.dll Normal file

Binary file not shown.

BIN
DLL/fwlibe1.dll Normal file

Binary file not shown.

BIN
DLL/log4net.dll Normal file

Binary file not shown.

BIN
DLL/netstandard.dll Normal file

Binary file not shown.

41
DT_SCADA/App.config Normal file
View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!--是启用写监控报错日志-->
<add key="IsWriteMonitorLog" value="0"/>
<add key="IsDemoMesServer" value="1"/>
<add key="BasicDataTableFile" value="SignalTable.xlsx"/>
<!--通讯服务方式 1:Socket 2:MQTT -->
<add key="ConnectType" value="2"/>
<add key="IpPortSub" value="127.0.0.1:1883,MesWork"/>
<add key="MesServer_SendProtocol_Tag" value="TOBS??SCADAMain/47FAA6D0-745C-455C-AD54-4D5C52860070?DT|C_B_TagIDTrigger|"/>
<add key="MesServer_SendProtocol_Joint" value="TOBS??SCADAMain/47FAA6D0-745C-455C-AD54-4D5C52860070?DT|C_B_JointMoveTo|"/>
<add key="MesServer_SendProtocol_Info_Fast" value="TOBS??SCADAMain/DT_DeviceInfo?DT|C_B_DeviceInfo_Fast|"/>
<add key="MesServer_SendProtocol_Info_Slow" value="TOBS??SCADAMain/DT_DeviceInfo?DT|C_B_DeviceInfo_Slow|"/>
<add key="MesServer_SendProtocol_DeviceInfo" value="TOBS??SCADAMain/47FAA6D0-745C-455C-AD54-4D5C52860070?MES|C_B_DeviceInfo|"/>
<add key="MesServer_SendProtocol_Plc" value="WEB/InstantMessaging/CATL/MisServer/"/>
<add key="OpName" value="CG060"/>
<!--充电数据同步时间-->
<add key="SyncTime" value="600000"/>
<add key="TokenSyncTime" value="300000"/>
<add key="Url_WebApi_Char" value="http://127.0.0.1:9984"/>
<add key="AK" value="SH-00056_00001"/>
<add key="SK" value="a5f9383b728fb51e627b536f1a3e9476"/>
<add key="salt" value="catl"/>
<!--WebAPi-->
<add key="WebSvrUrlPort" value="http://0.0.0.0:9984" />
<!--数据库-->
<!--<add key="ConnectionString" value="server=192.168.10.3;database=AMES_CATL_LFP;uid=sa;pwd=126.com;Connection Reset=FALSE;Max Pool Size = 1000" />-->
<add key="ConnectionString" value="server=192.168.10.3;database=AMES_CATL_LFP;uid=sa;pwd=126.com;Connection Reset=FALSE;Max Pool Size = 1000" />
<!--打标机-->
<add key="MarkingMachine_Ip" value="192.168.10.39"/>
<add key="MarkingMachine_Port" value="3500"/>
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
</configuration>

View File

@@ -0,0 +1,562 @@
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
{
/// <summary>
///
/// </summary>
public static int IsWriteMonitorLog = Convert.ToInt32(AppSettings["IsWriteMonitorLog"]);
public static int IsDemoMesServer = Convert.ToInt32(AppSettings["IsDemoMesServer"]);
public static string BasicDataTableFile = AppSettings["BasicDataTableFile"];
/// <summary>
///
/// </summary>
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;
/// <summary>
///
/// </summary>
public static Dictionary<string,object> dc_Robot = new Dictionary<string, object>();
/// <summary>
///
/// </summary>
public static Dictionary<string, B_Read_N_Axis> dc_Name_Axis = new Dictionary<string, B_Read_N_Axis>();
public static Dictionary<string, B_Read_N_AxisCard> dc_Name_Axis_Card = new Dictionary<string, B_Read_N_AxisCard>();
/// <summary>
///
/// </summary>
public static AgvRead agvRead = null;
/// <summary>
///
/// </summary>
public static ScadaConfig scadaConfig = null;
/// <summary>
///
/// </summary>
public static ConcurrentQueue<ParamT> taskSql = new ConcurrentQueue<ParamT>();
/// <summary>
///
/// </summary>
public static string StationName = "DDV_SXYJ";
/// <summary>
///
/// </summary>
public static bool OnLine_PLC_1 = false;
public static bool OnLine_PLC_2 = false;
/// <summary>
///
/// </summary>
public static bool OnLine_SQL = false;
/// <summary>
/// 监控数据的所有变化,从这里产生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public override void OPCTagData_TagDataOnChangeMIS(object sender, CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(MIS_Funtion, e);
}
/// <summary>
/// 定时触发检测PLC在线状态周期3 s
/// </summary>
/// <param name="sender"></param>
/// <param name="eState"></param>
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;
}
}
/// <summary>
///
/// </summary>
/// <param name="t"></param>
/// <param name="location"></param>
/// <param name="content"></param>
public override void E_WriteLog(Enum_LogType t, string location, string content)
{
WriteLog(content);
}
/// <summary>
///
/// </summary>
[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());
}
/// <summary>
/// 读写取方法
/// </summary>
/// <param name="readWhat"></param>
/// <param name="opOrIp"></param>
private void DemoRead(string doWhat, string opOrIp)
{
try
{
string opName = "OP1010";
object tagValue = 1;
bool result = false;
ConcurrentDictionary<string, object> 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<string, object> 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];
}
/// <summary>
///
/// </summary>
/// <param name="args"></param>
/// <returns></returns>
private string Hello_You_All_Never_Know(string[] args)
{
return Guid.NewGuid().ToString()+ Guid.NewGuid().ToString();
}
/// <summary>
///
/// </summary>
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<string, object> 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<string, object> 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);
}
}
}

View File

@@ -0,0 +1,277 @@
using System;
using System.Data;
using System.Data.SqlClient;
namespace MesWork
{
/// <summary>
///
/// </summary>
public class B_DB_Opera
{
public static void Event_WorkStart(string opName, int tagTypeCodeID, string partType, string tagID)
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = "Event_WorkStart",
sqlParameter = new SqlParameter[] {
new SqlParameter("@OpName", opName),
new SqlParameter("@TagTypeCodeID", tagTypeCodeID),
new SqlParameter("@PartType", partType),
new SqlParameter("@ChangeTime",ChangeTime),
new SqlParameter("@TagID", tagID)
}
});
}
public static void Event_WorkEnd(string opName, int tagTypeCodeID, string partType
, string barCode, int qualityMask, int outCount, int duration
, string tagID)
{
/*
@OpName nvarchar(50) = null,
@TagTypeCodeID int = 0,
@PartType int = 0,
@BarCode nvarchar(2048) = null,
@QualityMask int = 0,
@OutCount int = 0,
@Duration int = 0,
@ChangeTime datetime = null,
@TagID nvarchar(200) = null
*/
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = "Event_WorkEnd",
sqlParameter = new SqlParameter[] {
new SqlParameter("@OpName", opName),
new SqlParameter("@TagTypeCodeID", tagTypeCodeID),
new SqlParameter("@PartType", partType),
new SqlParameter("@BarCode", barCode),
new SqlParameter("@QualityMask", qualityMask),
new SqlParameter("@OutCount", outCount),
new SqlParameter("@Duration", duration),
new SqlParameter("@ChangeTime",ChangeTime),
new SqlParameter("@TagID", tagID)
}
});
}
public static void Event_Signal_Log(string opName, int tagTypeCodeID, string value, string tagID)
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = "Event_Signal_Log",
sqlParameter = new SqlParameter[] {
new SqlParameter("@OpName", opName),
new SqlParameter("@TagTypeCodeID", tagTypeCodeID),
new SqlParameter("@Value", value),
new SqlParameter("@ChangeTime",ChangeTime),
new SqlParameter("@TagID", tagID)
}
});
}
public static void Event_Alarm_Start(string opName, int tagTypeCodeID, string alarmText, string tagID)
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = "Event_Alarm_Start",
sqlParameter = new SqlParameter[] {
new SqlParameter("@OpName", opName),
new SqlParameter("@TagTypeCodeID", tagTypeCodeID),
new SqlParameter("@AlarmText", alarmText),
new SqlParameter("@ChangeTime",ChangeTime),
new SqlParameter("@TagID", tagID)
}
});
}
public static void Event_Alarm_End(string opName, int tagTypeCodeID, string alarmText, string tagID)
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = "Event_Alarm_End",
sqlParameter = new SqlParameter[] {
new SqlParameter("@OpName", opName),
new SqlParameter("@TagTypeCodeID", tagTypeCodeID),
new SqlParameter("@AlarmText", alarmText),
new SqlParameter("@ChangeTime",ChangeTime),
new SqlParameter("@TagID", tagID)
}
});
}
public static void Event_AlarmAndTip_Start(string opName, int tagTypeCodeID, string alarmText, string tagID,int Alarm1_Tip2)
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = "Event_AlarmAndTip_Start",
sqlParameter = new SqlParameter[] {
new SqlParameter("@OpName", opName),
new SqlParameter("@TagTypeCodeID", tagTypeCodeID),
new SqlParameter("@AlarmText", alarmText),
new SqlParameter("@ChangeTime",ChangeTime),
new SqlParameter("@TagID", tagID),
new SqlParameter("@Alarm1_Tip2", Alarm1_Tip2),
}
});
}
public static void MES_StatusChange(string opName, int StatusCode, string TriggerTime)
{
SqlParameter[] thisParms = new SqlParameter[3];
thisParms[0] = new SqlParameter("@opName", opName);
thisParms[1] = new SqlParameter("@StatusCode", StatusCode);
thisParms[2] = new SqlParameter("@TriggerTime", TriggerTime);
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = "设备管理_状态变化新增",
sqlParameter = thisParms
});
}
public static void ClearLog()
{
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = "Event_Delete_Station_记录_日志_运行日志",
sqlParameter = new SqlParameter[] {
new SqlParameter("@工位号", "DDV")
}
});
}
public static void Exec_DispatchSql()
{
MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
{
procedureName = "Event_Delete_部分历史数据",
sqlParameter = new SqlParameter[] {
}
});
}
public static void SelectData_WritePLC()
{
var procedureName = "TV_PLC写入_查询";
var sqlParameter = new SqlParameter[] { };
DataLinkMesWork.SQLCommon.ExecuteStoredProcedure(procedureName, MesWorkForm.ConnectionString, ref sqlParameter,out DataTable dt, out string errorMessage);
if (dt.Rows.Count > 0)
{
//select isnull(@前悬基准时间,0) as 前悬基准时间,isnull(@后悬基准时间,0) as 后悬基准时间,
//isnull(@前悬应到人数, 0) as 前悬应到人数,isnull(@后悬应到人数, 0) as 后悬应到人数
var _79 = dt.Rows[0]["前悬基准时间"].ToString();
var _77 = dt.Rows[0]["前悬应到人数"].ToString();
var _83 = dt.Rows[0]["前悬抽检频率"].ToString();
var _80 = dt.Rows[0]["后悬基准时间"].ToString();
var _78 = dt.Rows[0]["后悬应到人数"].ToString();
var _84 = dt.Rows[0]["后悬抽检频率"].ToString();
var opName_QX = "OP1010";
MesWorkForm.WritePLC(79, opName_QX, _79);
MesWorkForm.WritePLC(77, opName_QX, _77);
MesWorkForm.WritePLC(83, opName_QX, _83);
var opName_HX = "OP1020";
MesWorkForm.WritePLC(80, opName_HX, _80);
MesWorkForm.WritePLC(78, opName_HX, _78);
MesWorkForm.WritePLC(84, opName_HX, _84);
}
}
public static bool BaseData_tagTable_QualityData_B5A_IndexInsert(string EngineID, string tagID, string EngineType, int EngineTypeID, string opName, int isGoodBad, string PartPalletCode, out int Id_tagCF)
{
string procedureName;
procedureName = "CATL_测量数据合格索引_增加_加注设备";
Id_tagCF = 0;
SqlParameter[] thisParms = new SqlParameter[4];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@TagID_CF", tagID);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
thisParms[2] = new System.Data.SqlClient.SqlParameter("@EngineID", EngineID);
thisParms[3] = new System.Data.SqlClient.SqlParameter("@Id_tagCF", Id_tagCF);
thisParms[3].Direction = ParameterDirection.Output;
if (DataLinkMesWork.SQLCommon.ExecuteStoredProcedure(procedureName, MesWorkForm.ConnectionString, ref thisParms, out string errorMessage))
{
Id_tagCF = Convert.ToInt32(thisParms[3].Value.ToString());
return true;
}
return false;
}
public static bool BaseData_tagTable_QualityData_B5A_Insert(string EngineID, int Id_tagCF, string opName, DataTable dt, bool IsCheck = false)
{
string procedureName;
procedureName = "CATL_测量数据合格_增加_加注设备";
SqlParameter[] thisParms = new SqlParameter[7];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@Id_tagCF", Id_tagCF);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@TagID", SqlDbType.NVarChar, 100, "TagID");
thisParms[2] = new System.Data.SqlClient.SqlParameter("@TagValue", SqlDbType.NVarChar, 100, "TagValue");
thisParms[3] = new System.Data.SqlClient.SqlParameter("@IsGoodBad", SqlDbType.Int, 4, "IsGoodBad");
thisParms[4] = new System.Data.SqlClient.SqlParameter("@EngineID", EngineID);
thisParms[5] = new System.Data.SqlClient.SqlParameter("@上限值", SqlDbType.NVarChar, 100, "上限值");
thisParms[6] = new System.Data.SqlClient.SqlParameter("@下限值", SqlDbType.NVarChar, 100, "下限值");
return DataLinkMesWork.SQLCommon.ExecuteStoredProcedure(procedureName, MesWorkForm.ConnectionString, ref thisParms, dt, out string errorMessage);
}
public static bool BaseData_tagTable_CharData_Insert(string vin, string testCode, string testStatus, string testBeginTime, string testEndTime, string faultInfo, string syncTime, out string errorMessage)
{
string procedureName;
procedureName = "CATL_充电数据_增加";
SqlParameter[] thisParms = new SqlParameter[7];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@vin", vin);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@testCode", testCode);
thisParms[2] = new System.Data.SqlClient.SqlParameter("@testStatus", testStatus);
thisParms[3] = new System.Data.SqlClient.SqlParameter("@testBeginTime", testBeginTime);
thisParms[4] = new System.Data.SqlClient.SqlParameter("@testEndTime", testEndTime);
thisParms[5] = new System.Data.SqlClient.SqlParameter("@faultInfo", faultInfo);
thisParms[6] = new System.Data.SqlClient.SqlParameter("@同步时间", syncTime);
return DataLinkMesWork.SQLCommon.ExecuteStoredProcedure(procedureName, MesWorkForm.ConnectionString, ref thisParms, out errorMessage);
}
public static bool GetQualityDataCount(string EngineID, string opName, out DataTable dt)
{
dt = new DataTable();
string procedureName;
procedureName = "CATL_测量数据合格_查询测试次数";
SqlParameter[] thisParms = new SqlParameter[2];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@EngineID", EngineID);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
return DataLinkMesWork.SQLCommon.ExecuteStoredProcedure(procedureName, MesWorkForm.ConnectionString, ref thisParms, out dt, out string errorMessage);
}
}
}

View File

@@ -0,0 +1,65 @@
//using OpcBasic;
//using Robot.Common;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading;
//using System.Threading.Tasks;
//namespace MesWork
//{
// public partial class Temp { }
// public partial class MesWorkForm
// {
// private void Loop_Fast_Task()
// {
// new Thread(new ThreadStart(Loop_Fast_Exec)) { IsBackground = true }.Start();
// }
// private void Loop_Fast_Exec()
// {
// while (true)
// {
// try
// {
// var tagValue = Read_Fast();
// S_C_B_Info_Slow(tagValue);
// }
// catch (Exception err)
// {
// }
// Thread.Sleep(2000);
// }
// }
// private Param_Slow Read_Fast()
// {
// var param_Slow = new Param_Slow();
// param_Slow.produce_task_no = ReadPLC(10, "OP1000").ToString();
// param_Slow.agv_from_loc = agvRead.from_loc;
// param_Slow.agv_to_loc = agvRead.to_loc;
// var lib = new List<Param_Lib>();
// var jointArray = MesWorkForm.ReadPLC_GroupData("OP1000_L");
// foreach (KeyValuePair<string, object> item in jointArray)
// {
// var TF = (TagFormat)item.Value;
// var index = Convert.ToInt32(TF.ShaftID).ToString();
// var value = TF.TagValue.ToString();
// lib.Add(new Param_Lib { lib_loc_no = index, lib_content = value });
// }
// return param_Slow;
// }
// }
//}

View File

@@ -0,0 +1,122 @@
using OpcBasic;
using Robot.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace MesWork
{
public partial class Temp { }
public partial class MesWorkForm
{
private void Loop_Slow_Task()
{
new Thread(new ThreadStart(Loop_Slow_Exec)) { IsBackground = true}.Start();
}
private void Loop_Slow_Exec()
{
while (true)
{
try
{
var tagValue = Read();
S_C_B_Info_Slow(tagValue);
}
catch (Exception err)
{
}
Thread.Sleep(2000);
}
}
private Param_Slow Read()
{
var param_Slow = new Param_Slow();
param_Slow.produce_task_no = ReadPLC(10, "OP1000").ToString();
param_Slow.agv_from_loc = agvRead.from_loc;
param_Slow.agv_to_loc = agvRead.to_loc;
var lib = new List<Param_Lib>();
var jointArray = MesWorkForm.ReadPLC_GroupData("OP1000_L");
foreach (KeyValuePair<string, object> item in jointArray)
{
var TF = (TagFormat)item.Value;
var index = Convert.ToInt32(TF.ShaftID).ToString();
var value = TF.TagValue.ToString().ToLower () == "true"?"1":"0";
lib.Add(new Param_Lib { lib_loc_no = index , lib_content = value });
}
param_Slow.lib = lib.OrderBy(o=>Convert.ToInt32(o.lib_loc_no)).ToList();
return param_Slow;
}
}
}
public class Param_Slow
{
/// <summary>
///
/// </summary>
public string produce_task_no
{
get;
set;
}
/// <summary>
///
/// </summary>
public string agv_from_loc
{
get;
set;
}
/// <summary>
///
/// </summary>
public string agv_to_loc
{
get;
set;
}
/// <summary>
///
/// </summary>
public List<Param_Lib> lib
{
get;
set;
}
}
public class Param_Lib
{
public string lib_loc_no
{
get;
set;
}
public string lib_content
{
get;
set;
}
}

View File

@@ -0,0 +1,219 @@
using ABB.Robotics.Controllers.IOSystemDomain;
using BasicData;
using DeviceDriver_BasicData;
using Newtonsoft.Json;
using OpcBasic;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Web;
/// <summary>
///
/// </summary>
namespace MesWork
{
/// <summary>
///
/// </summary>
public partial class MesWorkForm
{
/// <summary>
/// 处理MIS逻辑
/// </summary>
/// <param name="e"></param>
private void MIS_Funtion(object e)
{
try
{
var msgEvent = (CustomeEvetnArgs)e;
if (msgEvent.TagValue == null) return;
var tagID = msgEvent.TagID.ToString();
var opName = msgEvent.OpName.ToString();
var tagTypeCodeID = (int)msgEvent.TagTypeCodeID;
var tagTypeID = (EnumTagTypeID)msgEvent.TagTypeID;
var TagTypeCodeID = (EnumTagTypeCodeID)tagTypeCodeID;
var alarmMsg = msgEvent.TagName.ToString();
var tagValue = "";
switch (tagTypeID)
{
case EnumTagTypeID.BOOL:
tagValue = (Convert.ToInt32(msgEvent.TagValue)).ToString();
break;
default:
tagValue = msgEvent.TagValue.ToString();
break;
}
switch (tagTypeCodeID)
{
case 14:
MesWorkForm.WritePLC(15, opName, tagValue);
break;
case 19:
if (tagValue == "1")
{
DataTable dt_WWW = BuildDataTables_WWW();
SaveQualityData(opName, tagValue, tagID, out dt_WWW);
string qty = JsonConvert.SerializeObject(dt_WWW);
string SendMessage = "MES|ShowTimelyQuality_Resources|" + opName + "|" + qty;
SendMsg(opName, MesServer_SendProtocol_Plc, SendMessage);
}
else
{
MesWorkForm.WritePLC(20, opName, "0");
}
break;
// 扫码完成,比对结果
case 65:
if (tagValue == "1")
{
GetQualityDataCount(opName);
}
else
{
MesWorkForm.WritePLC(66, opName, 0);
}
break;
default:
break;
}
}
catch (Exception err)
{ }
}
private static void SaveQualityData(string opName, string tagValue, string tagID, out DataTable dt_WWW, bool isCheck = false)
{
int id_tagCF;
int qualityMask = 0;
int engineTypeID = 0;
string engineID = "";
string engineType = "";
string partPallet = "";
string orderFormPlc = "";
DataTable BasicDataTagValueUpDown = new DataTable();
DataTable BasicDataTagValue = new DataTable();
dt_WWW = BuildDataTables_WWW();
Hashtable valueList;
try
{
// 加注结果
//dt_WWW.Rows.Add(GetQualityData(opName, 63, isOk).ItemArray);
string isOk = MesWorkForm.ReadPLC(63, opName).ToString();
engineID = MesWorkForm.ReadPLC(64, opName).ToString();
engineID = engineID.Replace(" ", "");
// 真空值
dt_WWW.Rows.Add(GetQualityData(opName, 60, isOk).ItemArray);
// 加注量
dt_WWW.Rows.Add(GetQualityData(opName, 61, isOk).ItemArray);
// 节拍时间
dt_WWW.Rows.Add(GetQualityData(opName, 62, isOk).ItemArray);
DateTime lastupdatetime = DateTime.Now;
//保存质量数
B_DB_Opera.BaseData_tagTable_QualityData_B5A_IndexInsert(engineID, tagID, engineType, engineTypeID, opName, qualityMask, partPallet, out id_tagCF);
B_DB_Opera.BaseData_tagTable_QualityData_B5A_Insert(engineID, id_tagCF, opName, dt_WWW, isCheck);
//回写保存完成数据
WritePLC(20, opName, true);
}
catch (Exception err)
{
WritePLC(20, opName, true);
}
}
static public DataTable BuildDataTables_WWW()
{
DataTable table;
DataColumnCollection columns;
table = new DataTable();
columns = table.Columns;
table.Columns.Add("TagID", typeof(System.String));
table.Columns.Add("TagValue", typeof(System.String));
table.Columns.Add("IsGoodBad", typeof(System.Int32));
table.Columns.Add("测量位置", typeof(System.String));
table.Columns.Add("测量项目", typeof(System.String));
table.Columns.Add("工位号", typeof(System.String));
table.Columns.Add("理论值", typeof(System.String));
table.Columns.Add("上限值", typeof(System.String));
table.Columns.Add("下限值", typeof(System.String));
table.Columns.Add("测量单位", typeof(System.String));
table.Columns.Add("列位置", typeof(System.Int32));
table.Columns.Add("变量排序", typeof(System.Int32));
return table;
}
public static DataRow GetQualityData(string opName, int tagTypeCode, string isOk)
{
string TagValueUp = "";
string TagValueDown = "";
DataRow dr = BuildDataTables_WWW().NewRow();
var qualityData = (TagFormat)MesWorkForm.ReadPLC_TF(tagTypeCode, opName);
if(tagTypeCode == 61)
{
TagValueUp = MesWorkForm.ReadPLC(67, opName).ToString();
TagValueDown = MesWorkForm.ReadPLC(68, opName).ToString();
}
if (tagTypeCode == 60)
{
TagValueUp = MesWorkForm.ReadPLC(69, opName).ToString();
}
dr["TagID"] = qualityData.TagID;
dr["测量位置"] = qualityData.ShaftID;
dr["测量项目"] = qualityData.ItemName;
dr["测量单位"] = qualityData.Unit;
dr["上限值"] = TagValueUp;
dr["下限值"] = TagValueDown;
dr["理论值"] = qualityData.TagValeNormal;
dr["工位号"] = opName;
dr["列位置"] = qualityData.TagOrderBy;
dr["变量排序"] = qualityData.TagItemOrderBy;
dr["IsGoodBad"] = isOk;
dr["TagValue"] = Convert.ToString(qualityData.TagValue);
return dr;
}
public static void GetQualityDataCount(string opName)
{
string engineID = "";
engineID = MesWorkForm.ReadPLC(64, opName).ToString();
if(engineID == null || engineID == "")
{
WritePLC(66, opName, 2);
return;
}
try
{
DataTable dt = null;
B_DB_Opera.GetQualityDataCount(engineID, opName, out dt);
if (dt != null && dt.Rows.Count > 0)
{
WritePLC(66, opName, 2);
}
else
{
WritePLC(66, opName, 1);
}
}
catch (Exception err)
{
WritePLC(66, opName, 2);
}
}
}
}

View File

@@ -0,0 +1,31 @@
using DeviceDriver_BasicData;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MesWork
{
public partial class Temp { }
public partial class MesWorkForm
{
/// <summary>
/// PLC状态展示
/// </summary>
/// <param name="obj"></param>
void ShowPlcStateList(object obj)
{
var eState = (PlcStateEvetnArgs)obj;
string ip = eState.IP.ToString();
string onState = eState.OnLine.ToString();
}
}
}

119
DT_SCADA/Core/B_AGV.cs Normal file
View File

@@ -0,0 +1,119 @@
using DatabaseClient;
using Opc.Ua;
using OpcBasic;
using Robot.Common;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Threading;
namespace MesWork
{
/// <summary>
///
/// </summary>
public class AgvRead
{
/// <summary>
///
/// </summary>
public string from_to_loc = "";
/// <summary>
///
/// </summary>
string from_to_loc_old = "";
/// <summary>
///
/// </summary>
public string tagID = "";
/// <summary>
///
/// </summary>
string opName = "";
/// <summary>
///
/// </summary>
public string connectStr = "";
/// <summary>
///
/// </summary>
public bool onLine = false;
/// <summary>
///
/// </summary>
public string update_time = "";
/// <summary>
///
/// </summary>
public string from_loc = "";
/// <summary>
///
/// </summary>
public string to_loc = "";
/// <summary>
///
/// </summary>
public void Start(string connectStr,int interval, int intervalUpdate ,string tagID,string opName)
{
this.connectStr = connectStr;
this.tagID = tagID;
this.opName = opName;
new Thread(new ThreadStart(delegate () {
while (true)
{
try
{
from_to_loc = ReadAgv();
if (from_to_loc_old != from_to_loc)
{
from_to_loc_old = from_to_loc;
MesWorkForm.S_C_B_TagIDTrigger(opName,this.tagID, from_to_loc);
}
}
catch (Exception err) { }
Thread.Sleep(interval);
}
})).Start();
}
public string ReadAgv()
{
var value = "";
try
{
var sql =
$" SELECT aid,from_loc,to_loc,start_run,update_time FROM agv_from_to" +
$" ORDER BY aid LIMIT 1";
MysqlClient.ExecQueryDataTable(sql, this.connectStr, out DataTable dt, out string err);
onLine = err.Length < 1;
if (onLine == false)
{
return value;
}
if (dt.Rows.Count > 0)
{
var aid = dt.Rows[0]["aid"].ToString();
var from_loc = dt.Rows[0]["from_loc"].ToString();
var to_loc = dt.Rows[0]["to_loc"].ToString();
var start_run = dt.Rows[0]["start_run"].ToString();
update_time = dt.Rows[0]["update_time"].ToString();
this.from_loc = from_loc;
this.to_loc = to_loc;
value = $"{from_loc}__{to_loc}";
}
}
catch (Exception err)
{
}
return value;
}
}
}

613
DT_SCADA/Core/B_Cnc_Edm.cs Normal file
View File

@@ -0,0 +1,613 @@
using BsRmlib.EDM;
using Newtonsoft.Json;
using NPOI.SS.UserModel;
using NPOI.XSSF.Model;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Drawing;
using System.Security.Claims;
using System.Threading;
namespace MesWork
{
public class B_Cnc_Edm
{
/// <summary>
///
/// </summary>
private CClient edm = null;
/// <summary>
///
/// </summary>
public bool OnLine = false;
/// <summary>
///
/// </summary>
public string ip = "-1";
/// <summary>
///
/// </summary>
public int port = -1;
/// <summary>
///
/// </summary>
public int interval = -1;
/// <summary>
///
/// </summary>
public bool isRun = true;
/// <summary>
///
/// </summary>
public string Id = "-1";
/// <summary>
///
/// </summary>
public string Name = "";
/// <summary>
/// 机床状态
/// -1-离线0-待机1-运行2-报警
/// </summary>
public int edmCtrlStatus = 0;
/// <summary>
/// 机床报警号及信息
/// </summary>
public ushort edmGetError = 0;
public ushort edmGetError_Old = 0;
public string edmGetErrMsg = "";
/// <summary>
/// 机床提示号及信息
/// </summary>
public ushort edmGetComment = 0;
public ushort edmGetComment_Old = 0;
public string edmGetComMsg = "";
/// <summary>
/// 机床电流电压
/// </summary>
public int edmGetCurrent = 0;
public int edmGetVoltage = 0;
public string programName = "";
public string edmGetRunTime = "";
public string progContent = "";
public uint toolNum_Set = 0;
public ushort doorAtStatus = 3;
public ushort doorAtStatus_Old = 3;
public DateTime start = DateTime.Now;
public ushort workbench_HasPart = 0;
public ushort workbench_HasPart_Old = 0;
public ushort spindleClamp_HasPart = 0;
public ushort spindleClamp_HasPart_Old = 0;
public ushort toolLib_HasPart = 0;
public ushort toolLib_HasPart_Old = 0;
public int IsSpark = 0;
public int IsSpark_Old = 0;
public double[] absolute_j = new double[12];
public double[] relative_j = new double[12];
/// <summary>
///
/// </summary>
public double[] machine_j = new double[12];
/// <summary>
///
/// </summary>
public double[] jDemo = new double[12];
/// <summary>
///
/// </summary>
public List<JointConfig> Joints = null;
/// <summary>
///
/// </summary>
public string sendStr_Old = "";
/// <summary>
///
/// </summary>
public string payloadInfoStr_Old = "";
/// <summary>
///
/// </summary>
public B_Cnc_Edm()
{
}
/// <summary>
///
/// </summary>
/// <param name="ipPort"></param>
/// <param name="interval"></param>
/// <param name="j1_6"></param>
/// <param name="modelManagement"></param>
/// <param name="modelCode"></param>
public void Start(string ip, int port,int interval, int intervalUpdate, string DeviceCode, string OpName, List<JointConfig> Joints
,string tagID_DoorOpen = "", string tagID_DoorClose = ""
, string tagID_Workbench = "", string tagID_SpindleClamp = "", string tagID_ToolLib = "", string modelCode_Spark = "")
{
this.ip = ip;
this.port = port;
this.interval = interval;
this.Id = DeviceCode;
this.Name = OpName;
this.Joints = Joints;
new Thread(new ThreadStart(delegate ()
{
while (isRun)
{
try
{
if (edm == null)
{
edmCtrlStatus = -1;
ReConnRobot();
}
if (OnLine = edm.IsConnected())
{
machine_j = ReadResult_To_Array();
//到位状态O:打开或关闭过程中,1:打开到位,2:关闭到位
doorAtStatus = edm.EdmStatFrontDoor();
if (doorAtStatus_Old != doorAtStatus)
{
switch (doorAtStatus_Old)
{
case 0://0->其他:不处理
break;
case 1://1->0关闭
MesWorkForm.S_C_B_TagIDTrigger(Name, tagID_DoorClose, "1");
break;
case 2://2->0打开
MesWorkForm.S_C_B_TagIDTrigger(Name, tagID_DoorOpen, "1");
break;
}
}
doorAtStatus_Old = doorAtStatus;
//机床状态;0-停止1-运行2-报警3-暂停
var edmCtrlStatus_NC = edm.EdmCtrlStatus();
switch (edmCtrlStatus_NC)
{
case EnumEdmStatus.Stop:
edmCtrlStatus = 0;
break;
case EnumEdmStatus.Run:
edmCtrlStatus = 1;
break;
case EnumEdmStatus.Halt:
edmCtrlStatus = 3;
break;
}
//机床报警号及信息
edmGetError = edm.EdmGetError();
edmGetErrMsg = edm.EdmGetErrMsg(edmGetError);
if (edmGetError_Old != edmGetError)
{
// B_DB_Opera.Event_AlarmAndTip_Start(Name, edmGetError, edmGetErrMsg, edmGetError.ToString(),1);
}
edmGetError_Old = edmGetError;
//机床提示号及信息
edmGetComment = edm.EdmGetComment();
edmGetComMsg = edm.EdmGetComMsg(edmGetComment);
if (edmGetComment_Old != edmGetComment)
{
// B_DB_Opera.Event_AlarmAndTip_Start(Name, edmGetComment, edmGetComMsg, edmGetComment.ToString(),2);
}
edmGetComment_Old = edmGetComment;
//机床电流电压
edmGetCurrent = edm.EdmGetCurrent();
edmGetVoltage = edm.EdmGetVoltage();
if (edmGetCurrent > 5)
{
IsSpark = 1;
}
else
{
IsSpark = 0;
}
if (IsSpark_Old != IsSpark)
{
// MesWorkForm.S_C_B_SparkTrigger(Name, modelCode_Spark, IsSpark.ToString());
}
IsSpark_Old = IsSpark;
//获取当前机床主程序
programName = edm.PrgGetSelMain();
//运行时间
edmGetRunTime = edm.EdmGetRunTime().ToString();
//程序内容
progContent = edm.EdmGetDispNc().nc;
//刀具号
toolNum_Set = edm.EdmGetToolNo();
workbench_HasPart = edm.EdmStatWorkbenExistPiece();
if (workbench_HasPart_Old != workbench_HasPart)
{
MesWorkForm.S_C_B_TagIDTrigger(Name, tagID_Workbench, workbench_HasPart.ToString());
}
workbench_HasPart_Old = workbench_HasPart;
spindleClamp_HasPart = edm.EdmStatSpindleExistTool();
if (spindleClamp_HasPart_Old != spindleClamp_HasPart)
{
MesWorkForm.S_C_B_TagIDTrigger(Name, tagID_SpindleClamp, spindleClamp_HasPart.ToString());
}
spindleClamp_HasPart_Old = spindleClamp_HasPart;
toolLib_HasPart = edm.EdmStatMagaginExistTool();
if (toolLib_HasPart_Old != toolLib_HasPart)
{
MesWorkForm.S_C_B_TagIDTrigger(Name, tagID_ToolLib, toolLib_HasPart.ToString());
}
toolLib_HasPart_Old = toolLib_HasPart;
}
else
{
edmCtrlStatus = -1;
Thread.Sleep(10_000);
ReConnRobot();
continue;
}
for (int i = 0; i < Joints.Count ; i++)
{
Joints[i].DeviceCode = DeviceCode;
Joints[i].Value = machine_j[i].ToString();
}
var sendStr = MesWorkForm.Move_Joint(Joints);
if (sendStr_Old != sendStr)
{
sendStr_Old = sendStr;
MesWorkForm.SendMsg(sendStr);
}
}
catch (Exception err) { }
Thread.Sleep(interval);
}
}))
{ IsBackground = true }.Start();
new Thread(new ThreadStart(delegate () {
while (isRun)
{
try
{
for (int i = 0; i < Joints.Count; i++)
{
Joints[i].DeviceCode = DeviceCode;
Joints[i].Value = machine_j[i].ToString();
}
var payload = MesWorkForm.Move_Joint(Joints);
MesWorkForm.SendMsg(payload);
}
catch (Exception err)
{ }
Thread.Sleep(intervalUpdate);
}
}))
{ IsBackground = true }.Start();
new Thread(new ThreadStart(delegate ()
{
while (isRun)
{
UpdateDataToSql();
UpdateStationStatusToSql();
var deviceInfo = new DeviceInfo();
deviceInfo.order = "";
deviceInfo.Name = Name;
deviceInfo.Id = Id;
deviceInfo.Status = edmCtrlStatus.ToString();
deviceInfo.Program = programName;
deviceInfo.ProgramStatus = "";
deviceInfo.Feed = "";
deviceInfo.Speed = "";
deviceInfo.Rapid = "";
deviceInfo.Current = edmGetCurrent.ToString();
deviceInfo.Voltage = edmGetVoltage.ToString();
deviceInfo.Axis = new List<AxisInfo>();
deviceInfo.Tool = null;
deviceInfo.OtherParameter = new List<ParameterInfo>();
deviceInfo.Alarm = new List<AlarmInfo>();
if (edmGetErrMsg.Length > 0)
{
deviceInfo.Alarm.Add(new AlarmInfo()
{
AlarmCode = edmGetError.ToString(),
Alarm = edmGetErrMsg,
AlarmTime = DateTime.Now.ToString("G")
});
}
deviceInfo.Tip = new List<TipInfo>();
if (edmGetComMsg.Length > 0)
{
deviceInfo.Tip.Add(new TipInfo()
{
TipCode = edmGetComment.ToString(),
Tip = edmGetComMsg,
TipTime = DateTime.Now.ToString("G")
});
}
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "X", AxisValue = machine_j[0].ToString() });
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "Y", AxisValue = machine_j[1].ToString() });
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "Z", AxisValue = machine_j[2].ToString() });
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "U", AxisValue = machine_j[3].ToString() });
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "V", AxisValue = machine_j[4].ToString() });
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "W", AxisValue = machine_j[5].ToString() });
var payloadInfoStr = MesWorkForm.Make_DeviceInfo(new List<DeviceInfo>() { deviceInfo });
DateTime current = DateTime.Now;
if ((current - start).TotalMilliseconds > 1000)
{
// if (payloadInfoStr_Old != payloadInfoStr)
{
payloadInfoStr_Old = payloadInfoStr;
MesWorkForm.SendMsg(payloadInfoStr);
}
start = current;
}
Thread.Sleep(1000);
}
}))
{ IsBackground = true }.Start();
new Thread(new ThreadStart(delegate ()
{
while (isRun)
{
InsertStationStatusToSql();
Thread.Sleep(60 * 1000);
}
}))
{ IsBackground = true }.Start();
}
/// <summary>
///
/// </summary>
public void TimelyUpdate()
{
var sendStr = MesWorkForm.Move_Joint(Joints);
MesWorkForm.SendMsg(sendStr);
}
/// <summary>
///
/// </summary>
~B_Cnc_Edm()
{
DisConn();
}
/// <summary>
///
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
public void DisConn()
{
isRun = false;
Thread.Sleep(199);
edm?.Disconnect();
}
/// <summary>
///
/// </summary>
private void ReConnRobot()
{
if (edm != null)
{
edm?.Disconnect();
}
edm = new CClient();
var success = edm.Connect(ip, (uint)port);
if (success)
{
}
}
/// <summary>
///
/// </summary>
/// <param name="j1_6"></param>
/// <returns></returns>
private double[] ReadResult_To_Array()
{
if (MesWorkForm.IsDemoMesServer == 1)
{
return jDemo;
}
double[] joint = new double[12];
var X = edm.EdmGetMachine(EnumAxisNo.X) / GetAxisDec(EnumAxisNo.X);
var Y = edm.EdmGetMachine(EnumAxisNo.Y) / GetAxisDec(EnumAxisNo.Y);
var Z = edm.EdmGetMachine(EnumAxisNo.Z) / GetAxisDec(EnumAxisNo.Z);
var U = edm.EdmGetMachine(EnumAxisNo.U) / GetAxisDec(EnumAxisNo.U);
var V = 0;
var W = 0;
joint[0] = X;
joint[1] = Y;
joint[2] = Z;
joint[3] = U;
joint[4] = V;
joint[5] = W;
return joint;
}
private double GetAxisDec(EnumAxisNo axis)
{
CPosInfo info = edm.EdmGetPosInfo(axis);
if (info.dec == 3)
return 1000.0;
else if (info.dec == 4)
return 10000.0;
return 1000.0;
}
/// <summary>
/// 手动测试读取
/// </summary>
/// <param name="j1_6"></param>
/// <param name="j7"></param>
/// <returns></returns>
public string ReadTest(string robotName)
{
return "【" + robotName + "】" + MesWorkForm.Move_Joint(Joints);
}
public void UpdateDataToSql()
{
//StoredProcedure("Event_CNC_Update");
}
//private void StoredProcedure(string pName)
//{
// var sqlParameter = new SqlParameter[] {
// new SqlParameter("@DeviceCode", Id),
// new SqlParameter("@Online", OnLine.ToString()),
// new SqlParameter("@StationName", Name),
// new SqlParameter("@SlaveAddr", $"{ip}:{port}"),
// new SqlParameter("@Path", 1),
// new SqlParameter("@程序号",0 ),
// new SqlParameter("@程序名称", programName),
// new SqlParameter("@主轴转速组", JsonConvert.SerializeObject(new double[6])),
// new SqlParameter("@坐标_绝对组", JsonConvert.SerializeObject(new double[6])),
// new SqlParameter("@坐标_相对组", JsonConvert.SerializeObject(new double[6])),
// new SqlParameter("@坐标_机械组", JsonConvert.SerializeObject(machine_j)),
// new SqlParameter("@伺服负载组", JsonConvert.SerializeObject(new double[6])),
// new SqlParameter("@进给速度",0 ),
// new SqlParameter("@进给倍率",0),
// new SqlParameter("@主轴倍率", 0),
// new SqlParameter("@已加工数量",0 ),
// new SqlParameter("@总加工数量", 0),
// new SqlParameter("@工作模式",JsonConvert.SerializeObject(new double[6] )),
// new SqlParameter("@TM模式", 0),
// new SqlParameter("@自动模式", 0),
// new SqlParameter("@运行状态",0),
// new SqlParameter("@轴_停留状态",0),
// new SqlParameter("@matb", 0),
// new SqlParameter("@急停", 0),
// new SqlParameter("@报警",0 ),
// new SqlParameter("@编辑状态", 0),
// new SqlParameter("@开机时间", 0),
// new SqlParameter("@运行时间", edmGetRunTime),
// new SqlParameter("@切削时间",0 ),
// new SqlParameter("@循环时间", 0),
// new SqlParameter("@机床时间", 0),
// new SqlParameter("@加工次数", 0),
// new SqlParameter("@额定次数", 0),
// new SqlParameter("@程序内容", progContent),
// new SqlParameter("@刀具号", (int)toolNum_Set),
// //北京电火花项目
// new SqlParameter("@机床状态",(int)edmCtrlStatus),
// new SqlParameter("@报警代码",(int)edmGetError),
// new SqlParameter("@报警内容",edmGetErrMsg),
// new SqlParameter("@提示代码",(int)edmGetError),
// new SqlParameter("@提示内容",edmGetErrMsg),
// new SqlParameter("@电流",(int)edmGetCurrent),
// new SqlParameter("@电压",(int)edmGetVoltage),
// };
// MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
// {
// procedureName = pName,
// sqlParameter = sqlParameter
// });
//}
private void UpdateStationStatusToSql()
{
//Event_StationStatus("Event_StationStatus_Update");
}
private void InsertStationStatusToSql()
{
//Event_StationStatus("Event_StationStatus_Insert");
}
//public void Event_StationStatus(string pName)
//{
// try
// {
// var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
// MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
// {
// procedureName = pName,
// sqlParameter = new SqlParameter[] {
// new SqlParameter("@OpName", Name),
// new SqlParameter("@Status", (int)edmCtrlStatus),
// new SqlParameter("@ChangeTime",ChangeTime)
// }
// });
// }
// catch (Exception err)
// {
// }
//}
}
}

View File

@@ -0,0 +1,148 @@
using Opc.Ua;
using OpcBasic;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Threading;
/// <summary>
///
/// </summary>
namespace MesWork
{
/// <summary>
///
/// </summary>
public class B_DeviceState
{
/// <summary>
///
/// </summary>
public int interval = 0;
/// <summary>
///
/// </summary>
public int intervalUpdate = 0;
/// <summary>
///
/// </summary>
public int intervalInsert = 0;
/// <summary>
///
/// </summary>
public string opName = "";
/// <summary>
///
/// </summary>
public ConcurrentDictionary<string, object> cd_OpNameGroupData = new ConcurrentDictionary<string, object>();
/// <summary>
///
/// </summary>
/// <param name="interval"></param>
/// <param name="intervalUpdate"></param>
/// <param name="modelCode"></param>
/// <param name="opName"></param>
public B_DeviceState(int interval, int intervalUpdate, int intervalInsert, string opName)
{
this.interval = interval;
this.intervalUpdate = intervalUpdate;
this.intervalInsert = intervalInsert;
this.opName = opName;
}
public void Start()
{
new Thread(new ThreadStart(delegate ()
{
while (true)
{
try
{
cd_OpNameGroupData = MesWorkForm.ReadPLC_GroupData(opName);
}
catch (Exception err) { }
Thread.Sleep(interval);
}
})) { IsBackground = true }.Start();
new Thread(new ThreadStart(delegate ()
{
while (true)
{
UpdateDataToSql();
Thread.Sleep(intervalUpdate);
}
})){ IsBackground = true }.Start();
new Thread(new ThreadStart(delegate ()
{
while (true)
{
InsertDataToSql();
Thread.Sleep(intervalInsert);
}
})){ IsBackground = true }.Start();
}
public void UpdateDataToSql()
{
StoredProcedure("Event_Device_Update_CurrInfo");
}
private void InsertDataToSql()
{
StoredProcedure("Event_Device_Insert_CurrInfo");
}
public void StoredProcedure(string pName)
{
try
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
foreach (KeyValuePair<string, object> item in cd_OpNameGroupData)
{
var TF = (TagFormat)item.Value;
var TagTypeCodeID = TF.TagTypeCodeID;
var TagOrderBy = TF.TagOrderBy;
var ItemName = TF.ItemName;
var TagValue = TF.TagValue.ToString();
var TagID = TF.TagID;
if (TagTypeCodeID < 1000 | TagTypeCodeID >= 40000)
{
//MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
//{
// procedureName = pName,
// sqlParameter = new SqlParameter[] {
// new SqlParameter("@OpName", opName),
// new SqlParameter("@TagTypeCodeID", TagTypeCodeID),
// new SqlParameter("@TagOrderBy", TagOrderBy),
// new SqlParameter("@ItemName", ItemName),
// new SqlParameter("@TagValue", TagValue),
// new SqlParameter("@ChangeTime",ChangeTime),
// new SqlParameter("@TagID", TagID)
// }
//});
//var sendStr2 = MesWorkForm.MachineQtyDataInfo("C_B_QtyInfo", opName, TagID, TagValue);
//MesWorkForm.SendMsg(sendStr2);
}
}
}
catch (Exception err)
{
}
}
}
}

View File

@@ -0,0 +1,188 @@
using Opc.Ua;
using OpcBasic;
using Robot.Common;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace MesWork
{
public partial class Temp { }
public partial class B_Read_N_Axis
{
/// <summary>
///
/// </summary>
string sendStr_Temp = "-1";
/// <summary>
///
/// </summary>
string opName = "";
/// <summary>
///
/// </summary>
int axisNum = 1;
/// <summary>
///
/// </summary>
int interval = 100;
/// <summary>
///
/// </summary>
int intervalUpdate = 10000;
/// <summary>
///
/// </summary>
string Id = "";
/// <summary>
///
/// </summary>
string Name = "";
/// <summary>
///
/// </summary>
public void Start(int interval, int intervalUpdate ,string opName, List<JointConfig> Joints, string Id, string Name)
{
this.axisNum = Joints.Count;
this.interval = interval;
this.intervalUpdate = intervalUpdate;
this.opName = opName;
new Thread(new ThreadStart(delegate () { while (true) { try {
var j = Read_N_Axis(out bool success);
if (success == false)
{
continue;
}
//if (j.Select(it => it == 0).Count() == j.Length)
//{
// continue;
//}
for (int i = 0; i < j.Length; i++)
{
Joints[i].DeviceCode = opName;
Joints[i].Value = j[i].ToString();
}
var sendStr = MesWorkForm.Move_Joint(Joints);
if (sendStr_Temp != sendStr)
{
MesWorkForm.SendMsg(sendStr);
MesWorkForm.S_C_B_Info_Fast(Joints);
MesWorkForm.WriteLog(sendStr);
}
sendStr_Temp = sendStr;
} catch (Exception err) { } Thread.Sleep(interval);
} })).Start();
new Thread(new ThreadStart(delegate () { while (true) { try {
var j = Read_N_Axis(out bool success);
if (success == false)
{
continue;
}
//if (j.Select(it => it == 0).Count() == j.Length)
//{
// continue;
//}
for (int i = 0; i < j.Length; i++)
{
Joints[i].DeviceCode = opName;
Joints[i].Value = j[i].ToString();
}
var sendStr = MesWorkForm.Move_Joint(Joints);
MesWorkForm.SendMsg(sendStr);
MesWorkForm.S_C_B_Info_Fast(Joints);
MesWorkForm.WriteLog(sendStr);
} catch (Exception err) { } Thread.Sleep(intervalUpdate);
}})).Start();
new Thread(new ThreadStart(delegate ()
{
while (true)
{
var deviceInfo = new DeviceInfo();
deviceInfo.order = "";
deviceInfo.Name = Name;
deviceInfo.Id = Id;
deviceInfo.Axis = new List<AxisInfo>();
deviceInfo.OtherParameter = new List<ParameterInfo>();
var j = Read_N_Axis(out bool success);
if (success == false)
{
continue;
}
//if (j.Select(it => it == 0).Count() == j.Length)
//{
// continue;
//}
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "J1", AxisValue = Math.Round(j[0], 2).ToString() });
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "J2", AxisValue = Math.Round(j[1], 2).ToString() });
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "J3", AxisValue = Math.Round(j[2], 2).ToString() });
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "J4", AxisValue = Math.Round(j[3], 2).ToString() });
var payloadInfoStr = MesWorkForm.Make_DeviceInfo(new List<DeviceInfo>() { deviceInfo });
MesWorkForm.SendMsg(payloadInfoStr);
Thread.Sleep(300);
}
}))
{ IsBackground = true }.Start();
}
public double[] Read_N_Axis(out bool success)
{
success = true;
double[] p = new double[this.axisNum];
var jointArray = MesWorkForm.ReadPLC_GroupData(this.opName);
if (axisNum != jointArray.Count)
{
return p;
}
var listFalse = new List<bool>();
foreach (KeyValuePair<string, object> item in jointArray)
{
var TF = (TagFormat)item.Value;
var index = Convert.ToInt32(TF.ShaftID);
var value = Convert.ToDouble(TF.TagValue);
switch (value)
{
case -1:
case -2:
case -5:
case 100:
listFalse.Add(false);
break;
default:
break;
}
p[index] = value;
}
if (listFalse.Count() > 0)
{
success = false;
return p;
}
return p;
}
}
}

View File

@@ -0,0 +1,160 @@
using NPOI.SS.Formula.Functions;
using NPOI.XSSF.Streaming.Values;
using Opc.Ua;
using OpcBasic;
using Robot.Common;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading;
namespace MesWork
{
public class B_Read_N_AxisCard
{
/// <summary>
///
/// </summary>
string sendStr_Temp = "-1";
/// <summary>
///
/// </summary>
string opName = "";
/// <summary>
///
/// </summary>
int axisNum = 1;
/// <summary>
///
/// </summary>
int interval = 100;
/// <summary>
///
/// </summary>
int intervalUpdate = 10000;
/// <summary>
///
/// </summary>
public void Start(int interval, int intervalUpdate ,string opName, List<JointConfig> Joints)
{
this.axisNum = Joints.Count;
this.interval = interval;
this.intervalUpdate = intervalUpdate;
this.opName = opName;
new Thread(new ThreadStart(delegate () { while (true) { try {
var j = Read_N_Axis();
for (int i = 0; i < j.Length; i++)
{
Joints[i].DeviceCode = opName;
Joints[i].Value = j[i].ToString();
}
var sendStr = MesWorkForm.Move_Joint(Joints);
if (sendStr_Temp != sendStr)
{
MesWorkForm.SendMsg(sendStr);
MesWorkForm.S_C_B_Info_Fast(Joints);
}
sendStr_Temp = sendStr;
} catch (Exception err) { } Thread.Sleep(interval);
} })).Start();
new Thread(new ThreadStart(delegate () { while (true) { try {
var j = Read_N_Axis();
for (int i = 0; i < j.Length; i++)
{
Joints[i].DeviceCode = opName;
Joints[i].Value = j[i].ToString();
}
var sendStr = MesWorkForm.Move_Joint(Joints);
MesWorkForm.SendMsg(sendStr);
MesWorkForm.S_C_B_Info_Fast(Joints);
} catch (Exception err) { } Thread.Sleep(intervalUpdate);
}})).Start();
}
//public double[] Read_N_Axis()
//{
// double[] p = new double[this.axisNum];
// var x1 = Convert.ToDouble(MesWorkForm.ReadPLC(101, this.opName).ToString());
// var x2 = Convert.ToDouble(MesWorkForm.ReadPLC(102, this.opName).ToString());
// var y1 = Convert.ToDouble(MesWorkForm.ReadPLC(201, this.opName).ToString());
// var y2 = Convert.ToDouble(MesWorkForm.ReadPLC(202, this.opName).ToString());
// var z1 = Convert.ToDouble(MesWorkForm.ReadPLC(301, this.opName).ToString());
// var z2 = Convert.ToDouble(MesWorkForm.ReadPLC(302, this.opName).ToString());
// p[0] = x1 + x2 * 0.001;
// p[1] = y1 + y2 * 0.001;
// p[2] = z1 + z2 * 0.001;
// return p;
//}
public double[] Read_N_Axis()
{
double[] p = new double[this.axisNum];
//var x1 = Convert.ToDouble(MesWorkForm.ReadPLC(101, this.opName).ToString());
//var x2 = Convert.ToDouble(MesWorkForm.ReadPLC(102, this.opName).ToString());
//var y1 = Convert.ToDouble(MesWorkForm.ReadPLC(201, this.opName).ToString());
//var y2 = Convert.ToDouble(MesWorkForm.ReadPLC(202, this.opName).ToString());
//var z1 = Convert.ToDouble(MesWorkForm.ReadPLC(301, this.opName).ToString());
//var z2 = Convert.ToDouble(MesWorkForm.ReadPLC(302, this.opName).ToString());
double x1 = 0;
double x2 = 0;
double y1 = 0;
double y2 = 0;
double z1 = 0;
double z2 = 0;
var jointArray = MesWorkForm.ReadPLC_GroupData(this.opName);
foreach (KeyValuePair<string, object> item in jointArray)
{
var TF = (TagFormat)item.Value;
var tagTypeCodeID = Convert.ToInt32(TF.TagTypeCodeID);
var value = Convert.ToDouble(TF.TagValue);
switch (tagTypeCodeID)
{
case 101:
x1 = value;
break;
case 102:
x2 = value;
break;
case 201:
y1 = value;
break;
case 202:
y2 = value;
break;
case 301:
z1 = value;
break;
case 302:
z2 = value;
break;
default:
break;
}
}
p[0] = x1 + x2 * 0.001;
p[1] = y1 + y2 * 0.001;
p[2] = z1 + z2 * 0.001;
return p;
}
}
}

View File

@@ -0,0 +1,305 @@
using System;
using System.Threading;
using System.Collections.Generic;
using ABB.Robotics.Controllers;
using ABB.Robotics.Controllers.Discovery;
using ABB.Robotics.Controllers.IOSystemDomain;
using Robot.Common;
namespace MesWork
{
public class B_Robot_Abb
{
/// <summary>
///
/// </summary>
private Controller abb = null;
/// <summary>
///
/// </summary>
public bool OnLine = false;
/// <summary>
///
/// </summary>
public string ip = "-1";
/// <summary>
///
/// </summary>
public string cname = "";
/// <summary>
///
/// </summary>
public int interval = -1;
/// <summary>
///
/// </summary>
public bool isRun = true;
/// <summary>
///
/// </summary>
public string Id = "-1";
/// <summary>
///
/// </summary>
public string Name = "";
public string robotWorkbench_1 = "";
public string robotWorkbench_Old_1 = "";
public string robotWorkbench_2 = "";
public string robotWorkbench_Old_2 = "";
public string TagID_Axis_7 = "";
/// <summary>
///
/// </summary>
public double[] j = new double[12];
/// <summary>
///
/// </summary>
public double[] jDemo = new double[12];
/// <summary>
///
/// </summary>
public List<JointConfig> Joints = null;
/// <summary>
///
/// </summary>
public string sendStr_Old = "";
/// <summary>
///
/// </summary>
public B_Robot_Abb()
{
}
/// <summary>
///
/// </summary>
/// <param name="ipPort"></param>
/// <param name="interval"></param>
/// <param name="j1_6"></param>
/// <param name="modelManagement"></param>
/// <param name="modelCode"></param>
public void Start(string ip, string cname,int interval, int intervalUpdate, string DeviceCode, string OpName, List<JointConfig> Joints
, string TagID_DoorOpen = "", string TagID_DoorClose = "", string TagID_Axis_7 = "")
{
this.ip = ip;
this.cname = cname;
this.interval = interval;
this.Id = DeviceCode;
this.Name = OpName;
this.Joints = Joints;
this.TagID_Axis_7 = TagID_Axis_7;
var robotWorkbench_1_Addr = TagID_DoorOpen.Split(',')[0];
var robotWorkbench_1_TagID = TagID_DoorOpen.Split(',')[1];
var robotWorkbench_2_Addr = TagID_DoorClose.Split(',')[0];
var robotWorkbench_2_TagID = TagID_DoorClose.Split(',')[1];
new Thread(new ThreadStart(delegate ()
{
while (isRun)
{
try
{
if (abb == null)
{
ReConnRobot();
}
OnLine = abb.Connected;
if (OnLine)
{
j = ReadResult_To_Array();
robotWorkbench_1 = ReadIO(robotWorkbench_1_Addr);
if (robotWorkbench_Old_1 != robotWorkbench_1)
{
MesWorkForm.S_C_B_TagIDTrigger(Name, robotWorkbench_1_TagID, robotWorkbench_1);
}
robotWorkbench_Old_1 = robotWorkbench_1;
robotWorkbench_2 = ReadIO(robotWorkbench_2_Addr);
if (robotWorkbench_Old_2 != robotWorkbench_2)
{
MesWorkForm.S_C_B_TagIDTrigger(Name, robotWorkbench_2_TagID, robotWorkbench_2);
}
robotWorkbench_Old_2 = robotWorkbench_2;
}
else
{
Thread.Sleep(10 * 1000);
ReConnRobot();
continue;
}
for (int i = 0; i < Joints.Count ; i++)
{
Joints[i].DeviceCode = DeviceCode;
Joints[i].Value = j[i].ToString();
}
var sendStr = MesWorkForm.Move_Joint(Joints);
if (sendStr_Old != sendStr)
{
sendStr_Old = sendStr;
MesWorkForm.SendMsg(sendStr);
}
}
catch (Exception err) { }
Thread.Sleep(interval);
}
}))
{ IsBackground = true }.Start();
new Thread(new ThreadStart(delegate () {
while (isRun)
{
try
{
for (int i = 0; i < Joints.Count; i++)
{
Joints[i].DeviceCode = DeviceCode;
Joints[i].Value = j[i].ToString();
}
var sendStr = MesWorkForm.Move_Joint(Joints);
MesWorkForm.SendMsg(sendStr);
}
catch (Exception err)
{ }
Thread.Sleep(intervalUpdate);
}
}))
{ IsBackground = true }.Start();
}
private string ReadIO(string addr)
{
var valueStr = "";
// using (var m = Mastership.Request(abb.Rapid))
{
var _d = (DigitalSignal)abb.IOSystem.GetSignal(addr);
if (_d != null)
{
valueStr = _d.Value.ToString();
}
}
switch (valueStr.ToLower())
{
case "0":
case "false":
valueStr = "0";
break;
case "1":
case "true":
valueStr = "1";
break;
default:
break;
}
return valueStr;
}
~B_Robot_Abb()
{
DisConn();
}
/// <summary>
///
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
public void DisConn()
{
isRun = false;
Thread.Sleep(199);
abb?.Logoff();
}
/// <summary>
///
/// </summary>
private void ReConnRobot()
{
if (MesWorkForm.IsDemoMesServer == 1)
{
//abb = ControllerFactory.CreateFrom();
//abb.Logon(UserInfo.DefaultUser);
abb = new Controller();
return;
}
if (abb != null)
{
abb?.Logoff();
abb = null;
}
var scanner = new NetworkScanner();
var controllers = scanner.GetControllers();
foreach (var controllerInfo in controllers)
{
if (controllerInfo.IPAddress.ToString() == ip & controllerInfo.SystemName == cname)
{
abb = ControllerFactory.CreateFrom(controllerInfo);
abb.Logon(UserInfo.DefaultUser);
}
}
}
/// <summary>
///
/// </summary>
/// <param name="j1_6"></param>
/// <returns></returns>
private double[] ReadResult_To_Array()
{
if (MesWorkForm.IsDemoMesServer == 1)
{
return jDemo;
}
float j7 = 0f;
try
{
j7 = Convert.ToSingle(MesWorkForm.ReadPLC(TagID_Axis_7).ToString());
}
catch (Exception err )
{
}
var joint = new double[12];
var currJoint = abb.MotionSystem.ActiveMechanicalUnit.GetPosition();
joint[0] = currJoint.RobAx.Rax_1;
joint[1] = currJoint.RobAx.Rax_2;
joint[2] = currJoint.RobAx.Rax_3;
joint[3] = currJoint.RobAx.Rax_4;
joint[4] = currJoint.RobAx.Rax_5;
joint[5] = currJoint.RobAx.Rax_6;
joint[6] = j7;
return joint;
}
}
}

View File

@@ -0,0 +1,418 @@
using System;
using System.Data;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows.Forms;
using System.Collections.Generic;
using Newtonsoft.Json;
using HslCommunication.Robot.FANUC;
using HslCommunication.Robot.KUKA;
using System.Net.Sockets;
using Org.BouncyCastle.Bcpg;
using System.Text;
using Adapters;
using static Focas1;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace MesWork
{
public class B_Robot_Espon
{
/// <summary>
///
/// </summary>
private Socket espon = null;
/// <summary>
///
/// </summary>
public bool OnLine = false;
/// <summary>
///
/// </summary>
public string ip = "-1";
/// <summary>
///
/// </summary>
public int port = -1;
/// <summary>
///
/// </summary>
public int interval = -1;
/// <summary>
///
/// </summary>
public bool isRun = true;
/// <summary>
///
/// </summary>
public string sendV_Temp = "-1";
/// <summary>
///
/// </summary>
public double[] j = new double[12];
/// <summary>
///
/// </summary>
public double[] jDemo = new double[12];
/// <summary>
/// 记录老值
/// </summary>
string axis_act_Old = "-1";
/// <summary>
/// 焊接中
/// </summary>
public string clamp_Old = "";
/// <summary>
///
/// </summary>
public string clamp = "";
/// <summary>
///
/// </summary>
public string Id = "-1";
/// <summary>
///
/// </summary>
public string Name = "";
/// <summary>
///
/// </summary>
public List<JointConfig> Joints = null;
/// <summary>
///
/// </summary>
public string md5Pos = "";
/// <summary>
///
/// </summary>
public B_Robot_Espon()
{
}
/// <summary>
///
/// </summary>
/// <param name="ipPort"></param>
/// <param name="interval"></param>
/// <param name="j1_6"></param>
/// <param name="modelManagement"></param>
/// <param name="modelCode"></param>
public void Start(string ip, int port,int interval, int intervalUpdate, string DeviceCode, string OpName, List<JointConfig> Joints,string TagID_Clamp)
{
this.ip = ip;
this.port = port;
this.interval = interval;
this.Id = DeviceCode;
this.Name = OpName;
this.Joints = Joints;
var dataRec = new byte[1024 * 1024];
new Thread(new ThreadStart(delegate ()
{
while (isRun)
{
try
{
int readlen = 0;
if (espon == null)
{
continue;
}
try
{
espon.ReceiveTimeout = 5000;
readlen = espon.Receive(dataRec, 0, dataRec.Length, SocketFlags.None);
}
catch (Exception err)
{
continue;
}
if (readlen <= 0)
{
continue;
}
var str = Encoding.Default.GetString(dataRec, 0, readlen);
j = ReadResult_To_Array(str, out string clamp);
if (clamp_Old != clamp)
{
MesWorkForm.S_C_B_TagIDTrigger(OpName, TagID_Clamp, clamp);
}
clamp_Old = clamp;
for (int i = 0; i < Joints.Count; i++)
{
Joints[i].DeviceCode = $"ROBOT_ESPON_{ip.Split('.')[3]}";
Joints[i].Value = j[i].ToString();
}
var payload = MesWorkForm.Move_Joint(Joints);
var md5Str = JsonConvert.SerializeObject(payload);
if (md5Pos != md5Str)
{
md5Pos = md5Str;
MesWorkForm.SendMsg(payload);
}
}
catch (Exception err) { }
Thread.Sleep(15);
}
}))
{ IsBackground = true }.Start();
new Thread(new ThreadStart(delegate ()
{
while (isRun)
{
try
{
try
{
if (MesWorkForm.IsDemoMesServer == 1)
{
j = jDemo;
OnLine = true;
continue;
}
if (espon == null)
{
ReConnRobot();
}
var data = Encoding.Default.GetBytes("1");
espon.Send(data, 0, data.Length, SocketFlags.None);
OnLine = true;
}
catch (Exception err)
{
OnLine = false;
Thread.Sleep(2000);
ReConnRobot();
continue;
}
}
catch (Exception err) { }
Thread.Sleep(interval);
}
}))
{ IsBackground = true }.Start();
new Thread(new ThreadStart(delegate () {
while (isRun)
{
try
{
for (int i = 0; i < Joints.Count; i++)
{
Joints[i].DeviceCode = $"ROBOT_ESPON_{ip.Split('.')[3]}";
Joints[i].Value = j[i].ToString();
}
var payload = MesWorkForm.Move_Joint(Joints);
MesWorkForm.SendMsg(payload);//FANUC机床的轴位置
UpdateDataToSql();
}
catch (Exception err)
{ }
Thread.Sleep(intervalUpdate);
}
}))
{ IsBackground = true }.Start();
new Thread(new ThreadStart(delegate ()
{
while (isRun)
{
var deviceInfo = new DeviceInfo();
deviceInfo.order = "";
deviceInfo.Name = Name;
deviceInfo.Id = Id;
deviceInfo.Axis = new List<AxisInfo>();
deviceInfo.OtherParameter = new List<ParameterInfo>();
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "J1", AxisValue = Math.Round(j[0], 2).ToString() });
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "J2", AxisValue = Math.Round(j[1], 2).ToString() });
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "J3", AxisValue = Math.Round(j[2], 2).ToString() });
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "J4", AxisValue = Math.Round(j[3], 2).ToString() });
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "J5", AxisValue = Math.Round(j[4], 2).ToString() });
deviceInfo.Axis.Add(new AxisInfo() { AxisName = "J6", AxisValue = Math.Round(j[5], 2).ToString() });
var payloadInfoStr = MesWorkForm.Make_DeviceInfo(new List<DeviceInfo>() { deviceInfo });
MesWorkForm.SendMsg(payloadInfoStr);
Thread.Sleep(300);
}
}))
{ IsBackground = true }.Start();
}
public void TimelyUpdate()
{
var sendStr = MesWorkForm.Move_Joint(Joints);
MesWorkForm.SendMsg(sendStr);
}
~B_Robot_Espon()
{
DisConn();
}
/// <summary>
///
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
public void DisConn()
{
isRun = false;
Thread.Sleep(199);
espon?.Close();
espon = null;
}
/// <summary>
///
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
/// <returns></returns>
/// <summary>
///
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
/// <returns></returns>
private void ReConnRobot()
{
if (MesWorkForm.IsDemoMesServer == 1)
{
espon = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
return;
}
if (espon != null)
{
espon?.Close();
espon = null;
}
espon = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
espon.Connect(ip, port);
}
/// <summary>
///
/// </summary>
/// <param name="j1_6"></param>
/// <returns></returns>
private double[] ReadResult_To_Array(string readResult,out string clamp)
{
clamp = "-1";
var joint = new double[12];
var jStr = readResult.Split(',');
joint[0] = Math.Round(Convert.ToDouble(jStr[0]), 2);
joint[1] = Math.Round(Convert.ToDouble(jStr[1]), 2);
joint[2] = Math.Round(Convert.ToDouble(jStr[2]), 2);
joint[3] = Math.Round(Convert.ToDouble(jStr[3]), 2);
joint[4] = Math.Round(Convert.ToDouble(jStr[4]), 2);
joint[5] = Math.Round(Convert.ToDouble(jStr[5]), 2);
clamp = jStr[6];
return joint;
}
/// <summary>
/// 读取数据
/// </summary>
/// <param name="addr"></param>
/// <returns></returns>
public string Read_Welding(string addr)
{
string str = "-1";
//if (kuka != null)
//{
// var r = kuka.ReadString(addr);
// if (r.IsSuccess)
// {
// str = r.Content;
// }
//}
return str;
}
/// <summary>
/// 手动测试读取
/// </summary>
/// <param name="j1_6"></param>
/// <param name="j7"></param>
/// <returns></returns>
public string ReadTest(string robotName)
{
return "【" + robotName + "】" + MesWorkForm.Move_Joint(Joints);
}
public void UpdateDataToSql()
{
StoredProcedure("Event_Robot_Update");
}
private void StoredProcedure(string pName)
{
//var sqlParameter = new SqlParameter[] {
// new SqlParameter("@DeviceCode", DeviceCode),
// new SqlParameter("@Online", OnLine),
// new SqlParameter("@StationName", OpName),
// new SqlParameter("@SlaveAddr", $"{ip}:{port}"),
// new SqlParameter("@Joint1", j[0]),
// new SqlParameter("@Joint2", j[1]),
// new SqlParameter("@Joint3", j[2]),
// new SqlParameter("@Joint4", j[3]),
// new SqlParameter("@Joint5", j[4]),
// new SqlParameter("@Joint6", j[5]),
// new SqlParameter("@Joint7", j[6]),
// new SqlParameter("@Joint8", j[7]),
// new SqlParameter("@Joint9", j[8]),
// new SqlParameter("@Joint10",j[9]),
// new SqlParameter("@Joint11",j[10]),
// new SqlParameter("@Joint12",j[11]),
// new SqlParameter("@Clamp", welding)
// };
//MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
//{
// procedureName = pName,
// sqlParameter = sqlParameter
//});
}
}
}

View File

@@ -0,0 +1,409 @@
using HslCommunication.Robot.FANUC;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Threading;
using static Focas1;
namespace MesWork
{
public partial class Temp { }
public partial class B_Robot_Fanuc
{
/// <summary>
///
/// </summary>
private FanucInterfaceNet fanuc = null;
/// <summary>
///
/// </summary>
public bool OnLine = false;
/// <summary>
///
/// </summary>
private string ip = "-1";
/// <summary>
///
/// </summary>
private int port = -1;
/// <summary>
///
/// </summary>
private int interval = -1;
/// <summary>
///
/// </summary>
private bool isRun = true;
/// <summary>
///
/// </summary>
private string cmd = "";
/// <summary>
///
/// </summary>
private string cmd_Welding = "";
/// <summary>
///
/// </summary>
string sendV_Temp = "-1";
/// <summary>
///
/// </summary>
public double[] j = new double[12];
/// <summary>
///
/// </summary>
public double[] jDemo = new double[12];
/// <summary>
///
/// </summary>
string DeviceCode = "";
/// <summary>
///
/// </summary>
string OpName = "";
/// <summary>
/// 焊接中
/// </summary>
int welding = 0;
/// <summary>
///
/// </summary>
public string Id = "-1";
/// <summary>
///
/// </summary>
string Name = "";
/// <summary>
///
/// </summary>
List<JointConfig> Joints = null;
/// <summary>
///
/// </summary>
public string md5Pos = "";
/// <summary>
///
/// </summary>
public B_Robot_Fanuc()
{
}
/// <summary>
///
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
/// <param name="interval"></param>
/// <param name="intervalUpdate"></param>
/// <param name="cmd"></param>
/// <param name="cmd_Welding"></param>
/// <param name="Id"></param>
/// <param name="Name"></param>
/// <param name="Joints"></param>
public void Start(string ip, int port, int interval, int intervalUpdate, string cmd, string cmd_Welding, string Id, string Name, List<JointConfig> Joints)
{
this.ip = ip;
this.port = port;
this.interval = interval;
this.cmd = cmd;
this.cmd_Welding = cmd_Welding;
this.Id = Id;
this.Name = Name;
this.Joints = Joints;
new Thread(new ThreadStart(delegate ()
{
while (isRun)
{
try
{
//var weldingStr = Read_Welding(cmd_Welding);
//switch (weldingStr.ToLower())
//{
// case "1":
// case "true":
// welding = 1;
// break;
// default:
// welding = 0;
// break;
//}
if (fanuc == null)
{
ReConnRobot();
}
var r = fanuc.ReadString(cmd);
OnLine = r.IsSuccess;
if (OnLine)
{
j = ReadResult_To_Array(r.Content);
}
else
{
Thread.Sleep(10 * 1000);
ReConnRobot();
continue;
}
for (int i = 0; i < Joints.Count; i++)
{
Joints[i].DeviceCode = $"ROBOT_FANUC_{ip.Split('.')[3]}";
Joints[i].Value = j[i].ToString();
}
//Joints[0].Value = j[0].ToString();
//Joints[1].Value = j[1].ToString();
//Joints[2].Value = j[2].ToString();
//Joints[3].Value = j[3].ToString();
//Joints[4].Value = j[4].ToString();
//Joints[5].Value = j[5].ToString();
//Joints[6].Value = j[6].ToString();
var payload = MesWorkForm.Move_Joint(Joints);
var md5Str = JsonConvert.SerializeObject(payload);
if (md5Pos != md5Str)
{
md5Pos = md5Str;
MesWorkForm.SendMsg(payload);//FANUC机床的轴位置
}
}
catch (Exception err) { }
Thread.Sleep(interval);
}
}))
{ IsBackground = true }.Start();
new Thread(new ThreadStart(delegate () {
while (isRun)
{
try
{
for (int i = 0; i < Joints.Count; i++)
{
Joints[i].DeviceCode = $"ROBOT_FANUC_{ip.Split('.')[3]}";
Joints[i].Value = j[i].ToString();
}
//Joints[0].Value = j[0].ToString();
//Joints[1].Value = j[1].ToString();
//Joints[2].Value = j[2].ToString();
//Joints[3].Value = j[3].ToString();
//Joints[4].Value = j[4].ToString();
//Joints[5].Value = j[5].ToString();
//Joints[6].Value = j[6].ToString();
var payload = MesWorkForm.Move_Joint(Joints);
MesWorkForm.SendMsg(payload);//FANUC机床的轴位置
UpdateDataToSql();
}
catch (Exception err) { }
Thread.Sleep(intervalUpdate);
}
}))
{ IsBackground = true }.Start();
}
public void TimelyUpdate()
{
var sendStr = MesWorkForm.Move_Joint(Joints);
MesWorkForm.SendMsg(sendStr);
}
~B_Robot_Fanuc()
{
FanucClose();
}
/// <summary>
///
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
public void FanucClose()
{
isRun = false;
Thread.Sleep(199);
fanuc?.ConnectClose();
}
/// <summary>
///
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
/// <returns></returns>
private void ReConnRobot()
{
if (MesWorkForm.IsDemoMesServer == 1)
{
fanuc = new FanucInterfaceNet();
return;
}
if (fanuc != null)
{
fanuc?.ConnectClose();
}
fanuc = new FanucInterfaceNet();
fanuc.IpAddress = ip;
fanuc.Port = port;
var connect = fanuc.ConnectServer();
if (connect.IsSuccess)
{
}
}
public void DisConn()
{
if (fanuc != null)
{
fanuc?.ConnectClose();
}
}
/// <summary>
///
/// </summary>
/// <param name="j1_6"></param>
/// <returns></returns>
private double[] ReadResult_To_Array(string readResult)
{
if (MesWorkForm.IsDemoMesServer == 1)
{
return jDemo;
}
double[] joint = new double[12];
var recdata = readResult;
var jsc = ((JObject)JsonConvert.DeserializeObject(recdata))["Joint"];
joint[0] = Convert.ToDouble(jsc[0]);
joint[1] = Convert.ToDouble(jsc[1]);
joint[2] = Convert.ToDouble(jsc[2]);
joint[3] = Convert.ToDouble(jsc[3]);
joint[4] = Convert.ToDouble(jsc[4]);
joint[5] = Convert.ToDouble(jsc[5]);
joint[6] = Convert.ToDouble(jsc[6]);
joint[7] = Convert.ToDouble(jsc[7]);
joint[8] = Convert.ToDouble(jsc[8]);
joint[9] = Convert.ToDouble(0);
joint[10] = Convert.ToDouble(0);
joint[11] = Convert.ToDouble(0);
joint = new double[]
{
//Math.Round(Convert.ToDouble(joint[0])*Math.PI/180,4),
//Math.Round(Convert.ToDouble(joint[1])*Math.PI/180,4),
//Math.Round(( Convert.ToDouble(joint[2])+ Convert.ToDouble(joint[1]))*Math.PI/180 ,4),
//Math.Round(Convert.ToDouble(joint[3])*Math.PI/180,4),
//Math.Round(Convert.ToDouble(joint[4])*Math.PI/180,4),
//Math.Round(Convert.ToDouble(joint[5])*Math.PI/180,4),
//Convert.ToDouble(joint[6])/1000,
//Convert.ToDouble(joint[7])/1000,
//Convert.ToDouble(joint[8])/1000
Math.Round(Convert.ToDouble(joint[0]),2),
Math.Round(Convert.ToDouble(joint[1]),2),
Math.Round((Convert.ToDouble(joint[2])+ Convert.ToDouble(joint[1])) ,2),
Math.Round(Convert.ToDouble(joint[3]),2),
Math.Round(Convert.ToDouble(joint[4]),2),
Math.Round(Convert.ToDouble(joint[5]),2),
Convert.ToDouble(joint[6])/1000,
Convert.ToDouble(joint[7])/1000,
Convert.ToDouble(joint[8])/1000,
Convert.ToDouble(joint[9]),
Convert.ToDouble(joint[10]),
Convert.ToDouble(joint[11])
};
return joint;
}
/// <summary>
/// 读取数据
/// </summary>
/// <param name="addr"></param>
/// <returns></returns>
public string Read_Welding(string addr)
{
string str = "-1";
//if (kuka != null)
//{
// var r = kuka.ReadString(addr);
// if (r.IsSuccess)
// {
// str = r.Content;
// }
//}
return str;
}
/// <summary>
/// 手动测试读取
/// </summary>
/// <param name="j1_6"></param>
/// <param name="j7"></param>
/// <returns></returns>
public string ReadTest(string robotName)
{
return "【" + robotName + "】" + MesWorkForm.Move_Joint(Joints);
}
public void UpdateDataToSql()
{
StoredProcedure("Event_Robot_Update");
}
private void StoredProcedure(string pName)
{
//var sqlParameter = new SqlParameter[] {
// new SqlParameter("@DeviceCode", DeviceCode),
// new SqlParameter("@Online", OnLine),
// new SqlParameter("@StationName", OpName),
// new SqlParameter("@SlaveAddr", $"{ip}:{port}"),
// new SqlParameter("@Joint1", j[0]),
// new SqlParameter("@Joint2", j[1]),
// new SqlParameter("@Joint3", j[2]),
// new SqlParameter("@Joint4", j[3]),
// new SqlParameter("@Joint5", j[4]),
// new SqlParameter("@Joint6", j[5]),
// new SqlParameter("@Joint7", j[6]),
// new SqlParameter("@Joint8", j[7]),
// new SqlParameter("@Joint9", j[8]),
// new SqlParameter("@Joint10",j[9]),
// new SqlParameter("@Joint11",j[10]),
// new SqlParameter("@Joint12",j[11]),
// new SqlParameter("@Clamp", welding)
// };
//MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
//{
// procedureName = pName,
// sqlParameter = sqlParameter
//});
}
}
}

View File

@@ -0,0 +1,386 @@
using System;
using System.Data;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows.Forms;
using System.Collections.Generic;
using Newtonsoft.Json;
using HslCommunication.Robot.FANUC;
using HslCommunication.Robot.KUKA;
namespace MesWork
{
public partial class Temp { }
public partial class B_Robot_Kuka
{
/// <summary>
///
/// </summary>
private KukaAvarProxyNet kuka = null;
/// <summary>
///
/// </summary>
public bool OnLine = false;
/// <summary>
///
/// </summary>
private string ip = "-1";
/// <summary>
///
/// </summary>
private int port = -1;
/// <summary>
///
/// </summary>
private int interval = -1;
/// <summary>
///
/// </summary>
private bool isRun = true;
/// <summary>
///
/// </summary>
private string cmd = "";
/// <summary>
///
/// </summary>
private string cmd_Welding = "";
/// <summary>
///
/// </summary>
string sendV_Temp = "-1";
/// <summary>
///
/// </summary>
public double[] j = new double[12];
/// <summary>
///
/// </summary>
public double[] jDemo = new double[12];
/// <summary>
/// 记录老值
/// </summary>
string axis_act_Old = "-1";
/// <summary>
/// 焊接中
/// </summary>
int welding = 0;
/// <summary>
///
/// </summary>
public string Id = "-1";
/// <summary>
///
/// </summary>
string Name = "";
/// <summary>
///
/// </summary>
public List<JointConfig> Joints = null;
/// <summary>
///
/// </summary>
public string md5Pos = "";
/// <summary>
///
/// </summary>
public B_Robot_Kuka()
{
}
/// <summary>
///
/// </summary>
/// <param name="ipPort"></param>
/// <param name="interval"></param>
/// <param name="j1_6"></param>
/// <param name="modelManagement"></param>
/// <param name="modelCode"></param>
public void Start(string ip, int port,int interval, int intervalUpdate, string cmd, string cmd_Welding, string DeviceCode, string OpName, List<JointConfig> Joints)
{
this.ip = ip;
this.port = port;
this.interval = interval;
this.cmd = cmd;
this.cmd_Welding = cmd_Welding;
this.Id = DeviceCode;
this.Name = OpName;
this.Joints = Joints;
new Thread(new ThreadStart(delegate ()
{
while (isRun)
{
try
{
//var weldingStr = Read_Welding(cmd_Welding);
//switch (weldingStr.ToLower())
//{
// case "1":
// case "true":
// welding = 1;
// break;
// default:
// welding = 0;
// break;
//}
if (kuka == null)
{
ReConnRobot();
}
var r = kuka.ReadString(cmd);
OnLine = r.IsSuccess;
if (OnLine)
{
j = ReadResult_To_Array(r.Content);
}
else
{
Thread.Sleep(10 * 1000);
ReConnRobot();
continue;
}
for (int i = 0; i < Joints.Count ; i++)
{
Joints[i].DeviceCode = $"ROBOT_KUKA_{ip.Split('.')[3]}";
Joints[i].Value = j[i].ToString();
}
//Joints[0].Value = j[0].ToString();
//Joints[1].Value = j[1].ToString();
//Joints[2].Value = j[2].ToString();
//Joints[3].Value = j[3].ToString();
//Joints[4].Value = j[4].ToString();
//Joints[5].Value = j[5].ToString();
//Joints[6].Value = j[6].ToString();
var payload = MesWorkForm.Move_Joint(Joints);
var md5Str = JsonConvert.SerializeObject(payload);
if (md5Pos != md5Str)
{
md5Pos = md5Str;
MesWorkForm.SendMsg(payload);
}
}
catch (Exception err) { }
Thread.Sleep(interval);
}
}))
{ IsBackground = true }.Start();
new Thread(new ThreadStart(delegate () {
while (isRun)
{
try
{
for (int i = 0; i < Joints.Count; i++)
{
Joints[i].DeviceCode = $"ROBOT_KUKA_{ip.Split('.')[3]}";
Joints[i].Value = j[i].ToString();
}
//Joints[0].Value = j[0].ToString();
//Joints[1].Value = j[1].ToString();
//Joints[2].Value = j[2].ToString();
//Joints[3].Value = j[3].ToString();
//Joints[4].Value = j[4].ToString();
//Joints[5].Value = j[5].ToString();
//Joints[6].Value = j[6].ToString();
var payload = MesWorkForm.Move_Joint(Joints);
MesWorkForm.SendMsg(payload);//FANUC机床的轴位置
UpdateDataToSql();
}
catch (Exception err)
{ }
Thread.Sleep(intervalUpdate);
}
}))
{ IsBackground = true }.Start();
}
public void TimelyUpdate()
{
var sendStr = MesWorkForm.Move_Joint(Joints);
MesWorkForm.SendMsg(sendStr);
}
~B_Robot_Kuka()
{
DisConn();
}
/// <summary>
///
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
public void DisConn()
{
isRun = false;
Thread.Sleep(199);
kuka?.ConnectClose();
}
/// <summary>
///
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
/// <returns></returns>
/// <summary>
///
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
/// <returns></returns>
private void ReConnRobot()
{
if (MesWorkForm.IsDemoMesServer == 1)
{
kuka = new KukaAvarProxyNet();
return;
}
if (kuka != null)
{
kuka?.ConnectClose();
}
kuka = new KukaAvarProxyNet();
kuka.IpAddress = ip;
kuka.Port = port;
var connect = kuka.ConnectServer();
if (connect.IsSuccess)
{
}
}
/// <summary>
///
/// </summary>
/// <param name="j1_6"></param>
/// <returns></returns>
private double[] ReadResult_To_Array(string readResult)
{
//string readResult = "{E6AXIS: A1 -12.03, A2 -97.15, A3 116.47, A4 -30.16, A5 -23.85, A6 27.48, E1 0.0, E2 0.0, E3 0.0, E4 0.0, E5 0.0, E6 0.0}";
if (MesWorkForm.IsDemoMesServer == 1)
{
return jDemo;
}
var axis_act = readResult;
double[] joint = new double[12];
if (axis_act == "-1")
{
axis_act = axis_act_Old;
}
else
{
//axis_act = Regex.Split(axis_act, ", E4", RegexOptions.IgnoreCase)[0];
axis_act = Regex.Split(axis_act, "}", RegexOptions.IgnoreCase)[0];
axis_act = axis_act.Replace("{E6AXIS: A1 ", "").Replace(", A2 ", "&").Replace(", A3 ", "&").Replace(", A4 ", "&").Replace(", A5 ", "&").Replace(", A6 ", "&")
.Replace(", E1 ", "&").Replace(", E2 ", "&").Replace(", E3 ", "&").Replace(", E4 ", "&").Replace(", E5 ", "&").Replace(", E6 ", "&");
axis_act_Old = axis_act;
}
string[] jStr = axis_act.Split('&');
for (int i = 0; i < jStr.Length; i++)
{
joint[i] = Math.Round(Convert.ToDouble(jStr[i]), 2);
//joint[i] = Convert.ToDouble(jStr[i]);
//if (i == 6 | i == 7 | i == 8 | i == 9 | i == 10 | i == 11)
// joint[i] = Math.Round(joint[i] / 1000.0, 2);
//else
// joint[i] = Math.Round(joint[i] * Math.PI / 180, 2);
}
return joint;
}
/// <summary>
/// 读取数据
/// </summary>
/// <param name="addr"></param>
/// <returns></returns>
public string Read_Welding(string addr)
{
string str = "-1";
//if (kuka != null)
//{
// var r = kuka.ReadString(addr);
// if (r.IsSuccess)
// {
// str = r.Content;
// }
//}
return str;
}
/// <summary>
/// 手动测试读取
/// </summary>
/// <param name="j1_6"></param>
/// <param name="j7"></param>
/// <returns></returns>
public string ReadTest(string robotName)
{
return "【" + robotName + "】" + MesWorkForm.Move_Joint(Joints);
}
public void UpdateDataToSql()
{
StoredProcedure("Event_Robot_Update");
}
private void StoredProcedure(string pName)
{
//var sqlParameter = new SqlParameter[] {
// new SqlParameter("@DeviceCode", DeviceCode),
// new SqlParameter("@Online", OnLine),
// new SqlParameter("@StationName", OpName),
// new SqlParameter("@SlaveAddr", $"{ip}:{port}"),
// new SqlParameter("@Joint1", j[0]),
// new SqlParameter("@Joint2", j[1]),
// new SqlParameter("@Joint3", j[2]),
// new SqlParameter("@Joint4", j[3]),
// new SqlParameter("@Joint5", j[4]),
// new SqlParameter("@Joint6", j[5]),
// new SqlParameter("@Joint7", j[6]),
// new SqlParameter("@Joint8", j[7]),
// new SqlParameter("@Joint9", j[8]),
// new SqlParameter("@Joint10",j[9]),
// new SqlParameter("@Joint11",j[10]),
// new SqlParameter("@Joint12",j[11]),
// new SqlParameter("@Clamp", welding)
// };
//MesWorkForm.taskSql.Enqueue(new NJ_ZC.ParamT
//{
// procedureName = pName,
// sqlParameter = sqlParameter
//});
}
}
}

View File

@@ -0,0 +1,780 @@
//using ConLink.ModBus;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using static ConLink.BasicFramework.SoftBasic;
//using System.Threading;
//using System.Threading.Tasks;
//using System.Data.SqlClient;
///// <summary>
/////
///// </summary>
//namespace MesWork
///*
// public float Ua = 0f;
// public float Ub = 0f;
// public float Uc = 0f;
// public float Uab = 0f;
// public float Ubc = 0f;
// public float Uca = 0f;
// public float Ia = 0f;
// public float Ib = 0f;
// public float Ic = 0f;
// public float Pa = 0f;
// public float Pb = 0f;
// public float Pc = 0f;
// public float P = 0f;
// public float Qa = 0f;
// public float Qb = 0f;
// public float Qc = 0f;
// public float Q = 0f;
// public float Sa = 0f;
// public float Sb = 0f;
// public float Sc = 0f;
// public float S = 0f;
// public float PFa = 0f;
// public float PFb = 0f;
// public float PFc = 0f;
// public float PF = 0f;
// public float FR = 0f;
// public float Ep1 = 0f;
// public float Ep2 = 0f;
// public float Eq1 = 0f;
// public float Eq2 = 0f;
// */
///*
// @Ua REAL = 0,
// @Ub REAL = 0,
// @Uc REAL = 0,
// @Uab REAL = 0,
// @Ubc REAL = 0,
// @Uca REAL = 0,
// @Ia REAL = 0,
// @Ib REAL = 0,
// @Ic REAL = 0,
// @Pa REAL = 0,
// @Pb REAL = 0,
// @Pc REAL = 0,
// @P REAL = 0,
// @Qa REAL = 0,
// @Qb REAL = 0,
// @Qc REAL = 0,
// @Q REAL = 0,
// @Sa REAL = 0,
// @Sb REAL = 0,
// @Sc REAL = 0,
// @S REAL = 0,
// @PFa REAL = 0,
// @PFb REAL = 0,
// @PFc REAL = 0,
// @PF REAL = 0,
// @FR REAL = 0,
// @Ep1 REAL = 0,
// @Ep2 REAL = 0,
// @Eq1 REAL = 0,
// @Eq2 REAL = 0
// */
//{
// /// <summary>
// ///
// /// </summary>
// public class ElectricEnergyMeter
// {
// /// <summary>
// ///
// /// </summary>
// private string ip = "";
// /// <summary>
// ///
// /// </summary>
// private int port = 0;
// /// <summary>
// /// /
// /// </summary>
// private byte station = 0;
// /// <summary>
// ///
// /// </summary>
// private string opName = "";
// /// <summary>
// ///
// /// </summary>
// private int intervalRead = 1 * 1000;
// /// <summary>
// ///
// /// </summary>
// private int intervalUpdate = 5 * 1000;
// /// <summary>
// ///
// /// </summary>
// private int intervalInsert = 10 * 1000;
// /// <summary>
// ///
// /// </summary>
// private ModbusTcpNet mbt = null;
// /// <summary>
// ///
// /// </summary>
// private Thread tt = null;
// /// <summary>
// ///
// /// </summary>
// private Thread ttt = null;
// /// <summary>
// ///
// /// </summary>
// private Thread tttt = null;
// /// <summary>
// ///
// /// </summary>
// private string message = "00 00 00 00 00 06 01 03 00 00 00 3C";
// /// <summary>
// ///
// /// </summary>
// private int offset = 18;
// /// <summary>
// ///
// /// </summary>
// private int index = 0;
// /// <summary>
// ///
// /// </summary>
// public float Ua = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Ub = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Uc = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Uab = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Ubc = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Uca = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Ia = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Ib = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Ic = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Pa = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Pb = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Pc = 0f;
// /// <summary>
// ///
// /// </summary>
// public float P = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Qa = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Qb = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Qc = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Q = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Sa = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Sb = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Sc = 0f;
// /// <summary>
// ///
// /// </summary>
// public float S = 0f;
// /// <summary>
// ///
// /// </summary>
// public float PFa = 0f;
// /// <summary>
// ///
// /// </summary>
// public float PFb = 0f;
// /// <summary>
// ///
// /// </summary>
// public float PFc = 0f;
// /// <summary>
// ///
// /// </summary>
// public float PF = 0f;
// /// <summary>
// ///
// /// </summary>
// public float FR = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Ep1 = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Ep2 = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Eq1 = 0f;
// /// <summary>
// ///
// /// </summary>
// public float Eq2 = 0f;
// /// <summary>
// ///
// /// </summary>
// public void Start(string ip,int port,byte station,string opName,int intervalRead
// , int intervalUpdate ,int intervalInsert)
// {
// this.ip = ip;
// this.port = port;
// this.station = station;
// this.opName = opName;
// this.intervalRead = intervalRead;
// this.intervalUpdate = intervalUpdate;
// this.intervalInsert = intervalInsert;
// mbt = new ModbusTcpNet(ip, port, station);
// mbt.AddressStartWithZero = true ;
// mbt.SetLoginAccount("","");
// mbt.DataFormat = ConLink.Core.DataFormat.ABCD;
// mbt.IsStringReverse = false;
// var s = mbt.ConnectServer();
// var dfg = s.IsSuccess;
// tt = new Thread(new ThreadStart(Read));
// tt.IsBackground = true;
// tt.Start();
// ttt = new Thread(new ThreadStart(Update));
// ttt.IsBackground = true;
// ttt.Start();
// tttt = new Thread(new ThreadStart(Insert));
// tttt.IsBackground = true;
// tttt.Start();
// }
// /// <summary>
// ///
// /// </summary>
// private void Read()
// {
// while (true)
// {
// try
// {
// var read = mbt.ReadFromCoreServer(HexStringToBytes(this.message));
// if (read.IsSuccess)
// {
// var rc = read.Content;
// var str = ByteToHexString(rc);
// //str = "00000000001B010318199A435C199A435C199A435C199A435C199A435C199A435C";
// index = 0;
// Ua = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4,4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 1;
// Ub = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 2;
// Uc = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 3;
// Uab = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 4;
// Ubc = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 5;
// Uca = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 6;
// Ia = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 7;
// Ib = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 8;
// Ic = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 9;
// Pa = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 10;
// Pb = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 11;
// Pc = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 12;
// P = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 13;
// Qa = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 14;
// Qb = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 15;
// Qc = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 16;
// Q = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 17;
// Sa = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 18;
// Sb = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 19;
// Sc = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 20;
// S = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 21;
// PFa = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 22;
// PFb = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 23;
// PFc = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 24;
// PF = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 25;
// FR = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 26;
// Ep1 = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 27;
// Ep2 = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 28;
// Eq1 = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// index = 29;
// Eq2 = BitConverter.ToSingle(BitConverter.GetBytes(Convert.ToUInt32(
// str.Substring(offset + index * 8 + 4, 4) + str.Substring(offset + index * 8 + 0, 4)
// , 16)), 0);
// }
// else
// {
// Thread.Sleep(this.intervalRead * 3);
// }
// }
// catch (Exception err)
// {
// }
// Thread.Sleep(this.intervalRead);
// }
// }
// /// <summary>
// ///
// /// </summary>
// private void Update()
// {
// while (true)
// {
// try
// {
// ExecUpdate();
// }
// catch (Exception err)
// {
// }
// Thread.Sleep(this.intervalUpdate);
// }
// }
// /// <summary>
// ///
// /// </summary>
// private void Insert()
// {
// while (true)
// {
// try
// {
// ExecInsert();
// }
// catch (Exception err)
// {
// }
// Thread.Sleep(this.intervalInsert);
// }
// }
// /// <summary>
// ///
// /// </summary>
// private void ExecUpdate()
// {
// /*
// public float Ua = 0f;
// public float Ub = 0f;
// public float Uc = 0f;
// public float Uab = 0f;
// public float Ubc = 0f;
// public float Uca = 0f;
// public float Ia = 0f;
// public float Ib = 0f;
// public float Ic = 0f;
// public float Pa = 0f;
// public float Pb = 0f;
// public float Pc = 0f;
// public float P = 0f;
// public float Qa = 0f;
// public float Qb = 0f;
// public float Qc = 0f;
// public float Q = 0f;
// public float Sa = 0f;
// public float Sb = 0f;
// public float Sc = 0f;
// public float S = 0f;
// public float PFa = 0f;
// public float PFb = 0f;
// public float PFc = 0f;
// public float PF = 0f;
// public float FR = 0f;
// public float Ep1 = 0f;
// public float Ep2 = 0f;
// public float Eq1 = 0f;
// public float Eq2 = 0f;
// */
// UpdateCurr();
// }
// /// <summary>
// ///
// /// </summary>
// private void ExecInsert()
// {
// /*
// public float Ua = 0f;
// public float Ub = 0f;
// public float Uc = 0f;
// public float Uab = 0f;
// public float Ubc = 0f;
// public float Uca = 0f;
// public float Ia = 0f;
// public float Ib = 0f;
// public float Ic = 0f;
// public float Pa = 0f;
// public float Pb = 0f;
// public float Pc = 0f;
// public float P = 0f;
// public float Qa = 0f;
// public float Qb = 0f;
// public float Qc = 0f;
// public float Q = 0f;
// public float Sa = 0f;
// public float Sb = 0f;
// public float Sc = 0f;
// public float S = 0f;
// public float PFa = 0f;
// public float PFb = 0f;
// public float PFc = 0f;
// public float PF = 0f;
// public float FR = 0f;
// public float Ep1 = 0f;
// public float Ep2 = 0f;
// public float Eq1 = 0f;
// public float Eq2 = 0f;
// */
// InsertHis();
// }
// private bool UpdateCurr()
// {
// /*
// public float Ua = 0f;
// public float Ub = 0f;
// public float Uc = 0f;
// public float Uab = 0f;
// public float Ubc = 0f;
// public float Uca = 0f;
// public float Ia = 0f;
// public float Ib = 0f;
// public float Ic = 0f;
// public float Pa = 0f;
// public float Pb = 0f;
// public float Pc = 0f;
// public float P = 0f;
// public float Qa = 0f;
// public float Qb = 0f;
// public float Qc = 0f;
// public float Q = 0f;
// public float Sa = 0f;
// public float Sb = 0f;
// public float Sc = 0f;
// public float S = 0f;
// public float PFa = 0f;
// public float PFb = 0f;
// public float PFc = 0f;
// public float PF = 0f;
// public float FR = 0f;
// public float Ep1 = 0f;
// public float Ep2 = 0f;
// public float Eq1 = 0f;
// public float Eq2 = 0f;
// */
// var sqlParameter = new SqlParameter[] {
// new SqlParameter("@StationName", opName),
// new SqlParameter("@SlaveAddr", ip),
// new SqlParameter("@Ua", Ua),
// new SqlParameter("@Ub", Ub),
// new SqlParameter("@Uc", Uc),
// new SqlParameter("@Uab", Ua),
// new SqlParameter("@Ubc", Ub),
// new SqlParameter("@Uca", Uc),
// new SqlParameter("@Ia", Ia),
// new SqlParameter("@Ib", Ib),
// new SqlParameter("@Ic", Ic),
// new SqlParameter("@Pa", Pa),
// new SqlParameter("@Pb", Pb),
// new SqlParameter("@Pc", Pc),
// new SqlParameter("@P", Pa),
// new SqlParameter("@Qa", Qa),
// new SqlParameter("@Qb", Qb),
// new SqlParameter("@Qc", Qc),
// new SqlParameter("@Q", Q),
// new SqlParameter("@Sa", Sa),
// new SqlParameter("@Sb", Sb),
// new SqlParameter("@Sc", Sc),
// new SqlParameter("@S", S),
// new SqlParameter("@PFa", PFa),
// new SqlParameter("@PFb", PFb),
// new SqlParameter("@PFc", PFc),
// new SqlParameter("@PF", PF),
// new SqlParameter("@FR", FR),
// new SqlParameter("@Ep1", Ep1),
// new SqlParameter("@Ep2", Ep2),
// new SqlParameter("@Eq1", Eq1),
// new SqlParameter("@Eq2", Eq2)
// };
// return DataLinkMesWork.SQLCommon.ExecuteStoredProcedure("Event_Meter_Update",MesWorkForm.ConnectionString, ref sqlParameter, out string errorMessage);
// }
// private bool InsertHis()
// {
// /*
// public float Ua = 0f;
// public float Ub = 0f;
// public float Uc = 0f;
// public float Uab = 0f;
// public float Ubc = 0f;
// public float Uca = 0f;
// public float Ia = 0f;
// public float Ib = 0f;
// public float Ic = 0f;
// public float Pa = 0f;
// public float Pb = 0f;
// public float Pc = 0f;
// public float P = 0f;
// public float Qa = 0f;
// public float Qb = 0f;
// public float Qc = 0f;
// public float Q = 0f;
// public float Sa = 0f;
// public float Sb = 0f;
// public float Sc = 0f;
// public float S = 0f;
// public float PFa = 0f;
// public float PFb = 0f;
// public float PFc = 0f;
// public float PF = 0f;
// public float FR = 0f;
// public float Ep1 = 0f;
// public float Ep2 = 0f;
// public float Eq1 = 0f;
// public float Eq2 = 0f;
// */
// var sqlParameter = new SqlParameter[] {
// new SqlParameter("@StationName", opName),
// new SqlParameter("@SlaveAddr", ip),
// new SqlParameter("@Ua", Ua),
// new SqlParameter("@Ub", Ub),
// new SqlParameter("@Uc", Uc),
// new SqlParameter("@Uab", Ua),
// new SqlParameter("@Ubc", Ub),
// new SqlParameter("@Uca", Uc),
// new SqlParameter("@Ia", Ia),
// new SqlParameter("@Ib", Ib),
// new SqlParameter("@Ic", Ic),
// new SqlParameter("@Pa", Pa),
// new SqlParameter("@Pb", Pb),
// new SqlParameter("@Pc", Pc),
// new SqlParameter("@P", Pa),
// new SqlParameter("@Qa", Qa),
// new SqlParameter("@Qb", Qb),
// new SqlParameter("@Qc", Qc),
// new SqlParameter("@Q", Q),
// new SqlParameter("@Sa", Sa),
// new SqlParameter("@Sb", Sb),
// new SqlParameter("@Sc", Sc),
// new SqlParameter("@S", S),
// new SqlParameter("@PFa", PFa),
// new SqlParameter("@PFb", PFb),
// new SqlParameter("@PFc", PFc),
// new SqlParameter("@PF", PF),
// new SqlParameter("@FR", FR),
// new SqlParameter("@Ep1", Ep1),
// new SqlParameter("@Ep2", Ep2),
// new SqlParameter("@Eq1", Eq1),
// new SqlParameter("@Eq2", Eq2)
// };
// return DataLinkMesWork.SQLCommon.ExecuteStoredProcedure("Event_Meter_Insert", MesWorkForm.ConnectionString, ref sqlParameter, out string errorMessage);
// }
// }
//}

View File

@@ -0,0 +1,28 @@
using MesWork;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NJ_ZC
{
public class ParamT
{
public string procedureName
{
get;
set;
} = "";
public SqlParameter[] sqlParameter
{
get;
set;
}
}
}

154
DT_SCADA/Core/Load.cs Normal file
View File

@@ -0,0 +1,154 @@
using NJ_ZC;
using NPOI.SS.Formula.Functions;
using OpcBasic;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Windows.Forms;
using SystemFramework;
namespace MesWork
{
public partial class Temp { }
/// <summary>
///
/// </summary>
public partial class MesWorkForm
{
/// <summary>
///
/// </summary>
/// <param name="dt_Robot"></param>
private void LoadDevice(ScadaConfig appConfig)
{
foreach (var mu in appConfig.MachineTool)
{
var Enable = mu.Enable;
var Type = mu.Type;
var ConnectStr = mu.ConnectStr;
var Id = mu.Id;
var Name = mu.Name;
var DataTimeInterval = Convert.ToInt32(mu.DataTimeInterval);
var AxesTimeInterval = Convert.ToInt32(mu.AxesTimeInterval);
var Joints = mu.Joints;
var TagID_Clamp = mu.TagID_Clamp;
var IP = "";
var Port = 0;
if (Enable == "1")
{
switch (Type.ToUpper())
{
case "ROBOTFANUC":
{
if (!ConnectStr.Contains(":"))
{
MessageBox.Show("Json文件中ConnectStr 值格式错误!");
Process.GetCurrentProcess().Kill();
}
IP = ConnectStr.Split(':')[0];
Port = Convert.ToInt32(ConnectStr.Split(':')[1]);
var fanuc = new B_Robot_Fanuc();
fanuc.Start(IP, Port, AxesTimeInterval, DataTimeInterval, "CurrentPose", "", Id, Name, Joints);
dc_Robot.Add($"{Type}|{Id}", fanuc);
}
break;
case "ROBOTKUKA":
{
if (!ConnectStr.Contains(":"))
{
MessageBox.Show("Json文件中ConnectStr 值格式错误!");
Process.GetCurrentProcess().Kill();
}
IP = ConnectStr.Split(':')[0];
Port = Convert.ToInt32(ConnectStr.Split(':')[1]);
var kuka = new B_Robot_Kuka();
kuka.Start(IP, Port, AxesTimeInterval, DataTimeInterval, "$axis_act", "$OUT[8]", Id, Name, Joints);
dc_Robot.Add($"{Type}|{Id}", kuka);
}
break;
case "ROBOTABB":
{
if (!ConnectStr.Contains(":"))
{
MessageBox.Show("Json文件中ConnectStr 值格式错误!");
Process.GetCurrentProcess().Kill();
}
IP = ConnectStr.Split(':')[0];
var cname = ConnectStr.Split(':')[1];
var abb = new B_Robot_Abb();
abb.Start(IP, cname, AxesTimeInterval, DataTimeInterval, Id, Name, Joints);
dc_Robot.Add($"{Type}|{Id}", abb);
}
break;
case "ROBOTEPSON":
{
if (!ConnectStr.Contains(":"))
{
MessageBox.Show("Json文件中ConnectStr 值格式错误!");
Process.GetCurrentProcess().Kill();
}
IP = ConnectStr.Split(':')[0];
Port = Convert.ToInt32(ConnectStr.Split(':')[1]);
var espon = new B_Robot_Espon();
espon.Start(IP, Port, AxesTimeInterval, DataTimeInterval, Id, Name, Joints, TagID_Clamp);
dc_Robot.Add($"{Type}|{Id}", espon);
}
break;
case "AXIS":
{
var b_Read_N_Axis = new B_Read_N_Axis();
b_Read_N_Axis.Start(AxesTimeInterval, DataTimeInterval, ConnectStr, Joints, Id, Name);
dc_Name_Axis.Add($"{Type}|{Id}|{ConnectStr}", b_Read_N_Axis);
}
break;
case "AXIS_CARD":
{
var b_Read_N_AxisCard = new B_Read_N_AxisCard();
b_Read_N_AxisCard.Start(AxesTimeInterval, DataTimeInterval, ConnectStr, Joints);
dc_Name_Axis_Card.Add($"{Type}|{Id}|{ConnectStr}", b_Read_N_AxisCard);
}
break;
case "AGV":
{
agvRead = new AgvRead();
agvRead.Start(ConnectStr,AxesTimeInterval, DataTimeInterval, Id, Name);
}
break;
case "CNCEDM":
{
IP = ConnectStr.Split(':')[0];
Port = Convert.ToInt32(ConnectStr.Split(':')[1]);
var edm = new B_Cnc_Edm();
edm.Start(IP, Port, AxesTimeInterval, DataTimeInterval, Id, Name, Joints);
dc_Robot.Add($"{Type}|{Id}", edm);
}
break;
default:
break;
}
}
}
}
}
}

View File

@@ -0,0 +1,53 @@
using NJ_ZC;
using OpcBasic;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
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 { }
/// <summary>
///
/// </summary>
public partial class MesWorkForm
{
public void DisConnect()
{
try
{
foreach (var robot in new Dictionary<string,object>(dc_Robot))
{
var key = robot.Key;
var robotObj = robot.Value;
var type = key.Split('|')[0];
var robotCode = key.Split('|')[1];
switch (type)
{
case "FANUC":
((B_Robot_Fanuc)robotObj).DisConn();
break;
case "KUKA":
((B_Robot_Kuka)robotObj).DisConn();
break;
default:
break;
}
}
}
catch (Exception err){}
}
}
}

View File

@@ -0,0 +1,95 @@
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DatabaseClient
{
public class MysqlClient
{
public static bool ExecQuerySQL(string sql, string ConnectStr, out string err)
{
// lock (losk1) {
bool success = false;
err = "";
using (MySqlConnection conn = new MySqlConnection(ConnectStr))
{
try
{
conn.Open();
MySqlCommand command = new MySqlCommand(sql, conn);
command.ExecuteNonQuery();
success = true;
}
catch (Exception er)
{
err = er.Message;
}
finally
{
if (conn != null)
{
conn.Close();
}
}
}
return success;
// }
}
public static bool ExecQueryDataTable(string sql, string ConnectStr,out DataTable dt, out string err)
{
bool success = false;
err = "";
dt = null;
using (MySqlConnection conn = new MySqlConnection(ConnectStr))
{
try
{
conn.Open();
MySqlCommand command = new MySqlCommand(sql, conn);
MySqlDataAdapter da = new MySqlDataAdapter(command);
DataSet ds = new DataSet();
da.Fill(ds);
if (ds.Tables.Count > 0)
{
dt = ds.Tables[0];
}
success = true;
}
catch (Exception er)
{
err = er.Message;
}
finally
{
if (conn != null)
{
conn.Close();
}
}
}
return success;
}
}
}

View File

@@ -0,0 +1,113 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MesWork
{
public partial class QingYa_OP0010 { }
public partial class MesWorkForm
{
/// <summary>
///
/// </summary>
/// <param name="_Msg"></param>
public void LoadClientInfo(object _Msg)
{
try
{
string recStr = (string)_Msg;
string m_Source = recStr.Split('|')[0];
string cmd = recStr.Split('|')[1];
//string OpName = recStr.Split('|')[2];
//string tagValue = recStr.Split('|')[3];
switch (m_Source)
{
case "DT":
switch (cmd)
{
case "B_C_DT_WebLoaded":
new TaskFactory().StartNew(delegate () {
try
{
var tagList = DriverCache["Cache_Tag"];
foreach (var item in tagList)
{
var tf = (OpcBasic.TagFormat)item.Value;
var tagID = tf.TagID;
var tagValue = tf.TagValue.ToString();
var tagTypeID = Convert.ToInt32(tf.TagTypeID);
var tagTypeCodeID = (int)tf.TagTypeCodeID;
var opName = tf.OpName.ToString();
if (tagTypeID == 11)
{
switch (tagValue.ToUpper())
{
case "1":
case "TRUE":
tagValue = "1";
break;
default:
tagValue = "0";
break;
}
}
S_C_B_TagIDTrigger(opName,tagID, tagValue);
}
}
catch (Exception ew1) { }
//try
//{
// var from_to_loc = agvRead.ReadAgv();
// MesWorkForm.S_C_B_TagIDTrigger(agvRead.connectStr, agvRead.tagID, from_to_loc);
//}
//catch (Exception ew2) { }
});
break;
}
break;
case "MES":
switch (cmd)
{
case "B_C_DT_WebLoaded":
//string OpName = recStr.Split('|')[2];
//if (OpName == "AllOpName")
//{
// foreach (var fanucBaseNC in fanucBaseNCArray)
// {
// fanucBaseNC.SendDataReLoad();
// }
// return;
//}
//if (fanucBaseNCArray.FirstOrDefault(o => o.OpName == OpName) != null) {
// fanucBaseNCArray.FirstOrDefault(o => o.OpName == OpName).SendDataReLoad();
//}
// FanucBaseNC.SendStateDataFirst();
break;
default:
break;
}
break;
}
}
catch (Exception err) { }
}
}
}

View File

@@ -0,0 +1,275 @@
using HslCommunication;
using HslCommunication.Core.Net;
using HslCommunication.Enthernet;
using MQTTnet;
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client.Options;
using MQTTnet.Client.Receiving;
using MQTTnet.Extensions.ManagedClient;
using MQTTnet.Formatter;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
/// <summary>
///
/// </summary>
namespace MesWork
{
/// <summary>
///
/// </summary>
public partial class Temp { }
/// <summary>
///
/// </summary>
public partial class MesWorkForm
{
/// <summary>
///
/// </summary>
public static NetComplexClient complexClient = null;
/// <summary>
///
/// </summary>
static private IManagedMqttClient mqttClient = null;
/// <summary>
///
/// </summary>
string topic = "";
/// <summary>
///
/// </summary>
static bool OnLine_Mqtt = false;
/// <summary>
///
/// </summary>
/// <param name="uri"></param>
/// <returns></returns>
public async Task StartAsync(string uri)
{
var array = uri.Split(new char[] { ':', ',' });
string mqttUser = array[2];
string mqttPassword = "";
var options = new MqttClientOptions
{
ClientId = $"{mqttUser}_{Guid.NewGuid().ToString()}",
ProtocolVersion = MqttProtocolVersion.V311,
ChannelOptions = new MqttClientTcpOptions { Server = array[0], Port = Convert.ToInt32(array[1]) },
CleanSession = true,
KeepAlivePeriod = TimeSpan.FromSeconds(15),
Credentials = new MqttClientCredentials
{
Username = mqttUser,
Password = Encoding.UTF8.GetBytes(mqttPassword)
}
};
mqttClient = new MqttFactory().CreateManagedMqttClient();
mqttClient.ConnectedHandler = new MqttClientConnectedHandlerDelegate(OnSubscriberConnected);
mqttClient.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(OnSubscriberDisconnected);
mqttClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(OnSubscriberMessageReceived);
await mqttClient.StartAsync(new ManagedMqttClientOptions { ClientOptions = options });
this.topic = array[2];
await mqttClient.SubscribeAsync(new MqttTopicFilter { Topic = topic });
}
/// <summary>
///
/// </summary>
/// <param name="MesServer_IpPortName"></param>
private void ClientConnection(string MesServer_IpPortName)
{
string serverIP = MesServer_IpPortName.Split(':')[0];
string portString = MesServer_IpPortName.Split(':')[1].Split(',')[0];
string opNameSocket = MesServer_IpPortName.Split(',')[1];
if (!IPAddress.TryParse(serverIP, out IPAddress address))
{
return;
}
if (!int.TryParse(portString, out int port))
{
return;
}
try
{
// 连接 connect
complexClient = new NetComplexClient();
complexClient.ClientAlias = opNameSocket;
complexClient.EndPointServer = new IPEndPoint(address, port);
//complexClient.Token = new Guid(textBox3.Text);
complexClient.AcceptString += ComplexClient_AcceptString;
complexClient.MessageAlerts += ComplexClient_MessageAlerts;
complexClient.ClientStart();
}
catch (Exception ex)
{
HslCommunication.BasicFramework.SoftBasic.ShowExceptionMessage(ex);
}
}
/// <summary>
///
/// </summary>
/// <param name="publish_topic"></param>
/// <param name="publish_msg"></param>
/// <returns></returns>
private static async Task Publish(string publish_topic, string publish_msg)
{
if (mqttClient != null)
{
await mqttClient.PublishAsync(new MqttApplicationMessageBuilder().WithTopic(publish_topic).WithPayload(publish_msg).WithAtMostOnceQoS().Build());
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
private async Task DisConnectService()
{
if (mqttClient != null)
{
await mqttClient.UnsubscribeAsync(new string[] { topic });
await mqttClient.StopAsync();
}
}
/// <summary>
///
/// </summary>
/// <param name="text"></param>
private void ComplexClient_MessageAlerts(string text)
{
//if (InvokeRequired)
//{
// Invoke(new Action<string>(ComplexClient_MessageAlerts), text);
// return;
//}
}
/// <summary>
/// 连接完成
/// </summary>
/// <param name="x"></param>
private void OnSubscriberConnected(MqttClientConnectedEventArgs x)
{
OnLine_Mqtt = true;
// textBox1_robotData.Text += "连接完成" + "\r\n";
var rec = x.AuthenticateResult.ResultCode.ToString();
// label_State.Text = rec;
// textBox1_robotData.Text += rec + "\r\n";
}
/// <summary>
/// 断开连接
/// </summary>
/// <param name="x"></param>
private void OnSubscriberDisconnected(MqttClientDisconnectedEventArgs x)
{
OnLine_Mqtt = false;
try
{
// textBox1_robotData.Text += "断开连接" + "\r\n";
var rec = x.ClientWasConnected.ToString();
// textBox1_robotData.Text += rec + "\r\n";
}
catch (Exception err)
{
// textBox1_robotData.Text += $"Message:{err.Message}\r\n\r\nStackTrace:{err.StackTrace}" + "\r\n";
}
}
/// <summary>
/// 接收信息
/// </summary>
/// <param name="x"></param>
private void OnSubscriberMessageReceived(MqttApplicationMessageReceivedEventArgs x)
{
var recStr = x.ApplicationMessage.ConvertPayloadToString();
ThreadPool.QueueUserWorkItem(LoadClientInfo, recStr);
}
/// <summary>
/// 接收消息
/// </summary>
/// <param name="arg1"></param>
/// <param name="arg2"></param>
/// <param name="arg3"></param>
private void ComplexClient_AcceptString(AppSession arg1, NetHandle arg2, string arg3)
{
ThreadPool.QueueUserWorkItem(LoadClientInfo, (string)arg3);
}
public static void SendMsg(string str)
{
try
{
switch (ConnectType)
{
case 1:
complexClient.Send(1, str);
break;
case 2:
//var s = $"{MqttTargetTopic}\\?";
//var sendString = Regex.Split(str, s, RegexOptions.IgnoreCase);
//TOBS??SCADAMain?DT|C_B_JointMoveTo|
var topic = $"{str.Split('?')[2]}";
var content = $"{str.Split('?')[3]}";
Publish(topic, content);
break;
default:
break;
}
}
catch (Exception err)
{
}
}
public static void SendMsg(string opName, string topic, string content)
{
try
{
switch (ConnectType)
{
case 1:
complexClient.Send(1, content);
break;
case 2:
Publish(topic + opName, content);
break;
default:
break;
}
}
catch (Exception err)
{
}
}
private void ConnectService()
{
switch (ConnectType)
{
case 1:
ClientConnection(IpPortSub);
break;
case 2:
var _task = StartAsync(IpPortSub);
break;
default:
break;
}
}
}
}

View File

@@ -0,0 +1,103 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MesWork
{
public class ToolInfo
{
public string Name { get; set; }
public string TimeRated { get; set; }
public string TimeUsed { get; set; }
}
public class AxisInfo
{
public string AxisName { get; set; }
public string AxisValue { get; set; }
}
public class ParameterInfo
{
public string ParameterName { get; set; }
public string ParameterValue { get; set; }
}
public class AlarmInfo
{
public string AlarmCode { get; set; } = "83721";
public string Alarm { get; set; } = "该吃饭了!";
public string AlarmTime { get; set; } = DateTime.Now.ToString();
}
public class TipInfo
{
public string TipCode { get; set; } = "1123";
public string Tip { get; set; } = "该睡觉了!";
public string TipTime { get; set; } = DateTime.Now.ToString();
}
public class DeviceInfo
{
public string order { get; set; } = "";
public string Name { get; set; } = "";
public string Id { get; set; } = "";
public string Status { get; set; } = "";
public string Program { get; set; } = "";
public string Feed { get; set; } = "";
public string Speed { get; set; } = "";
public string Rapid { get; set; } = "";
public string ProgramStatus { get; set; } = "";
/// <summary>
/// 电流
/// </summary>
public string Current { get; set; } = "";
/// <summary>
/// 电压
/// </summary>
public string Voltage { get; set; } = "";
public ToolInfo Tool { get; set; } = new ToolInfo();
public List<AxisInfo> Axis { get; set; } = new List<AxisInfo>();
public List<ParameterInfo> OtherParameter { get; set; } = new List<ParameterInfo>();
public List<AlarmInfo> Alarm { get; set; } = new List<AlarmInfo>();
public List<TipInfo> Tip { get; set; } = new List<TipInfo>();
}
public class JointConfig
{
public string DeviceCode { get; set; }
public string JointName { get; set; }
public string ModelCode { get; set; }
public string JointType { get; set; }
public string Axis { get; set; }
public string Flip { get; set; }
public string Value { get; set; }
public string ValueFactor { get; set; }
public string Delta { get; set; }
}
public class MachineToolConfig
{
public string Enable { get; set; }
public string Type { get; set; }
public string ConnectStr { get; set; }
public string Id { get; set; }
public string Name { get; set; }
public string DataTimeInterval { get; set; }
public string AxesTimeInterval { get; set; }
public List<JointConfig> Joints { get; set; }
public string TagID_Clamp { get; set; }
}
public class ScadaConfig
{
public List<MachineToolConfig> MachineTool { get; set; }
}
}

View File

@@ -0,0 +1,67 @@
using Newtonsoft.Json;
using Opc.Ua;
using OpcBasic;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Threading;
namespace MesWork
{
public partial class Temp { }
public partial class MesWorkForm
{
/// <summary>
/// 01
/// </summary>
/// <param name="opName"></param>
/// <param name="tagID"></param>
/// <param name="tagValue"></param>
public static void S_C_B_TagIDTrigger(string opName, string tagID, string tagValue)
{
SendMsg(MesServer_SendProtocol_Tag + "{\"DeviceCode\":\"" + opName + "\",\"TagID\":\"" + tagID + "\",\"TagValue\":\"" + tagValue + "\"}");
}
/// <summary>
/// 02
/// </summary>
/// <param name="joints"></param>
/// <returns></returns>
public static string Move_Joint(List<JointConfig> joints)
{
var sendStr = MesServer_SendProtocol_Joint + JsonConvert.SerializeObject(joints);
return sendStr;
}
/// <summary>
/// 11
/// </summary>
/// <param name="tagValue"></param>
public static void S_C_B_Info_Fast(List<JointConfig> tagValue)
{
SendMsg(MesServer_SendProtocol_Info_Fast + JsonConvert.SerializeObject(tagValue));
}
/// <summary>
/// 12
/// </summary>
/// <param name="tagValue"></param>
public static void S_C_B_Info_Slow(Param_Slow tagValue)
{
SendMsg(MesServer_SendProtocol_Info_Slow + JsonConvert.SerializeObject(tagValue));
}
public static string Make_DeviceInfo(List<DeviceInfo> di)
{
var sendStr = MesServer_SendProtocol_DeviceInfo + JsonConvert.SerializeObject(di);
return sendStr;
}
}
}

View File

@@ -0,0 +1,466 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
///1 X WorkStart 2 工件到位(PLC) 工件到位。托盘到达工位,并且托盘上有工件。
///2 X RepairPartStatusPLC 3 RepairPartStatusPLC 备用
///3 STRING RepairPathString 4 RepairPathString "工位返修字符串121211112222111,前2位是西门子字符串格式第一位是总长度第二位是实际长度"
///4 X EngineTypeGetOverMES 5 传递机型(MES) MES传递总成信息给PLC上线工位
///5 X PartPalletGoOver 6 PartPalletGoOver 上线工位。0正常工作1空托盘放行PLC读取到此标志不走申请上线逻辑。
///6 X MaterialVerifyOver 7 MaterialVerifyOver MES保存完质量数据物料数据等与PLC信号交互完成后通知PLC所以工步都完成才可以放行工件正常工作时工件放行的必要条件。
///7 X FalseGo 8 FalseGo 按MES界面[不合格放行]按钮MES发送此信号。操作者判断工件不合格通知设备按不合格方式放行工件工件流转到返修下线工位后返修下线。MES工作完成MES0.3=1MES合格放行MES0.5=0MES0.4=1
///8 INT EngineTypeID 9 EngineTypeID MES发动机机型标志(必须PLC)
///9 STRING EngineID 10 EngineID MES发动机编号(必须PLC)
///10 STRING EngineType 11 机型(MES) MES发动机机型(必须PLC)
///11 X PartPalletStatus 13 PartPalletStatus MES激发变量托盘到位离开(必须PLC)
///12 X HeartBeatPLC 14 HeartBeatPLC 心跳处理PLC收到MES心跳信号后PLC延时5秒后数值取反再写回PLC写回PLC开始计时如果5秒钟MES无反馈报通讯故障。
///13 X HeartBeatMIS 15 HeartBeatMIS 间隔时间5S心跳处理。收到PLC心跳信号后MES按原值回写。PLC收到MES信号后延时5秒取反写入以此循环。
///14 X TargetTimeRead 16 TargetTimeRead MES允许可读工位运行时间
///15 Int MachineTargetTime 17 MachineTargetTime 目标运行时间
///16 Int MachineActualTime 18 MachineActualTime 实际运行时间
///17 X MesRead 19 允许保存(PLC) 质量数据可以读数据
///18 X MesReadOver 20 保存完成(MES) MES保存完数据(必须MIS)
///19 INT QualityMask 21 合格标志(PLC) 质量数据工位合格标志0:没有工作1合格 2 :不合格(必须PLC)
///20 B PalletInfo 22 PalletInfo 0空托盘1合格件2不合格件
///21 INT RepairStatusPLC 23 RepairStatusPLC 0正常件1返修件
///22 INT OrderNo 24 订单号(MES) 订单号(MES)
///23 X StorageNo 25 库位号(MES) 库位号(MES)
///24 X AllowPass 26 允许放行(MES) 允许放行
///25 X PartLoadFinish 27 PartLoadFinish PartLoadFinish
///26 X Reserved_7 28 Reserved_7 备用
///27 X Reserved_8 29 Reserved_8 备用
///28 X Reserved_9 30 Reserved_9 备用
///29 X Reserved_10 31 Reserved_10 备用
///30 X Reserved_11 32 Reserved_11 备用
///31 X Reserved_12 33 Reserved_12 备用
///32 X Reserved_13 34 Reserved_13 备用
///33 X Reserved_14 35 Reserved_14 备用
///34 Int PLCSPareint1 36 PLCSPareint1 备用
///35 Int PLCSPareint2 37 PLCSPareint2 备用
///36 Int PLCSPareint3 38 PLCSPareint3 备用
///37 STRING PLCSarestring1 39 PLCSarestring1 备用
///38 STRING PLCSarestring2 40 PLCSarestring2 备用
///39 STRING MarkID 42 MarkID 机体打标号MES前2位是西门子字符串格式第一位是总长度第二位是实际长度
///40 X PartLoad 43 PartLoad 上线工位PLC向MES申请总成编号。收到该信号后MES将机型标志DBB22 ~23、总成号DBB24 ~63、总成机型DBB64 ~103写入PLC。之后MES通过信号“传递机型DBX0.1”通知PLC。
///41 X EngineTypeGetOverPLC 44 传递机型PLC PLC将机型标志DBB50…51、工件编号DBB52…101、产品型号DBB102…187、托盘编号DBB188…189准备完毕后通知MES。
///42 X PartLoadOK 48 PartLoadOK 备用
///43 X Reserved_18 49 Reserved_18 备用
///44 X PalletDown 50 PalletDown 暂时保留,项目未使用
///45 X ConfirmOkGo 51 ConfirmOkGo 按MES界面[合格放行]按钮MES发送此信号。操作者判断工件合格通知设备工件按合格方式放行工件。MES工作完成MES0.3=1MES合格放行MES0.5=1MES0.4=0
///46 X ResetDevice 52 ResetDevice 针对手动工位无HMI需要复位设备在MES页面操作。
///47 X UnloadCompleted 53 UnloadCompleted 暂时保留,项目未使用
///48 X MachineTime_ReadOver 54 MachineTime_ReadOver 备用
///49 X Reserved_19 58 Reserved_19 备用
///50 X FixOK 59 FixOK 手动拧紧工位单工步螺栓拧紧完成通知PC读取数据。
///51 X Reserved_21 61 Reserved_21 备用
///52 X Reserved_22 62 Reserved_22 备用
///53 X Reserved_23 63 Reserved_23 备用
///54 X Reserved_24 64 Reserved_24 备用
///55 X Reserved_25 65 Reserved_25 备用
///56 X FixAllow 66 FixAllow "设备工作的必须信号,对于有物料验证的工位MES验证完成给出此信号对于无物料验证工位MES直接给出此信号。"
///57 X FixOver 67 FixOver 用于手动拧紧且有质量数据工位。通知设备当前工步拧紧螺钉工作结束。
///58 X MatchingCompleted 68 MatchingCompleted 分线上总线匹配成功是1不成功是0。
///59 X Match 69 Match 分线上总线匹配成功是1不成功是0。
///60 X Reserved_2 70 Reserved_2 备用
///61 X IsAutoGetEngineID 71 IsAutoGetEngineID 自动手动申请工件编号。0是自动方式1手动方式。暂时保留生成流水号方式是在数据库中实现的
///62 X RepairUplineMES 72 RepairUplineMES 上线清空MOBY针对上线工位通知PLC从新开始申请上线流程
///63 INT EngineTypeID_MES 73 机型代码(MES) MES发动机机型标志(必须MES)
///64 STRING EngineID_MES 74 工件编号(MES) MES发动机编号(必须MES)
///65 STRING EngineType_MES 75 EngineType_MES MES发动机机型(必须MES)
///66 X Reserved_20 76 Reserved_20 备用
///67 INT ProcessCode 77 ProcessCode 手动拧紧工位由MES通知PLC拧紧序号
///68 B OnLineState 79 OnLineState 通过线体工位PC实现下达工位工作状态工位有三种状态在线、离线、屏蔽。在线0正常状态实现正常功能。1离线:设备脱离MES工作进入不交互模式。
///69 INT PartPalletCode 80 托盘号(MES) 托盘编号(B5A)
///70 INT BoltCode 88 BoltCode 手动拧紧工位指导PLC所用套筒
///71 INT RepairStatus 93 RepairStatus "0正常件1返修件。对于上线工位MES给出是正常上线还是返修上线,返修路径"
///72 DInt Reserved_15 110 Reserved_15 备用
///73 DInt Reserved_16 111 Reserved_16 备用
///74 B Reserved_17 112 Reserved_17 备用
///75 INT SPareint1 113 SPareint1 备用int1
///76 INT SPareint2 114 SPareint2 备用int2
///77 INT SPareint3 115 SPareint3 备用int3
///78 STRING Sparestring1 116 Sparestring1 备用字符串1
///79 STRING Sparestring2 117 Sparestring2 备用字符串2
///80 X MachineStatusPutOn 1000 机床上电(PLC) 机床上电(必须PLC)
///81 X MachineStatusWorkOn 1001 循环开始(PLC) 循环开始(必须PLC)
///82 X MachineStatusAlarm 1002 设备报警(PLC) 机床故障(必须PLC)
///83 X MachineStatusNoPart 1003 MachineStatusNoPart 上料无件(必须PLC)
///84 X MachineStatusBlock 1004 MachineStatusBlock 下料堵塞(必须PLC)
namespace MesWork
{
/// <summary>
/// 这是变量类型代码的配置,几乎是不变的
/// 请不要随意修改,为了保证变量版本同一,并且方便维护,请联系发行人修改!
/// 请注意,此修改为全局修改!
/// </summary>
public enum EnumTagTypeCodeID
{
/// <summary>
/// 工件到位(PLC)
/// 变量类型Bool
/// 解释:托盘到达工位,并且托盘上有工件。
/// </summary>
WorkStart = 2,
/// <summary>
///
/// </summary>
RepairPartStatusPLC = 3,
/// <summary>
/// 工位返修字符串
/// 变量类型String
/// 解释:工位返修字符串
/// </summary>
RepairPathString = 4,
/// <summary>
/// 传递机型(MES)
/// 变量类型Bool
/// 解释MES传递总成信息给PLC上线工位
/// </summary>
EngineTypeGetOverMES = 5,
/// <summary>
///
/// </summary>
PartPalletGoOver = 6,
/// <summary>
///
/// </summary>
MaterialVerifyOver = 7,
/// <summary>
///
/// </summary>
FalseGo = 8,
/// <summary>
///
/// </summary>
EngineTypeID = 9,
/// <summary>
///
/// </summary>
EngineID = 10,
/// <summary>
/// 机型(MES)
/// 变量类型String
/// </summary>
EngineType = 11,
/// <summary>
///
/// </summary>
PartPalletStatus = 13,
/// <summary>
///
/// </summary>
HeartBeatPLC = 14,
/// <summary>
///
/// </summary>
HeartBeatMIS = 15,
/// <summary>
///
/// </summary>
TargetTimeRead = 16,
/// <summary>
///
/// </summary>
MachineTargetTime = 17,
/// <summary>
///
/// </summary>
MachineActualTime = 18,
/// <summary>
/// 允许保存(PLC)
/// 变量类型Bool
/// </summary>
MesRead = 19,
/// <summary>
/// 保存完成(MES)
/// 变量类型Bool
/// </summary>
MesReadOver = 20,
/// <summary>
/// 合格标志(PLC)
/// 变量类型Int
/// </summary>
QualityMask = 21,
/// <summary>
///
/// </summary>
PalletInfo = 22,
/// <summary>
///
/// </summary>
RepairStatusPLC = 23,
/// <summary>
/// 订单号(MES)
/// 变量类型Int
/// </summary>
OrderNo = 24,
/// <summary>
/// 库位号(MES)
/// 变量类型Bool
/// </summary>
StorageNo = 25,
/// <summary>
/// 允许放行(MES)
/// 变量类型Bool
/// </summary>
AllowPass = 26,
/// <summary>
///
/// </summary>
PartLoadFinish = 27,
/// <summary>
///
/// </summary>
Reserved_7 = 28,
/// <summary>
///
/// </summary>
Reserved_8 = 29,
/// <summary>
///
/// </summary>
Reserved_9 = 30,
/// <summary>
///
/// </summary>
Reserved_10 = 31,
/// <summary>
///
/// </summary>
Reserved_11 = 32,
/// <summary>
///
/// </summary>
Reserved_12 = 33,
/// <summary>
///
/// </summary>
Reserved_13 = 34,
/// <summary>
///
/// </summary>
Reserved_14 = 35,
/// <summary>
///
/// </summary>
PLCSPareint1 = 36,
/// <summary>
///
/// </summary>
PLCSPareint2 = 37,
/// <summary>
///
/// </summary>
PLCSPareint3 = 38,
/// <summary>
///
/// </summary>
PLCSarestring1 = 39,
/// <summary>
///
/// </summary>
PLCSarestring2 = 40,
/// <summary>
///
/// </summary>
MarkID = 42,
/// <summary>
///
/// </summary>
PartLoad = 43,
/// <summary>
/// 传递机型PLC
/// 变量类型Bool
/// </summary>
EngineTypeGetOverPLC = 44,
/// <summary>
///
/// </summary>
PartLoadOK = 48,
/// <summary>
///
/// </summary>
Reserved_18 = 49,
/// <summary>
///
/// </summary>
PalletDown = 50,
/// <summary>
///
/// </summary>
ConfirmOkGo = 51,
/// <summary>
///
/// </summary>
ResetDevice = 52,
/// <summary>
///
/// </summary>
UnloadCompleted = 53,
/// <summary>
///
/// </summary>
MachineTime_ReadOver = 54,
/// <summary>
///
/// </summary>
Reserved_19 = 58,
/// <summary>
///
/// </summary>
FixOK = 59,
/// <summary>
///
/// </summary>
Reserved_21 = 61,
/// <summary>
///
/// </summary>
Reserved_22 = 62,
/// <summary>
///
/// </summary>
Reserved_23 = 63,
/// <summary>
///
/// </summary>
Reserved_24 = 64,
/// <summary>
///
/// </summary>
Reserved_25 = 65,
/// <summary>
///
/// </summary>
FixAllow = 66,
/// <summary>
///
/// </summary>
FixOver = 67,
/// <summary>
///
/// </summary>
MatchingCompleted = 68,
/// <summary>
///
/// </summary>
Match = 69,
/// <summary>
///
/// </summary>
Reserved_2 = 70,
/// <summary>
///
/// </summary>
IsAutoGetEngineID = 71,
/// <summary>
///
/// </summary>
RepairUplineMES = 72,
/// <summary>
/// 机型代码(MES)
/// 变量类型Int
/// </summary>
EngineTypeID_MES = 73,
/// <summary>
/// 工件编号(MES)
/// 变量类型String
/// </summary>
EngineID_MES = 74,
/// <summary>
///
/// </summary>
EngineType_MES = 75,
/// <summary>
///
/// </summary>
Reserved_20 = 76,
/// <summary>
///
/// </summary>
ProcessCode = 77,
/// <summary>
///
/// </summary>
OnLineState = 79,
/// <summary>
/// 托盘号(MES)
/// 变量类型Int
/// </summary>
PartPalletCode = 80,
/// <summary>
///
/// </summary>
BoltCode = 88,
/// <summary>
///
/// </summary>
RepairStatus = 93,
/// <summary>
///
/// </summary>
Reserved_15 = 110,
/// <summary>
///
/// </summary>
Reserved_16 = 111,
/// <summary>
///
/// </summary>
Reserved_17 = 112,
/// <summary>
///
/// </summary>
SPareint1 = 113,
/// <summary>
///
/// </summary>
SPareint2 = 114,
/// <summary>
///
/// </summary>
SPareint3 = 115,
/// <summary>
///
/// </summary>
Sparestring1 = 116,
/// <summary>
///
/// </summary>
Sparestring2 = 117,
/// <summary>
/// 机床上电(PLC)
/// 变量类型Bool
/// </summary>
MachineStatusPutOn = 1000,
/// <summary>
/// 循环开始(PLC)
/// 变量类型Bool
/// </summary>
MachineStatusWorkOn = 1001,
/// <summary>
/// 设备报警(PLC)
/// 变量类型Bool
/// </summary>
MachineStatusAlarm = 1002,
/// <summary>
/// 上料无件(PLC)
/// 变量类型Bool
/// </summary>
MachineStatusNoPart = 1003,
/// <summary>
/// 下料堵塞(PLC)
/// 变量类型Bool
/// </summary>
MachineStatusBlock = 1004,
/// <summary>
/// 下料堵塞(PLC)
/// 变量类型Bool
/// </summary>
havePart70 = 10003,
}
}

12890
DT_SCADA/Core/fwlib32.cs Normal file

File diff suppressed because it is too large Load Diff

1271
DT_SCADA/F_RobotMonitor.Designer.cs generated Normal file

File diff suppressed because it is too large Load Diff

346
DT_SCADA/F_RobotMonitor.cs Normal file
View File

@@ -0,0 +1,346 @@
using MesWork;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DT_YQJF_DC_SLN
{
public partial class F_RobotMonitor : Form
{
/// <summary>
///
/// </summary>
public string Curr_RobotKey = "";
public string Curr_RobotId = "";
string[] AxisString = new string[] { "x", "y", "z" };
string[] FilpString = new string[] { "1", "-1" };
/// <summary>
///
/// </summary>
List<JointConfig> jointsCurrent = new List<JointConfig>();
List<DiyJoint> diyJoint = new List<DiyJoint>();
public F_RobotMonitor()
{
InitializeComponent();
InitComBoxVale();
foreach (var item in MesWorkForm.dc_Robot.Keys)
{
lb_Robot.Items.Add(item);
}
if (MesWorkForm.IsDemoMesServer == 1)
{
panel_Debug_Btn.Visible = true;
panel_Debug_Txt.Visible = true;
}
else
{
panel_Debug_Btn.Visible = false;
panel_Debug_Txt.Visible = false;
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lb_Robot_SelectedIndexChanged(object sender, EventArgs e)
{
label19_currentId.Text = "";
Curr_RobotId = "";
var selectedItem = lb_Robot.SelectedItem;
if (selectedItem == null)
{
return;
}
jointsCurrent = new List<JointConfig>();
Curr_RobotKey = selectedItem.ToString();
GetRobot(Curr_RobotKey, out string type, out string robotCode, out object robotObj);
double[] j = null;
switch (type.ToUpper())
{
case "ROBOTFANUC":
var fanuc = (B_Robot_Fanuc)robotObj;
j = fanuc.j;
label19_currentId.Text = fanuc.Id;
Curr_RobotId = fanuc.Id;
break;
case "ROBOTKUKA":
var kuka = (B_Robot_Kuka)robotObj;
jointsCurrent = kuka.Joints;
label19_currentId.Text = kuka.Id;
Curr_RobotId = kuka.Id;
j = kuka.j;
break;
case "ROBOTABB":
var abb = (B_Robot_Abb)robotObj;
jointsCurrent = abb.Joints;
label19_currentId.Text = abb.Id;
Curr_RobotId = abb.Id;
j = abb.j;
break;
case "ROBOTEPSON":
var espon = (B_Robot_Espon)robotObj;
jointsCurrent = espon.Joints;
label19_currentId.Text = espon.Id;
Curr_RobotId = espon.Id;
j = espon.j;
break;
case "CNCEDM":
var edm = (B_Cnc_Edm)robotObj;
jointsCurrent = edm.Joints;
label19_currentId.Text = edm.Id;
Curr_RobotId = edm.Id;
j = edm.machine_j;
break;
default:
break;
}
button1.Enabled = true;
button2save.Enabled = true;
ShowJoint(j);
ShowJointDT(jointsCurrent);
txt_Detail.Text = JObject.Parse(JsonConvert.SerializeObject(robotObj)).ToString();
}
private void GetRobot(string robotKey,out string type, out string robotCode,out object robotObj)
{
type = "";
robotCode = "";
robotObj = null;
try
{
type = robotKey.Split('|')[0];
robotCode = robotKey.Split('|')[1];
robotObj = MesWorkForm.dc_Robot[robotKey];
}
catch (Exception err)
{
}
}
private void InitComBoxVale() {
foreach (string item in AxisString)
{
comboBox1_Axis_J1.Items.Add(item);
comboBox1_Axis_J2.Items.Add(item);
comboBox1_Axis_J3.Items.Add(item);
comboBox1_Axis_J4.Items.Add(item);
comboBox1_Axis_J5.Items.Add(item);
comboBox1_Axis_J6.Items.Add(item);
}
foreach (string item in FilpString)
{
comboBox1_Flip_J1.Items.Add(item);
comboBox1_Flip_J2.Items.Add(item);
comboBox1_Flip_J3.Items.Add(item);
comboBox1_Flip_J4.Items.Add(item);
comboBox1_Flip_J5.Items.Add(item);
comboBox1_Flip_J6.Items.Add(item);
}
}
private void ShowJoint(double[] j)
{
txt_J1.Text = j[0].ToString();
txt_J2.Text = j[1].ToString();
txt_J3.Text = j[2].ToString();
txt_J4.Text = j[3].ToString();
txt_J5.Text = j[4].ToString();
txt_J6.Text = j[5].ToString();
txt_J7.Text = j[6].ToString();
txt_J8.Text = j[7].ToString();
txt_J9.Text = j[8].ToString();
txt_J10.Text = j[9].ToString();
txt_J11.Text = j[10].ToString();
txt_J12.Text = j[11].ToString();
}
private void ShowJointDT(List<JointConfig> joints)
{
if (joints == null)
{
return;
}
for (int i = 0; i < joints.Count; i++)
{
diyJoint.Add(new DiyJoint()
{
Axis = joints[i].Axis,
Delta = joints[i].Delta,
Flip = joints[i].Flip,
ModelCode = joints[i].ModelCode,
});
}
comboBox1_Axis_J1.Text = joints[0].Axis.ToString();
comboBox1_Axis_J2.Text = joints[1].Axis.ToString();
comboBox1_Axis_J3.Text = joints[2].Axis.ToString();
comboBox1_Axis_J4.Text = joints[3].Axis.ToString();
comboBox1_Axis_J5.Text = joints[4].Axis.ToString();
comboBox1_Axis_J6.Text = joints[5].Axis.ToString();
comboBox1_Flip_J1.Text = joints[0].Flip.ToString();
comboBox1_Flip_J2.Text = joints[1].Flip.ToString();
comboBox1_Flip_J3.Text = joints[2].Flip.ToString();
comboBox1_Flip_J4.Text = joints[3].Flip.ToString();
comboBox1_Flip_J5.Text = joints[4].Flip.ToString();
comboBox1_Flip_J6.Text = joints[5].Flip.ToString();
numericUpDown_j1.Text = joints[0].Delta.ToString();
numericUpDown_j2.Text = joints[1].Delta.ToString();
numericUpDown_j3.Text = joints[2].Delta.ToString();
numericUpDown_j4.Text = joints[3].Delta.ToString();
numericUpDown_j5.Text = joints[4].Delta.ToString();
numericUpDown_j6.Text = joints[5].Delta.ToString();
}
private void btn_Fill_Joint_Click(object sender, EventArgs e)
{
txt_Set_J1.Text = txt_J1.Text;
txt_Set_J2.Text = txt_J2.Text;
txt_Set_J3.Text = txt_J3.Text;
txt_Set_J4.Text = txt_J4.Text;
txt_Set_J5.Text = txt_J5.Text;
txt_Set_J6.Text = txt_J6.Text;
txt_Set_J7.Text = txt_J7.Text;
txt_Set_J8.Text = txt_J8.Text;
txt_Set_J9.Text = txt_J9.Text;
txt_Set_J10.Text = txt_J10.Text;
txt_Set_J11.Text = txt_J11.Text;
txt_Set_J12.Text = txt_J12.Text;
}
private void btn_Submit_Click(object sender, EventArgs e)
{
var jSet = new double[12];
jSet[0] = Convert.ToDouble(txt_Set_J1.Text);
jSet[1] = Convert.ToDouble(txt_Set_J2.Text);
jSet[2] = Convert.ToDouble(txt_Set_J3.Text);
jSet[3] = Convert.ToDouble(txt_Set_J4.Text);
jSet[4] = Convert.ToDouble(txt_Set_J5.Text);
jSet[5] = Convert.ToDouble(txt_Set_J6.Text);
jSet[6] = Convert.ToDouble(txt_Set_J7.Text);
jSet[7] = Convert.ToDouble(txt_Set_J8.Text);
jSet[8] = Convert.ToDouble(txt_Set_J9.Text);
jSet[9] = Convert.ToDouble(txt_Set_J10.Text);
jSet[10] = Convert.ToDouble(txt_Set_J11.Text);
jSet[11] = Convert.ToDouble(txt_Set_J12.Text);
GetRobot(Curr_RobotKey, out string type, out string robotCode, out object robotObj);
switch (type)
{
case "ROBOTFANUC":
var fanuc = (B_Robot_Fanuc)robotObj;
fanuc.jDemo = jSet;
break;
case "ROBOTKUKA":
var kuka = (B_Robot_Kuka)robotObj;
kuka.jDemo = jSet;
break;
case "ROBOTABB":
var abb = (B_Robot_Abb)robotObj;
abb.jDemo = jSet;
break;
case "ROBOTEPSON":
var espon = (B_Robot_Espon)robotObj;
espon.jDemo = jSet;
break;
default:
break;
}
}
private void button1_Click(object sender, EventArgs e)
{
if(Curr_RobotId == "")
{
MessageBox.Show("请选择机器人");
}
label19_apply.Text = "";
try
{
jointsCurrent[0].Delta = numericUpDown_j1.Text;
jointsCurrent[1].Delta = numericUpDown_j2.Text;
jointsCurrent[2].Delta = numericUpDown_j3.Text;
jointsCurrent[3].Delta = numericUpDown_j4.Text;
jointsCurrent[4].Delta = numericUpDown_j5.Text;
jointsCurrent[5].Delta = numericUpDown_j6.Text;
jointsCurrent[0].Axis = comboBox1_Axis_J1.Text;
jointsCurrent[1].Axis = comboBox1_Axis_J2.Text;
jointsCurrent[2].Axis = comboBox1_Axis_J3.Text;
jointsCurrent[3].Axis = comboBox1_Axis_J4.Text;
jointsCurrent[4].Axis = comboBox1_Axis_J5.Text;
jointsCurrent[5].Axis = comboBox1_Axis_J6.Text;
jointsCurrent[0].Flip = comboBox1_Flip_J1.Text;
jointsCurrent[1].Flip = comboBox1_Flip_J2.Text;
jointsCurrent[2].Flip = comboBox1_Flip_J3.Text;
jointsCurrent[3].Flip = comboBox1_Flip_J4.Text;
jointsCurrent[4].Flip = comboBox1_Flip_J5.Text;
jointsCurrent[5].Flip = comboBox1_Flip_J6.Text;
label19_apply.Text = "应用成功!\r\n等待数据发送更新";
}
catch (Exception err )
{
label19_apply.Text = err.Message;
}
}
private void button2save_Click(object sender, EventArgs e)
{
if (Curr_RobotId == "")
{
MessageBox.Show("请选择机器人");
}
ScadaConfig scadaConfig = new ScadaConfig();
scadaConfig.MachineTool = new List<MachineToolConfig>();
for (int i = 0; i < MesWorkForm.scadaConfig.MachineTool.Count; i++)
{
MachineToolConfig machineToolConfig = MesWorkForm.scadaConfig.MachineTool[i];
string Id = machineToolConfig.Id;
if (Id == Curr_RobotId)
{
machineToolConfig.Joints = jointsCurrent;
}
scadaConfig.MachineTool.Add(machineToolConfig);
}
string scadaConfigStr = JsonConvert.SerializeObject(scadaConfig);
System.IO.File.WriteAllText(@"config.json", scadaConfigStr);
MessageBox.Show("保存成功");
}
}
public class DiyJoint
{
public string ModelCode { get; set; }
public string Axis { get; set; }
public string Flip { get; set; }
public string Delta { get; set; }
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

257
DT_SCADA/JG.Designer.cs generated Normal file
View File

@@ -0,0 +1,257 @@
using System.Windows.Forms;
using global::Init;
namespace MesWork
{
partial class MesWorkForm : PlcLinkForm
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MesWorkForm));
this.panel_Btn = new System.Windows.Forms.Panel();
this.timer_Status = new System.Windows.Forms.Timer(this.components);
this.label2 = new System.Windows.Forms.Label();
this.label41 = new System.Windows.Forms.Label();
this.label_Count = new System.Windows.Forms.Label();
this.timer_ShowCount = new System.Windows.Forms.Timer(this.components);
this.pb_OnLine_SQL = new System.Windows.Forms.PictureBox();
this.label11 = new System.Windows.Forms.Label();
this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
this.panel_Menu = new System.Windows.Forms.Panel();
this.label_ExitSys = new System.Windows.Forms.Label();
this.label_Monitor_PLC = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.pb_OnLine_MQTT = new System.Windows.Forms.PictureBox();
this.label4 = new System.Windows.Forms.Label();
this.pb_OnLine_PLC_1 = new System.Windows.Forms.PictureBox();
this.richTextBox1_log = new System.Windows.Forms.RichTextBox();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.dateTimePicker1_start = new System.Windows.Forms.DateTimePicker();
this.dateTimePicker1_end = new System.Windows.Forms.DateTimePicker();
((System.ComponentModel.ISupportInitialize)(this.pb_OnLine_SQL)).BeginInit();
this.panel_Menu.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pb_OnLine_MQTT)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pb_OnLine_PLC_1)).BeginInit();
this.SuspendLayout();
//
// panel_Btn
//
resources.ApplyResources(this.panel_Btn, "panel_Btn");
this.panel_Btn.Name = "panel_Btn";
this.panel_Btn.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.panel_Btn_MouseDoubleClick);
//
// timer_Status
//
this.timer_Status.Enabled = true;
this.timer_Status.Interval = 500;
this.timer_Status.Tick += new System.EventHandler(this.timer_Status_Tick);
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// label41
//
resources.ApplyResources(this.label41, "label41");
this.label41.Name = "label41";
//
// label_Count
//
resources.ApplyResources(this.label_Count, "label_Count");
this.label_Count.Name = "label_Count";
//
// timer_ShowCount
//
this.timer_ShowCount.Enabled = true;
this.timer_ShowCount.Interval = 500;
this.timer_ShowCount.Tick += new System.EventHandler(this.timer_ShowCount_Tick);
//
// pb_OnLine_SQL
//
this.pb_OnLine_SQL.Image = global::SCADA_JG.Properties.Resources.;
resources.ApplyResources(this.pb_OnLine_SQL, "pb_OnLine_SQL");
this.pb_OnLine_SQL.Name = "pb_OnLine_SQL";
this.pb_OnLine_SQL.TabStop = false;
//
// label11
//
resources.ApplyResources(this.label11, "label11");
this.label11.Name = "label11";
//
// panel_Menu
//
this.panel_Menu.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.panel_Menu.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel_Menu.Controls.Add(this.label_ExitSys);
this.panel_Menu.Controls.Add(this.label_Monitor_PLC);
resources.ApplyResources(this.panel_Menu, "panel_Menu");
this.panel_Menu.Name = "panel_Menu";
this.panel_Menu.Paint += new System.Windows.Forms.PaintEventHandler(this.panel_Menu_Paint);
//
// label_ExitSys
//
resources.ApplyResources(this.label_ExitSys, "label_ExitSys");
this.label_ExitSys.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label_ExitSys.Name = "label_ExitSys";
this.label_ExitSys.Click += new System.EventHandler(this.label_ExitSys_Click);
//
// label_Monitor_PLC
//
resources.ApplyResources(this.label_Monitor_PLC, "label_Monitor_PLC");
this.label_Monitor_PLC.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label_Monitor_PLC.Name = "label_Monitor_PLC";
this.label_Monitor_PLC.Click += new System.EventHandler(this.label_Monitor_PLC_Click);
//
// label3
//
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
//
// pb_OnLine_MQTT
//
this.pb_OnLine_MQTT.Image = global::SCADA_JG.Properties.Resources.;
resources.ApplyResources(this.pb_OnLine_MQTT, "pb_OnLine_MQTT");
this.pb_OnLine_MQTT.Name = "pb_OnLine_MQTT";
this.pb_OnLine_MQTT.TabStop = false;
//
// label4
//
resources.ApplyResources(this.label4, "label4");
this.label4.Name = "label4";
//
// pb_OnLine_PLC_1
//
this.pb_OnLine_PLC_1.Image = global::SCADA_JG.Properties.Resources.;
resources.ApplyResources(this.pb_OnLine_PLC_1, "pb_OnLine_PLC_1");
this.pb_OnLine_PLC_1.Name = "pb_OnLine_PLC_1";
this.pb_OnLine_PLC_1.TabStop = false;
//
// richTextBox1_log
//
resources.ApplyResources(this.richTextBox1_log, "richTextBox1_log");
this.richTextBox1_log.Name = "richTextBox1_log";
//
// button1
//
resources.ApplyResources(this.button1, "button1");
this.button1.Name = "button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
resources.ApplyResources(this.button2, "button2");
this.button2.Name = "button2";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// button3
//
resources.ApplyResources(this.button3, "button3");
this.button3.Name = "button3";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// dateTimePicker1_start
//
resources.ApplyResources(this.dateTimePicker1_start, "dateTimePicker1_start");
this.dateTimePicker1_start.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.dateTimePicker1_start.Name = "dateTimePicker1_start";
//
// dateTimePicker1_end
//
resources.ApplyResources(this.dateTimePicker1_end, "dateTimePicker1_end");
this.dateTimePicker1_end.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.dateTimePicker1_end.Name = "dateTimePicker1_end";
//
// MesWorkForm
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.dateTimePicker1_end);
this.Controls.Add(this.dateTimePicker1_start);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.richTextBox1_log);
this.Controls.Add(this.pb_OnLine_SQL);
this.Controls.Add(this.label11);
this.Controls.Add(this.label41);
this.Controls.Add(this.label_Count);
this.Controls.Add(this.pb_OnLine_MQTT);
this.Controls.Add(this.pb_OnLine_PLC_1);
this.Controls.Add(this.label4);
this.Controls.Add(this.label3);
this.Controls.Add(this.panel_Btn);
this.Controls.Add(this.panel_Menu);
this.Controls.Add(this.label2);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.Name = "MesWorkForm";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MesWorkForm_FormClosing);
this.Load += new System.EventHandler(this.MesWorkForm_Load);
((System.ComponentModel.ISupportInitialize)(this.pb_OnLine_SQL)).EndInit();
this.panel_Menu.ResumeLayout(false);
this.panel_Menu.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pb_OnLine_MQTT)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pb_OnLine_PLC_1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private Panel panel_Btn;
private Timer timer_Status;
private Label label2;
private Label label41;
private Label label_Count;
private Timer timer_ShowCount;
private PictureBox pb_OnLine_SQL;
private Label label11;
private FolderBrowserDialog folderBrowserDialog1;
private Panel panel_Menu;
private Label label_ExitSys;
private Label label_Monitor_PLC;
private Label label3;
private PictureBox pb_OnLine_MQTT;
private Label label4;
private PictureBox pb_OnLine_PLC_1;
private RichTextBox richTextBox1_log;
private Button button1;
private Button button2;
private Button button3;
private DateTimePicker dateTimePicker1_start;
private DateTimePicker dateTimePicker1_end;
}
}

427
DT_SCADA/JG.cs Normal file
View File

@@ -0,0 +1,427 @@
namespace MesWork
{
using DT_YQJF_DC_SLN;
using System;
using System.Data;
using System.Drawing;
using System.Net;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json;
using System.Security.Cryptography;
using ABB.Robotics.Controllers.Configuration;
using Newtonsoft.Json.Linq;
using System.Net.Http.Headers;
using System.Web;
using System.Collections.Generic;
using NPOI.SS.Formula.Functions;
using System.Security.Policy;
using System.Data.SqlClient;
using MW_Log;
public partial class MesWorkForm
{
InitServer initServer = null;
public static int msgCount = 0;
/// <summary>
///
/// </summary>
public MesWorkForm()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
this.WindowState = FormWindowState.Minimized;
LoggerHelper.ShowMsg += MyLogHelper_LogCommit;
// panel_Menu.Visible = true;
}
private void MesWorkForm_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
{
e.Cancel = true;
}
private void label_Monitor_Robot_Click(object sender, EventArgs e)
{
new F_RobotMonitor().Show(this);
}
private void label_Monitor_PLC_Click(object sender, EventArgs e)
{
new OpcForm(IsDemoMesServer).Show(this);
}
private async void label_ExitSys_Click(object sender, EventArgs e)
{
if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
CloseDeviceConn();
DisConnect();
await DisConnectService();
System.Diagnostics.Process.GetCurrentProcess().Kill();
}
}
private void panel_Btn_MouseDoubleClick(object sender, MouseEventArgs e)
{
panel_Menu.Visible = !!!panel_Menu.Visible;
}
private void timer_Status_Tick(object sender, EventArgs e)
{
timer_Status.Enabled = false;
Show_OnLineState();
timer_Status.Enabled = true;
}
private void Show_OnLineState()
{
OnLineState_C(pb_OnLine_PLC_1, MesWorkForm.OnLine_PLC_1);
OnLineState_C(pb_OnLine_SQL, MesWorkForm.OnLine_SQL);
OnLineState_C(pb_OnLine_MQTT, MesWorkForm.OnLine_Mqtt);
}
private void OnLineState_C(PictureBox pb, bool onLine)
{
pb.Image = onLine ? global::SCADA_JG.Properties.Resources.
: global::SCADA_JG.Properties.Resources.;
}
private void timer_ShowCount_Tick(object sender, EventArgs e)
{
timer_ShowCount.Enabled = false;
label_Count.Text = MesWorkForm.taskSql.Count.ToString();
timer_ShowCount.Enabled = true;
}
public static void getCharDataToken()
{
//while (true)
//{
DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
long timestamp1 = (long)(DateTime.UtcNow - startTime).TotalMilliseconds;
//if (charDataTokenTime < timestamp1)
//{
try
{
string time = DateTime.Now.ToString("yyyyMMddHHmmss");
string newGuid = Guid.NewGuid().ToString("N").Substring(0, 5);
long timestamp = (long)(DateTime.UtcNow - startTime).TotalMilliseconds;
string reqId = "req_AMES001 _" + time + "_" + newGuid;
string authKeyStr = GetMd5Hash(SK + salt + timestamp);
object reqParams = new { authKey = authKeyStr };
//准备请求的数据 反序列化
string bodydata = JsonConvert.SerializeObject(reqParams);
string retString;
string url = Url_WebApi_Char + "/openApi/auth/getAuthToken/";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("reqId", reqId);
request.Headers.Add("timestamp", timestamp.ToString());
request.Headers.Add("appKey", AK);
//request.Headers.Add("lmt-auth-token", GetMd5Hash(originalString));
request.Method = "POST";
byte[] bytes = Encoding.UTF8.GetBytes(bodydata);
request.Accept = "*/*";
request.ContentType = "application/json";
request.ContentLength = bytes.Length;
request.Timeout = 10000;
// 准备请求体
Stream myResponseStream = request.GetRequestStream();
myResponseStream.Write(bytes, 0, bytes.Length);
//发送webapi请求 等待相应
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
retString = myStreamReader.ReadToEnd();
MW_Log.LoggerHelper.Info("获取_Token", retString);
// 序列化响应内容
CharData_Token mrh = JsonConvert.DeserializeObject<CharData_Token>(retString);
int statusCode = (int)response.StatusCode;
// 对响应内容进行处理 更新数据库标志
if (statusCode == 200)
{
myStreamReader.Close();
myResponseStream.Close();
if (response != null)
{
// 成功
if (mrh.code == "0")
{
charDataToken = mrh.data.token;
charDataTokenTime = mrh.data.expireTime;
MW_Log.LoggerHelper.Info("获取_Token", charDataToken);
}
else
{
MW_Log.LoggerHelper.Info("error_Token", mrh.errorDetail);
}
response.Close();
}
if (request != null)
{
request.Abort();
}
}
}
catch (Exception err)
{
MW_Log.LoggerHelper.Info("error_Token", "", err);
}
//}
// Thread.Sleep(TokenSyncTime);
//}
}
public void getCharData()
{
while (true)
{
//if (charDataToken == "")
//{
// MyLogHelper_LogCommit("error_charData", "未获取到Token");
// MW_Log.LoggerHelper.Info("error_charData", "未获取到Token");
// continue;
//}
string beginDateStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
string endDateStr = DateTime.Now.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss");
CharDataSearchPrams charDataSearchPrams = new CharDataSearchPrams();
charDataSearchPrams.beginDate = beginDateStr;
charDataSearchPrams.endDate = endDateStr;
List<TestResult> testResultList = GetCharData_Details(charDataSearchPrams, out string code, out string errorDetail);
string syncTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
try
{
for (int i = 0; i < testResultList.Count; i++)
{
string vin = testResultList[i].vin; // deviceId
string testCode = testResultList[i].testCode;
string testStatus = testResultList[i].testStatus;
string testBeginTime = testResultList[i].testBeginTime;
string testEndTime = testResultList[i].testEndTime;
string faultInfo = testResultList[i].faultInfo;
B_DB_Opera.BaseData_tagTable_CharData_Insert(vin, testCode, testStatus, testBeginTime, testEndTime, faultInfo, syncTime, out string errMsg);
}
}
catch (Exception err)
{
MyLogHelper_LogCommit("error_charData10", err.Message);
MW_Log.LoggerHelper.Info("error_charData11", "", err);
}
Thread.Sleep(SyncTime);
}
}
static string GetMd5Hash(string input)
{
using (MD5 md5 = MD5.Create())
{
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
// Convert the byte array to hexadecimal string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
}
return sb.ToString().ToLower();
}
}
private void MyLogHelper_LogCommit(string type, string msg)
{
var log = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + " " + type + " " + msg + "\r\n";
msgCount++;
if (this.InvokeRequired)
{
this.Invoke(new Action(() =>
{
if (msgCount > 100)
{
this.richTextBox1_log.Text = "";
}
this.richTextBox1_log.AppendText(log);
}));
}
else
{
if (msgCount > 100)
{
this.richTextBox1_log.Text = "";
}
this.richTextBox1_log.AppendText(log);
}
}
public static List<TestResult> GetCharData_Details(CharDataSearchPrams charDataSearchPrams, out string code, out string errorDetail)
{
List<TestResult> testResultList = new List<TestResult>();
code = "0";
errorDetail = "";
try
{
//准备请求的数据 反序列化
string bodydata = JsonConvert.SerializeObject(charDataSearchPrams);
string retString;
string url = Url_WebApi_Char + "/openApi/thirdData/selectBatteryTestResult";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
string time = DateTime.Now.ToString("yyyyMMddHHmmss");
string newGuid = Guid.NewGuid().ToString("N").Substring(0, 5);
long timestamp = (long)(DateTime.UtcNow - startTime).TotalMilliseconds;
string reqId = "req_AMES001 _" + time + "_" + newGuid;
string lmt_auth_token = GetMd5Hash(charDataToken + SK + timestamp);
request.Headers.Add("reqId", reqId);
request.Headers.Add("timestamp", timestamp.ToString());
request.Headers.Add("appKey", AK);
request.Headers.Add("lmt-auth-token", lmt_auth_token);
MW_Log.LoggerHelper.Info("selectBatteryTestResultHeaders", $"【reqId】{reqId}【timestamp】{timestamp.ToString()}【appKey】{AK}【lmt-auth-token】{lmt_auth_token}");
request.Timeout = 10000;
request.Method = "Post";
byte[] bytes = Encoding.UTF8.GetBytes(bodydata);
request.ContentType = "application/json;charset=utf-8";
request.ContentLength = bytes.Length;
//MW_Log.LoggerHelper.Info("请求参数_charData_reqId", reqId);
//MW_Log.LoggerHelper.Info("请求参数_charData_timestamp", timestamp.ToString());
//MW_Log.LoggerHelper.Info("请求参数_charData_appKey", AK);
//MW_Log.LoggerHelper.Info("请求参数_charData_lmt-auth-token", lmt_auth_token);
// 准备请求体
Stream myResponseStream = request.GetRequestStream();
myResponseStream.Write(bytes, 0, bytes.Length);
//发送webapi请求 等待相应
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
retString = myStreamReader.ReadToEnd();
MW_Log.LoggerHelper.Info("返回参数_charData", retString);
// 序列化响应内容
CharData mrh = JsonConvert.DeserializeObject<CharData>(retString);
int statusCode = (int)response.StatusCode;
// 对响应内容进行处理 更新数据库标志
if (statusCode == 200)
{
myStreamReader.Close();
myResponseStream.Close();
if (response != null)
{
code = mrh.code;
errorDetail = mrh.msg + mrh.errorDetail;
// 成功
if (mrh.code == "0")
{
try
{
string syncTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
testResultList = mrh.data;
}
catch (Exception err)
{
MW_Log.LoggerHelper.Info("error_charData2", "", err);
}
}
else
{
if(mrh.code == "603")
{
getCharDataToken();
}
MW_Log.LoggerHelper.Info("error_charData3", errorDetail);
}
response.Close();
}
if (request != null)
{
request.Abort();
}
}
}
catch (Exception err)
{
code = "500";
errorDetail = err.Message;
MW_Log.LoggerHelper.Info("error_charData4", "", err);
}
return testResultList;
}
private void button2_Click(object sender, EventArgs e)
{
new TaskFactory().StartNew(delegate ()
{
string beginDateStr = dateTimePicker1_start.Text.ToString();
string endDateStr = dateTimePicker1_end.Text.ToString();
CharDataSearchPrams charDataSearchPrams = new CharDataSearchPrams();
charDataSearchPrams.beginDate = beginDateStr;
charDataSearchPrams.endDate = endDateStr;
List<TestResult> testResultList = GetCharData_Details(charDataSearchPrams, out string code, out string errorDetail);
string syncTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
try
{
if (testResultList != null)
{
for (int i = 0; i < testResultList.Count; i++)
{
string vin = testResultList[i].vin; //deviceId
string testCode = testResultList[i].testCode;
string testStatus = testResultList[i].testStatus;
string testBeginTime = testResultList[i].testBeginTime;
string testEndTime = testResultList[i].testEndTime;
string faultInfo = testResultList[i].faultInfo;
B_DB_Opera.BaseData_tagTable_CharData_Insert(vin, testCode, testStatus, testBeginTime, testEndTime, faultInfo, syncTime, out string errMsg);
}
}
else
{
MyLogHelper_LogCommit("error_charData6", "不存在数据!");
}
}
catch (Exception err)
{
MyLogHelper_LogCommit("error_charData7", err.Message);
MW_Log.LoggerHelper.Info("error_charData8", "", err);
}
});
}
private void button1_Click(object sender, EventArgs e)
{
this.richTextBox1_log.Text = "";
}
private void button3_Click(object sender, EventArgs e)
{
getCharDataToken();
}
private void panel_Menu_Paint(object sender, PaintEventArgs e)
{
}
private void MesWorkForm_Load(object sender, EventArgs e)
{
}
}
}

850
DT_SCADA/JG.resx Normal file
View File

@@ -0,0 +1,850 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="panel_Btn.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 57</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="panel_Btn.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="panel_Btn.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 68</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="panel_Btn.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="&gt;&gt;panel_Btn.Name" xml:space="preserve">
<value>panel_Btn</value>
</data>
<data name="&gt;&gt;panel_Btn.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel_Btn.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;panel_Btn.ZOrder" xml:space="preserve">
<value>14</value>
</data>
<metadata name="timer_Status.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label2.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft Sans Serif, 30pt</value>
</data>
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>120, 56</value>
</data>
<data name="label2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>664, 69</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>数据监控/采集/同步程序</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>16</value>
</data>
<data name="label41.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label41.Font" type="System.Drawing.Font, System.Drawing">
<value>宋体, 12pt, style=Bold</value>
</data>
<data name="label41.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label41.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 536</value>
</data>
<data name="label41.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="label41.Size" type="System.Drawing.Size, System.Drawing">
<value>135, 24</value>
</data>
<data name="label41.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="label41.Text" xml:space="preserve">
<value>瞬时并发:</value>
</data>
<data name="&gt;&gt;label41.Name" xml:space="preserve">
<value>label41</value>
</data>
<data name="&gt;&gt;label41.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label41.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label41.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="label_Count.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label_Count.Font" type="System.Drawing.Font, System.Drawing">
<value>宋体, 12pt, style=Bold</value>
</data>
<data name="label_Count.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label_Count.Location" type="System.Drawing.Point, System.Drawing">
<value>142, 536</value>
</data>
<data name="label_Count.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="label_Count.Size" type="System.Drawing.Size, System.Drawing">
<value>36, 24</value>
</data>
<data name="label_Count.TabIndex" type="System.Int32, mscorlib">
<value>18</value>
</data>
<data name="label_Count.Text" xml:space="preserve">
<value>12</value>
</data>
<data name="&gt;&gt;label_Count.Name" xml:space="preserve">
<value>label_Count</value>
</data>
<data name="&gt;&gt;label_Count.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label_Count.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label_Count.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<metadata name="timer_ShowCount.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>134, 14</value>
</metadata>
<data name="pb_OnLine_SQL.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="pb_OnLine_SQL.Location" type="System.Drawing.Point, System.Drawing">
<value>843, 217</value>
</data>
<data name="pb_OnLine_SQL.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="pb_OnLine_SQL.Size" type="System.Drawing.Size, System.Drawing">
<value>57, 52</value>
</data>
<data name="pb_OnLine_SQL.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>Zoom</value>
</data>
<data name="pb_OnLine_SQL.TabIndex" type="System.Int32, mscorlib">
<value>20</value>
</data>
<data name="&gt;&gt;pb_OnLine_SQL.Name" xml:space="preserve">
<value>pb_OnLine_SQL</value>
</data>
<data name="&gt;&gt;pb_OnLine_SQL.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pb_OnLine_SQL.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;pb_OnLine_SQL.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="label11.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label11.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label11.Location" type="System.Drawing.Point, System.Drawing">
<value>842, 275</value>
</data>
<data name="label11.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="label11.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 18</value>
</data>
<data name="label11.TabIndex" type="System.Int32, mscorlib">
<value>19</value>
</data>
<data name="label11.Text" xml:space="preserve">
<value>服务器</value>
</data>
<data name="&gt;&gt;label11.Name" xml:space="preserve">
<value>label11</value>
</data>
<data name="&gt;&gt;label11.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label11.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label11.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<metadata name="folderBrowserDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>351, 14</value>
</metadata>
<data name="&gt;&gt;label_ExitSys.Name" xml:space="preserve">
<value>label_ExitSys</value>
</data>
<data name="&gt;&gt;label_ExitSys.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label_ExitSys.Parent" xml:space="preserve">
<value>panel_Menu</value>
</data>
<data name="&gt;&gt;label_ExitSys.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;label_Monitor_PLC.Name" xml:space="preserve">
<value>label_Monitor_PLC</value>
</data>
<data name="&gt;&gt;label_Monitor_PLC.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label_Monitor_PLC.Parent" xml:space="preserve">
<value>panel_Menu</value>
</data>
<data name="&gt;&gt;label_Monitor_PLC.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="panel_Menu.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="panel_Menu.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="panel_Menu.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="panel_Menu.Size" type="System.Drawing.Size, System.Drawing">
<value>955, 52</value>
</data>
<data name="panel_Menu.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="panel_Menu.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;panel_Menu.Name" xml:space="preserve">
<value>panel_Menu</value>
</data>
<data name="&gt;&gt;panel_Menu.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel_Menu.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;panel_Menu.ZOrder" xml:space="preserve">
<value>15</value>
</data>
<data name="label_ExitSys.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label_ExitSys.Font" type="System.Drawing.Font, System.Drawing">
<value>宋体, 12pt, style=Bold</value>
</data>
<data name="label_ExitSys.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label_ExitSys.Location" type="System.Drawing.Point, System.Drawing">
<value>113, 14</value>
</data>
<data name="label_ExitSys.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="label_ExitSys.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 26</value>
</data>
<data name="label_ExitSys.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="label_ExitSys.Text" xml:space="preserve">
<value>退出系统</value>
</data>
<data name="&gt;&gt;label_ExitSys.Name" xml:space="preserve">
<value>label_ExitSys</value>
</data>
<data name="&gt;&gt;label_ExitSys.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label_ExitSys.Parent" xml:space="preserve">
<value>panel_Menu</value>
</data>
<data name="&gt;&gt;label_ExitSys.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="label_Monitor_PLC.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label_Monitor_PLC.Font" type="System.Drawing.Font, System.Drawing">
<value>宋体, 12pt, style=Bold</value>
</data>
<data name="label_Monitor_PLC.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label_Monitor_PLC.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 14</value>
</data>
<data name="label_Monitor_PLC.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="label_Monitor_PLC.Size" type="System.Drawing.Size, System.Drawing">
<value>101, 26</value>
</data>
<data name="label_Monitor_PLC.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="label_Monitor_PLC.Text" xml:space="preserve">
<value>PLC监控</value>
</data>
<data name="&gt;&gt;label_Monitor_PLC.Name" xml:space="preserve">
<value>label_Monitor_PLC</value>
</data>
<data name="&gt;&gt;label_Monitor_PLC.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label_Monitor_PLC.Parent" xml:space="preserve">
<value>panel_Menu</value>
</data>
<data name="&gt;&gt;label_Monitor_PLC.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>847, 186</value>
</data>
<data name="label3.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 18</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>MQTTL</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>13</value>
</data>
<data name="pb_OnLine_MQTT.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="pb_OnLine_MQTT.Location" type="System.Drawing.Point, System.Drawing">
<value>843, 128</value>
</data>
<data name="pb_OnLine_MQTT.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="pb_OnLine_MQTT.Size" type="System.Drawing.Size, System.Drawing">
<value>57, 52</value>
</data>
<data name="pb_OnLine_MQTT.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>Zoom</value>
</data>
<data name="pb_OnLine_MQTT.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
</data>
<data name="&gt;&gt;pb_OnLine_MQTT.Name" xml:space="preserve">
<value>pb_OnLine_MQTT</value>
</data>
<data name="&gt;&gt;pb_OnLine_MQTT.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pb_OnLine_MQTT.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;pb_OnLine_MQTT.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
<value>851, 372</value>
</data>
<data name="label4.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>35, 18</value>
</data>
<data name="label4.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>PLC</value>
</data>
<data name="&gt;&gt;label4.Name" xml:space="preserve">
<value>label4</value>
</data>
<data name="&gt;&gt;label4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label4.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="pb_OnLine_PLC_1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="pb_OnLine_PLC_1.Location" type="System.Drawing.Point, System.Drawing">
<value>843, 314</value>
</data>
<data name="pb_OnLine_PLC_1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="pb_OnLine_PLC_1.Size" type="System.Drawing.Size, System.Drawing">
<value>57, 52</value>
</data>
<data name="pb_OnLine_PLC_1.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>Zoom</value>
</data>
<data name="pb_OnLine_PLC_1.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
</data>
<data name="&gt;&gt;pb_OnLine_PLC_1.Name" xml:space="preserve">
<value>pb_OnLine_PLC_1</value>
</data>
<data name="&gt;&gt;pb_OnLine_PLC_1.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pb_OnLine_PLC_1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;pb_OnLine_PLC_1.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="richTextBox1_log.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 128</value>
</data>
<data name="richTextBox1_log.Size" type="System.Drawing.Size, System.Drawing">
<value>828, 392</value>
</data>
<data name="richTextBox1_log.TabIndex" type="System.Int32, mscorlib">
<value>21</value>
</data>
<data name="richTextBox1_log.Text" xml:space="preserve">
<value />
</data>
<data name="&gt;&gt;richTextBox1_log.Name" xml:space="preserve">
<value>richTextBox1_log</value>
</data>
<data name="&gt;&gt;richTextBox1_log.Type" xml:space="preserve">
<value>System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;richTextBox1_log.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;richTextBox1_log.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="button1.Location" type="System.Drawing.Point, System.Drawing">
<value>838, 476</value>
</data>
<data name="button1.Size" type="System.Drawing.Size, System.Drawing">
<value>117, 44</value>
</data>
<data name="button1.TabIndex" type="System.Int32, mscorlib">
<value>22</value>
</data>
<data name="button1.Text" xml:space="preserve">
<value>清空</value>
</data>
<data name="&gt;&gt;button1.Name" xml:space="preserve">
<value>button1</value>
</data>
<data name="&gt;&gt;button1.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;button1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;button1.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="button2.Location" type="System.Drawing.Point, System.Drawing">
<value>480, 536</value>
</data>
<data name="button2.Size" type="System.Drawing.Size, System.Drawing">
<value>164, 40</value>
</data>
<data name="button2.TabIndex" type="System.Int32, mscorlib">
<value>23</value>
</data>
<data name="button2.Text" xml:space="preserve">
<value>获取数据</value>
</data>
<data name="&gt;&gt;button2.Name" xml:space="preserve">
<value>button2</value>
</data>
<data name="&gt;&gt;button2.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;button2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;button2.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="button3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="button3.Location" type="System.Drawing.Point, System.Drawing">
<value>779, 536</value>
</data>
<data name="button3.Size" type="System.Drawing.Size, System.Drawing">
<value>164, 40</value>
</data>
<data name="button3.TabIndex" type="System.Int32, mscorlib">
<value>23</value>
</data>
<data name="button3.Text" xml:space="preserve">
<value>获取token</value>
</data>
<data name="&gt;&gt;button3.Name" xml:space="preserve">
<value>button3</value>
</data>
<data name="&gt;&gt;button3.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;button3.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;button3.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="dateTimePicker1_start.CustomFormat" xml:space="preserve">
<value>yyyy-MM-dd HH:mm:ss</value>
</data>
<data name="dateTimePicker1_start.Location" type="System.Drawing.Point, System.Drawing">
<value>212, 532</value>
</data>
<data name="dateTimePicker1_start.Size" type="System.Drawing.Size, System.Drawing">
<value>233, 28</value>
</data>
<data name="dateTimePicker1_start.TabIndex" type="System.Int32, mscorlib">
<value>24</value>
</data>
<data name="&gt;&gt;dateTimePicker1_start.Name" xml:space="preserve">
<value>dateTimePicker1_start</value>
</data>
<data name="&gt;&gt;dateTimePicker1_start.Type" xml:space="preserve">
<value>System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;dateTimePicker1_start.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;dateTimePicker1_start.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="dateTimePicker1_end.CustomFormat" xml:space="preserve">
<value>yyyy-MM-dd HH:mm:ss</value>
</data>
<data name="dateTimePicker1_end.Location" type="System.Drawing.Point, System.Drawing">
<value>212, 566</value>
</data>
<data name="dateTimePicker1_end.Size" type="System.Drawing.Size, System.Drawing">
<value>233, 28</value>
</data>
<data name="dateTimePicker1_end.TabIndex" type="System.Int32, mscorlib">
<value>24</value>
</data>
<data name="&gt;&gt;dateTimePicker1_end.Name" xml:space="preserve">
<value>dateTimePicker1_end</value>
</data>
<data name="&gt;&gt;dateTimePicker1_end.Type" xml:space="preserve">
<value>System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;dateTimePicker1_end.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;dateTimePicker1_end.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>49</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>9, 18</value>
</data>
<data name="$this.AutoScroll" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>955, 605</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJSUABjU1AAY1NQAGNTUABjU1AAY1NQAGNTUABjU1AAY1NQAGNT
UABjU1AAY1NQAGNTUABjU1AAY1NQAGNTUABjU1AAY1NQAGNTUABjU1AAY1NQAGRUUAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY1NQAGNTUABjU1ANY1NQOWNTUDxjU1A8Y1NQPGNT
UDxjU1A8Y1NQPGNTUDxjU1A8Y1NQPGNTUDxjU1A8Y1NQPGNTUDxjU1A9Y1NQNWNTUAdjU1AAYlJQAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBQUABiUlAAY1NQAGNTUHJjU1DyY1NQ82NT
UPNjU1DzY1NQ82NTUPNjU1DzY1NQ82NTUPNjU1DzY1NQ82NTUPNjU1DzY1NQ82NTUPRjU1DrY1NQU2NT
UABkVFAAYlJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY1NQAGNTUABjU1AkY1NQ2WNT
UP9jU1D/Y1NQ/2NTUP9jU1D/Y1NQ/2NTUP9jU1D/Y1NQ/2NTUP9jU1D/Y1NQ/2NTUP9jU1D/Y1NQ/2NT
UP9jU1DBY1NQEmNTUABjU1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJSUABiUlAAX09QAGNT
UIljU1D/Y1NQ/GNTUKBjU1BwY1NQcmNTUHJjU1ByY1NQcmNTUHJjU1ByY1NQcmNTUHJjU1ByY1NQcmNT
UHFjU1CyY1NQ/2NTUPxjU1BpY1NQAGBQUABjU1AAAAAAAAAAAAAAAAAAAAAAAAAAAABiUlAAY1NQAGNT
UABjU1AyY1NQ5GNTUP9jU1DLY1NQF2NTUABjU1AAY1NQAGNTUABjU1AAY1NQAGNTUABjU1AAY1NQAGNT
UABjU1AAY1NQAGNTUCxjU1DhY1NQ/2NTUNBjU1AdY1NQAGNTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJS
UABjU1AAY1NQBGNTUJ1jU1D/Y1NQ+WNTUF5jU1AAXk5QAGNTUABjU1AAY1NQAGNTUABjU1AAY1NQAGNT
UABjU1AAY1NQAGNTUABjU1AAZFRQAGNTUIBjU1D/Y1NQ/2NTUHxkVFAAY1NQAGNTUAAAAAAAAAAAAAAA
AABiUlAAY1NQAGNTUABjU1BEY1NQ72NTUP9jU1C4Y1NQDmNTUABiVU4AWLUAAFiyAABYsgAAWLEAAFix
AABYsgAAAAAAAAAAAAAAAAAAAAAAAGNTUABjU1AAY1NQH2NTUNRjU1D/Y1NQ32NTUCtjU1AAY1NQAAAA
AAAAAAAAAAAAAGJSUABjU1AAY1NQCmNTUK9jU1D/Y1NQ8mNTUEpjU1AAXYYlAFmyAABZsgAAW7IAAGaw
AABZsgAAWbIAAFmyAABYswAAAAAAAAAAAAAAAAAAY1NQAGJSUABjU1AAY1NQbGNTUP1jU1D/Y1NQkGNT
UAJjU1AAYlJQAAAAAABiUlAAY1NQAGNTUABjU1BWY1NQ92NTUP9jU1CiY1NQBmNNVQBZsgAAWbIAB1my
AE1ZsgCRWbIAmVmyAF9ZsgAQWbIAAFmyAABYsgAAAAAAAAAAAAAAAAAAY1NQAGNTUABjU1AUY1NQw2NT
UP9jU1DqY1NQOWNTUABjU1AAAAAAAGNTUABjU1AAY1NQFGNTUMJjU1D/Y1NQ6GNTUDdjU1AAWLYAAFmy
AAdZsgCGWbIA91myAP9ZsgD+WbIA/lmyAKlZsgAWWbIAAFmyAAAAAAAAAAAAAAAAAABiUlAAZFRQAGNT
UABjU1BYY1NQ+GNTUP9jU1CmY1NQB2NTUABjU1AAY1NQAGNTUABjU1BoY1NQ/GNTUP9jU1CNYVFQAWJS
UABZsgAAWbIATVmyAPdZsgDNWbIAV1myAE9ZsgC+WbIA/1myAHpZsgAAWbIAAAAAAAAAAAAAAAAAAAAA
AABiUlAAY1NQAGNTUAtjU1CyY1NQ/2NTUPNjU1BKY1NQAGNTUABjU1AAY1NQHmNTUNJjU1D/Y1NQ22NT
UCZjU1AAVscAAFuxAABZsgCTWbIA+lmyAEtZsgAAWbIAAFmyADhZsgDxWbIAwFmyAApZsgAAAAAAAAAA
AAAAAAAAAAAAAGFRUABjU1AAY1NQAGNTUEVjU1DwY1NQ/2NTULhjU1AOY1NQAGRUUABjU1B9Y1NQ/2NT
UP5jU1B2ZFRQAGJSUABYsgAA/wAAAFmyAJtZsgD2WbIAOVmyAABZsgAAWbIAHVmyAOFZsgDPWbIAEVmy
AABZsgAAWbIAAFmyAABYsgAAAAAAAGJSUABjU1AAY1NQBWNTUJ9jU1D/Y1NQ+WNTUF5jU1AAY1NQMGNT
UN5jU1D/Y1NQy2NTUBljU1AAYlJQAFixAABZsgAAWbIAZlmyAP9ZsgCmWbIAKVmyAAhZsgAcWbIA4Fmy
AM9ZsgARWLIAClmyAA1asgAAWbIAAFmyAABZsgAAAAAAAGNTUABjU1AAY1NQNGNTUOZjU1D/Y1NQyGNT
UBpjU1CoY1NQ/2NTUPljU1BeY1NQAF5OUABhUVAAWLEAAFmyAABZsgAUWbIAs1myAP9ZsgDrWbIAnlmy
AClZsgDfWbIAzlmyAClZsgCtWbIAxlmyAH1ZsgAYWbIAAFmyAABYswAAYlJQAGJSUABgUFABY1NQimNT
UP9jU1D8Y1NQhGNTUNZjU1D/Y1NQ7mNTUDdjU1AAY1NQAAAAAABYsQAAWbIAAFmyAABZsgAbWbIAhlmy
AM1ZsgCfWbIAKVmyAN9ZsgDNWbIALFmyALlZsgDzWbIA/1myAK1ZsgASWbIAAFizAABiUlAAY1NQAGNT
UABjU1BhY1NQ/GNTUP9jU1CyY1NQZWNTUPZjU1D/Y1NQmGNTUARjU1AAY1NQAAAAAABZsQAAWbIAAFmy
AAD/mgAAWbIAEFmyAAlZsgAcWbIA4FmyAM9ZsgARWbIAD1myADtZsgDDWbIA/1myAGFZsgAAWLMAAGJS
UABjU1AAY1NQEmNTUMBjU1D/Y1NQ6mNTUERjU1ANY1NQsWNTUP9jU1DuY1NQQGNTUABjU1AAY1NQAAAA
AABXtAAAWbIAAFmyAABZsgAAWbIAAFmyAB1ZsgDgWbIAz1myABFZsgAAWbIAAFmyAFlZsgD/WbIAmv8y
AABYsgAAYVFQAGNTUABjU1BpY1NQ/GNTUP9jU1CTYlJQA2NTUABjU1BFY1NQ8GNTUP9jU1CvY1NQCmNT
UABiUlAAAAAAAAAAAAAAAAAAAAAAAAAAAABZsgAAWbIAFVmyANRZsgDlWbIAJ1myAABZsgAAWbIAaFmy
AP9ZsgCVXLIAAFe9AABjU1AAY1NQHmNTUNFjU1D/Y1NQ4WNTUCtjU1AAY1NQAGNTUAVjU1CfY1NQ/2NT
UPZjU1BVY1NQAGRUUABiUlAAAAAAAAAAAAAAAAAAAAAAAFmyAABYsgACWbIAkFmyAP9ZsgCvWbIASVmy
AGBZsgDbWbIA+VmyAFFZsgAAY1RPAGRUUABjU1B9Y1NQ/2NTUP9jU1B/ZlZQAGJSUABjU1AAY1NQAGNT
UDVjU1DnY1NQ/2NTUMJjU1ATY1NQAGNTUAAAAAAAAAAAAAAAAAAAAAAAWbIAAFmyAABZsgAgWbIAuVmy
AP9ZsgD9WbIA/1myAPlZsgCMWbIACVi1AABjU1AAY1NQKmNTUN9jU1D/Y1NQ02NTUB9jU1AAYlJQAGFR
UABjU1AAYVFQAWNTUItjU1D/Y1NQ/WNTUGtjU1AAYlJQAGNTUAAAAAAAAAAAAAAAAABYsAAAWbIAAFmy
AABZsgAXWbIAZ1myAJtZsgCUWbIAUVmyAAlZsgAAZEhZAGNTUAJjU1CRY1NQ/2NTUP1jU1BrY1NQAGJS
UABlVVAAAAAAAGNTUABjU1AAY1NQJmNTUNtjU1D/Y1NQ1GNTUCBjU1AAY1NQAAAAAAAAAAAAAAAAAAAA
AABYsgAAWbIAAFmyAABZsgAAAO8AAFyxAABZsgAAWbIAAF2JIgBjU1AAY1NQOmNTUOtjU1D/Y1NQw2NT
UBRjU1AAY1NQAAAAAAAAAAAAX09QAGJSUABkVFAAY1NQd2NTUP9jU1D/Y1NQgWVVUABjU1AAZFRQAAAA
AAAAAAAAAAAAAAAAAABYsgAAWLIAAFiyAABYsgAAWLIAAFivAABhZkAAY1NQAGNTUAdjU1CmY1NQ/2NT
UPdjU1BYY1NQAGRUUABgUFAAAAAAAAAAAAAAAAAAYlJQAGNTUABjU1AZY1NQzGNTUP9jU1DjY1NQLmNT
UABjU1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZFRQAGNTUABjU1AAY1NQS2NT
UPNjU1D/Y1NQsWNTUAtjU1AAYlJQAAAAAAAAAAAAAAAAAAAAAABjU1AAXk5QAGNTUABjU1BiY1NQ+mNT
UP9jU1CZYlJQA2NTUABjU1AAY1NQAGNTUABjU1AAY1NQAGNTUABjU1AAY1NQAGNTUABjU1AAY1NQAGNT
UA5jU1C5Y1NQ/2NTUO9jU1BFY1NQAGNTUABhUVAAAAAAAAAAAAAAAAAAAAAAAAAAAABiUlAAY1NQAGNT
UBBjU1C8Y1NQ/2NTUO1jU1BNY1NQGGNTUBpjU1AaY1NQGmNTUBpjU1AaY1NQGmNTUBpjU1AaY1NQGmNT
UBpjU1AXY1NQaGNTUPljU1D/Y1NQn2JSUAVjU1AAYlJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGFR
UABjU1AAY1NQAGNTUE5jU1D0Y1NQ/2NTUOpjU1DZY1NQ2mNTUNpjU1DaY1NQ2mNTUNpjU1DaY1NQ2mNT
UNpjU1DaY1NQ2mNTUNljU1DvY1NQ/2NTUOZjU1AzY1NQAGNTUABfT1AAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGNTUABjU1AAY1NQCGNTUKljU1D/Y1NQ/2NTUP9jU1D/Y1NQ/2NTUP9jU1D/Y1NQ/2NT
UP9jU1D/Y1NQ/2NTUP9jU1D/Y1NQ/2NTUP9jU1D/Y1NQimBQUAFiUlAAYVFQAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAYFBQAGNTUABjU1AAY1NQNGNTUJ5jU1CiY1NQoWNTUKFjU1ChY1NQoWNT
UKFjU1ChY1NQoWNTUKFjU1ChY1NQoWNTUKFjU1ChY1NQomNTUJVjU1AhY1NQAGNTUAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYlJQAGFRUABjU1AAY1NQAWNTUAJjU1ACY1NQAmNT
UAJjU1ACY1NQAmNTUAJjU1ACY1NQAmNTUAJjU1ACY1NQAmNTUAJjU1ACY1NQAWNTUABkVFAAYFBQAAAA
AAAAAAAAAAAAAAAAAAAAAAAA+AAAH/gAAB/wAAAP8AAAD+AAAAfAAAAHwAAAA4AAeAOAADgBAAAcAQAA
HAAAAB4AAAAeAAAAAQAAAACAAAAAAAIAAAABAAAAAIAAAAD4AAAAeAAAAHgAAAA4AACAPAABgB4AAcAf
8APAAAAD4AAAB+AAAAfwAAAP8AAAH/gAAB8=
</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>802, 497</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>采集系统( 2025.01.06.1516 </value>
</data>
<data name="&gt;&gt;timer_Status.Name" xml:space="preserve">
<value>timer_Status</value>
</data>
<data name="&gt;&gt;timer_Status.Type" xml:space="preserve">
<value>System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;timer_ShowCount.Name" xml:space="preserve">
<value>timer_ShowCount</value>
</data>
<data name="&gt;&gt;timer_ShowCount.Type" xml:space="preserve">
<value>System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;folderBrowserDialog1.Name" xml:space="preserve">
<value>folderBrowserDialog1</value>
</data>
<data name="&gt;&gt;folderBrowserDialog1.Type" xml:space="preserve">
<value>System.Windows.Forms.FolderBrowserDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>MesWorkForm</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>MesWork.PlcLinkForm, MesWork.DeviceDriver, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

BIN
DT_SCADA/LOGO.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

222
DT_SCADA/LogRecord.Designer.cs generated Normal file
View File

@@ -0,0 +1,222 @@
namespace LogRecord
{
partial class LogRecord
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle();
this.dgv_Log = new System.Windows.Forms.DataGridView();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.btn_Refresh = new System.Windows.Forms.Button();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
((System.ComponentModel.ISupportInitialize)(this.dgv_Log)).BeginInit();
this.SuspendLayout();
//
// dgv_Log
//
this.dgv_Log.AllowUserToAddRows = false;
this.dgv_Log.AllowUserToDeleteRows = false;
this.dgv_Log.AllowUserToResizeRows = false;
this.dgv_Log.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.dgv_Log.BackgroundColor = System.Drawing.SystemColors.ButtonHighlight;
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
dataGridViewCellStyle1.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.dgv_Log.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
this.dgv_Log.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dgv_Log.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.,
this.,
this.,
this.,
this.});
this.dgv_Log.Location = new System.Drawing.Point(12, 51);
this.dgv_Log.MultiSelect = false;
this.dgv_Log.Name = "dgv_Log";
this.dgv_Log.ReadOnly = true;
this.dgv_Log.RowHeadersVisible = false;
this.dgv_Log.RowTemplate.Height = 26;
this.dgv_Log.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dgv_Log.Size = new System.Drawing.Size(1277, 745);
this.dgv_Log.TabIndex = 72;
//
// button1
//
this.button1.Location = new System.Drawing.Point(358, 12);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 73;
this.button1.Text = "报警";
this.button1.UseVisualStyleBackColor = true;
this.button1.Visible = false;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(439, 12);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, 23);
this.button2.TabIndex = 73;
this.button2.Text = "登录";
this.button2.UseVisualStyleBackColor = true;
this.button2.Visible = false;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// button3
//
this.button3.Location = new System.Drawing.Point(520, 12);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(75, 23);
this.button3.TabIndex = 73;
this.button3.Text = "提示";
this.button3.UseVisualStyleBackColor = true;
this.button3.Visible = false;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// btn_Refresh
//
this.btn_Refresh.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_Refresh.Location = new System.Drawing.Point(12, 10);
this.btn_Refresh.Name = "btn_Refresh";
this.btn_Refresh.Size = new System.Drawing.Size(320, 35);
this.btn_Refresh.TabIndex = 74;
this.btn_Refresh.Text = "刷新";
this.btn_Refresh.UseVisualStyleBackColor = true;
this.btn_Refresh.Click += new System.EventHandler(this.btn_Refresh_Click);
//
// 序号
//
this..AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;
this..DataPropertyName = "序号";
dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold);
this..DefaultCellStyle = dataGridViewCellStyle2;
this..HeaderText = "序号";
this..Name = "序号";
this..ReadOnly = true;
this..SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this..Width = 60;
//
// 工位号
//
this..DataPropertyName = "工位号";
dataGridViewCellStyle3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold);
this..DefaultCellStyle = dataGridViewCellStyle3;
this..HeaderText = "工位号";
this..Name = "工位号";
this..ReadOnly = true;
this..SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this..Visible = false;
this..Width = 250;
//
// 类型
//
this..DataPropertyName = "类型";
dataGridViewCellStyle4.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold);
this..DefaultCellStyle = dataGridViewCellStyle4;
this..HeaderText = "类型";
this..Name = "类型";
this..ReadOnly = true;
this..SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this..Width = 90;
//
// 时间
//
this..DataPropertyName = "时间";
dataGridViewCellStyle5.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold);
dataGridViewCellStyle5.Format = "G";
this..DefaultCellStyle = dataGridViewCellStyle5;
this..HeaderText = "时间";
this..Name = "时间";
this..ReadOnly = true;
this..SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this..Width = 190;
//
// 内容
//
this..AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this..DataPropertyName = "内容";
dataGridViewCellStyle6.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold);
this..DefaultCellStyle = dataGridViewCellStyle6;
this..HeaderText = "内容";
this..Name = "内容";
this..ReadOnly = true;
this..SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
//
// LogRecord
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1298, 808);
this.Controls.Add(this.btn_Refresh);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.dgv_Log);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Name = "LogRecord";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "日志";
this.Load += new System.EventHandler(this.LogRecord_Load);
((System.ComponentModel.ISupportInitialize)(this.dgv_Log)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.DataGridView dgv_Log;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button btn_Refresh;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
}
}

143
DT_SCADA/LogRecord.cs Normal file
View File

@@ -0,0 +1,143 @@
using MesWork;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Configuration.ConfigurationManager;
namespace LogRecord
{
public partial class LogRecord : Form
{
public LogRecord()
{
InitializeComponent();
this.WindowState = FormWindowState.Maximized;
}
public LogRecord(int _Width,int _Height)
{
InitializeComponent();
this.Width = _Width;
this.Height = _Height;
}
private void LogRecord_Load(object sender, EventArgs e)
{
Refresh_Log();
}
private void Refresh_Log()
{
var dt = Select_Log();
dgv_Log.DataSource = dt;
for (int i = 0; i < dt.Rows.Count; i++)
{
var = (Type_Log)Enum.Parse(typeof(Type_Log),dt.Rows[i]["类型"].ToString());
switch ()
{
case Type_Log.Alarm:
RowsColor(i, Color.Red, dgv_Log);
break;
case Type_Log.Login:
RowsColor(i, Color.Green, dgv_Log);
break;
case Type_Log.Tip:
RowsColor(i, Color.Yellow, dgv_Log);
break;
default:
RowsColor(i, Color.Gray, dgv_Log);
break;
}
}
dgv_Log.ClearSelection();
//dgv_Log.CurrentCell = null;
//dgv_Log.Rows[0].Selected = false;
}
private void RowsColor(int row, Color color, DataGridView dgv)
{
var dt = (System.Data.DataTable)dgv.DataSource;
for (int i = 0; i < dt.Columns.Count; i++)
{
dgv.Rows[row].Cells[i].Style.BackColor = color;
}
}
public static bool Insert_Log(Type_Log LogType, string Log_Content)
{
/*
SELECT [IDG],[Log_Station],[Log_Type],[Log_Time],[Log_Content] FROM [记录_日志_运行日志]
*/
bool success = false;
var sql =
$" INSERT INTO [记录_日志_运行日志]([Log_Station],[Log_Type],[Log_Time],[Log_Content])" +
$" VALUES('{MesWorkForm.StationName}','{LogType.ToString()}',getdate(),'{Log_Content}')";
success = DataLinkMesWork.SQLCommon.ExecuteSql(sql, MesWorkForm.ConnectionString, out string err2);
return success;
}
public static DataTable Select_Log()
{
/*
SELECT [IDG],[Log_Station],[Log_Type],[Log_Time],[Log_Content] FROM [记录_日志_运行日志]
*/
var sql =
$" (SELECT " +
$" row_number() over(order by [Log_Time]) AS 序号" +
$" ,[Log_Station] AS 工位号" +
$" ,[Log_Type] AS 类型" +
$" ,[Log_Time] AS 时间" +
$" ,[Log_Content] AS 内容" +
$" FROM [记录_日志_运行日志]" +
$" WHERE [Log_Station] = '{MesWorkForm.StationName}')" +
$" ORDER BY 序号 DESC";
DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, MesWorkForm.ConnectionString,out DataTable dt, out string err2);
return dt;
}
private void button1_Click(object sender, EventArgs e)
{
Insert_Log(Type_Log.Alarm, "dfghjkjfdfghjk法国红酒看官方一股好久哦i反对牛v军方肯定没得查看你的孙女i的女哦i的妇女哦看v哦对妇女的发");
}
private void button2_Click(object sender, EventArgs e)
{
Insert_Log(Type_Log.Login, "废物");
}
private void button3_Click(object sender, EventArgs e)
{
Insert_Log(Type_Log.Tip, "滚");
}
public enum Type_Log
{
/// <summary>
/// 报警
/// </summary>
Alarm = 1,
/// <summary>
/// 登录
/// </summary>
Login = 2,
/// <summary>
/// 提示
/// </summary>
Tip = 3
}
private void btn_Refresh_Click(object sender, EventArgs e)
{
Refresh_Log();
}
}
}

135
DT_SCADA/LogRecord.resx Normal file
View File

@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="序号.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="工位号.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="类型.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="时间.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="内容.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

85
DT_SCADA/MW.OnStart.cs Normal file
View File

@@ -0,0 +1,85 @@
using Newtonsoft.Json;
using OpcBasic;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using SystemFramework;
namespace MesWork
{
public partial class Temp { }
public partial class MesWorkForm
{
protected override void OnShown(EventArgs e)
{
var text = System.IO.File.ReadAllText(@"config.json");
scadaConfig = JsonConvert.DeserializeObject<ScadaConfig>(text);
ThreadPool.SetMaxThreads(2000, 800);
Never_Know.Hello_You_All_Never_Know = Hello_You_All_Never_Know;
new ApplicationLog();
ConnectService();
LoadOPCData(BasicDataTableFile, IsDemoMesServer, IsWriteMonitorLog, true, true, out string err);
if (err.Length > 0)
{
MessageBox.Show($"LoadOPCData错误{err}");
Process.GetCurrentProcess().Kill();
}
CommunicationCheckOnLine();
LoadDevice(scadaConfig);
Thread.Sleep(200);
StartServer();
//Thread.Sleep(200);
//First_TagMonitor();
//Thread.Sleep(1000);
//Loop_Fast_Task();
// Loop_Slow_Task();
// 开启webApi
initServer = new InitServer(MesWorkForm.WebSvrUrlPort);
var task1 = new Thread(new ThreadStart(Loop));
task1.IsBackground = true;
task1.Start();
//var task2 = new Thread(new ThreadStart(getCharDataToken));
//task2.IsBackground = true;
//task2.Start();
//var task3 = new Thread(new ThreadStart(getCharData));
//task3.IsBackground = true;
//task3.Start();
//var task4 = new Thread(new ThreadStart(StationNameStatus_Update));
//task4.IsBackground = true;
//task4.Start();
//var task5 = new Thread(new ThreadStart(StationNameDeviceData_Insert));
//task5.IsBackground = true;
//task5.Start();
//var task6 = new Thread(new ThreadStart(StationNameDeviceData_Update));
//task6.IsBackground = true;
//task6.Start();
//var task7 = new Thread(new ThreadStart(SelectData_WritePLC_Task));
//task7.IsBackground = true;
//task7.Start();
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("DT_SCADA")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DT_SCADA")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("d4e30851-a8e7-4275-a7c1-24f034d4cac2")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,83 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace SCADA_JG.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SCADA_JG.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("断开状态", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("连接状态", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More