コード例 #1
0
        public void WriteBool( )
        {
            #region WriteBool

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

            // 以下是简单的写入,没有仔细校验的方式
            melsec_net.Write("M100", true);
            melsec_net.Write("M100", new bool[] { true, false, true, false });

            // 如果需要判断是否读取成功
            OperateResult write1 = melsec_net.Write("M100", true);
            if (write1.IsSuccess)
            {
                // success
            }
            else
            {
                // failed
            }


            OperateResult write2 = melsec_net.Write("M100", new bool[] { true, false, true, false });
            if (write2.IsSuccess)
            {
                // success
            }
            else
            {
                // failed
            }


            #endregion
        }
コード例 #2
0
        public void ReadUInt64Array( )
        {
            #region ReadUInt64Array

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

            // 以下是简单的读取,没有仔细校验的方式
            ulong[] d100_139 = melsec_net.ReadUInt64("D100", 10).Content;

            // 如果需要判断是否读取成功

            OperateResult <ulong[]> R_d100_139 = melsec_net.ReadUInt64("D100", 10);
            if (R_d100_139.IsSuccess)
            {
                ulong value_d100 = R_d100_139.Content[0];
                ulong value_d104 = R_d100_139.Content[1];
                ulong value_d108 = R_d100_139.Content[2];
                ulong value_d112 = R_d100_139.Content[3];
                ulong value_d116 = R_d100_139.Content[4];
                ulong value_d120 = R_d100_139.Content[5];
                ulong value_d124 = R_d100_139.Content[6];
                ulong value_d128 = R_d100_139.Content[7];
                ulong value_d132 = R_d100_139.Content[8];
                ulong value_d136 = R_d100_139.Content[9];
            }
            else
            {
                // failed
            }


            #endregion
        }
コード例 #3
0
        public void ReadInt16Array( )
        {
            #region ReadInt16Array

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

            // 以下是简单的读取,没有仔细校验的方式
            short[] d100_109_value = melsec_net.ReadInt16("D100", 10).Content;

            // 如果需要判断是否读取成功
            OperateResult <short[]> R_d100_109_value = melsec_net.ReadInt16("D100", 10);
            if (R_d100_109_value.IsSuccess)
            {
                // success
                short value_d100 = R_d100_109_value.Content[0];
                short value_d101 = R_d100_109_value.Content[1];
                short value_d102 = R_d100_109_value.Content[2];
                short value_d103 = R_d100_109_value.Content[3];
                short value_d104 = R_d100_109_value.Content[4];
                short value_d105 = R_d100_109_value.Content[5];
                short value_d106 = R_d100_109_value.Content[6];
                short value_d107 = R_d100_109_value.Content[7];
                short value_d108 = R_d100_109_value.Content[8];
                short value_d109 = R_d100_109_value.Content[9];
            }
            else
            {
                // failed
            }


            #endregion
        }
コード例 #4
0
        public void ConnectServer( )
        {
            MelsecMcNet client = new MelsecMcNet( );

            #region Connect1

            // client为设备的连接对象,简单的启动连接
            client.ConnectServer( );

            #endregion

            #region Connect2

            // client为设备的连接对象,如果想知道是否连接成功
            OperateResult connect = client.ConnectServer( );
            if (connect.IsSuccess)
            {
                Console.WriteLine("connect success");
            }
            else
            {
                // do something
                Console.WriteLine("connect failed");
            }

            #endregion
        }
コード例 #5
0
        public void ReadFloatArray( )
        {
            #region ReadFloatArray

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

            // 以下是简单的读取,没有仔细校验的方式
            float[] d100_119 = melsec_net.ReadFloat("D100", 10).Content;

            // 如果需要判断是否读取成功

            OperateResult <float[]> R_d100_119 = melsec_net.ReadFloat("D100", 10);
            if (R_d100_119.IsSuccess)
            {
                float value_d100 = R_d100_119.Content[0];
                float value_d102 = R_d100_119.Content[1];
                float value_d104 = R_d100_119.Content[2];
                float value_d106 = R_d100_119.Content[3];
                float value_d108 = R_d100_119.Content[4];
                float value_d110 = R_d100_119.Content[5];
                float value_d112 = R_d100_119.Content[6];
                float value_d114 = R_d100_119.Content[7];
                float value_d116 = R_d100_119.Content[8];
                float value_d118 = R_d100_119.Content[9];
            }
            else
            {
                // failed
            }


            #endregion
        }
