|
@@ -0,0 +1,52 @@
|
|
|
+
|
|
|
+using PlcSiemens.O;
|
|
|
+using PlcSiemens.Protocol.Common;
|
|
|
+using ServiceCenter;
|
|
|
+using ServiceCenter.Virtual_PLC;
|
|
|
+using WCS.Core;
|
|
|
+
|
|
|
+namespace WCS.Service.PLCAccessors
|
|
|
+{
|
|
|
+ public class SiemensS7PLC : IPLCAccessor
|
|
|
+ {
|
|
|
+ private SimenssPlc plc;
|
|
|
+
|
|
|
+ public SiemensS7PLC(string ip, int port, int rack, int slot)
|
|
|
+ {
|
|
|
+ plc = new SimenssPlc(ip, rack, slot);
|
|
|
+ plc.Connect();
|
|
|
+ }
|
|
|
+
|
|
|
+ public byte[] ReadBytes(ushort db, ushort address, ushort length)
|
|
|
+ {
|
|
|
+ if (ServiceHub.Any(SystemMode.虚拟plc))
|
|
|
+ {
|
|
|
+ return PlcData.Read(new PLCData { IP = plc.IP, DB = db, Length = length, DataLength = length });
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!plc.Connected)
|
|
|
+ plc.Connect();
|
|
|
+
|
|
|
+ var res = plc.ReadArea(AreaType.DB, db, address, length, DataType.Byte);
|
|
|
+ if (res == null)
|
|
|
+ throw new Exception("读取DB块数据失败");
|
|
|
+ return res.Data;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void WriteBytes(ushort db, ushort address, byte[] data)
|
|
|
+ {
|
|
|
+ if (ServiceHub.Any(SystemMode.虚拟plc))
|
|
|
+ {
|
|
|
+ PlcData.Write(new PLCData { IP = plc.IP, DB = db }, address, data);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (!plc.Connected)
|
|
|
+ plc.Connect();
|
|
|
+ var res = plc.WriteArea(AreaType.DB, db, address, (ushort)data.Length, DataType.Byte, data);
|
|
|
+ if (!res) throw new Exception("写入DB块数据失败");
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|