在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#网络编程 → 工业现场总线-ProfiNet调试助手

工业现场总线-ProfiNet调试助手

C#网络编程

下载此实例
  • 开发语言:C#
  • 实例大小:0.21M
  • 下载次数:105
  • 浏览次数:1018
  • 发布时间:2021-06-23
  • 实例类别:C#网络编程
  • 发 布 人:dream110412
  • 文件格式:.rar
  • 所需积分:20

实例介绍

【实例简介】

上位机软件与PLC通过ProfiNet工业现场总线通讯案例,包括通讯连接模块,系统参数设置模块,不同存储区的读写模块,安全机制模块,界面定制化模块

【实例截图】

from clipboard

【核心代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using S7.Net;


namespace PrjProfiNetDebug
{
    public partial class frmMain : Form
    {
        S7.Net.Plc PLCType;
        int iPLCType;
        short iPLCRack;
        short iPLCSlot;
        string strPLCIPAddress;
        bool bLinkStatus;

        string strDateTime;
        string strPLCType;
        string strLinkStatus;

        int iDBNumber = 1;          //数据块的编号
        int iAddressStart = 0;      //数据读取的起始地址
        int iDataCount = 0;         //数据读取的数量
        int iVarType = -1;          //数据类型        
        string[] strAddress = null; //地址显示数组

        
        int iBitSelected;           //位号
        string strCommand = "";     //指令字符串
        string strDBNumber = "";    //DB号字符串
        string strAStart = "";      //起始地址字符串
        string strBit = "";         //位号字符串
        
        bool bSReadValue = true;    //位单个读
        byte bytSReadValue;         //字节单个读
        ushort wSReadValue;         //字单个读
        uint dwSReadValue;          //双子单个读
        short intSReadValue;        //整型单个读
        int diSReadValue;           //双整型单个读
        double realSReadValue;      //实数单个读

        bool bSWriteValue = true;   //位单个写
        byte bytSWriteValue;        //字节单个写
        ushort wSWriteValue;        //字单个写
        uint dwSWriteValue;         //双子单个写
        short intSWriteValue;       //整型单个写
        int diSWriteValue;          //双整型单个写
        double realSWriteValue;     //实数单个写

        object[] objAReadValue = null;    //对象数组多个读
        object[] objBitAReadValue = null; //对象数组位多个读
        bool[] bAReadValue = null;        //布尔数组位多个读
        byte[] bTBReadValue = null;       //字节数组位多个读_位转字节
        byte[] bytAReadValue = null;      //字节数组位多个读
        ushort[] wAReadValue = null;      //字数组位多个读
        uint[] dwAReadValue = null;       //双字d数组位多个读
        short[] intAReadValue = null;     //整型数组位多个读
        int[] diAReadValue = null;        //双整型数组位多个读
        double[] rAReadValue = null;      //实数数组位多个读   

        object[] objAWriteValue = null;    //对象数组多个写
        object[] objBitAWriteValue = null; //对象数组位多个写
        bool[] bAWriteValue = null;        //布尔数组位多个写
        byte[] bTBWriteValue = null;       //字节数组位多个写_位转字节
        byte[] bytAWriteValue = null;      //字节数组位多个写
        ushort[] wAWriteValue = null;      //字数组位多个写
        uint[] dwAWriteValue = null;       //双字d数组位多个写
        short[] intAWriteValue = null;     //整型数组位多个写
        int[] diAWriteValue = null;        //双整型数组位多个写
        double[] rAWriteValue = null;      //实数数组位多个写 


