コード例 #1
0
        /// <summary>
        /// 设置PLC中ModbusTCP HoldReg DB块 第index个数的大小,可以是任意类型
        /// </summary>
        public bool SetVal(int index, float val, ModbusTCPMaster MBmaster)
        {
            byte[] bytes;
            switch (TypeList[index])
            {
            case "System.Byte":
                var data1 = (byte)val;
                bytes = new byte[] { data1 };
                break;

            case "System.Int16":
                var data2 = (Int16)val;
                bytes = BitConverterHelper.Int16ToBytes(data2);
                break;

            case "System.Int32":
                var data3 = (Int32)val;
                bytes = BitConverterHelper.Int32ToBytes(data3);
                break;

            case "System.Single":
                var data4 = (Single)val;
                bytes = BitConverterHelper.SingleToBytes(data4);
                break;

            default: throw new Exception("Type is not correct!");
            }
            ushort address = (ushort)(getDataOffset(index) / 2);

            MBmaster?.WriteMultipleRegister(ModbusTCPMaster.WriteMultipleRegisterFucID, SlaveID, address, bytes);
            Thread.Sleep(20);
            return(true);
        }
コード例 #2
0
        float GetDesTemData(int dataAddress)
        {
            byte   slaveID      = Convert.ToByte(serialPortConfig.BiaoAddressValue);
            ushort startAddress = (ushort)dataAddress;
            ushort numofPoints  = 2; //数据帧中 word 的数量

            ushort[] holdingregister = master.ReadHoldingRegisters(slaveID, startAddress, numofPoints);
            byte[]   bytes           = { };
            for (int i = 0; i < numofPoints * 2; i++)
            {
                byte[] byteTemp;
                byteTemp = BitConverter.GetBytes(holdingregister[i]);
                bytes    = BitConverterHelper.BytesConnect(bytes, byteTemp);
            }
            float val = BitConverterHelper.ToSingle(bytes, 0);

            val = (float)(Math.Round(val, 3));
            return(val);
        }
コード例 #3
0
        public bool SetVals(int startindex, float[] vals, ModbusTCPMaster MBmaster)
        {
            byte[] bytes;
            byte[] returnbytes = { };
            int    count       = vals.Length;

            for (int i = 0; i < count; ++i)
            {
                switch (TypeList[startindex + i])
                {
                case "System.Byte":
                    var data1 = (byte)vals[i];
                    bytes = new byte[] { data1 };
                    break;

                case "System.Int16":
                    var data2 = (Int16)vals[i];
                    bytes = BitConverterHelper.Int16ToBytes(data2);
                    break;

                case "System.Int32":
                    var data3 = (Int32)vals[i];
                    bytes = BitConverterHelper.Int32ToBytes(data3);
                    break;

                case "System.Single":
                    var data4 = (Single)vals[i];
                    bytes = BitConverterHelper.SingleToBytes(data4);
                    break;

                default: throw new Exception("Type is not correct!");
                }
                returnbytes = BitConverterHelper.BytesConnect(returnbytes, bytes);
            }

            ushort address = (ushort)(getDataOffset(startindex) / 2);

            MBmaster?.WriteMultipleRegister(ModbusTCPMaster.WriteMultipleRegisterFucID, SlaveID, address, returnbytes);
            Thread.Sleep(20);
            return(true);
        }
コード例 #4
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);
        }
コード例 #5
0
        private void ModbusSetK012()
        {
            if (serialPort.IsOpen == true)
            {
                ushort[] sendUShort = { };
                ushort[] ushorts    = BitConverterHelper.SingleToUShort(K0_XiShu.Value);
                sendUShort = BitConverterHelper.UShortConnect(sendUShort, ushorts);
                ushorts    = BitConverterHelper.SingleToUShort(K1_XiShu.Value);
                sendUShort = BitConverterHelper.UShortConnect(sendUShort, ushorts);
                ushorts    = BitConverterHelper.SingleToUShort(K2_XiShu.Value);
                sendUShort = BitConverterHelper.UShortConnect(sendUShort, ushorts);

                try
                {
                    master?.WriteMultipleRegisters(SlaveAddress,
                                                   (ushort)(AddressConfig.K0 - 1), sendUShort);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }