/// <summary> /// 生成批量写入单个线圈的报文信息 /// </summary> /// <param name="address">地址</param> /// <param name="values">实际数据值</param> /// <returns>包含结果对象的报文</returns> public OperateResult <byte[]> BuildWriteCoilCommand(string address, bool[] values) { // 解析富地址 OperateResult <ModbusAddress> analysis = ModbusInfo.AnalysisReadAddress(address, isAddressStartWithZero); if (!analysis.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(analysis)); } // 获取消息号 ushort messageId = (ushort)softIncrementCount.GetCurrentValue( ); // 生成最终tcp指令 byte[] buffer = ModbusInfo.PackCommandToTcp(analysis.Content.CreateWriteCoil(station, values), messageId); return(OperateResult.CreateSuccessResult(buffer)); }
/// <summary> /// 读取自定义的寄存器的值。按照字为单位 /// </summary> /// <param name="address">起始地址,示例:"100","x=4;100"</param> /// <param name="length">数据长度</param> /// <exception cref="IndexOutOfRangeException"></exception> /// <returns>byte数组值</returns> public override OperateResult <byte[]> Read(string address, ushort length) { OperateResult <ModbusAddress> analysis = ModbusInfo.AnalysisReadAddress(address, true); if (!analysis.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(analysis)); } if (analysis.Content.Function == ModbusInfo.ReadRegister) { return(OperateResult.CreateSuccessResult(registerBuffer.GetBytes(analysis.Content.Address * 2, length * 2))); } else if (analysis.Content.Function == ModbusInfo.ReadInputRegister) { return(OperateResult.CreateSuccessResult(inputRegisterBuffer.GetBytes(analysis.Content.Address * 2, length * 2))); } else { return(new OperateResult <byte[]>(StringResources.Language.NotSupportedDataType)); } }