private void userButton21_Click(object sender, EventArgs e)
        {
            // X100-X10F读取显示
            OperateResult <bool[]> read = melsec_net.ReadBool("X200", 16);

            if (read.IsSuccess)
            {
                // 成功读取,True代表通,False代表不通
                bool X200 = read.Content[0];
                bool X201 = read.Content[1];
                bool X202 = read.Content[2];
                bool X203 = read.Content[3];
                bool X204 = read.Content[4];
                bool X205 = read.Content[5];
                bool X206 = read.Content[6];
                bool X207 = read.Content[7];
                bool X208 = read.Content[8];
                bool X209 = read.Content[9];
                bool X20A = read.Content[10];
                bool X20B = read.Content[11];
                bool X20C = read.Content[12];
                bool X20D = read.Content[13];
                bool X20E = read.Content[14];
                bool X20F = read.Content[15];
                // 显示
            }
            else
            {
                //失败读取,显示失败信息
                MessageBox.Show(read.ToMessageShowString());
            }
        }
示例#2
0
        private void userButton22_Click(object sender, EventArgs e)
        {
            bool[] M100         = melsec_net.ReadBool("M100", 1).Content;     // 读取M100是否通,十进制地址
            bool[] X1A0         = melsec_net.ReadBool("X1A0", 1).Content;     // 读取X1A0是否通,十六进制地址
            bool[] Y1A0         = melsec_net.ReadBool("Y1A0", 1).Content;     // 读取Y1A0是否通,十六进制地址
            bool[] B1A0         = melsec_net.ReadBool("B1A0", 1).Content;     // 读取B1A0是否通,十六进制地址
            short  short_D1000  = melsec_net.ReadInt16("D1000").Content;      // 读取D1000的short值  ,W3C0,R3C0 效果是一样的
            ushort ushort_D1000 = melsec_net.ReadUInt16("D1000").Content;     // 读取D1000的ushort值
            int    int_D1000    = melsec_net.ReadInt32("D1000").Content;      // 读取D1000-D1001组成的int数据
            uint   uint_D1000   = melsec_net.ReadUInt32("D1000").Content;     // 读取D1000-D1001组成的uint数据
            float  float_D1000  = melsec_net.ReadFloat("D1000").Content;      // 读取D1000-D1001组成的float数据
            long   long_D1000   = melsec_net.ReadInt64("D1000").Content;      // 读取D1000-D1003组成的long数据
            ulong  ulong_D1000  = melsec_net.ReadUInt64("D1000").Content;     // 读取D1000-D1003组成的long数据
            double double_D1000 = melsec_net.ReadDouble("D1000").Content;     // 读取D1000-D1003组成的double数据
            string str_D1000    = melsec_net.ReadString("D1000", 10).Content; // 读取D1000-D1009组成的条码数据



            melsec_net.Write("M100", new bool[] { true });          // 写入M100为通
            melsec_net.Write("Y1A0", new bool[] { true });          // 写入Y1A0为通
            melsec_net.Write("X1A0", new bool[] { true });          // 写入X1A0为通
            melsec_net.Write("B1A0", new bool[] { true });          // 写入B1A0为通
            melsec_net.Write("D1000", (short)1234);                 // 写入D1000  short值  ,W3C0,R3C0 效果是一样的
            melsec_net.Write("D1000", (ushort)45678);               // 写入D1000  ushort值
            melsec_net.Write("D1000", 1234566);                     // 写入D1000  int值
            melsec_net.Write("D1000", (uint)1234566);               // 写入D1000  uint值
            melsec_net.Write("D1000", 123.456f);                    // 写入D1000  float值
            melsec_net.Write("D1000", 123.456d);                    // 写入D1000  double值
            melsec_net.Write("D1000", 123456661235123534L);         // 写入D1000  long值
            melsec_net.Write("D1000", "K123456789");                // 写入D1000  string值
        }
示例#3
0
 private void button_read_bool_Click(object sender, EventArgs e)
 {
     // 读取bool变量
     if (textBox12.Text == "1")
     {
         DemoUtils.ReadResultRender(melsec_net.ReadBool(textBox3.Text), textBox3.Text, textBox4);
     }
     else
     {
         DemoUtils.ReadResultRender(melsec_net.ReadBool(textBox3.Text, ushort.Parse(textBox12.Text)), textBox3.Text, textBox4);
     }
 }
