| 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();        }    }}
 |