コード例 #6
0
        /// <summary>
        /// 构造函数重载
        /// </summary>
        /// <param name="port"></param>
        public PortPLC_MITHls(int port)
        {
            NameClass = "PLC_MITHis";

            //新建实例
            Melsec_net = new MelsecMcNet(ParSetPLC.P_I.IP, port);
        }
コード例 #7
0
        /// <summary>
        ///     实例化一个三菱的设备对象,从配置信息创建
        /// </summary>
        /// <param name="element">配置信息</param>
        public DeviceMelsecMc(XElement element)
        {
            var nodeMelsec = new NodeMelsecMc();

            nodeMelsec.LoadByXmlElement(element);
            LoadRequest(element);

            if (nodeMelsec.IsBinary)
            {
                protocol    = 1;
                melsecMcNet = new MelsecMcNet(nodeMelsec.IpAddress, nodeMelsec.Port);
                melsecMcNet.NetworkNumber        = nodeMelsec.NetworkNumber;
                melsecMcNet.NetworkStationNumber = nodeMelsec.NetworkStationNumber;
                melsecMcNet.ConnectTimeOut       = nodeMelsec.ConnectTimeOut;

                ByteTransform   = melsecMcNet.ByteTransform;
                ReadWriteDevice = melsecMcNet;
                UniqueId        = melsecMcNet.ConnectionId;
            }
            else
            {
                melsecMcAscii = new MelsecMcAsciiNet(nodeMelsec.IpAddress, nodeMelsec.Port);
                melsecMcAscii.NetworkNumber        = nodeMelsec.NetworkNumber;
                melsecMcAscii.NetworkStationNumber = nodeMelsec.NetworkStationNumber;
                melsecMcAscii.ConnectTimeOut       = nodeMelsec.ConnectTimeOut;

                ByteTransform   = melsecMcAscii.ByteTransform;
                ReadWriteDevice = melsecMcAscii;
                UniqueId        = melsecMcAscii.ConnectionId;
            }

            TypeName = "三菱设备";
        }
コード例 #8
0
        public void ConnectServer2( )
        {
            MelsecMcNet client = new MelsecMcNet( );


            AlienSession session = new AlienSession( );

            #region AlienConnect1

            // session对象由 NetworkAlienClient 类创建
            client.ConnectServer(session);

            #endregion

            #region AlienConnect2

            // session对象由 NetworkAlienClient 类创建
            OperateResult connect = client.ConnectServer(session);
            if (connect.IsSuccess)
            {
                Console.WriteLine("connect success");
            }
            else
            {
                // do something
                Console.WriteLine("connect failed");
            }

            #endregion
        }
コード例 #9
0
        public void WriteCustomerExample( )
        {
            #region WriteCustomerExample

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

            DataMy dataMy = new DataMy( );
            dataMy.temperature = 20;
            dataMy.press       = 123.456f;
            dataMy.others      = 1234232132;

            OperateResult write = melsec.WriteCustomer("D1000", dataMy);
            if (write.IsSuccess)
            {
                // success
                Console.WriteLine("写入成功!");
            }
            else
            {
                // failed
                Console.WriteLine("读取失败:" + write.Message);
            }

            #endregion
        }
コード例 #10
0
        public void ReadExample( )
        {
            #region ReadExample1


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

            // 此处以D寄存器作为示例
            short  short_D1000  = melsec_net.ReadInt16("D1000").Content;         // 读取D1000的short值
            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组成的条码数据

            // 读取数组
            short[]  short_D1000_array  = melsec_net.ReadInt16("D1000", 10).Content;         // 读取D1000的short值
            ushort[] ushort_D1000_array = melsec_net.ReadUInt16("D1000", 10).Content;        // 读取D1000的ushort值
            int[]    int_D1000_array    = melsec_net.ReadInt32("D1000", 10).Content;         // 读取D1000-D1001组成的int数据
            uint[]   uint_D1000_array   = melsec_net.ReadUInt32("D1000", 10).Content;        // 读取D1000-D1001组成的uint数据
            float[]  float_D1000_array  = melsec_net.ReadFloat("D1000", 10).Content;         // 读取D1000-D1001组成的float数据
            long[]   long_D1000_array   = melsec_net.ReadInt64("D1000", 10).Content;         // 读取D1000-D1003组成的long数据
            ulong[]  ulong_D1000_array  = melsec_net.ReadUInt64("D1000", 10).Content;        // 读取D1000-D1003组成的long数据
            double[] double_D1000_array = melsec_net.ReadDouble("D1000", 10).Content;        // 读取D1000-D1003组成的double数据

            #endregion
        }
