using HslCommunication.Profinet.Siemens; using WCS.Core; using WCS.Core.BaseExtensions; using WCS.Core.DataTrans; using WCS.Core.Virtual_PLC; namespace WCS.Service.PLCAccessors { public class SiemensS7PLC : SiemensS7Net, IPlcAccessor { private SiemensS7Net plc; public SiemensS7PLC(SiemensPLCS type) : base(type) { } public SiemensS7PLC(SiemensPLCS type, string ip) : base(type, ip) { plc = new SiemensS7Net(type, ip); } public SiemensS7PLC(int type, string ip) : base((SiemensPLCS)type, ip) { plc = new SiemensS7Net((SiemensPLCS)type, ip); } public byte[] ReadBytes(ushort db, ushort address, ushort length, ushort dataLength) { if (Configs.Any(SystemMode.虚拟plc)) { return PlcData.Read(new PLCData { IP = plc.IpAddress, DB = db, Length = length, DataLength = dataLength }); } var addr = "DB" + db + "." + address; var res = plc.Read(addr, length); if (res.IsSuccess) return res.Content; throw new WarnException("读取PLC数据失败:" + res.Message); } public void WriteBytes(ushort db, ushort address, byte[] data) { if (Configs.Any(SystemMode.虚拟plc)) { PlcData.Write(new PLCData { IP = plc.IpAddress, DB = db }, address, data); } else { var res = plc.Write("D" + address, data); if (!res.IsSuccess) throw new WarnException("写入PLC数据失败:" + res.Message); } } } }