示例#4
0
        public bool ReadM(string address)
        {
            OperateResult <bool> read = melsec_net.ReadBool(address);

            if (read.IsSuccess)
            {
                _Connect = true;
                return(read.Content);
            }
            else
            {
                _Connect = false;
                return(false);
            }
        }
示例#5
0
        public void ReadBool( )
        {
            #region ReadBool

            MelsecMcNet melsec_net = new MelsecMcNet("192.168.0.100", 6000);

            // 以下是简单的读取,没有仔细校验的方式
            bool   X1    = melsec_net.ReadBool("X1").Content;
            bool[] X1_10 = melsec_net.ReadBool("X1", 10).Content;

            // 如果需要判断是否读取成功
            OperateResult <bool> R_X1 = melsec_net.ReadBool("X1");
            if (R_X1.IsSuccess)
            {
                // success
                bool value = R_X1.Content;
            }
            else
            {
                // failed
            }


            OperateResult <bool[]> R_X1_10 = melsec_net.ReadBool("X1", 10);
            if (R_X1_10.IsSuccess)
            {
                // success
                bool x1 = R_X1_10.Content[0];
                bool x2 = R_X1_10.Content[1];
                bool x3 = R_X1_10.Content[2];
                bool x4 = R_X1_10.Content[3];
                bool x5 = R_X1_10.Content[4];
                bool x6 = R_X1_10.Content[5];
                bool x7 = R_X1_10.Content[6];
                bool x8 = R_X1_10.Content[7];
                bool x9 = R_X1_10.Content[8];
                bool xa = R_X1_10.Content[9];
            }
            else
            {
                // failed
            }


            #endregion
        }
示例#6
0
        private void test1()
        {
            OperateResult <bool[]> read = melsec_net.ReadBool("M100", 10);

            if (read.IsSuccess)
            {
                bool m100 = read.Content[0];
                // and so on
                bool m109 = read.Content[9];
            }
            else
            {
                // failed
            }
        }
        /// <summary>
        /// 读取1位
        /// </summary>
        /// <param name="address">标签变量地址结构体</param>
        /// <returns></returns>
        public ItemData <bool> ReadBit(DeviceAddress address)
        {
            var addr = address.DBNumber == 'X' || address.DBNumber == 'Y' ?
                       ((char)address.DBNumber) + (address.Start + address.Bit).ToString() :
                       GetAddress(address) + "." + address.Bit.ToString();
            var result = melseNet.ReadBool(addr);

            if (!result.IsSuccess)
            {
                return(new ItemData <bool>(false, 0, QUALITIES.QUALITY_BAD));
            }
            else
            {
                return(new ItemData <bool>(result.Content, 0, QUALITIES.QUALITY_GOOD));//是否考虑字节序问题?
            }
        }
示例#8
0
        public bool Read <T>(string addr, int length, ref object data)
        {
            if (typeof(T) == typeof(bool[]))
            {
                OperateResult <bool[]> rs;
                rs = _deviceApi.ReadBool(addr, (ushort)length);
                if (rs.IsSuccess)
                {
                    ErrorCode = 0;
                    Message   = "Success";
                    data      = rs.Content;
                    return(true);
                }
                else
                {
                    Message = rs.Message;
                    Logger.Main.Warn($"[{_serviceName}] Read(\"{addr}\", BOOL, {length})失败: {rs.ErrorCode}, {rs.Message}");
                }
            }
            else if (typeof(T) == typeof(float[]))
            {
                OperateResult <float[]> rs;
                rs = _deviceApi.ReadFloat(addr, (ushort)(length * 2));
                if (rs.IsSuccess)
                {
                    ErrorCode = 0;
                    Message   = "Success";
                    var arr = new float[length];
                    for (var i = 0; i < length * 2; i += 2)
                    {
                        arr[i / 2] = rs.Content[i];
                    }
                    data      = arr;
                    ErrorCode = rs.ErrorCode;
                    return(true);
                }
                else
                {
                    Message = rs.Message;
                    Logger.Main.Warn($"[{_serviceName}] Read(\"{addr}\", FLOAT, {length})失败: {rs.ErrorCode}, {rs.Message}");
                }
            }

            ConnectStatus = false;
            return(false);
        }