        DataGridViewColumn dgvColProfiNetAddress = new DataGridViewColumn();
        DataGridViewColumn dgvColProfiNetValue = new DataGridViewColumn();      


        
        public frmMain()
        {
            InitializeComponent();
        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            cboPLCType.SelectedIndex = 3;
            cboPLCIPAddress.SelectedIndex = 0;
            txtPLCRack.Text = "0";
            txtPLCSlot.Text = "1";
            timMain.Enabled = true;
            timMain.Interval = 1000;

            cboVarType.SelectedIndex = 2;
            cboBit.SelectedIndex = 0;
            lblBit.Visible = false;
            cboBit.Visible = false;

            dgvColProfiNetAddress.Name = "ProfiNetAddress";
            dgvColProfiNetAddress.HeaderText = "地址编号";
            dgvColProfiNetAddress.CellTemplate = new DataGridViewTextBoxCell();
            dgvColProfiNetValue.Name = "ProfiNetValue";
            dgvColProfiNetValue.HeaderText = "值";
            dgvColProfiNetValue.CellTemplate = new DataGridViewTextBoxCell();
            dgvShow.Columns.Add(dgvColProfiNetAddress);
            dgvShow.Columns.Add(dgvColProfiNetValue);
            dgvShow.Columns[0].ReadOnly = true;
            //dgvDisplay.ColumnHeadersVisible = false;
            dgvShow.RowHeadersVisible = false;
            dgvShow.BackgroundColor = Color.WhiteSmoke;
            //dgvDisplay.Columns[1].ToolTipText = "该列只能输入数字";
            dgvShow.AllowUserToAddRows = false;


        }

        private void btnConnect_Click(object sender, EventArgs e)
        {
            iPLCType = cboPLCType.SelectedIndex;
            strPLCIPAddress = cboPLCIPAddress.Text.ToString();
            iPLCRack = Convert.ToInt16(txtPLCRack.Text);
            iPLCSlot = Convert.ToInt16(txtPLCSlot.Text);

            switch (iPLCType)
            {
                case 0:
                    {
                        PLCType = new S7.Net.Plc(CpuType.S7200,strPLCIPAddress ,iPLCRack ,iPLCSlot);                        
                        break;                    
                    }
                case 1:
                    {
                        PLCType = new S7.Net.Plc(CpuType.S7300, strPLCIPAddress, iPLCRack, iPLCSlot);
                        break;
                    }
                case 2:
                    {
                        PLCType = new S7.Net.Plc(CpuType.S7400, strPLCIPAddress, iPLCRack, iPLCSlot);
                        break;
                    }
                case 3:
                    {
                        PLCType = new S7.Net.Plc(CpuType.S71200, strPLCIPAddress, iPLCRack, iPLCSlot);
                        break;
                    }
                case 4:
                    {
                        PLCType = new S7.Net.Plc(CpuType.S71500, strPLCIPAddress, iPLCRack, iPLCSlot);
                        break;
                    }           
            
            }
            try
            {
                if (!bLinkStatus)
                {
                    PLCType.Open();
                    if (PLCType.IsConnected)
                    {
                        bLinkStatus = true;
                        btnConnect.Enabled = false;
                        btnDisconnect.Enabled = true;
                        //MessageBox.Show("通讯连接正常", "ProfiNet现场总线");

                    }
                    else
                    {
                        MessageBox.Show("通讯连接失败", "ProfiNet现场总线");
                    
                    }
                }
                else
                {
                    
                    //MessageBox.Show("通讯已连接", "ProfiNet现场总线");

                }
            }
            catch
            {
                MessageBox.Show(e.ToString(), "ProfiNet-现场总线", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);            
            
            }

        }

        private void btnDisconnect_Click(object sender, EventArgs e)
        {
            try
            {

                if (bLinkStatus)
                {
                    PLCType.Close();
                    bLinkStatus = false;
                    btnConnect.Enabled = true;
                    btnDisconnect.Enabled = false;
                    //MessageBox.Show("通讯连接关闭", "ProfiNet现场总线");

                }
                else
                {
                    //MessageBox.Show("通讯连接已断开", "ProfiNet现场总线");
                }
            }
            catch
            {
                MessageBox.Show(e.ToString(), "ProfiNet-现场总线", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);            
                            
            }
        }

        private void txtPLCRack_TextChanged(object sender, EventArgs e)
        {
            int iCheckPLCRack;
            if (int.TryParse(txtPLCRack.Text, out iCheckPLCRack) == false)
            {
                txtPLCRack.Text = "0";
                MessageBox.Show("PLC机架号-必须输入数字", "ProfiNet-现场总线", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);            
            }
        }