コード例 #11
0
        public void WriteExample2( )
        {
            #region WriteExample2

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

            // 拼凑数据,这样的话,一次通讯就完成数据的全部写入
            byte[] buffer = new byte[8];
            melsec_net.ByteTransform.TransByte((short)1234).CopyTo(buffer, 0);
            melsec_net.ByteTransform.TransByte((short)2100).CopyTo(buffer, 2);
            melsec_net.ByteTransform.TransByte(12353423).CopyTo(buffer, 4);

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

            // 上面的功能等同于三个数据分别写入,下面的性能更差点,因为进行了三次通讯,而且每次还要判断是否写入成功
            //melsec_net.Write( "D100", (short)1234 );
            //melsec_net.Write( "D100", (short)2100 );
            //melsec_net.Write( "D100", 12353423 );

            #endregion
        }
コード例 #12
0
        public void WriteExample( )
        {
            #region WriteExample1

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

            // 此处以D寄存器作为示例
            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", 523456661235123534UL);         // 写入D1000  ulong值
            melsec_net.Write("D1000", "K123456789");                 // 写入D1000  string值

            // 读取数组
            melsec_net.Write("D1000", new short[] { 123, 3566, -123 });                                    // 写入D1000  short值  ,W3C0,R3C0 效果是一样的
            melsec_net.Write("D1000", new ushort[] { 12242, 42321, 12323 });                               // 写入D1000  ushort值
            melsec_net.Write("D1000", new int[] { 1234312312, 12312312, -1237213 });                       // 写入D1000  int值
            melsec_net.Write("D1000", new uint[] { 523123212, 213, 13123 });                               // 写入D1000  uint值
            melsec_net.Write("D1000", new float[] { 123.456f, 35.3f, -675.2f });                           // 写入D1000  float值
            melsec_net.Write("D1000", new double[] { 12343.542312d, 213123.123d, -231232.53432d });        // 写入D1000  double值
            melsec_net.Write("D1000", new long[] { 1231231242312, 34312312323214, -1283862312631823 });    // 写入D1000  long值
            melsec_net.Write("D1000", new ulong[] { 1231231242312, 34312312323214, 9731283862312631823 }); // 写入D1000  ulong值

            #endregion
        }
コード例 #13
0
        public void LogNetExample( )
        {
            #region LogNetExample1

            // 设备连接对象的日志
            MelsecMcNet melsec = new MelsecMcNet("192.168.0.100", 6000);

            // 举例实现日志文件为单日志文件
            melsec.LogNet = new HslCommunication.LogNet.LogNetSingle("D://123.txt");

            #endregion

            #region LogNetExample2

            // 一般服务器对象的
            NetSimplifyServer simplifyServer = new NetSimplifyServer( );
            simplifyServer.LogNet              = new HslCommunication.LogNet.LogNetSingle("D://log.txt");
            simplifyServer.ReceiveStringEvent += (HslCommunication.Core.Net.AppSession session, HslCommunication.NetHandle handle, string data) =>
            {
                simplifyServer.SendMessage(session, handle, "Back:" + data);
            };
            simplifyServer.ServerStart(45678);

            #endregion
        }
コード例 #14
0
        /// <summary>
        /// 连接
        /// </summary>
        /// <returns></returns>
        public bool Connect()
        {
            if (string.IsNullOrEmpty(_ip))
            {
                return(false);
            }
            if (melseNet != null)
            {
                try
                {
                    melseNet.ConnectClose();
                    melseNet.Dispose();
                }
                catch (Exception err)
                {
                    if (OnError != null)
                    {
                        OnError(this, new IOErrorEventArgs(this.ID, err.Message));
                    }
                }
            }
            melseNet                = new MelsecMcNet();
            melseNet.IpAddress      = _ip;
            melseNet.Port           = _port;
            melseNet.ReceiveTimeOut = _timeout;
            var result = melseNet.ConnectServer();

            return(_connected = true);
        }
