hwh
2024-08-29 1427584584848e1a8c7997d84945c0d19488d698
Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -1,13 +1,17 @@
using Admin.NET.Core.Service;
using Furion.Logging;
using Microsoft.AspNetCore.SignalR;
namespace WCS.Application;
public static class PLCTaskAction
{
    //服务运行状态
    public static bool boRunningState = false;
    private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
    private static List<WcsPlc> listPlc;
    private static List<WcsDevice> listPlcDevice;
    private static List<WcsStation> listPlcStation;
    private static List<WcsPosition> listPlcStation;
    private static List<PLCUtil> listPlcUtil = new List<PLCUtil>();
    private static CancellationTokenSource cts;//取消线程标识
@@ -20,7 +24,7 @@
        listPlc = _db.Queryable<WcsPlc>().ToList();
        listPlcDevice = _db.Queryable<WcsDevice>().ToList();
        listPlcStation = _db.Queryable<WcsStation>().ToList();
        listPlcStation = _db.Queryable<WcsPosition>().ToList();
    }
    /// <summary>
    /// 初始化PLC连接
@@ -32,7 +36,7 @@
            cts.Cancel();
            listPlc = _db.Queryable<WcsPlc>().ToList();
            listPlcDevice = _db.Queryable<WcsDevice>().ToList();
            listPlcStation = _db.Queryable<WcsStation>().ToList();
            listPlcStation = _db.Queryable<WcsPosition>().ToList();
            //等待几秒钟,把已有线程取消掉再连接
            Thread.Sleep(5000);
            foreach (var modPlcUtil in listPlcUtil)
@@ -47,6 +51,7 @@
            listPlcUtil.Add(plc);
        }
        cts = new CancellationTokenSource();
        boRunningState = true;
        StartRead();
    }
    /// <summary>
@@ -82,7 +87,7 @@
                        //循环读设备
                        foreach (var modDevice in listDevice.Where(s => s.Level == DeviceLevelEnum.DB))
                        {
                            var (result, value) = modPlcUtil.GetPlcDBValue(modDevice.PosType.Value, modDevice.DbNumber, modDevice.PlcPos);
                            var (result, value) = modPlcUtil.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos);
                            if (result.IsSucceed)
                            {
                                //无流程跳出
@@ -108,9 +113,13 @@
                        Thread.Sleep(3000);
                    }
                    catch (OperationCanceledException)
                    {
                        Console.WriteLine("中止线程");
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex.Message, ex);
                    }
                }
            }, cts.Token);
@@ -122,5 +131,6 @@
    public static void Stop()
    {
        cts.Cancel();
        boRunningState = false;
    }
}