| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | using System.Collections.Generic;using PLC.Siemens.Protocol.Common;using PLC.Siemens.Protocol.Iso;using PLC.Siemens.O;namespace PLC.Siemens.ProtocolHandle{    public class IsoControlPduHandle : IPacketHandle    {        public int IsoPduSize { get; set; }        public ushort SrcRef { get; set; }        public ushort DstRef { get; set; }        public ushort SrcTSap { get; set; }        public ushort DstTSap { get; set; }        public IList<IsoControlPdu> Requests { get; set; }        public IList<IsoControlPdu> Responses { get; set; }        public ResultCode ResultCode { get; set; }        public void Handle(IIsoSender sender)        {            var request = new IsoControlPdu            {                IsoPduSize = IsoPduSize,                SrcRef = SrcRef,                DstRef = DstRef,                SrcTSap = SrcTSap,                DstTSap = DstTSap            };            Requests.Add(request);            var response = sender.Send<IsoControlPdu, IsoControlPdu>(request);            if (response == null)            {                ResultCode = ResultCode.ReadDataFalut;                return;            }            if (CheckPdu(response, PduType.ConnConfirm) != 0) return;            Responses.Add(response);            ResultCode = ResultCode.OK;        }                public IsoControlPduHandle()        {            ResultCode = ResultCode.Unknown;             Requests = new List<IsoControlPdu>();            Responses = new List<IsoControlPdu>();        }                private int CheckPdu(IsoControlPdu pdu, PduType pduType)        {            int size = pdu.Tpkt.Length;            if (size < 7 || size > StaticConst.IsoPayloadSize || pdu.Cotp.PduType != (byte)pduType)                return (int)ErrorType.ErrIsoInvalidPdu;            return (int)ErrorType.NoError;         }    }}
 |