wxw
2025-04-13 c6377a07e3eb0973156bb4fce581032713e1ded7
Admin.NET/WCS.Application/PLC/PLCUtil.cs
@@ -1,6 +1,7 @@
using DocumentFormat.OpenXml.Bibliography;
using DocumentFormat.OpenXml.Drawing;
using Elastic.Clients.Elasticsearch;
using Furion.Logging;
using IoTClient;
using IoTClient.Clients.Modbus;
using IoTClient.Clients.PLC;
@@ -221,10 +222,53 @@
        }
    }
    /// <summary>
    /// 循环写入PLC值(并读取值判断和写入的值是否一致,写入控制字不能用此方法)
    /// </summary>
    public IoTClient.Result SetPlcDBValueRepeat(PLCDataTypeEnum PosType, string DbNumber, string Pos, string Value)
    {
        IoTClient.Result _result = new IoTClient.Result();
        int setCount = 0;//写入次数
        while (setCount < 5)
        {
            string address;
            if (DbNumber.StartsWith("DB"))
                address = DbNumber + "." + Pos;
            else
                address = DbNumber + Pos;
            _result = this.SetPlcDBValue(PosType, address, Value);//写入值
            //累计写入次数
            setCount++;
            if (_result.IsSucceed)
            {
                //读取写入的值
                var (res, val) = GetPlcDBValue(PosType, DbNumber, Pos);
                if (val.ToString() == Value)
                {
                    //读取的值和写入的值一致,直接跳出循环
                    break;
                }
            }
        }
        //写入日志
        Log.Information($"66666666写入PLC,DbNumber:{DbNumber},Pos:{Pos},Value:{Value},setCount:{setCount}");
        return _result;
    }
    /// <summary>
    /// 写入PLC值
    /// </summary>
    /// <param name="PosType"></param>
    /// <param name="DbNumber"></param>
    /// <param name="Pos"></param>
    /// <param name="Value"></param>
    /// <returns></returns>
    public IoTClient.Result SetPlcDBValue(PLCDataTypeEnum PosType, string DbNumber, string Pos, string Value)
    {
        Log.Information($"66666666写入PLC,DbNumber:{DbNumber},Pos:{Pos},Value:{Value}");
        string address;
        if (DbNumber.StartsWith("DB"))
            address = DbNumber + "." + Pos;
@@ -280,7 +324,7 @@
        }
    }
    /// <summary>
    /// 写入PLC值
    /// 批量写入PLC值
    /// </summary>
    public IoTClient.Result SetPlcBatchDBValue(Dictionary<string, KeyValuePair<string, PLCDataTypeEnum>> listaddress)
    {