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