        private void txtPLCSlot_TextChanged(object sender, EventArgs e)
        {
            int iCheckPLCSlot;
            if (int.TryParse(txtPLCSlot.Text, out iCheckPLCSlot) == false)
            {
                txtPLCSlot.Text = "1";
                MessageBox.Show("PLC插槽号-必须输入数字", "ProfiNet-现场总线", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);            
            }
        }

        private void timMain_Tick(object sender, EventArgs e)
        {
            strDateTime = DateTime .Now.ToString();
            tssDateTime.Text = "日期:" strDateTime;            
            if (bLinkStatus)
            {
                strLinkStatus = "网络状态:通讯正常";
                tssLinkStatus.Text = strLinkStatus;
            }
            else
            {
                strLinkStatus="网络状态:通讯中断";
                tssLinkStatus.Text = strLinkStatus;            
            
            }
            strPLCType = cboPLCType.Text.ToString();
            tssPLCType.Text = "PLC型号:" strPLCType;

            iVarType = cboVarType.SelectedIndex;
            if (iVarType == 0)
            {
                lblBit.Visible = true;
                cboBit.Visible = true;
            }
            else
            {
                lblBit.Visible = false;
                cboBit.Visible = false;            
            }
        }

        private void btnSingleRead_Click(object sender, EventArgs e)
        {
            if (bLinkStatus == false)
            {
                MessageBox.Show("网络状态-连接断开!", "网络侦测");
                return;
            }
            strDBNumber = txtDBNumber.Text.Trim().ToString();
            strAStart = txtAddressStart.Text.Trim().ToString();
            iVarType = cboVarType.SelectedIndex;
            switch (iVarType)
            {
                case 0:
                    {
                        iBitSelected = cboBit.SelectedIndex;
                        strBit = iBitSelected.ToString();
                        strCommand = "DB" strDBNumber "." "DBX" strAStart "." strBit;
                        bSReadValue = (bool)PLCType.Read(strCommand);
                        txtSingleReadValue.Text = bSReadValue.ToString();
                        break;                       
               
                    }
                case 1:
                    {
                        strCommand = "DB" strDBNumber "." "DBB" strAStart;
                        bytSReadValue = (byte)PLCType.Read(strCommand);
                        txtSingleReadValue.Text = bytSReadValue.ToString();
                        break;                      
                    
                    }
                case 2:
                    {
                        strCommand = "DB" strDBNumber "." "DBW" strAStart;
                        wSReadValue = (ushort)PLCType.Read(strCommand);
                        txtSingleReadValue.Text = wSReadValue.ToString();
                        break;
                    }
                case 3:
                    {
                        strCommand = "DB" strDBNumber "." "DBD" strAStart;
                        dwSReadValue = (uint)PLCType.Read(strCommand);
                        txtSingleReadValue.Text = dwSReadValue.ToString();
                        break;
                    }
                case 4:
                    {
                        strCommand = "DB" strDBNumber "." "DBW" strAStart;
                        intSReadValue = ((ushort)PLCType.Read(strCommand)).ConvertToShort();
                        txtSingleReadValue.Text = intSReadValue.ToString();
                        break;
                    }
                case 5:
                    {
                        strCommand = "DB" strDBNumber "." "DBD" strAStart;
                        diSReadValue = ((uint)PLCType.Read(strCommand)).ConvertToInt();
                        txtSingleReadValue.Text = diSReadValue.ToString();
                        break;
                    }
                case 6:
                    {
                        strCommand = "DB" strDBNumber "." "DBD" strAStart;
                        realSReadValue = ((uint)PLCType.Read(strCommand)).ConvertToDouble();
                        txtSingleReadValue.Text = realSReadValue.ToString();
                        break;
                    }
            }
        }

