コード例 #1
0
        /// <summary>写入整个UInt32</summary>
        /// <param name="store"></param>
        /// <param name="i"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static IWordStore WriteUInt32(this IWordStore store, Int32 i, UInt32 value)
        {
            store.Write(i, (UInt16)(value >> 16));
            store.Write(i + 1, (UInt16)(value & 0xFFFF));

            return(store);
        }
コード例 #2
0
ファイル: DataStore.cs プロジェクト: yuyu2you/X_NET20
 /// <summary>使用四个存储器初始化</summary>
 /// <param name="bitInputs"></param>
 /// <param name="bitCoils"></param>
 /// <param name="wordInput"></param>
 /// <param name="holding"></param>
 public DataStore(IBitStore bitInputs, IBitStore bitCoils, IWordStore wordInput, IWordStore holding)
 {
     _Inputs           = bitInputs;
     _Coils            = bitCoils;
     _InputRegisters   = wordInput;
     _HoldingRegisters = holding;
 }
コード例 #3
0
ファイル: ModbusSlave.cs プロジェクト: zzmzaizai/NewLife.Net
        /// <summary>读取寄存器 输入寄存器/保持寄存器</summary>
        /// <remarks>
        /// 保持寄存器
        /// 请求:0x03|2字节起始地址|2字节寄存器数量(1~2000)
        /// 响应:0x03|1字节字节数|n*2字节寄存器值
        ///
        /// 输入寄存器
        /// 请求:0x04|2字节起始地址|2字节输入寄存器数量(1~2000)
        /// 响应:0x04|1字节字节数|n*2字节输入寄存器
        /// </remarks>
        /// <param name="entity"></param>
        /// <returns></returns>
        ModbusEntity ReadRegisters(ModbusEntity entity)
        {
            var data = entity.Data;

            // 无效功能指令
            if (data == null || data.Length != 4)
            {
                return(entity.SetError(Errors.MessageLength));
            }

            var addr  = data.ReadUInt16(0);
            var count = data.ReadUInt16(2);

            // 输出数量不正确 count <= 0x07D0=2000
            //if (count == 0 || count > 0x07D0) return entity.SetError(3);
            if (count == 0)
            {
                return(entity.SetError(Errors.Count));
            }

            IWordStore store = null;

#if DEBUG
            var func = "";
#endif
            switch (entity.Function)
            {
            case MBFunction.ReadHoldingRegisters:
                store = DataStore.HoldingRegisters;
#if DEBUG
                func = "ReadHoldingRegisters";
#endif
                break;

            case MBFunction.ReadInputRegisters:
                store = DataStore.InputRegisters;
#if DEBUG
                func = "ReadInputRegisters";
#endif
                break;

            default:
                break;
            }
            if (count > store.Count)
            {
                return(entity.SetError(Errors.Count));
            }
            // 起始地址+数量 不正确
            if (addr + count > 0xFFFF)
            {
                return(entity.SetError(Errors.Address));
            }

#if DEBUG
            WriteLine(func + "(0x" + addr.ToString("X2") + ", 0x" + count.ToString("X2") + ")");
#endif
            if (OnReadRegister != null)
            {
                OnReadRegister(entity, addr, count);
            }

            var buf = new Byte[1 + count * 2];
            buf[0] = (Byte)(count * 2);

            for (var i = 0; i < count; i++)
            {
                buf.WriteUInt16(1 + i * 2, store.Read(addr + i));
            }

            // 读出来
            entity.Data = buf;

            return(entity);
        }
コード例 #4
0
 /// <summary>读取整个UInt32</summary>
 /// <param name="store"></param>
 /// <param name="i"></param>
 /// <returns></returns>
 public static UInt32 ReadUInt32(this IWordStore store, Int32 i)
 {
     return((UInt32)((store.Read(i) << 16) + store.Read(i + 1)));
 }
コード例 #5
0
ファイル: DataStore.cs プロジェクト: yuyu2you/X_NET20
 /// <summary>使用两个存储器初始化,两两共用</summary>
 /// <param name="bit"></param>
 /// <param name="word"></param>
 public DataStore(IBitStore bit, IWordStore word) : this(bit, bit, word, word)
 {
 }
コード例 #6
0
ファイル: TagsCloud.cs プロジェクト: Azirel59/di
 public TagsCloud(ILayoutAlgorithm layoutAlgorithm, IWordStore words, IEnumerable <IWordProcessor> wordProcessors)
 {
     this.layoutAlgorithm = layoutAlgorithm;
     this.words           = words;
     this.wordProcessors  = wordProcessors;
 }