| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | using System;using PLC.Siemens.Protocol.Common;using PLC.Siemens.Protocol.ReadData;using ByteBuffer = Core.Communication.Transport.ByteBuffer;namespace PLC.Siemens.Protocol.WriteData{    public class WriteDataRequest    {        public byte ReturnCode { get; set; }        public byte TransportSize { get; set; }        public ushort DataLength { get; set; }        public byte[] Data { get; set; }// 17 = header + params + data header -1        public ushort PacketLength { get { return (ushort)(0x04 + Data.Length); } }        public void Build(DataItem item, bool isLast)        {            var sizeByte = (ushort)(item.SizeByte*item.Length);            ReturnCode = 0x00;            switch (item.DataType)            {                case DataType.Bit:                    TransportSize = (byte)TsType.TsResBit; ;                    break;                case DataType.Int:                case DataType.DInt:                    TransportSize = (byte)TsType.TsResInt;                    break;                case DataType.Real:                    TransportSize = (byte)TsType.TsResReal;// TS_ResReal;                    break;                case DataType.Char:                case DataType.Counter:                case DataType.Timer:                    TransportSize = (byte)TsType.TsResOctet;//TS_ResOctet;                    break;                default:                    TransportSize = (byte)TsType.TsResByte;                    break;            };            if ((TransportSize != (byte)TsType.TsResOctet) &&                (TransportSize != (byte)TsType.TsResReal) &&                (TransportSize != (byte)TsType.TsResBit))                DataLength = (ushort)(sizeByte * 8);            else                DataLength = (sizeByte);            if (!isLast && sizeByte%2 != 0)                Data = new byte[sizeByte + 1];            else                Data= new byte[sizeByte];            Array.Copy(item.Data, item.DataOffset, Data, 0, sizeByte);        }        public void GetByteBuffer(ByteBuffer buffer)        {            buffer.Push(ReturnCode);            buffer.Push(TransportSize);            buffer.Push(DataLength);            buffer.Push(Data);        }    }}
 |