示例#9
0
 public static async void RUN()
 {
     while (true)
     {
         System.Threading.Thread.Sleep(50);
         Task Task_SQLSTA = Task.Run(() =>
         {
             try
             {
                 OperateResult <bool[]> read = melsec_net.ReadBool("M1750", 32);
                 if (read.IsSuccess)
                 {
                     FX5uOut = read.Content;
                     Connect = true;
                 }
                 else
                 {
                     Connect = false;
                 }
                 if (FX5uIn != null)
                 {
                     OperateResult write = melsec_net.Write("M1700", FX5uIn);
                     if (write.IsSuccess)
                     {
                         Connect = true;
                     }
                     else
                     {
                         Connect = false;
                     }
                 }
             }
             catch { }
         });
         await Task_SQLSTA;
     }
 }
示例#10
0
 private void button_read_bool_Click(object sender, EventArgs e)
 {
     // 读取bool变量
     readResultRender(melsec_net.ReadBool(textBox3.Text), textBox3.Text, textBox4);
 }
示例#11
0
        public override object ReadTag(Tag tag)
        {
            if (tag.AccessType == TagAccessType.Read || tag.AccessType == TagAccessType.ReadWrite)
            {
                try
                {
                    if (tag.TagType == "bool")
                    {
                        var res = PLC.ReadBool(tag.Address);
                        if (res.IsSuccess)
                        {
                            tag.TagValue = res.Content;
                            tag.Quality  = Quality.Good;
                        }
                        else
                        {
                            tag.Quality = Quality.Bad;
                        }
                    }
                    else if (tag.TagType == "string")
                    {
                        if (tag.Address.Contains("."))
                        {
                            try
                            {
                                string address = tag.Address.Split('.')[0];
                                ushort len     = Convert.ToUInt16(tag.Address.Split('.')[1]);
                                var    res     = PLC.ReadString(tag.Address.Split('.')[0], len);
                                if (res.IsSuccess)
                                {
                                    tag.TagValue = res.Content.Replace("\0", "");
                                    tag.Quality  = Quality.Good;
                                }
                                else
                                {
                                    tag.Quality = Quality.Bad;
                                }
                            }
                            catch (Exception)
                            {
                                LOG.Error($"Tag Address Error {tag.Address}");
                            }
                        }
                        else
                        {
                            LOG.Error($"Tag Address Error {tag.Address}");
                        }
                    }
                    else
                    {
                        ushort len = ConvertUtils.GetLength(tag);

                        var res = PLC.Read(tag.Address, len);
                        ConvertUtils.DecodeTagValue(tag, res);
                    }
                    return(tag.TagValue);
                }
                catch (Exception ex)
                {
                    LOG.Error($"Datasource[{SourceName}] read error. Tag[{tag.TagName}] Address[{tag.Address}] Message[{ex.Message}]");
                    tag.TagValue = null;
                    tag.Quality  = Quality.Bad;
                    return(tag.TagValue);
                }
            }
            else
            {
                return(null);
            }
        }
        private void ThreadReadServer()
        {
            if (melsec_net != null)
            {
                while (isThreadRun)
                {
                    Thread.Sleep(timeSleep);
                    try
                    {
                        //Task.Run(() =>
                        //{
                        // Read X0-X7
                        var ReadXInput = melsec_net.ReadBool("X070", 8);

                        Console.WriteLine(ReadXInput.Message);
                        if (ReadXInput.IsSuccess)
                        {
                            // Tampilkan Data
                            if (isThreadRun)
                            {
                                //Invoke(new Action<short>(AddDataCurve), read.Content);
                                this.Invoke((MethodInvoker) delegate
                                {
                                    TSStatusPLC.Text = "Connected to PLC";

                                    // runs on UI thread
                                    var value = ReadXInput.Content;
                                    for (ushort i = 0; i <= LampXInput.Count - 1; i++)
                                    {
                                        if (value[i])
                                        {
                                            LampXInput[i].Image = Properties.Resources.lamp_green_on;
                                        }
                                        else
                                        {
                                            LampXInput[i].Image = Properties.Resources.lamp_green_off;
                                        }
                                    }

                                    //metroLabel4.Text = Convert.ToString(value[0]);
                                });
                            }
                        }
                        else
                        {
                            this.Invoke((MethodInvoker) delegate
                            {
                                // runs on UI thread
                                TSStatusPLC.Text = "reconnecting...";
                            });
                        }
                        //});


                        Task.Run(() => {
                            // Read Y0-Y7
                            var ReadYOutput = melsec_net.ReadBool("Y0A0", 8);
                            if (ReadYOutput.IsSuccess)
                            {
                                // Tampilkan Data
                                if (isThreadRun)
                                {
                                    //Invoke(new Action<short>(AddDataCurve), read.Content);
                                    this.Invoke((MethodInvoker) delegate
                                    {
                                        // runs on UI thread
                                        var value = ReadYOutput.Content;
                                        for (ushort i = 0; i <= LampYOutput.Count - 1; i++)
                                        {
                                            if (value[i])
                                            {
                                                LampYOutput[i].Image = Properties.Resources.lamp_green_on;
                                            }
                                            else
                                            {
                                                LampYOutput[i].Image = Properties.Resources.lamp_green_off;
                                            }
                                        }
                                    });
                                }
                            }
                        });
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        //MessageBox.Show("Read failed:" + ex.Message);
                    }
                }
            }
        }
        public void MelsecUnitTest( )
        {
            MelsecMcNet plc = new MelsecMcNet("192.168.8.13", 6001);

            if (!plc.ConnectServer( ).IsSuccess)
            {
                Console.WriteLine("无法连接PLC,将跳过单元测试。等待网络正常时,再进行测试");
                return;
            }

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

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

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

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

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

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

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

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

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

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

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

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

            plc.ConnectClose( );
        }
