123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- using PlcSiemens.O;
- using PlcSiemens.Protocol.Common;
- using PlcSiemens.Protocol.Szl;
- namespace PlcSiemens.ProtocolHandle
- {
- public class SzlHandle : IPacketHandle
- {
- public SzlCmd SzlCmd { get; set; }
- public SzlRequest SzlRequestFirst { get; set; }
- public SzlRequest SzlRequestNext { get; set; }
- public SzlResponse SzlResponseFirst { get; set; }
- public SzlNextResponse SzlNextResponseNext { get; set; }
- public ResultCode ResultCode
- {
- get;
- set;
- }
- public void Handle(IIsoSender sender)
- {
- var first = true;
- byte seq = 0x00;
- bool done = false;
- do
- {
- if (first)
- {
- SzlRequestFirst.First = true;
- SzlRequestFirst.Seq = seq;
- SzlRequestFirst.ID = SzlCmd.ID;
- SzlRequestFirst.Index = SzlCmd.Index;
- SzlResponseFirst = sender.IsoSend<SzlRequest, SzlResponse>(SzlRequestFirst);
- if (SzlResponseFirst == null) return;
- ResultCode = SzlResponseFirst.Data.Ret;
- if (SzlResponseFirst.Params.Err == ResultCode.OK)
- {
- if (SzlResponseFirst.Data.Ret == ResultCode.OKFF)
- {
- done = (SzlResponseFirst.Params.Rsvd & 0x00FF) == 0;
- seq = SzlResponseFirst.Params.Seq;
- }
- }
- }
- else
- {
- SzlRequestNext = new SzlRequest();
- SzlRequestNext.First = false;
- SzlRequestNext.Seq = seq;
- SzlRequestNext.ID = SzlCmd.ID;
- SzlRequestNext.Index = SzlCmd.Index;
- SzlNextResponseNext = sender.IsoSend<SzlRequest, SzlNextResponse>(SzlRequestNext);
- if (SzlNextResponseNext == null) return;
- ResultCode = SzlResponseFirst.Data.Ret;
- if (SzlNextResponseNext.Params.Err == ResultCode.OK)
- {
- if (SzlNextResponseNext.Data.Ret == ResultCode.OKFF)
- {
- done = (SzlNextResponseNext.Params.Rsvd & 0x00FF) == 0;
- seq = SzlNextResponseNext.Params.Seq;
- SzlResponseFirst.Data.AddNextData(SzlNextResponseNext.Data.Data, SzlNextResponseNext.Data.DLen);
- }
- }
- }
- first = false;
- } while (!done && ResultCode == ResultCode.OKFF);
- if (ResultCode == ResultCode.OKFF) ResultCode = ResultCode.OK;
- }
- public SzlHandle()
- {
- ResultCode = ResultCode.Unknown;
- SzlRequestFirst = new SzlRequest();
- SzlCmd = SzlInfo.ReadSzlAll;
- }
- }
- }
|