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)); } } }
/// <summary> /// 批控器不会控制 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnStart_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(Device.All[Index].MaterialName) == true) { MessageBox.Show("未填写原料名称"); return; } if (MessageBox.Show(string.Format("确定将加料值设置为{0} Kg ?", DeviceNow.Goal), "消息", MessageBoxButtons.YesNo) == DialogResult.Yes) { try { if (MasterNow != null) { //目标值 MasterNow.WriteMultipleRegisters(DeviceNow.BatchControllerAddress, AddressHelper.Goal, ModbusFloatHelper.FloatToUshort(DeviceNow.Goal)); if (MessageBox.Show("确定将阀门打开并开始加料?", "消息", MessageBoxButtons.YesNo) == DialogResult.Yes) { //打开阀门 MasterNow.WriteSingleCoil(DeviceNow.BatchControllerAddress, AddressHelper.CoilIsStartBacth, true); DeviceNow.StartTime = DateTime.Now; DeviceNow.IsStart = true; textBoxResidue.Text = "0"; } } else { MessageBox.Show("未连接设备!"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } }
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); }