Пример #1
0
        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));
                }
            }
        }
Пример #2
0
        /// <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);
                }
            }
        }
Пример #3
0
        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);
        }