20260708
This commit is contained in:
@@ -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>
|
||||
/// 报警保存
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user