| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | 
							- using System;
 
- using System.Collections.Generic;
 
- using Houdar.PLC.Driver.Simenss.Protocol.Common;
 
- using Houdar.PLC.Driver.Simenss.Protocol.ReadData;
 
- using Houdar.PLC.Driver.Simenss.Protocol.WriteData;
 
- namespace Houdar.PLC.Driver.Simenss.ProtocolHandle
 
- {
 
-     public class WriteHandle:IPacketHandle
 
-     {
 
-         public ushort PduLength { get; set; }
 
-         public DataItem DataItem { get; set; }
 
-         public ResultCode ResultCode { get; private set; }
 
-         public void Handle(IIsoSender sender)
 
-         {
 
-             if (DataItem.Db > 65535 || DataItem.Length < 1)
 
-                 throw new ArgumentException("²ÎÊýÒì³£");
 
-             if (DataItem.DataType == DataType.Bit && DataItem.Length > 1)
 
-                 throw new ArgumentException("BitÖ»ÄÜдһλ");
 
-             const int rhSize = 10 +    // Request header
 
-                                2 +                       // FunWrite+ItemCount (of TReqFunWriteParams)
 
-                                12 +// 1 item reference
 
-                                4; // ReturnCode+TransportSize+DataLength
 
-             var sizeByte = DataItem.SizeByte;
 
-             var maxCount = (ushort)((PduLength - rhSize) / sizeByte);
 
-             var totalCount = DataItem.Length;
 
-             var offset = DataItem.Start;
 
-             DataItem currentItem = new DataItem()
 
-             {
 
-                 AreaType = DataItem.AreaType,
 
-                 DataType = DataItem.DataType,
 
-                 Db = DataItem.Db,
 
-                 Start = DataItem.Start,
 
-                 Data = DataItem.Data,
 
-                 Length = 0,
 
-                 DataOffset = 0
 
-             };
 
-             while (totalCount > 0)
 
-             {
 
-                 var curCount = totalCount;
 
-                 if (curCount > maxCount)
 
-                     curCount = maxCount;
 
-                 currentItem.Start = offset;
 
-                 currentItem.Length = curCount;
 
-                 WriteRequest write = new WriteRequest();
 
-                 write.DataItems = new List<DataItem>() {currentItem};
 
-                 WriteResponse res = sender.IsoSend<WriteRequest, WriteResponse>(write);
 
-                 if (res.Header.Error == 0x0000)
 
-                 {
 
-                     var size = (ushort)(currentItem.SizeByte * curCount);
 
-                     offset += size;
 
-                     currentItem.DataOffset += size;
 
-                     totalCount -= curCount;
 
-                 }
 
-                 else
 
-                     break;
 
-             }
 
-             ResultCode = ResultCode.OKFF;
 
-         }
 
-     }
 
- }
 
 
  |