private void GetDeviceInfoFormIndex(int index) { ModbusSerialMaster master; if (index < 2) { master = ModbusMasters[1]; } else { master = ModbusMasters[0]; } ///读取变送器; var datas = master.ReadHoldingRegisters(Device.All[index].Transducer2700Address, AddressHelper.QualityFlow, (ushort)(AddressHelper.NumberUnitOfFloat * 3)); Device.All[index].QualityFlow = ModbusFloatHelper.UshortToFloat(datas, 0, 3); Device.All[index].Density = ModbusFloatHelper.UshortToFloat(datas, 2, 1); Device.All[index].Temperature = ModbusFloatHelper.UshortToFloat(datas, 4, 1); datas = master.ReadHoldingRegisters(Device.All[index].Transducer2700Address, AddressHelper.TotalAmount, (ushort)(AddressHelper.NumberUnitOfFloat * 1)); Device.All[index].TotalAmount = ModbusFloatHelper.UshortToFloat(datas, 0, 3); ///读取批控器 datas = master.ReadHoldingRegisters(Device.All[index].BatchControllerAddress, AddressHelper.Real, (ushort)(AddressHelper.NumberUnitOfFloat * 1)); Device.All[index].Real = ModbusFloatHelper.UshortToFloat(datas, 0, 3); datas = master.ReadHoldingRegisters(Device.All[index].BatchControllerAddress, AddressHelper.DO1, (ushort)(AddressHelper.NumberUnitOfWord * 1)); Device.All[index].DO1Code = datas[0]; if (Device.All[index].IsStart == true && Device.All[index].Real > 0) { var results = master.ReadCoils(Device.All[index].BatchControllerAddress, AddressHelper.CoilEndBacth, 1); if (results[0] == true) { Device.All[index].EndTime = DateTime.Now; master.WriteSingleCoil(Device.All[index].BatchControllerAddress, AddressHelper.CoilEndBacth, true); Device.All[index].IsStart = false; MessageBox.Show(string.Format("{0} 结束加料!", Device.All[index].TypeName)); } } }
void GetDesTemDrgData(out float des, out float tem, out float drg) { byte slaveID = SlaveAddress; ushort startAddress = (ushort)(AddressConfig.Density - 1); ushort numofPoints = 20; //数据帧中 word 的数量 ushort[] holdingregister = master.ReadInputRegisters(slaveID, startAddress, numofPoints); var dataDriveGain = master.ReadInputRegisters(SlaveAddress, (ushort)(AddressConfig.DriveGain - 1), 2); byte[] bytes = { }; for (int i = 0; i < numofPoints; i++) { byte[] byteTemp; byteTemp = BitConverter.GetBytes(holdingregister[i]); bytes = BitConverterHelper.BytesConnect(bytes, byteTemp); } des = ModbusFloatHelper.UshortToFloat(holdingregister, 0, 3); tem = ModbusFloatHelper.UshortToFloat(holdingregister, 2, 3); drg = ModbusFloatHelper.UshortToFloat(dataDriveGain, 0, 3); }