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

230 lines
6.4 KiB
C#

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;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using ICSharpCode.Core;
using Mesnac.Action.Base;
using Mesnac.Action.Compressor.SubStation;
using Mesnac.Basic;
using Mesnac.Equips;
using SocketProcess;
namespace Mesnac.Action.Compressor.Sys
{
/// <summary>
/// 定时器运行服务类
/// </summary>
public class TimerRunService
{
#region 字段定义
private System.Timers.Timer _timer = null;
private int _cnt = 0; //重连计数器
//private SocketClient socketClientTest = new SocketClient();
SubStationHelper subStationHelper = new SubStationHelper();
#endregion
#region 单例实现
private static TimerRunService _instance = null;
private TimerRunService() { }
public static TimerRunService Instance
{
get
{
if (_instance == null)
{
_instance = new TimerRunService();
}
return _instance;
}
}
#endregion
#region 启动定时器运行服务
/// <summary>
/// 启动定时器运行服务
/// </summary>
public void Start()
{
if (this._timer == null)
{
this._timer = new System.Timers.Timer();
this._timer.Interval = 1000 * 60;
this._timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
this._timer.Start();
ICSharpCode.Core.LoggingService.Debug("》》》定时器任务已启动!");
}
}
#endregion
#region 停止定时器运行服务
/// <summary>
/// 停止定时器运行服务
/// </summary>
public void Stop()
{
if (this._timer != null)
{
this._timer.Stop();
this._timer.Dispose();
this._timer = null;
ICSharpCode.Core.LoggingService.Debug("》》》定时器任务已停止!");
}
}
#endregion
#region 定时器服务事件处理
/// <summary>
/// 定时器服务事件处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
lock (String.Empty)
{
//定时读取OEE任务
//ReadDeviceOeeData();
//ReadDevcieState();
}
}
#endregion
#region 定时任务
#region 定时读取设备OEE参数并插库
BaseEquip _equip;
public void ReadDeviceOeeData()
{
try
{
FindPLC("A1");
_equip.Read(_equip.Group["QtyCount"].Block, _equip.Group["QtyCount"].Start, _equip.Group["QtyCount"].Len, out object[] data);
int QTYCount = Convert.ToInt16(data[2]);
int NGCount = Convert.ToInt16(data[0]);
if (QTYCount != 0)
{
//ICSharpCode.Core.LoggingService.Debug("合格数量:" + QTYCount + "NG数量"+ NGCount);
//插库
subStationHelper.InsertDeviceOeeInfo("A1", QTYCount+ NGCount, NGCount);
}
}
catch (Exception ex)
{
}
}
private void ReadDevcieState()
{
try
{
FindPLC("A1");
_equip.Read(_equip.Group["B1"].Block, _equip.Group["B1"].Start, 1, out object[] data);
ArrayList array = ConvertToBit(data, 0);
string DeviceState = array[5].ToString();
//插库
subStationHelper.InsertDeviceStateInfo("A1", DeviceState,"A");
}
catch (Exception ex)
{
}
}
public ArrayList ConvertToBit(object[] obj, int index)
{
ArrayList al = new ArrayList();
int IntValue = Convert.ToInt16(obj[index]);
for (int i = 0; i < 16; i++)
{
int value = IntValue & 1;
al.Add(value);
IntValue = IntValue >> 1;
}
return al;
}
public void FindPLC(string plcname)
{
foreach (BaseEquip equip in Factory.Instance.AllEquips.Values)
{
if (equip.Name == plcname)
{
_equip = equip;
break;
}
}
}
#endregion
#region 定时检测Socket通断情况
public void SocketReConnect()
{
#region 实现重连方法
//if (_cnt >= 20)
//{
// ICSharpCode.Core.LoggingService<TimerRunService>.Info("尝试重连失败,请检查服务器端!");
// _cnt = 0;
// return;
//}
//if (!SocketClient.Instance.connected)
//{
// SocketClient.Instance.ReConnect();
// _cnt++;
// if (SocketClient.Instance.connected)
// {
// _cnt = 0;
// }
//}
#endregion
#region 检测Socket是否在侦听如果没有侦听则重启侦听服务每5次循环检测一次端口占用
//this._cnt++;
//if (this._cnt > 10)
//{
// if (!socketClientTest.connFlag)
// {
// socketClientTest.ReConnect();
// }
// this._cnt = 0;
//}
#endregion
}
#endregion
#region 定时检测接收信息的情况,处理并下传
public void ReceiveMsgProcess()
{
//判断 当接收到服务器端发送的有效信息时
//if (!string.IsNullOrEmpty(socketClientTest.receiveStr))
//{
// //处理下传
// bool downFlag = ChemicalWeighingPlc.PlcPlanHelper.ScanCodeDown(socketClientTest.receiveStr);
// socketClientTest.receiveStr = null;
//}
}
#endregion
#endregion
}
}