140 lines
3.9 KiB
C#
140 lines
3.9 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Data;
|
|||
|
using System.Diagnostics;
|
|||
|
using System.Drawing;
|
|||
|
using System.Drawing.Imaging;
|
|||
|
using System.IO;
|
|||
|
using System.Linq;
|
|||
|
using System.Reflection;
|
|||
|
using System.Runtime.InteropServices;
|
|||
|
using System.Threading;
|
|||
|
using LeatherApp.Utils;
|
|||
|
using Models;
|
|||
|
using OpenCvSharp;
|
|||
|
using OpenCvSharp.Extensions;
|
|||
|
using S7.Net;
|
|||
|
|
|||
|
namespace LeatherApp.Device
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// PLC操作类
|
|||
|
/// </summary>
|
|||
|
public class PLCDev : IDisposable
|
|||
|
{
|
|||
|
private Plc devPlc;
|
|||
|
public Action<DateTime,WarningEnum, string> WarningEvent;
|
|||
|
/// <summary>
|
|||
|
/// 运行状态
|
|||
|
/// </summary>
|
|||
|
public Action<bool> RuningStateChangeEvent;
|
|||
|
/// <summary>
|
|||
|
/// 是否打开设备成功
|
|||
|
/// </summary>
|
|||
|
public bool IsInit { get; private set; } = false;
|
|||
|
|
|||
|
private Thread t_task1;
|
|||
|
|
|||
|
public bool? devRunningState { get; private set; }
|
|||
|
public PLCDev()
|
|||
|
{
|
|||
|
}
|
|||
|
public bool start(CpuType cpu, string iPAdrees, short rack, short slot)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
devPlc = new Plc(cpu, iPAdrees, rack, slot);
|
|||
|
devPlc.Open();
|
|||
|
if (!devPlc.IsConnected) throw new Exception("Plc连接失败!");
|
|||
|
|
|||
|
IsInit = true;
|
|||
|
|
|||
|
t_task1 = new System.Threading.Thread(run1);
|
|||
|
t_task1.IsBackground = true;
|
|||
|
t_task1.Start();
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
WarningEvent?.BeginInvoke(DateTime.Now,WarningEnum.High, ex.Message,null,null);
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
public void stop()
|
|||
|
{
|
|||
|
if (!IsInit) return;
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
IsInit = false;
|
|||
|
//timer.Elapsed -= Timer_Elapsed;
|
|||
|
if (t_task1 != null)
|
|||
|
{
|
|||
|
bool b = t_task1.Join(1000);
|
|||
|
if (!b) t_task1.Abort();
|
|||
|
t_task1 = null;
|
|||
|
}
|
|||
|
devPlc.Close();
|
|||
|
}
|
|||
|
catch { }
|
|||
|
}
|
|||
|
|
|||
|
private void run1()
|
|||
|
{
|
|||
|
while (IsInit)
|
|||
|
{
|
|||
|
//1.3
|
|||
|
bool res = (Boolean)devPlc.Read("DB3.DBX1.3");
|
|||
|
if (devRunningState == null || devRunningState != res)
|
|||
|
{
|
|||
|
devRunningState = res;
|
|||
|
RuningStateChangeEvent?.Invoke(res);
|
|||
|
}
|
|||
|
Thread.Sleep(100);
|
|||
|
}
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 启动DEV
|
|||
|
/// </summary>
|
|||
|
public void runDev()
|
|||
|
{
|
|||
|
if (IsInit)
|
|||
|
{
|
|||
|
devPlc.Write("DB3.DBX0.1", false);
|
|||
|
devPlc.Write("DB3.DBX0.0", true);//启动
|
|||
|
}
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 停止DEV
|
|||
|
/// </summary>
|
|||
|
public void pauseDev()
|
|||
|
{
|
|||
|
if (IsInit)
|
|||
|
{
|
|||
|
devPlc.Write("DB3.DBX0.0", false);
|
|||
|
devPlc.Write("DB3.DBX0.1", true);//停止
|
|||
|
}
|
|||
|
}
|
|||
|
//private void callback(PhotoTask task)
|
|||
|
//{
|
|||
|
// //返回成功/失败,异步调用
|
|||
|
// if (task.finishEvent != null || (task.finishEvent = finishEvent) != null)
|
|||
|
// //task.finishEvent.BeginInvoke(result, errInfo, res => task.finishEvent.EndInvoke(res), null);
|
|||
|
// System.Threading.ThreadPool.QueueUserWorkItem(waitCallback, task);
|
|||
|
//}
|
|||
|
////异步回调
|
|||
|
//WaitCallback waitCallback = new WaitCallback(o =>
|
|||
|
//{
|
|||
|
// var task = (PhotoTask)o;
|
|||
|
// task.finishEvent(task);
|
|||
|
//});
|
|||
|
|
|||
|
|
|||
|
public void Dispose()
|
|||
|
{
|
|||
|
stop();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|