コード例 #1
0
        public void write_short(string adreess, short val, byte station)
        {
            busRtuClient.Station = station;
            // short写入
            OperateResult result = busRtuClient.Write(adreess, val);

            if (!result.IsSuccess)
            {
                MessageBox.Show("short写入失败");
            }
        }
コード例 #2
0
 private void button22_Click(object sender, EventArgs e)
 {
     // short写入
     try
     {
         writeResultRender(busRtuClient.Write(textBox8.Text, short.Parse(textBox7.Text)), textBox8.Text);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
コード例 #3
0
 public byte[] BuildWriteByte(byte station, string address, byte[] value)
 {
     try
     {
         DemoUtils.WriteResultRender(busRtuClient.Write(address, value), address);
     }
     catch (Exception ex)
     {
         EventscadaException?.Invoke(this.GetType().Name, ex.Message);
     }
     return(new byte[0]);
 }
コード例 #4
0
        public bool Write(string address, dynamic value)
        {
            if (value is bool)
            {
                busRtuClient.Write(address, value);
            }
            else
            {
                busRtuClient.Write(address, value);
            }

            return(true);
        }
コード例 #5
0
        public bool Write(string address, dynamic value)
        {
            int Address = DMT.DevToAddrW("DVP", address, Station);

            if (value is bool)
            {
                busRtuClient.Write($"{Address}", value);
            }
            else
            {
                busRtuClient.Write($"{Address}", value);
            }

            return(true);
        }
コード例 #6
0
        private void WriteExample( )
        {
            #region WriteExample2

            ModbusRtu modbus = new ModbusRtu( );   // 实例化
            // 此处忽略初始化
            // modbus.SerialPortInni( "COM3" );

            // 假设100存储了short的报警,101,102存储了float的温度,103,104存储了int的产量
            byte[] buffer = new byte[10];
            modbus.ByteTransform.TransByte((short)1).CopyTo(buffer, 0);
            modbus.ByteTransform.TransByte(123.456f).CopyTo(buffer, 2);
            modbus.ByteTransform.TransByte(45678922).CopyTo(buffer, 6);

            OperateResult write = modbus.Write("100", buffer);
            if (write.IsSuccess)
            {
                // success
            }
            else
            {
                // failed
            }


            #endregion
        }
コード例 #7
0
        public override Result Write(string address, byte[] value)
        {
            var op = modbus.Write(address, value);

            return(new Result {
                IsSuccess = op.IsSuccess, Msg = op.Message
            });
        }
コード例 #8
0
        public void ModbusRtuUnitTest( )
        {
            ModbusRtu modbus = new ModbusRtu(1);

            modbus.SerialPortInni("COM2", 9600);

            try
            {
                modbus.Open( );
            }
            catch
            {
                Console.WriteLine("无法连接modbus,将跳过单元测试。等待网络正常时,再进行测试");
                return;
            }

            // 开始单元测试,从coil类型开始测试
            string address = "1200";

            bool[] boolTmp = new bool[] { true, true, false, true, false, true, false };
            Assert.IsTrue(modbus.WriteCoil(address, true).IsSuccess);
            Assert.IsTrue(modbus.ReadCoil(address).Content == true);
            Assert.IsTrue(modbus.WriteCoil(address, boolTmp).IsSuccess);
            bool[] readBool = modbus.ReadCoil(address, (ushort)boolTmp.Length).Content;
            for (int i = 0; i < boolTmp.Length; i++)
            {
                Assert.IsTrue(readBool[i] == boolTmp[i]);
            }

            address = "300";
            // short类型
            Assert.IsTrue(modbus.Write(address, (short)12345).IsSuccess);
            Assert.IsTrue(modbus.ReadInt16(address).Content == 12345);
            short[] shortTmp = new short[] { 123, 423, -124, 5313, 2361 };
            Assert.IsTrue(modbus.Write(address, shortTmp).IsSuccess);
            short[] readShort = modbus.ReadInt16(address, (ushort)shortTmp.Length).Content;
            for (int i = 0; i < readShort.Length; i++)
            {
                Assert.IsTrue(readShort[i] == shortTmp[i]);
            }

            // ushort类型
            Assert.IsTrue(modbus.Write(address, (ushort)51234).IsSuccess);
            Assert.IsTrue(modbus.ReadUInt16(address).Content == 51234);
            ushort[] ushortTmp = new ushort[] { 5, 231, 12354, 5313, 12352 };
            Assert.IsTrue(modbus.Write(address, ushortTmp).IsSuccess);
            ushort[] readUShort = modbus.ReadUInt16(address, (ushort)ushortTmp.Length).Content;
            for (int i = 0; i < ushortTmp.Length; i++)
            {
                Assert.IsTrue(readUShort[i] == ushortTmp[i]);
            }

            // int类型
            Assert.IsTrue(modbus.Write(address, 12342323).IsSuccess);
            Assert.IsTrue(modbus.ReadInt32(address).Content == 12342323);
            int[] intTmp = new int[] { 123812512, 123534, 976124, -1286742 };
            Assert.IsTrue(modbus.Write(address, intTmp).IsSuccess);
            int[] readint = modbus.ReadInt32(address, (ushort)intTmp.Length).Content;
            for (int i = 0; i < intTmp.Length; i++)
            {
                Assert.IsTrue(readint[i] == intTmp[i]);
            }

            // uint类型
            Assert.IsTrue(modbus.Write(address, (uint)416123237).IsSuccess);
            Assert.IsTrue(modbus.ReadUInt32(address).Content == (uint)416123237);
            uint[] uintTmp = new uint[] { 81623123, 91712749, 91273123, 123, 21242, 5324 };
            Assert.IsTrue(modbus.Write(address, uintTmp).IsSuccess);
            uint[] readuint = modbus.ReadUInt32(address, (ushort)uintTmp.Length).Content;
            for (int i = 0; i < uintTmp.Length; i++)
            {
                Assert.IsTrue(readuint[i] == uintTmp[i]);
            }

            // float类型
            Assert.IsTrue(modbus.Write(address, 123.45f).IsSuccess);
            Assert.IsTrue(modbus.ReadFloat(address).Content == 123.45f);
            float[] floatTmp = new float[] { 123, 5343, 1.45f, 563.3f, 586.2f };
            Assert.IsTrue(modbus.Write(address, floatTmp).IsSuccess);
            float[] readFloat = modbus.ReadFloat(address, (ushort)floatTmp.Length).Content;
            for (int i = 0; i < readFloat.Length; i++)
            {
                Assert.IsTrue(floatTmp[i] == readFloat[i]);
            }

            // double类型
            Assert.IsTrue(modbus.Write(address, 1234.5434d).IsSuccess);
            Assert.IsTrue(modbus.ReadDouble(address).Content == 1234.5434d);
            double[] doubleTmp = new double[] { 1.4213d, 1223d, 452.5342d, 231.3443d };
            Assert.IsTrue(modbus.Write(address, doubleTmp).IsSuccess);
            double[] readDouble = modbus.ReadDouble(address, (ushort)doubleTmp.Length).Content;
            for (int i = 0; i < doubleTmp.Length; i++)
            {
                Assert.IsTrue(readDouble[i] == doubleTmp[i]);
            }

            // long类型
            Assert.IsTrue(modbus.Write(address, 123617231235123L).IsSuccess);
            Assert.IsTrue(modbus.ReadInt64(address).Content == 123617231235123L);
            long[] longTmp = new long[] { 12312313123L, 1234L, 412323812368L, 1237182361238123 };
            Assert.IsTrue(modbus.Write(address, longTmp).IsSuccess);
            long[] readLong = modbus.ReadInt64(address, (ushort)longTmp.Length).Content;
            for (int i = 0; i < longTmp.Length; i++)
            {
                Assert.IsTrue(readLong[i] == longTmp[i]);
            }

            // ulong类型
            Assert.IsTrue(modbus.Write(address, 1283823681236123UL).IsSuccess);
            Assert.IsTrue(modbus.ReadUInt64(address).Content == 1283823681236123UL);
            ulong[] ulongTmp = new ulong[] { 21316UL, 1231239127323UL, 1238612361283123UL };
            Assert.IsTrue(modbus.Write(address, ulongTmp).IsSuccess);
            ulong[] readULong = modbus.ReadUInt64(address, (ushort)ulongTmp.Length).Content;
            for (int i = 0; i < readULong.Length; i++)
            {
                Assert.IsTrue(readULong[i] == ulongTmp[i]);
            }

            // string类型
            Assert.IsTrue(modbus.Write(address, "123123").IsSuccess);
            Assert.IsTrue(modbus.ReadString(address, 3).Content == "123123");

            // byte类型
            byte[] byteTmp = new byte[] { 0x4F, 0x12, 0x72, 0xA7, 0x54, 0xB8 };
            Assert.IsTrue(modbus.Write(address, byteTmp).IsSuccess);
            Assert.IsTrue(SoftBasic.IsTwoBytesEquel(modbus.Read(address, 3).Content, byteTmp));

            modbus.Close( );
        }
コード例 #9
0
 private void button24_Click(object sender, EventArgs e)
 {
     // bool写入
     try
     {
         DemoUtils.WriteResultRender(busRtuClient.Write(textBox8.Text, bool.Parse(textBox7.Text)), textBox8.Text);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
コード例 #10
0
        private void RegisterExample( )
        {
            // 读取寄存器100的值
            short register100 = modbus.ReadInt16("100").Content;

            // 批量读取寄存器100-109的值
            short[] register100_109 = modbus.ReadInt16("100", 10).Content;

            // 写入寄存器100的值,注意,一定要强制转换short类型
            modbus.Write("100", (short)123);

            // 批量写
            modbus.Write("100", new short[] { 123, -123, 4244 });


            // ==============================================================================================
            // 以下是一些常规的操作,不再对是否成功的结果进行判断
            // 读取操作

            bool   coil100   = modbus.ReadCoil("100").Content;      // 读取线圈100的通断
            short  short100  = modbus.ReadInt16("100").Content;     // 读取寄存器100的short值
            ushort ushort100 = modbus.ReadUInt16("100").Content;    // 读取寄存器100的ushort值
            int    int100    = modbus.ReadInt32("100").Content;     // 读取寄存器100-101的int值
            uint   uint100   = modbus.ReadUInt32("100").Content;    // 读取寄存器100-101的uint值
            float  float100  = modbus.ReadFloat("100").Content;     // 读取寄存器100-101的float值
            long   long100   = modbus.ReadInt64("100").Content;     // 读取寄存器100-103的long值
            ulong  ulong100  = modbus.ReadUInt64("100").Content;    // 读取寄存器100-103的ulong值
            double double100 = modbus.ReadDouble("100").Content;    // 读取寄存器100-103的double值
            string str100    = modbus.ReadString("100", 5).Content; // 读取100到104共10个字符的字符串

            // 写入操作
            modbus.WriteCoil("100", true);            // 写入线圈100为通
            modbus.Write("100", (short)12345);        // 写入寄存器100为12345
            modbus.Write("100", (ushort)45678);       // 写入寄存器100为45678
            modbus.Write("100", 123456789);           // 写入寄存器100-101为123456789
            modbus.Write("100", (uint)123456778);     // 写入寄存器100-101为123456778
            modbus.Write("100", 123.456);             // 写入寄存器100-101为123.456
            modbus.Write("100", 12312312312414L);     //写入寄存器100-103为一个大数据
            modbus.Write("100", 12634534534543656UL); // 写入寄存器100-103为一个大数据
            modbus.Write("100", 123.456d);            // 写入寄存器100-103为一个双精度的数据
            modbus.Write("100", "K123456789");

            // ===============================================================================================
            // 读取输入寄存器
            short  input_short100  = modbus.ReadInt16("x=4;100").Content;     // 读取寄存器100的short值
            ushort input_ushort100 = modbus.ReadUInt16("x=4;100").Content;    // 读取寄存器100的ushort值
            int    input_int100    = modbus.ReadInt32("x=4;100").Content;     // 读取寄存器100-101的int值
            uint   input_uint100   = modbus.ReadUInt32("x=4;100").Content;    // 读取寄存器100-101的uint值
            float  input_float100  = modbus.ReadFloat("x=4;100").Content;     // 读取寄存器100-101的float值
            long   input_long100   = modbus.ReadInt64("x=4;100").Content;     // 读取寄存器100-103的long值
            ulong  input_ulong100  = modbus.ReadUInt64("x=4;100").Content;    // 读取寄存器100-103的ulong值
            double input_double100 = modbus.ReadDouble("x=4;100").Content;    // 读取寄存器100-103的double值
            string input_str100    = modbus.ReadString("x=4;100", 5).Content; // 读取100到104共10个字符的字符串
        }
コード例 #11
0
        public override bool WriteTagToRealDevice(Tag tag, object value)
        {
            lock (this)
            {
                OperateResult res = new OperateResult();
                try
                {
                    var address = tag.Address.ToLower();

                    if (address.Contains("i"))
                    {
                        throw new Exception("Error tag address.Can not write this tag");
                    }

                    string station = "";
                    if (address.StartsWith("s") && address.Contains(";"))
                    {
                        var ads = address.Split(';');
                        station = ads[0];
                        address = ads[1];
                    }


                    string reg = "";
                    if (address.StartsWith("di") || address.StartsWith("do") || address.StartsWith("ai") || address.StartsWith("ao"))
                    {
                        reg     = address.Substring(0, 2);
                        address = address.Replace(reg, "");
                    }
                    else
                    {
                        throw new Exception("Error tag address.");
                    }


                    if (!string.IsNullOrEmpty(station))
                    {
                        address = station + ";" + address;
                    }

                    switch (tag.TagType)
                    {
                    case "bool":
                        if (reg == "do")
                        {
                            res = _modbusDevice.WriteCoil(address, (bool)value);
                        }
                        break;

                    case "string":
                        res = _modbusDevice.Write(address.Split('.')[0], ConvertUtils.GetBytes(tag, value));
                        break;

                    default:
                        res = _modbusDevice.Write(address, ConvertUtils.GetBytes(tag, value).Reverse().ToArray());
                        break;
                    }
                    LOG.Info($"Datasource[{SourceName}] Write tag. Tag[{tag.TagName}] Address[{tag.Address}] IsSuccess[{res.IsSuccess}]");
                }
                catch (Exception ex)
                {
                    LOG.Error($"Datasource[{SourceName}] write error. Tag[{tag.TagName}] Address[{tag.Address}] Message[{ex.Message}]");
                }
                return(res.IsSuccess);
            }
        }
コード例 #12
0
        //modbusRtu write
        private bool  WriteModRtuValue(Config.PlcTypeItem plctype, Config.PlcDataItem plcdata, ModbusRtu mod, object value)
        {
            HslCommunication.OperateResult rlt = new HslCommunication.OperateResult();
            rlt.IsSuccess = false;
            try
            {
                //string[] strAdrss = plcdata.Address.Split('.');
                //string Address = strAdrss[0] + "." + Regex.Replace(strAdrss[1], @"^[A-Za-z]+", string.Empty);

                if (plctype == null || !plctype.IsConnected || plcdata == null || mod == null)
                {
                    return(rlt.IsSuccess);
                }

                switch (plcdata.DataType)
                {
                case Common.DataTypes.Bool:    //Bool
                    rlt = mod.WriteCoil(plcdata.Address, Convert.ToBoolean(value));
                    break;

                case Common.DataTypes.Short:
                    rlt = mod.Write(plcdata.Address, Convert.ToInt16(value));
                    break;

                case Common.DataTypes.Ushort:
                    rlt = mod.Write(plcdata.Address, Convert.ToUInt16(value));
                    break;

                case Common.DataTypes.Int:
                    rlt = mod.Write(plcdata.Address, Convert.ToInt32(value));
                    break;

                case Common.DataTypes.UInt:
                    rlt = mod.Write(plcdata.Address, Convert.ToUInt32(value));
                    break;

                case Common.DataTypes.Long:
                    rlt = mod.Write(plcdata.Address, Convert.ToInt64(value));
                    break;

                case Common.DataTypes.ULong:
                    rlt = mod.Write(plcdata.Address, Convert.ToUInt64(value));
                    break;

                case Common.DataTypes.Float:
                    rlt = mod.Write(plcdata.Address, float.Parse(value.ToString()));
                    break;

                case Common.DataTypes.Double:
                    rlt = mod.Write(plcdata.Address, Convert.ToDouble(value));
                    break;

                case Common.DataTypes.String:
                    rlt = mod.Write(plcdata.Address, Convert.ToString(value));
                    break;

                default: break;
                }
            }
            catch
            {
                //MessageBox.Show(ex.Message);
            }
            return(rlt.IsSuccess);
        }