        private void btnSingleWrite_Click(object sender, EventArgs e)
        {
            if (bLinkStatus == false)
            {
                MessageBox.Show("网络状态-连接断开!", "网络侦测");
                return;
            }
            strDBNumber = txtDBNumber.Text.Trim().ToString();
            strAStart = txtAddressStart.Text.Trim().ToString();
            iVarType = cboVarType.SelectedIndex;
            switch (iVarType)
            {

                case 0:
                    {
                        iBitSelected = cboBit.SelectedIndex;
                        strBit = iBitSelected.ToString();
                        strCommand = "DB" strDBNumber "." "DBX" strAStart "." strBit;
                        if ((txtSingleWriteValue.Text).ToString().ToLower() != "true" && (txtSingleWriteValue.Text).ToString().ToLower() != "false")
                        {
                            MessageBox.Show("写入值要为false或true", "格式不符");
                            return;
                        }
                        bSWriteValue = Convert.ToBoolean(txtSingleWriteValue.Text);
                        PLCType.Write(strCommand, bSWriteValue);
                        break;
                    }
                case 1:
                    {
                        strCommand = "DB" strDBNumber "." "DBB" strAStart;
                        bytSWriteValue = Convert.ToByte(txtSingleWriteValue.Text);
                        PLCType.Write(strCommand, bytSWriteValue);
                        break;
                    }
                case 2:
                    {
                        strCommand = "DB" strDBNumber "." "DBW" strAStart;
                        wSWriteValue = Convert.ToUInt16(txtSingleWriteValue.Text);
                        PLCType.Write(strCommand, wSWriteValue);
                        break;
                    }
                case 3:
                    {
                        strCommand = "DB" strDBNumber "." "DBD" strAStart;
                        dwSWriteValue = Convert.ToUInt32(txtSingleWriteValue.Text);
                        PLCType.Write(strCommand, dwSWriteValue);
                        break;
                    }
                case 4:
                    {
                        strCommand = "DB" strDBNumber "." "DBW" strAStart;
                        intSWriteValue = Convert.ToInt16(txtSingleWriteValue.Text);
                        PLCType.Write(strCommand, intSWriteValue);
                        break;
                    }
                case 5:
                    {
                        strCommand = "DB" strDBNumber "." "DBD" strAStart;
                        diSWriteValue = Convert.ToInt32(txtSingleWriteValue.Text);
                        PLCType.Write(strCommand, diSWriteValue);
                        break;
                    }
                case 6:
                    {
                        strCommand = "DB" strDBNumber "." "DBD" strAStart;
                        realSWriteValue = Convert.ToDouble(txtSingleWriteValue.Text).ConvertToUInt();
                        PLCType.Write(strCommand, realSWriteValue);
                        break;
                    }
            }     

        }

