geboshi_V1/LeatherProject/LeatherApp/Device/PLCDev.cs
2024-03-07 14:03:22 +08:00

140 lines
3.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}
}