You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

216 lines
9.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HslCommunication;
using Module.Common;
using Module.Hsms.Model;
namespace Module.Plc.Profinet.Tool
{
/// <summary>
/// 采集设备状态值
/// </summary>
public class PlcPublicStatusUtils
{
/// <summary>
/// 通道1设备状态变化事件
/// </summary>
public static event EventHandler<RecvedStatusEventArgs> T1StatusChanged;
/// <summary>
/// 通道2设备状态变化事件
/// </summary>
public static event EventHandler<RecvedStatusEventArgs> T2StatusChanged;
/// <summary>
/// 设置通道1设备状态变化事件字符串
/// </summary>
/// <param name="status">连接状态字符串。比如:“连接成功”</param>
private static void SetT1DevStatusEvent(HsmsEapStatusRpt eapStsRpt)
{
EventHandler<RecvedStatusEventArgs> StatusHandler;
StatusHandler = T1StatusChanged;
if (StatusHandler != null)
{
StatusHandler.Invoke(null, new RecvedStatusEventArgs() { EapStatusRpt = eapStsRpt });
}
}
/// <summary>
/// 设置通道2设备状态变化事件字符串
/// </summary>
/// <param name="status">连接状态字符串。比如:“连接成功”</param>
private static void SetT2DevStatusEvent(HsmsEapStatusRpt eapStsRpt)
{
EventHandler<RecvedStatusEventArgs> StatusHandler;
StatusHandler = T2StatusChanged;
if (StatusHandler != null)
{
StatusHandler.Invoke(null, new RecvedStatusEventArgs() { EapStatusRpt = eapStsRpt });
}
}
/// <summary>
/// 获取通道1设备状态值.0-Initial 1-Idle 2-Run 3-Pause 4-Alarm
/// </summary>
/// <returns></returns>
public static UInt16 GetT1EapDevStatusValue()
{
UInt16 result = 99;
try
{
if (PublicParams.T1ConnectPlc)
{
HslCommunication.OperateResult<bool[]> read01 = PlcCommon.DeltaTcpNetClient01.ReadBool("M910", 5);
if (read01.IsSuccess)
{
bool bAlarm = read01.Content[0]; //报警中Alarm
bool bRun = read01.Content[1]; //启动中Run
bool bPause = read01.Content[2]; //暂停中Pause
bool bFshed = read01.Content[3]; //完成/就绪Initial
bool bIdle = read01.Content[4]; //待机中Idle
result = bFshed ? (UInt16)0 : result;
result = bIdle ? (UInt16)1 : result;
result = bRun ? (UInt16)2 : result;
result = bPause ? (UInt16)3 : result;
result = bAlarm ? (UInt16)4 : result;
//设备状态变化将事件发送给EAP
if(result!=EapPubParams._T1DEV_CURRENT_STATUS_VAL)
{
HsmsEapStatusRpt statusRpt = new HsmsEapStatusRpt();
statusRpt.F_Value = result;
switch (result)
{
case 0:
{
statusRpt.F_CEID = "3009";
statusRpt.F_EventName = "PROCESS_END";
EapPubParams._HSMS_EAP_CEID_VALS[3009] = 1;
break;
}
case 1:
{
statusRpt.F_CEID = "3007";
statusRpt.F_EventName = "PROCESS_START";
EapPubParams._HSMS_EAP_CEID_VALS[3007] = 1;
break;
}
case 2:
{
statusRpt.F_CEID = "3007";
statusRpt.F_EventName = "PROCESS_START";
EapPubParams._HSMS_EAP_CEID_VALS[3007] = 1;
break;
}
case 3:
{
statusRpt.F_CEID = "3008";
statusRpt.F_EventName = "PROCESS_PAUSE";
EapPubParams._HSMS_EAP_CEID_VALS[3008] = 1;
break;
}
case 4:
{
statusRpt.F_CEID = "3010";
statusRpt.F_EventName = "ALARM_ TRIGGER";
EapPubParams._HSMS_EAP_CEID_VALS[3010] = 1;
break;
}
}
SetT1DevStatusEvent(statusRpt);
EapPubParams._T1DEV_CURRENT_STATUS_VAL = result;
}
}
}
return result;
}
catch (Exception ex)
{
ex.ToString();
return 99;
}
}
/// <summary>
/// 获取通道2设备状态值.0-Initial 1-Idle 2-Run 3-Pause 4-Alarm
/// </summary>
/// <returns></returns>
public static UInt16 GetT2EapDevStatusValue()
{
UInt16 result = 99;
try
{
if (PublicParams.T2ConnectPlc)
{
HslCommunication.OperateResult<bool[]> read01 = PlcCommon.DeltaTcpNetClient02.ReadBool("M90", 5);
if (read01.IsSuccess)
{
bool bAlarm = read01.Content[0]; //报警中Alarm
bool bRun = read01.Content[1]; //启动中Run
bool bPause = read01.Content[2]; //暂停中Pause
bool bFshed = read01.Content[3]; //完成/就绪Initial
bool bIdle = read01.Content[4]; //待机中Idle
result = bFshed ? (UInt16)0 : result;
result = bIdle ? (UInt16)1 : result;
result = bRun ? (UInt16)2 : result;
result = bPause ? (UInt16)3 : result;
result = bAlarm ? (UInt16)4 : result;
//设备状态变化将事件发送给EAP
if (result != EapPubParams._T2DEV_CURRENT_STATUS_VAL)
{
HsmsEapStatusRpt statusRpt = new HsmsEapStatusRpt();
statusRpt.F_Value = result;
switch (result)
{
case 0:
{
statusRpt.F_CEID = "3109";
statusRpt.F_EventName = "PROCESS_END";
EapPubParams._HSMS_EAP_CEID_VALS[3109] = 1;
break;
}
case 1:
{
break;
}
case 2:
{
statusRpt.F_CEID = "3107";
statusRpt.F_EventName = "PROCESS_START";
EapPubParams._HSMS_EAP_CEID_VALS[3107] = 1;
break;
}
case 3:
{
statusRpt.F_CEID = "3108";
statusRpt.F_EventName = "PROCESS_PAUSE";
EapPubParams._HSMS_EAP_CEID_VALS[3108] = 1;
break;
}
case 4:
{
statusRpt.F_CEID = "3110";
statusRpt.F_EventName = "ALARM_ TRIGGER";
EapPubParams._HSMS_EAP_CEID_VALS[3110] = 1;
break;
}
}
SetT2DevStatusEvent(statusRpt);
EapPubParams._T2DEV_CURRENT_STATUS_VAL = result;
}
}
}
return result;
}
catch (Exception ex)
{
ex.ToString();
return 99;
}
}
}
}