        private void btnMulRead_Click(object sender, EventArgs e)
        {
            string strAddressFlag = "";
            int intAddressInitial = 0;
            int iIncreaseStep = 0;
            int iRowCount = 0;
            int i, j, t;

            if (bLinkStatus == false)
            {
                MessageBox.Show("网络状态-连接断开!", "网络侦测");
                return;
            }

            iDBNumber = Convert.ToInt16(txtDBNumber.Text.ToString());
            iAddressStart = Convert.ToInt16(txtAddressStart.Text.ToString());
            iDataCount = Convert.ToInt16(txtDataCount.Text.ToString());
            iVarType = cboVarType.SelectedIndex;

            //清空数据网格视图里的数据
            iRowCount = dgvShow.Rows.Count;
            if (iRowCount != 0)
            {
                for (j = 0; j < iRowCount; j )
                {
                    dgvShow.Rows.RemoveAt(0);
                }
            }

            //数据安全防护
            if (iDBNumber < 1)
            {
                MessageBox.Show("ProfiNet-DB的号不能小于1");
                txtDBNumber.Text = "1";
            }
            if (iAddressStart < 0)
            {
                MessageBox.Show("ProfiNet-起始地址不能为负数");
                txtAddressStart.Text = "0";
            }
            if (iDataCount < 2)
            {
                MessageBox.Show("ProfiNet-数据长度不能小于2");
                txtDataCount.Text = "10";
            }

            //数据读操作
            switch (iVarType)
            {
                case 0:
                    {
                        break;
                    }
                case 1:
                    {
                        strAddressFlag = "DBByte";
                        iIncreaseStep = 1;
                        bytAReadValue = (byte[])PLCType.Read(DataType.DataBlock, iDBNumber, iAddressStart, VarType.Byte, iDataCount);
                        break;
                    }
                case 2:
                    {
                        strAddressFlag = "DBWord";
                        iIncreaseStep = 2;
                        wAReadValue = (ushort[])PLCType.Read(DataType.DataBlock, iDBNumber, iAddressStart, VarType.Word, iDataCount);
                        break;
                    }
                case 3:
                    {
                        strAddressFlag = "DBDWord";
                        iIncreaseStep = 4;
                        dwAReadValue = (uint[])PLCType.Read(DataType.DataBlock, iDBNumber, iAddressStart, VarType.DWord, iDataCount);
                        break;
                    }
                case 4:
                    {
                        strAddressFlag = "DBInt";
                        iIncreaseStep = 2;
                        intAReadValue = (short[])PLCType.Read(DataType.DataBlock, iDBNumber, iAddressStart, VarType.Int, iDataCount);
                        break;
                    }
                case 5:
                    {
                        strAddressFlag = "DBDInt";
                        iIncreaseStep = 4;
                        diAReadValue = (int[])PLCType.Read(DataType.DataBlock, iDBNumber, iAddressStart, VarType.DInt, iDataCount);
                        break;
                    }
                case 6:
                    {
                        strAddressFlag = "DBReal";
                        iIncreaseStep = 4;
                        rAReadValue = (double[])PLCType.Read(DataType.DataBlock, iDBNumber, iAddressStart, VarType.Real, iDataCount);
                        break;
                    }
            }

            //对象数据赋值
            strAddress = new string[iDataCount];
            objAReadValue = new object[iDataCount];            
            for (i = 0; i < iDataCount; i )
            {
                switch (iVarType)
                {
                      case 0:
                        {
                            break;
                        }
                      case 1:
                        {
                            objAReadValue[i] = bytAReadValue[i];
                            break;
                        }
                      case 2:
                        {
                            objAReadValue[i] = wAReadValue[i];
                            break;
                        }
                      case 3:
                        {
                            objAReadValue[i] = dwAReadValue[i];
                            break;
                        }
                      case 4:
                        {
                            objAReadValue[i] = intAReadValue[i];
                            break;
                        }
                      case 5:
                        {
                            objAReadValue[i] = diAReadValue[i];
                            break;
                        }
                      case 6:
                        {
                            objAReadValue[i] = rAReadValue[i];
                            break;
                        }   
                }
            }

            //数据显示在数据栅格视图里
            strAddress = new string[iDataCount];
            for (i = 0; i < iDataCount; i )
            {
                intAddressInitial = iAddressStart iIncreaseStep * i;
                strAddress[i] = strAddressFlag Convert.ToString(intAddressInitial);
                dgvShow.Rows.Add(strAddress[i], objAReadValue[i]);
            }           
              
        }

