12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- using PlcSiemens.Protocol.Common;
- using PlcSiemens.Protocol.ReadData;
- using ByteBuffer = PlcSiemens.O.ByteBuffer;
- namespace PlcSiemens.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);
- }
- }
- }
|