| | |
| | | public readonly long PlcId; |
| | | private SiemensClient _client; |
| | | private WcsPlc _modPlc; |
| | | |
| | | private readonly object OLock = new object(); |
| | | public PLCUtil(WcsPlc modPlc) |
| | | { |
| | | PlcId = modPlc.Id; |
| | |
| | | /// <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值 |
| | |
| | | /// <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值 |