| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | using PlcSiemens.Core.Extension;using PlcSiemens.O;using PlcSiemens.Protocol.Common;using PlcSiemens.Protocol.ReadData;namespace PlcSiemens.Protocol.WriteData{    public class WriteParamsRequest    {        public byte FunRead { get; set; }        public byte ItemsCount { get; set; }        public WriteItemRequest[] Items { get; set; }//最大长度20        public byte PacketLength        {            get            {                return (byte)(0x0C * Items.Length + 2);            }        }        public WriteParamsRequest()        {        }        public void Build(List<DataItem> dataItems)        {            FunRead = (byte)PduFuncType.PduFuncWrite;            ItemsCount = (byte)dataItems.Count;            //项处理            Items = new WriteItemRequest[ItemsCount];            for (var i = 0; i < dataItems.Count; i++)            {                var dataItem = dataItems[i];                var item = new WriteItemRequest();                Items[i] = item;                item.ItemHead[0] = 0x12;                item.ItemHead[1] = 0x0A;                item.ItemHead[2] = 0x10;                item.TransportSize = (byte)dataItem.DataType;                item.Length = dataItem.Length;                if (dataItem.AreaType == AreaType.DB)                    item.DB = dataItem.Db;                else                    item.DB = 0x0000;                item.Area = (byte)dataItem.AreaType;                //ushort address;                long address;//修改                if ((dataItem.DataType == DataType.Bit) || (dataItem.DataType == DataType.Counter) || (dataItem.DataType == DataType.Timer))                    address = dataItem.Start;                else                    //address = (ushort)(dataItem.Start * 8);                    address = (dataItem.Start * 8);//修改                item.Address[2] = (byte)(address & 0x000000FF);                address = (ushort)(address >> 8);                item.Address[1] = (byte)(address & 0x000000FF);                address = (ushort)(address >> 8);                item.Address[0] = (byte)(address & 0x000000FF);            }        }        public void GetByteBuffer(ByteBuffer buffer)        {            buffer.Push(FunRead);            buffer.Push(ItemsCount);            Items.ForEach(t =>            {                buffer.Push(t.ItemHead);                buffer.Push(t.TransportSize);                buffer.Push(t.Length);                buffer.Push(t.DB);                buffer.Push(t.Area);                buffer.Push(t.Address);            });        }    }}
 |