示例#14
0
        //PLC读取
        private object ReadSieTcpValue(Config.PlcTypeItem plctype, Config.PlcDataItem plcdata, MelsecMcNet plc)
        {
            try
            {
                if (plctype == null || !plctype.IsConnected || plcdata == null || plc == null)
                {
                    return(null);
                }

                switch (plcdata.DataType)
                {
                case Common.DataTypes.Bool:    //Bool
                    plcdata.ValueNew = plc.ReadBool(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Byte:    //Byte
                    plcdata.ValueNew = plc.Read(plcdata.Address, 1).Content;
                    break;

                case Common.DataTypes.Short:
                    plcdata.ValueNew = plc.ReadInt16(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Ushort:
                    plcdata.ValueNew = plc.ReadUInt16(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Int:
                    plcdata.ValueNew = plc.ReadInt32(plcdata.Address).Content;
                    break;

                case Common.DataTypes.UInt:
                    plcdata.ValueNew = plc.ReadUInt32(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Long:
                    long lValueNew = 0;
                    if (long.TryParse(plc.ReadInt64(plcdata.Address).Content.ToString(), out lValueNew))
                    {
                        long temp = BpLong.SwapInt64(lValueNew);
                        plcdata.ValueNew = temp;
                    }
                    // plcdata.ValueNew = plc.ReadInt64(plcdata.Address).Content;
                    break;

                case Common.DataTypes.ULong:
                    plcdata.ValueNew = plc.ReadUInt64(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Float:
                    plcdata.ValueNew = plc.ReadFloat(plcdata.Address).Content;
                    break;

                case Common.DataTypes.Double:
                    plcdata.ValueNew = plc.ReadDouble(plcdata.Address).Content;
                    break;

                case Common.DataTypes.String:
                    HslCommunication.OperateResult <byte[]> data = (HslCommunication.OperateResult <byte[]>)plc.Read(plcdata.Address, 50);
                    if (data != null && data.Content != null && data.Content.Length > 2)
                    {
                        List <byte> lstData = new List <byte>();
                        int         nLen    = data.Content[1];
                        for (int i = 2; i < nLen + 2; i++)
                        {
                            lstData.Add(data.Content[i]);
                        }
                        plcdata.ValueNew = System.Text.Encoding.ASCII.GetString(lstData.ToArray());
                    }
                    break;

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

            return(plcdata.ValueNew);
        }