This commit is contained in:
Administrator
2026-07-08 10:58:42 +08:00
parent 053a90d34f
commit 7d7d6bc3bf
21 changed files with 1528 additions and 1283 deletions
+83
View File
@@ -14,6 +14,7 @@ using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.ComTypes;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -106,6 +107,7 @@ namespace JinYuan.ControlCenters
{
GetAlarmData();
GetSafeEqptData();
InitFunc();
IntiDevice();
Timer_RefreshData = new System.Timers.Timer(1000);
@@ -897,9 +899,11 @@ namespace JinYuan.ControlCenters
{
UploadEquEnergy();//电表
//UPloadAnemograph();//风速仪
ShowSafeEqptEven_Run(); //安全装置状态
});
Regular = 0;
}
if (TotalNum > 4)
{
GetEnergyData();
@@ -1500,6 +1504,22 @@ namespace JinYuan.ControlCenters
}
List<AlarmForm> listSafeEqptForm = null;
public void GetSafeEqptData()
{
//加载PLC安全装置状态文件
try
{
string strFileName = System.Environment.CurrentDirectory + "\\安全装置报警寄存器对应表.csv";
listSafeEqptForm = CSVHelper<AlarmForm>.ReadCSV(strFileName);
}
catch (Exception ex)
{
MessageBox.Show("加载安装装置报警文件失败!");
}
}
/// <summary>
/// 报警信息读取
/// </summary>
@@ -1655,6 +1675,69 @@ namespace JinYuan.ControlCenters
}
}
List<AlarmData> safeEqptStatus = new List<AlarmData>();
List<AlarmStatus> listSafeEqptStatus = null;
private void ShowSafeEqptEven_Run()
{
if (CommonMethods.IsRun && CommonMethods.plcDevice.IsConnected)
{
string Date = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
JYResult<byte[]> resByte = CommonMethods.PlcLink.ReadValue<JYResult<byte[]>>("D1000", Data_Type.ArrByte, 8);
if (resByte.IsSuccess && resByte != null)
{
if (resByte == null) { return; }
//如果未配置报警地址信息返回 TODO
if (listSafeEqptForm == null) { return; }
int startPlcAddr = 1000;
listSafeEqptStatus = PLCAlarmParseHelper.OmronFinsByte2Status(startPlcAddr, resByte.Content);
//4.判定有不良后,关联AlarmStatus 和AlarmForm
if (listSafeEqptStatus == null) { return; } //状态信息为空返回
//如果有报警,获取报警信息
var josnTxtMsg = $"{Date}:获取PLC安全设备运行状态:\r\n";
for (int i = 0; i < listSafeEqptStatus.Count; i++)
{
josnTxtMsg += $"plc_addr={listSafeEqptStatus[i].PLCAdress},status={listSafeEqptStatus[i].Status}\r\n";
}
TxtHelper.WriteTxt($@"{CommonMethods.strMesLogspath}\{DateTime.Now.ToString("yyyyMMdd")}\设备运行状态\{DateTime.Now.ToString("HH")}.txt", josnTxtMsg);
//关联表单数据和报警记录,获取报警信息
safeEqptStatus = listSafeEqptStatus
.Join(listSafeEqptForm
, s => s.PLCAdress
, f => f.PLCAdress
, (s, f) => new AlarmData()
{
PLCAdress = s.PLCAdress,
AlarmCode = f.AlarmCode,
AlarmContent = f.AlarmContent == "" ? s.PLCAdress : f.AlarmContent,
AlarmDesc = f.AlarmContent == "" ? s.PLCAdress : f.AlarmContent,
AlarmType = "安全装置",
AlarmState = s.Status?"0":"1", //mes 要求0是异常,1是正常
StartTime = Date,
EndTime = Date,
Flag = 0
}).ToList();
if (safeEqptStatus.Count > 0)
{
List<SafeEqptCode> safeEqptCodeLists = new List<SafeEqptCode>();
safeEqptStatus.ForEach(r =>
{
if (CommonMethods.sysConfig.MesModeSwitching)
{
var item = new SafeEqptCode();
item.equipNum = r.AlarmCode;
item.status = r.AlarmState;
safeEqptCodeLists.Add(item);
}
});
MESDataCombin.SafeEqptAlarm(Date, safeEqptCodeLists);
}
}
}
}
/// <summary>
/// 报警保存
+33 -5
View File
@@ -373,6 +373,7 @@ namespace JinYuan.ControlCenters
List<short> listRes = GetList<short>(3, 0);//进站电芯反馈结果
byte[] bytes = bArrays.Content.ByteReverse();//高低位转换
byte[] bytes1 = bArrays.Content;
// 从D2200开始
#region 数据解析
@@ -1831,14 +1832,18 @@ namespace JinYuan.ControlCenters
//芯包信息1 D3300~D3326
//芯包信息2 D3330~D3356
//芯包信息3 D3360~D3386
for (int j = 0; j < 20; j++)
for (int j = 0; j < 27; j++)
{
m.CCD_Data[i, j] = ShortLib.GetShortFromByteArray(bArrays.Content, 200 + i * 30 * 2 + j * 2, DataFormat.CDAB);
}
//3400
// CCD
m.CCD_Data[i, 19] = ShortLib.GetShortFromByteArray(bArrays.Content, 600 + i * 30 * 2 + 20, DataFormat.CDAB);
//3400 3430 3460
m.Thickness1 = FloatLib.GetFloatFromByteArray(bArrays.Content, 400 + i * 30 * 2, DataFormat.CDAB).ToString();
//3401 3431 3461
m.ThicknessResult1 = FloatLib.GetFloatFromByteArray(bArrays.Content, 400 + i * 30 * 2 + 2 * 2, DataFormat.CDAB).ToString();
//3500
//3500 3530 3560
m.flatness_setpoint = FloatLib.GetFloatFromByteArray(bArrays.Content, 600 + i * 30 * 2, DataFormat.CDAB).ToString();
m.flatness_actual = FloatLib.GetFloatFromByteArray(bArrays.Content, 600 + i * 30 * 2 + 2 * 2, DataFormat.CDAB).ToString();
//厚度3400
@@ -1856,7 +1861,7 @@ namespace JinYuan.ControlCenters
//{
// m.CCD_NgNo[i, j] = ShortLib.GetShortFromByteArray(bArrays.Content, 2200 + i * 30 * 2 + j * 2, DataFormat.CDAB);
//}
for (int j = 0; j < 20; j++)
for (int j = 0; j < 27; j++)
{
m.CCD_NgNo[i, j] = StringLib.GetStringFromByteArrayByEncoding(bArrays.Content, (7800 * 2 + j * 40 * 2 + i * 2 * 1000), 20 * 2, System.Text.Encoding.ASCII).
Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim();
@@ -1939,6 +1944,14 @@ namespace JinYuan.ControlCenters
m.CCD18 = m.CCD_Data[i, 17];
m.CCD19 = m.CCD_Data[i, 18];
m.CCD20 = m.CCD_Data[i, 19];
m.CCD21 = m.CCD_Data[i, 20];
m.CCD22 = m.CCD_Data[i, 21];
m.CCD23 = m.CCD_Data[i, 22];
m.CCD24 = m.CCD_Data[i, 23];
m.CCD25 = m.CCD_Data[i, 24];
m.CCD26 = m.CCD_Data[i, 25];
m.CCD27 = m.CCD_Data[i, 26];
m.CCDResult1 = m.CCD_Data[i, 0] == 1 ? "OK" : (m.CCD_Data[i, 0] == 0 ? "NG" : "缺图");
m.CCDResult2 = m.CCD_Data[i, 1] == 1 ? "OK" : (m.CCD_Data[i, 1] == 0 ? "NG" : "缺图");
m.CCDResult3 = m.CCD_Data[i, 2] == 1 ? "OK" : (m.CCD_Data[i, 2] == 0 ? "NG" : "缺图");
@@ -1959,7 +1972,13 @@ namespace JinYuan.ControlCenters
m.CCDResult18 = m.CCD_Data[i, 17] == 1 ? "OK" : (m.CCD_Data[i, 17] == 0 ? "NG" : "缺图");
m.CCDResult19 = m.CCD_Data[i, 18] == 1 ? "OK" : (m.CCD_Data[i, 18] == 0 ? "NG" : "缺图");
m.CCDResult20 = m.CCD_Data[i, 19] == 1 ? "OK" : (m.CCD_Data[i, 19] == 0 ? "NG" : "缺图");
m.CCDResult21 = m.CCD_Data[i, 20] == 1 ? "OK" : (m.CCD_Data[i, 20] == 0 ? "NG" : "缺图");
m.CCDResult22 = m.CCD_Data[i, 21] == 9 ? "OK" : (m.CCD_Data[i, 21] == 1 ? "NG" : "缺图"); //总结果
m.CCDResult23 = m.CCD_Data[i, 22] == 1 ? "OK" : (m.CCD_Data[i, 22] == 0 ? "NG" : "缺图");
m.CCDResult24 = m.CCD_Data[i, 23] == 1 ? "OK" : (m.CCD_Data[i, 23] == 0 ? "NG" : "缺图");
m.CCDResult25 = m.CCD_Data[i, 24] == 1 ? "OK" : (m.CCD_Data[i, 24] == 0 ? "NG" : "缺图");
m.CCDResult26 = m.CCD_Data[i, 25] == 1 ? "OK" : (m.CCD_Data[i, 25] == 0 ? "NG" : "缺图");
m.CCDResult27 = m.CCD_Data[i, 26] == 1 ? "OK" : (m.CCD_Data[i, 26] == 0 ? "NG" : "缺图");
m.CCD1NgCode = m.CCD_NgNo[i, 0];
m.CCD2NgCode = m.CCD_NgNo[i, 1];
m.CCD3NgCode = m.CCD_NgNo[i, 2];
@@ -1978,6 +1997,15 @@ namespace JinYuan.ControlCenters
m.CCD16NgCode = m.CCD_NgNo[i, 15];
m.CCD17NgCode = m.CCD_NgNo[i, 16];
m.CCD18NgCode = m.CCD_NgNo[i, 17];
m.CCD19NgCode = m.CCD_NgNo[i, 18];
m.CCD20NgCode = m.CCD_NgNo[i, 19];
m.CCD21NgCode = m.CCD_NgNo[i, 20];
m.CCD22NgCode = m.CCD_NgNo[i, 21];
m.CCD23NgCode = m.CCD_NgNo[i, 22];
m.CCD24NgCode = m.CCD_NgNo[i, 23];
m.CCD25NgCode = m.CCD_NgNo[i, 24];
m.CCD26NgCode = m.CCD_NgNo[i, 25];
m.CCD27NgCode = m.CCD_NgNo[i, 26];
#endregion
m.CSBYHASCANNINGTIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
@@ -108,6 +108,52 @@ namespace JinYuan.ControlCenters
#endregion
#region 11、安全装置状态
/// <summary>
/// 安全装置状态
/// </summary>
/// <param name="strStatus"></param>
/// <returns></returns>
public static string SafeEqptAlarm(string StartDate, List<SafeEqptCode> safeEqptCodeLists = null)
{
var nowTime = DateTime.Now;
string resJson = "";
string josnTxtMsg = string.Empty;
string Date = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
try
{
//SafeEqptStatusParam statusParam = new SafeEqptStatusParam();
//statusParam.siteCode = CommonMethods.mesConfig.siteCode;
//statusParam.lineCode = CommonMethods.mesConfig.lineCode;
//statusParam.equipNum = CommonMethods.mesConfig.equipNum;
//statusParam.userName = CommonMethods.mesConfig.mesUserName;
//statusParam.seatId = "";
//statusParam.recordDate = StartDate;
//statusParam.uploadTime = Date;
//statusParam.safeEqptCodeList = safeEqptCodeLists;
//string SendJosn = JsonConvert.SerializeObject(statusParam);
var sw = new Stopwatch();
for (int i = 0; i < safeEqptCodeLists.Count; i++)
{
string SendJosn = JsonConvert.SerializeObject(safeEqptCodeLists[i]);
sw.Start();
resJson = MESApiHelper.HttpPostJsonAPI(CommonMethods.mesConfig.SafeEqptStatusMesUrl, SendJosn);
sw.Stop();
josnTxtMsg = $"{nowTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用MES安全设备运行状态接口:{CommonMethods.mesConfig.SafeEqptStatusMesUrl},请求数据为:{SendJosn},\n{nowTime.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resJson}";
TxtHelper.WriteTxt($@"{CommonMethods.strMesLogspath}\{nowTime.ToString("yyyyMMdd")}\设备运行状态\{nowTime.ToString("HH")}.txt", josnTxtMsg);
}
}
catch (Exception ex)
{
LoggerHelp.WriteEX("调用MES安全设备运行状态接口", ex);
}
return resJson;
}
#endregion
}
}