コード例 #15
0
        public void ConnectCloseExample( )
        {
            MelsecMcNet client = new MelsecMcNet( );

            #region ConnectCloseExample

            client.ConnectClose( );

            #endregion
        }
コード例 #16
0
        public void InitializationOnConnectExample( )
        {
            MelsecMcNet client = new MelsecMcNet( );

            #region InitializationOnConnectExample



            #endregion
        }
コード例 #17
0
        public void ClassTest( )
        {
            #region Usage

            // 实例化对象,指定PLC的ip地址和端口号
            MelsecMcNet melsecMc = new MelsecMcNet("192.168.1.110", 6000);
            // 举例读取D100的值
            short D100 = melsecMc.ReadInt16("D100").Content;

            #endregion
        }
コード例 #18
0
        public void MelsecUnitTest( )
        {
            MelsecMcNet plc = new MelsecMcNet("192.168.8.13", 6001);

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

            // 开始单元测试
        }
コード例 #19
0
        public void LogNetExample( )
        {
            MelsecMcNet obj = new MelsecMcNet("192.168.0.100", 6000);

            #region LogNetExample

            // obj 为NetworkBase所有的派生类对象

            // 举例实现日志文件为单日志文件
            obj.LogNet = new HslCommunication.LogNet.LogNetSingle("D://123.txt");

            #endregion
        }
コード例 #20
0
        public void ReceiveTimeOutExample( )
        {
            MelsecMcNet client = new MelsecMcNet( );

            #region ReceiveTimeOutExample

            // 设置反馈的超时时间,单位 毫秒
            client.ReceiveTimeOut = 1000;
            // 1秒没有接收到就自动返回失败,此处的地址示例是modbus的地址,对于读取也是一样的
            OperateResult write = client.Write("100", 123);

            #endregion
        }
コード例 #21
0
        public void ConnectTimeOutExample( )
        {
            MelsecMcNet client = new MelsecMcNet( );

            #region ConnectTimeOutExample

            // 设置连接的超时时间,单位 毫秒
            client.ConnectTimeOut = 1000;
            // 1秒没有连接上的时候就自动返回失败
            client.ConnectServer( );

            #endregion
        }
コード例 #22
0
        // 写设备的值
        public bool  WriteValue(Common.PlcDevice plcDevice, object value)
        {
            bool IsOk = false;

            try
            {
                Config.PlcDataItem devData = this.GetPlcDataItem(plcDevice);
                Config.PlcTypeItem devType = this.GetPlcTypeItem(devData.DeviceName);

                switch (devType.DevType)
                {
                //Keyence
                case Common.DeviceType.Keyence:
                    KeyenceMcNet kPlcClient = (KeyenceMcNet)devType.Tag;
                    IsOk = this.WriteSieTcpValue(devType, devData, kPlcClient, value);
                    break;

                //Melsec
                case Common.DeviceType.Qseries:
                    MelsecMcNet mPlcClient = (MelsecMcNet)devType.Tag;
                    IsOk = this.WriteSieTcpValue(devType, devData, mPlcClient, value);
                    break;


                case Common.DeviceType.S1200:
                case Common.DeviceType.S300:
                case Common.DeviceType.S400:
                case Common.DeviceType.S1500:
                case Common.DeviceType.S200Smart:
                case Common.DeviceType.S200:
                    SiemensS7Net sPlcClient = (SiemensS7Net)devType.Tag;
                    IsOk = this.WriteSieTcpValue(devType, devData, sPlcClient, value);
                    break;

                case Common.DeviceType.ModbusTcp:
                    ModbusTcpNet mTcpClient = (ModbusTcpNet)devType.Tag;
                    IsOk = this.WriteModTcpValue(devType, devData, mTcpClient, value);
                    break;

                case Common.DeviceType.ModbusRtu:
                    ModbusRtu mRtuClinet = (ModbusRtu)devType.Tag;
                    IsOk = this.WriteModRtuValue(devType, devData, mRtuClinet, value);
                    break;

                default:
                    break;
                }
            }
            catch { }
            return(IsOk);
        }
