123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- using System.Collections.Generic;
- using Core.Communication.Transport;
- using Core.Util.Extension;
- using PLC.Siemens.Protocol.Common;
- using PLC.Siemens.Protocol.Header;
- using PLC.Siemens.Protocol.ReadData;
- using PLC.Siemens.O;
- namespace PLC.Siemens.Protocol.WriteData
- {
- public class WriteRequest:IBuildRequest
- {
- public HeaderPacket Header { get; set; }
- public WriteParamsRequest Params { get; set; }
- public WriteDataRequest[] Data { get; set; }
- public List<DataItem> DataItems { get; set; }
- public WriteRequest()
- {
- Header = new HeaderPacket();
- Params = new WriteParamsRequest();
- }
- public void Build()
- {
- Params.Build(DataItems);
- Data = new WriteDataRequest[DataItems.Count];
- ushort dataLength = 0;
- for (int i = 0; i < DataItems.Count; i++)
- {
- var tmp = new WriteDataRequest();
- Data[i] = tmp;
- var dataItem = DataItems[i];
- tmp.Build(dataItem, i == DataItems.Count - 1);
- dataLength += tmp.PacketLength;
- }
- ushort paramsLength = Params.PacketLength;
- Header.Build(PduType.Request, paramsLength, dataLength);
- }
- public ByteBuffer GetBuffer()
- {
- ByteBuffer buffer = ByteBuffer.Allocate();
- Header.GetByteBuffer(buffer);
- Params.GetByteBuffer(buffer);
- Data.ForEach(t => t.GetByteBuffer(buffer));
- return buffer;
- }
- }
- }
|