hwh
2024-09-06 ce6a232b55646e8d39cb0b4861ee363608b6f9aa
Admin.NET/WCS.Application/PLC/PLCUtil.cs
@@ -53,41 +53,55 @@
                address = DbNumber + "." + Pos;
            else
                address = DbNumber + Pos;
            return this.GetPlcDBValue(PosType, address, Length);
        }
    }
    /// <summary>
    /// 读取PLC值
    /// </summary>
    /// <param name="PosType">字符类型</param>
    /// <param name="Pos">偏移量/地址</param>
    /// <param name="Length">长度(字符串)</param>
    /// <returns></returns>
    public (IoTClient.Result, dynamic value) GetPlcDBValue(PLCDataTypeEnum PosType, string Pos, int? Length = 0)
    {
        lock (OLock)
        {
            dynamic result = null;
            switch (PosType)
            {
                case PLCDataTypeEnum.Bit:
                    result = _client.ReadBoolean(address);
                    result = _client.ReadBoolean(Pos);
                    break;
                case PLCDataTypeEnum.Byte:
                    result = _client.ReadByte(address);
                    result = _client.ReadByte(Pos);
                    break;
                case PLCDataTypeEnum.Short:
                    result = _client.ReadInt16(address);
                    result = _client.ReadInt16(Pos);
                    break;
                case PLCDataTypeEnum.UShort:
                    result = _client.ReadUInt16(address);
                    result = _client.ReadUInt16(Pos);
                    break;
                case PLCDataTypeEnum.Int:
                    result = _client.ReadInt32(address);
                    result = _client.ReadInt32(Pos);
                    break;
                case PLCDataTypeEnum.UInt:
                    result = _client.ReadUInt32(address);
                    result = _client.ReadUInt32(Pos);
                    break;
                case PLCDataTypeEnum.Long:
                    result = _client.ReadInt64(address);
                    result = _client.ReadInt64(Pos);
                    break;
                case PLCDataTypeEnum.ULong:
                    result = _client.ReadUInt64(address);
                    result = _client.ReadUInt64(Pos);
                    break;
                case PLCDataTypeEnum.Float:
                    result = _client.ReadFloat(address);
                    result = _client.ReadFloat(Pos);
                    break;
                case PLCDataTypeEnum.Double:
                    result = _client.ReadDouble(address);
                    result = _client.ReadDouble(Pos);
                    break;
                case PLCDataTypeEnum.String:
                    result = _client.ReadString(address, Convert.ToUInt16(Length));
                    result = _client.ReadString(Pos, Convert.ToUInt16(Length));
                    break;
                default:
                    result = new IoTClient.Result<object>();
@@ -159,6 +173,13 @@
            address = DbNumber + "." + Pos;
        else
            address = DbNumber + Pos;
        return this.SetPlcDBValue(PosType, address, Pos, Value);
    }
    /// <summary>
    /// 写入PLC值
    /// </summary>
    public IoTClient.Result SetPlcDBValue(PLCDataTypeEnum PosType, string Pos, string Value)
    {
        switch (PosType)
        {
            case PLCDataTypeEnum.Bit:
@@ -173,25 +194,25 @@
                        throw new Exception("写入值错误");
                    }
                }
                return _client.Write(address, bit);
                return _client.Write(Pos, bit);
            case PLCDataTypeEnum.Byte:
                return _client.Write(address, byte.Parse(Value));
                return _client.Write(Pos, byte.Parse(Value));
            case PLCDataTypeEnum.Short:
                return _client.Write(address, short.Parse(Value));
                return _client.Write(Pos, short.Parse(Value));
            case PLCDataTypeEnum.UShort:
                return _client.Write(address, ushort.Parse(Value));
                return _client.Write(Pos, ushort.Parse(Value));
            case PLCDataTypeEnum.Int:
                return _client.Write(address, int.Parse(Value));
                return _client.Write(Pos, int.Parse(Value));
            case PLCDataTypeEnum.UInt:
                return _client.Write(address, uint.Parse(Value));
                return _client.Write(Pos, uint.Parse(Value));
            case PLCDataTypeEnum.Long:
                return _client.Write(address, long.Parse(Value));
                return _client.Write(Pos, long.Parse(Value));
            case PLCDataTypeEnum.ULong:
                return _client.Write(address, ulong.Parse(Value));
                return _client.Write(Pos, ulong.Parse(Value));
            case PLCDataTypeEnum.Float:
                return _client.Write(address, float.Parse(Value));
                return _client.Write(Pos, float.Parse(Value));
            case PLCDataTypeEnum.Double:
                return _client.Write(address, float.Parse(Value));
                return _client.Write(Pos, float.Parse(Value));
            default:
                return new IoTClient.Result();
        }