示例#1
0
        public void TestReadInputRegisters()
        {
            IModbusMessage request;

            byte[] sendBytes = _modbusMaster.BuildReadInputRegistersCommand(slaveId, startAddress, numRegisters, out request);
            _sr.Write(sendBytes, 0, sendBytes.Length);

            byte[] readBuffer = new byte[1024];
            int    num        = _sr.Read(readBuffer, 0, readBuffer.Length);

            byte[] readBytes = new byte[num];
            Buffer.BlockCopy(readBuffer, 0, readBytes, 0, num);

            ushort[] response = _modbusMaster.GetReadInputRegistersResponse(readBytes, request);
        }
示例#2
0
        /// <summary>
        /// 通讯正常,把返回的数据返回到此函数接口。在Protocol类中的CheckData函数对数据进行校验。
        /// </summary>
        /// <param name="info"></param>
        public override void Communicate(IResponseInfo info)
        {
            if (_sendObject == null)
            {
                OnDeviceRuningLog("没有获得对应的发送请求实例");
                return;
            }

            byte[]         revData        = info.Data;
            IModbusMessage requestMessage = _sendObject.ModbusMessage;
            ITag           tag            = _sendObject.Tag;
            bool           deal           = false;
            object         val            = null;

            if (tag.Function == Modbus.Modbus.ReadCoils)
            {
                #region
                bool[] responseVals = _modbusTcpMaster.GetReadCoilsResponse(revData, tag.Quantity, requestMessage);
                if (responseVals.Length >= 1)
                {
                    val = responseVals[0] == true ? 1 : 0;
                    this.DeviceDynamic.DynamicData.Write(tag.TagName, val);
                    deal = true;
                }
                #endregion
            }
            else if (tag.Function == Modbus.Modbus.ReadInputs)
            {
                #region
                bool[] responseVals = _modbusTcpMaster.GetReadInputsResponse(revData, tag.Quantity, requestMessage);
                if (responseVals.Length >= 1)
                {
                    val = responseVals[0] == true ? 1 : 0;
                    this.DeviceDynamic.DynamicData.Write(tag.TagName, val);
                    deal = true;
                }
                #endregion
            }
            else if (tag.Function == Modbus.Modbus.ReadHoldingRegisters)
            {
                #region
                ushort[] responseVals = _modbusTcpMaster.GetReadHoldingRegistersResponse(revData, requestMessage);
                if (responseVals.Length >= 1)
                {
                    val = responseVals[0];
                    this.DeviceDynamic.DynamicData.Write(tag.TagName, val);
                    deal = true;
                }
                #endregion
            }
            else if (tag.Function == Modbus.Modbus.ReadInputRegisters)
            {
                #region
                ushort[] responseVals = _modbusTcpMaster.GetReadInputRegistersResponse(revData, requestMessage);
                if (responseVals.Length >= 1)
                {
                    val = responseVals[0];
                    this.DeviceDynamic.DynamicData.Write(tag.TagName, val);
                    deal = true;
                }
                #endregion
            }

            if (deal && val != null)
            {
                OnDeviceRuningLog("通讯正常,已经处理数据,值:" + (val == null ? "未知" : val.ToString()));

                this.DeviceDynamic.Save();
            }
        }