コード例 #23
0
        public Form1()
        {
            InitializeComponent();
            melsec_net = new MelsecMcNet();

            LampXInput.Add(PBX0); LampYOutput.Add(PBY0);
            LampXInput.Add(PBX1); LampYOutput.Add(PBY1);
            LampXInput.Add(PBX2); LampYOutput.Add(PBY2);
            LampXInput.Add(PBX3); LampYOutput.Add(PBY3);
            LampXInput.Add(PBX4); LampYOutput.Add(PBY4);
            LampXInput.Add(PBX5); LampYOutput.Add(PBY5);
            LampXInput.Add(PBX6); LampYOutput.Add(PBY6);
            LampXInput.Add(PBX7); LampYOutput.Add(PBY7);
        }
コード例 #24
0
        public override void DeviceConn(MelsecBinaryConfig config)
        {
            MelsecMcNet melsecMc = new MelsecMcNet();

            melsecMc.IpAddress      = config.IP;
            melsecMc.Port           = config.Port;
            melsecMc.ConnectTimeOut = config.ConnTimeOut;
            NetworkDevice           = melsecMc;
            OperateResult connect = melsecMc.ConnectServerAsync().Result;

            if (!connect.IsSuccess)
            {
                throw new Exception("Connect Failed");
            }
        }
コード例 #25
0
        public void ByteTransformExample( )
        {
            MelsecMcNet client = new MelsecMcNet( );

            #region ByteTransform

            // 假设buffer是client从设备读取的数据内容
            byte[] buffer = new byte[8];
            // 转化为4个short
            short[] short_value = client.ByteTransform.TransInt16(buffer, 0, 4);
            // 转化为2个float
            float[] float_value = client.ByteTransform.TransSingle(buffer, 0, 2);
            // 其他的类型转换是类似的

            #endregion
        }
コード例 #26
0
        public void SetPersistentConnectionExample( )
        {
            MelsecMcNet client = new MelsecMcNet( );

            #region SetPersistentConnectionExample

            client.SetPersistentConnection( );        // 设置长连接,但是不立即连接,等到第一次读写的时候再启动连接。
            System.Threading.Thread.Sleep(10000);     // 休眠10秒



            // 调用write时才是真正的启动连接,后续的读写操作重复利用该连接,此处的地址示例是modbus的地址,对于读取也是一样的
            OperateResult write = client.Write("100", 123);

            #endregion
        }
コード例 #27
0
        private void Connect()
        {
            // specify plc ip address and port
            melsec_net = new MelsecMcNet(txtIP.Text, Decimal.ToInt32(nudPort.Value));
            OperateResult connect = melsec_net.ConnectServer();

            if (connect.IsSuccess)
            {
                // success
                lblStatus.Text = "Connected";
            }
            else
            {
                // failed
                lblStatus.Text = "DisConnected";
            }
        }
コード例 #28
0
ファイル: CcsmDeviceApi.cs プロジェクト: pdzzet/LdScada
        public CcsmDeviceApi(string serviceName, string ipAddress, int port)
        {
            _serviceName = serviceName;
            _ipAddress   = ipAddress;
            _port        = port;

            _deviceApi = new MelsecMcNet(_ipAddress, _port);
            if (_deviceApi != null)
            {
                Logger.Main.Info($"[{_serviceName}]初始化设备成功: {_ipAddress}:{_port}");
                // ConnectStatus = true;
            }
            else
            {
                Logger.Main.Info($"[{_serviceName}]初始化设备失败: {_ipAddress}:{_port}");
            }
        }
コード例 #29
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
        }
コード例 #30
0
        public override bool LoadFromConfig(XmlNode node)
        {
            XmlElement level1_item = (XmlElement)node;

            string IP   = level1_item.GetAttribute("IP");
            string Port = level1_item.GetAttribute("Port");

            PLC = new MelsecMcNet();
            try
            {
                PLC.IpAddress      = IP;
                PLC.Port           = Convert.ToInt32(Port);
                PLC.ConnectTimeOut = 2000;
            }
            catch { }
            return(base.LoadFromConfig(node));
        }