| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | using PlcSiemens.O;using PlcSiemens.Protocol.Common;using PlcSiemens.Protocol.Iso;namespace PlcSiemens.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;        }    }}
 |