123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- using HslCommunication.Profinet.Omron;
- using HslCommunication.Profinet.Siemens;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net;
- using System.Text;
- using System.Threading.Tasks;
- namespace YG.Device
- {
- public class DeviceS7 : DeviceList
- {
- public SiemensS7Net SiemensS7Net { get; set; }
- private SiemensPLCS siemensPLCS;
- private string ip;
- public DeviceS7(SiemensPLCS _siemensPLCS, string _ip, int port = 102)
- {
- siemensPLCS = _siemensPLCS;
- ip = _ip;
- SiemensS7Net = new SiemensS7Net(siemensPLCS, ip) { ConnectTimeOut = 5000 };
- SiemensS7Net.ConnectionId = Guid.NewGuid().ToString();
- }
- public HslCommunication.OperateResult ConnectionResult { get; set; }
- public override void DeviceInit()
- {
- ConnectionResult = SiemensS7Net.ConnectServer();
- base.DeviceInit();
- }
- bool isShow = false;
- public override void DeviceState()
- {
- Task.Factory.StartNew(async () =>
- {
- while (true)
- {
- await Task.Delay(200);
- if (!ConnectionResult.IsSuccess&&ip.Ping())
- {
- if (!isShow)
- {
- isShow = true;
- System.Windows.Forms.MessageBox.Show($"PLC{SiemensS7Net.IpAddress} 连接失败!{ConnectionResult.Message}");
- }
- }
- }
- });
- base.DeviceState();
- }
- public override T DeviceRead<T>(string value, ushort leng =0)
- {
- Type tp = typeof(T);
- {
- if (tp.Equals(typeof(short)))
- {
- var operateResult = SiemensS7Net.ReadInt16(value);
- return (T)(object)operateResult.Content;
- }
- else if (tp.Equals(typeof(bool)))
- {
- var operateResult = SiemensS7Net.ReadBool(value);
- return (T)(object)operateResult.Content;
- }
- else if (tp.Equals(typeof(int)))
- {
- var operateResult = SiemensS7Net.ReadInt32(value);
- return (T)(object)operateResult.Content;
- }
- else if (tp.Equals(typeof(long)))
- {
- var operateResult = SiemensS7Net.ReadInt64(value);
- return (T)(object)operateResult.Content;
- }
- else if (tp.Equals(typeof(byte[])))
- {
- var operateResult= SiemensS7Net.Read(value, leng);
- return (T)(object)operateResult.Content;
- }
- else if (tp.Equals(typeof(string)))
- {
- var operateResult = SiemensS7Net.ReadString(value, leng, Encoding.ASCII);
- return (T)(object)operateResult.Content;
- }
- }
- return default(T);
- }
- public string DeviceRead(string value, string readType,ushort leng=0)
- {
- string retResponse = "";
- if (readType.Equals("1")) //short
- {
- var operateResult = SiemensS7Net.ReadInt16(value);
- retResponse = operateResult.Content.ToString();
- return retResponse;
- }
- else if (readType.Equals("2"))//bool
- {
- var operateResult = SiemensS7Net.ReadBool(value);
- retResponse = operateResult.Content.ToString();
- return retResponse;
- }
- else if (readType.Equals("3"))//int
- {
- var operateResult = SiemensS7Net.ReadInt32(value);
- retResponse = operateResult.Content.ToString();
- return retResponse;
- }
- else if (readType.Equals("4"))//long
- {
- var operateResult = SiemensS7Net.ReadInt64(value);
- retResponse = operateResult.Content.ToString();
- return retResponse;
- }
- else if (readType.Equals("5")) //string
- {
- var operateResult = SiemensS7Net.ReadString(value, leng,Encoding.ASCII);
- retResponse = operateResult.Content.ToString();
- return retResponse;
- }
- return retResponse;
- }
- public override object Clone()
- {
- return this.MemberwiseClone();
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="ob">地址</param>
- /// <param name="ob1">地址的值</param>
- public override void DeviceSend(object ob, object ob1)
- {
- System.Threading.Thread.Sleep(100);
- HslCommunication.OperateResult resultt = new HslCommunication.OperateResult() { IsSuccess = false, Message = "resutt为空" };
- if (ConnectionResult.IsSuccess)
- {
- Type ty = ob1.GetType();
- if (ty == typeof(string))
- {
- resultt = SiemensS7Net.Write(ob.ToString(), ob1.ToString());
- }
- else if (ty == typeof(int))
- {
- resultt = SiemensS7Net.Write(ob.ToString(), (int)ob1);
- }
- else if (ty == typeof(byte))
- {
- resultt = SiemensS7Net.Write(ob.ToString(), (byte)ob1);
- }
- else if (ty == typeof(byte[]))
- {
- resultt = SiemensS7Net.Write(ob.ToString(), (byte[])ob1);
- }
- else if (ty == typeof(short))
- {
- if (short.TryParse(ob1.ToString(), out short value))
- {
- resultt = SiemensS7Net.Write(ob.ToString(), (short)value);
- }
- }
- else if (ty == typeof(bool))
- {
- resultt = SiemensS7Net.Write(ob.ToString(), (bool)ob1);
- }
- YG.Log.Instance.WriteLogAdd($"{SiemensS7Net.IpAddress}+地址{ob.ToString()}+写入值{ob1.ToString()}+写入结果:{ resultt.IsSuccess}+信息提示{resultt.Message}");
- }
- base.DeviceSend(ob, ob1);
- }
- public override void DeviceSend(object ob, object ob1, string readType)
- {
- System.Threading.Thread.Sleep(100);
- HslCommunication.OperateResult resultt = new HslCommunication.OperateResult() { IsSuccess = false, Message = "result为空" };
- Type ty = ob1.GetType();
- if (readType.Equals("5")) //string
- {
- resultt = SiemensS7Net.Write(ob.ToString(), ob1.ToString());
- }
- else if (readType.Equals("3")) //int
- {
- resultt = SiemensS7Net.Write(ob.ToString(), (int)ob1);
- }
- else if (readType.Equals("6")) //byte
- {
- resultt = SiemensS7Net.Write(ob.ToString(), (byte)ob1);
- }
- else if (readType.Equals("1")) //short
- {
- if (short.TryParse(ob1.ToString(), out short value))
- {
- resultt = SiemensS7Net.Write(ob.ToString(), (short)value);
- }
- }
- else if (readType.Equals("2")) //bool
- {
- resultt = SiemensS7Net.Write(ob.ToString(), (bool)ob1);
- }
- YG.Log.Instance.WriteLogAdd($"{SiemensS7Net.IpAddress}+地址{ob.ToString()}+写入值{ob1.ToString()}+写入结果:{ resultt.IsSuccess}+信息提示{resultt.Message}");
- }
- public override void DeviceStart()
- {
- base.DeviceStart();
- }
- public override void DeviceClose()
- {
- try
- {
- if (ConnectionResult.IsSuccess)
- {
- SiemensS7Net.ConnectClose();
- }
- }
- catch (Exception ex)
- {
- YG.Log.Instance.WriteLogAdd($"206-->{ex.Message}");
- }
- base.DeviceClose();
- }
- }
- }
|