hwh
2024-09-03 c56d28d684cee010f291295dbe851bab64c1b6a6
Admin.NET/WCS.Application/PLC/PLCUtil.cs
@@ -13,7 +13,7 @@
    public readonly long PlcId;
    private SiemensClient _client;
    private WcsPlc _modPlc;
    private readonly object OLock = new object();
    public PLCUtil(WcsPlc modPlc)
    {
        PlcId = modPlc.Id;
@@ -42,52 +42,55 @@
    /// <returns></returns>
    public (IoTClient.Result, dynamic value) GetPlcDBValue(PLCDataTypeEnum PosType, string DbNumber, string Pos)
    {
        string address;
        if (DbNumber.StartsWith("DB"))
            address = DbNumber + "." + Pos;
        else
            address = DbNumber + Pos;
        dynamic result = null;
        switch (PosType)
        lock (OLock)
        {
            case PLCDataTypeEnum.Bit:
                result = _client.ReadBoolean(address);
                break;
            case PLCDataTypeEnum.Byte:
                result = _client.ReadByte(address);
                break;
            case PLCDataTypeEnum.Short:
                result = _client.ReadInt16(address);
                break;
            case PLCDataTypeEnum.UShort:
                result = _client.ReadUInt16(address);
                break;
            case PLCDataTypeEnum.Int:
                result = _client.ReadInt32(address);
                break;
            case PLCDataTypeEnum.UInt:
                result = _client.ReadUInt32(address);
                break;
            case PLCDataTypeEnum.Long:
                result = _client.ReadInt64(address);
                break;
            case PLCDataTypeEnum.ULong:
                result = _client.ReadUInt64(address);
                break;
            case PLCDataTypeEnum.Float:
                result = _client.ReadFloat(address);
                break;
            case PLCDataTypeEnum.Double:
                result = _client.ReadDouble(address);
                break;
            case PLCDataTypeEnum.String:
                result = _client.ReadString(address);
                break;
            default:
                result = new IoTClient.Result<object>();
                break;
            string address;
            if (DbNumber.StartsWith("DB"))
                address = DbNumber + "." + Pos;
            else
                address = DbNumber + Pos;
            dynamic result = null;
            switch (PosType)
            {
                case PLCDataTypeEnum.Bit:
                    result = _client.ReadBoolean(address);
                    break;
                case PLCDataTypeEnum.Byte:
                    result = _client.ReadByte(address);
                    break;
                case PLCDataTypeEnum.Short:
                    result = _client.ReadInt16(address);
                    break;
                case PLCDataTypeEnum.UShort:
                    result = _client.ReadUInt16(address);
                    break;
                case PLCDataTypeEnum.Int:
                    result = _client.ReadInt32(address);
                    break;
                case PLCDataTypeEnum.UInt:
                    result = _client.ReadUInt32(address);
                    break;
                case PLCDataTypeEnum.Long:
                    result = _client.ReadInt64(address);
                    break;
                case PLCDataTypeEnum.ULong:
                    result = _client.ReadUInt64(address);
                    break;
                case PLCDataTypeEnum.Float:
                    result = _client.ReadFloat(address);
                    break;
                case PLCDataTypeEnum.Double:
                    result = _client.ReadDouble(address);
                    break;
                case PLCDataTypeEnum.String:
                    result = _client.ReadString(address);
                    break;
                default:
                    result = new IoTClient.Result<object>();
                    break;
            }
            return (result, result.Value);
        }
        return (result, result.Value);
    }
    /// <summary>
    /// 批量读取PLC值
@@ -95,49 +98,52 @@
    /// <returns></returns>
    public Result<Dictionary<string, object>> GetPlcBatchDBValue(Dictionary<string, PLCDataTypeEnum> listaddress)
    {
        Dictionary<string, DataTypeEnum> addresses = new Dictionary<string, DataTypeEnum>();
        foreach (var address in listaddress)
        lock (OLock)
        {
            switch (address.Value)
            Dictionary<string, DataTypeEnum> addresses = new Dictionary<string, DataTypeEnum>();
            foreach (var address in listaddress)
            {
                case PLCDataTypeEnum.Bit:
                    addresses.Add(address.Key, DataTypeEnum.Bool);
                    break;
                case PLCDataTypeEnum.Byte:
                    addresses.Add(address.Key, DataTypeEnum.Byte);
                    break;
                case PLCDataTypeEnum.Short:
                    addresses.Add(address.Key, DataTypeEnum.Int16);
                    break;
                case PLCDataTypeEnum.UShort:
                    addresses.Add(address.Key, DataTypeEnum.UInt16);
                    break;
                case PLCDataTypeEnum.Int:
                    addresses.Add(address.Key, DataTypeEnum.Int32);
                    break;
                case PLCDataTypeEnum.UInt:
                    addresses.Add(address.Key, DataTypeEnum.UInt32);
                    break;
                case PLCDataTypeEnum.Long:
                    addresses.Add(address.Key, DataTypeEnum.Int64);
                    break;
                case PLCDataTypeEnum.ULong:
                    addresses.Add(address.Key, DataTypeEnum.UInt64);
                    break;
                case PLCDataTypeEnum.Float:
                    addresses.Add(address.Key, DataTypeEnum.Float);
                    break;
                case PLCDataTypeEnum.Double:
                    addresses.Add(address.Key, DataTypeEnum.Double);
                    break;
                case PLCDataTypeEnum.String:
                    addresses.Add(address.Key, DataTypeEnum.String);
                    break;
                default:
                    break;
                switch (address.Value)
                {
                    case PLCDataTypeEnum.Bit:
                        addresses.Add(address.Key, DataTypeEnum.Bool);
                        break;
                    case PLCDataTypeEnum.Byte:
                        addresses.Add(address.Key, DataTypeEnum.Byte);
                        break;
                    case PLCDataTypeEnum.Short:
                        addresses.Add(address.Key, DataTypeEnum.Int16);
                        break;
                    case PLCDataTypeEnum.UShort:
                        addresses.Add(address.Key, DataTypeEnum.UInt16);
                        break;
                    case PLCDataTypeEnum.Int:
                        addresses.Add(address.Key, DataTypeEnum.Int32);
                        break;
                    case PLCDataTypeEnum.UInt:
                        addresses.Add(address.Key, DataTypeEnum.UInt32);
                        break;
                    case PLCDataTypeEnum.Long:
                        addresses.Add(address.Key, DataTypeEnum.Int64);
                        break;
                    case PLCDataTypeEnum.ULong:
                        addresses.Add(address.Key, DataTypeEnum.UInt64);
                        break;
                    case PLCDataTypeEnum.Float:
                        addresses.Add(address.Key, DataTypeEnum.Float);
                        break;
                    case PLCDataTypeEnum.Double:
                        addresses.Add(address.Key, DataTypeEnum.Double);
                        break;
                    case PLCDataTypeEnum.String:
                        addresses.Add(address.Key, DataTypeEnum.String);
                        break;
                    default:
                        break;
                }
            }
            return _client.BatchRead(addresses);
        }
        return _client.BatchRead(addresses);
    }
    /// <summary>
    /// 写入PLC值