        private void btnMulWrite_Click(object sender, EventArgs e)
        {
            int i;
            int iRowCount;
            ushort uiWriteReturn;

            if (bLinkStatus == false)
            {
                MessageBox.Show("网络状态-连接断开!", "网络侦测");
                return;
            }

            iDBNumber = Convert.ToInt16(txtDBNumber.Text.ToString());
            iAddressStart = Convert.ToInt16(txtAddressStart.Text.ToString());
            iDataCount = Convert.ToInt16(txtDataCount.Text.ToString());
            iVarType = cboVarType.SelectedIndex;
            objAWriteValue = new object[iDataCount];
                       

            //数据安全防护
            if (iDBNumber < 1)
            {
                MessageBox.Show("ProfiNet-DB的号不能小于1");
                txtDBNumber.Text = "1";
            }
            if (iAddressStart < 0)
            {
                MessageBox.Show("ProfiNet-起始地址不能为负数");
                txtAddressStart.Text = "0";
            }
            if (iDataCount < 2)
            {
                MessageBox.Show("ProfiNet-数据长度不能小于2");
                txtDataCount.Text = "10";
            }
            switch (iVarType)
            {
                case 0:
                    {
                        break;
                    
                    }
                case 1:
                    {                    
                        bytAWriteValue = new byte[iDataCount];                            
                        for (i = 0; i < iDataCount; i )
                        {
                            objAWriteValue[i] = dgvShow["ProfiNetValue", i].Value;
                            bytAWriteValue[i] = Convert.ToByte(objAWriteValue[i]);
                        }
                        uiWriteReturn = (ushort)PLCType.Write(DataType.DataBlock, iDBNumber, iAddressStart, bytAWriteValue);
                        break;
                    }
                case 2:
                    {
                        wAWriteValue = new ushort[iDataCount];
                        for (i = 0; i < iDataCount; i )
                        {
                            objAWriteValue[i] = dgvShow["ProfiNetValue", i].Value;
                            wAWriteValue[i] = Convert.ToUInt16(objAWriteValue[i]);
                        }
                        uiWriteReturn = (ushort)PLCType.Write(DataType.DataBlock, iDBNumber, iAddressStart, wAWriteValue);
                        break;
                    }
                case 3:
                    {
                        dwAWriteValue = new uint[iDataCount];
                        for (i = 0; i < iDataCount; i )
                        {
                            objAWriteValue[i] = dgvShow["ProfiNetValue", i].Value;
                            dwAWriteValue[i] = Convert.ToUInt32(objAWriteValue[i]);
                        }
                        uiWriteReturn = (ushort)PLCType.Write(DataType.DataBlock, iDBNumber, iAddressStart, dwAWriteValue);
                        break;
                    }
                case 4:
                    {
                        intAWriteValue = new short[iDataCount];
                        for (i = 0; i < iDataCount; i )
                        {
                            objAWriteValue[i] = dgvShow["ProfiNetValue", i].Value;
                            intAWriteValue[i] = Convert.ToInt16(objAWriteValue[i]);
                        }
                        uiWriteReturn = (ushort)PLCType.Write(DataType.DataBlock, iDBNumber, iAddressStart, intAWriteValue);
                        break;
                    }
                case 5:
                    {
                        diAWriteValue = new int[iDataCount];
                        for (i = 0; i < iDataCount; i )
                        {
                            objAWriteValue[i] = dgvShow["ProfiNetValue", i].Value;
                            diAWriteValue[i] = Convert.ToInt32(objAWriteValue[i]);
                        }
                        uiWriteReturn = (ushort)PLCType.Write(DataType.DataBlock, iDBNumber, iAddressStart, diAWriteValue);
                        break;
                    }
                case 6:
                    {
                        rAWriteValue = new double[iDataCount];
                        for (i = 0; i < iDataCount; i )
                        {
                            objAWriteValue[i] = dgvShow["ProfiNetValue", i].Value;
                            rAWriteValue[i] = Convert.ToDouble(objAWriteValue[i]);
                        }
                        uiWriteReturn = (ushort)PLCType.Write(DataType.DataBlock, iDBNumber, iAddressStart, rAWriteValue);
                        break;
                    }     
            }
        }
    }
}



实例下载地址

工业现场总线-ProfiNet调试助手

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 dream110412 发表于: 2021-06-24 13:33 07
实际的工程案例,是工业控制与现场总线的前沿的授课实训载体,包含工业网络通讯技术,面向对象软件设计技术,数据结构,典型的算法等。

支持(0) 盖楼(回复)

第 2 楼 dream110412 发表于: 2021-06-30 15:29 21
共同学习,一起进步!有疑问请联系 e_dream@126.com

支持(0) 盖楼(回复)

第 3 楼 一觉游仙 发表于: 2021-12-08 11:31 43
大佬,为啥我用你的软件写输入写入不到PLC,也读取不到PLC数据;PLC的DB块有什么特殊设置吗?烦请大佬回复一下,谢谢!

支持(0) 盖楼(回复)

第 4 楼 ddhero 发表于: 2022-11-15 09:02 11
非常感谢大佬的分享

支持(0) 盖楼(回复)

第 5 楼 ddhero 发表于: 2022-11-15 09:02 13
非常感谢大佬的分享

支持(0) 盖楼(回复)

第 6 楼 dream110412 发表于: 2023-08-28 09:14 44
大佬,为啥我用你的软件写输入写入不到PLC,也读取不到PLC数据;PLC的DB块有什么特殊设置吗?烦请大佬回复一下,谢谢!

一觉游仙 2021-12-08 11:31 43

与PLC的型号要匹配

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有6条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警