当前位置:   article > 正文

C# MODBUS RTU通讯源码_modbus rtu 源码

modbus rtu 源码

 

Modbus RTU 读写器介绍:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.41.55aa5b43wXJPTM&id=41938964666https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.41.55aa5b43wXJPTM&id=41938964666

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Runtime.InteropServices;  //调用动态库一定要加入这个引用
  11. namespace WindowsFormsApplication1
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         int SendCode;  //发送指令代码
  16.         bool connwaitnow = false;
  17.         string dispstr = "";
  18.         
  19.         [DllImport("crcbyhoho.dll", EntryPoint = "CRC_16", CallingConvention = CallingConvention.StdCall)]
  20.         static extern long CRC_16(byte[] DataBuf, byte DataLen); MODBUS CRC计算
  21.         public Form1()
  22.         {
  23.             InitializeComponent();
  24.         }
  25.         private static byte fangma(byte indata)   //求反码函数
  26.         {
  27.            string binstr=Convert.ToString(indata, 2).PadLeft(8,'0') ;  //前面补0共8位
  28.            byte retudata= 0x00;
  29.            for (int i = 0; i<=7 ;i++ )
  30.            {
  31.                if (binstr.Substring(7 - i, 1) == Convert .ToString ('0'))               
  32.                {
  33.                    retudata =Convert .ToByte ( retudata + Math.Pow (2,i));
  34.                }
  35.            }
  36.            return retudata;
  37.         }
  38.         private void Form1_Load(object sender, EventArgs e)
  39.         {
  40.             short i;
  41.             if (axMSComm1.PortOpen)
  42.             {
  43.                 axMSComm1.PortOpen = false;//关闭串口    
  44.             }
  45.             //搜索一遍串口
  46.             comboBox1.Items.Clear();
  47.             for (i = 1; i <= 20; i++)
  48.             {
  49.                 try
  50.                 {
  51.                     axMSComm1.CommPort = i;
  52.                     axMSComm1.PortOpen = true;
  53.                     if (axMSComm1.PortOpen)
  54.                     {
  55.                         axMSComm1.PortOpen = false;
  56.                         comboBox1.Items.Add("COM" + Convert.ToString(i));
  57.                     }
  58.                 }
  59.                 catch (Exception ex)
  60.                 {
  61.                 }
  62.             }
  63.             if (comboBox1.Items.Count > 0)
  64.             {//有有效端口
  65.                 comboBox1.SelectedIndex = comboBox1.Items.Count-1;
  66.                 comboBox2.SelectedIndex = 2;
  67.                 comboBox3.SelectedIndex = 0;
  68.             }
  69.             comboBox4.SelectedIndex = 0;
  70.             comboBox5.SelectedIndex = 2;
  71.             comboBox6.SelectedIndex = 0;
  72.             comboBox7.SelectedIndex = 0;
  73.             comboBox8.SelectedIndex = 0;
  74.             comboBox9.SelectedIndex = 0;
  75.             comboBox10.SelectedIndex = 0;
  76.             comboBox11.SelectedIndex = 2;
  77.             comboBox12.SelectedIndex = 0;
  78.             comboBox13.SelectedIndex = 1;
  79.             comboBox14.SelectedIndex = 0;
  80.             comboBox15.SelectedIndex = 7;
  81.         }
  82.         private void button1_Click(object sender, EventArgs e)
  83.         {
  84.             string comstr;
  85.             if (button1.Text == "打开串口")
  86.             {
  87.                 if (comboBox1.Items.Count < 1)
  88.                 {//无有效端口
  89.                     MessageBox.Show("没用任何串口可供使用!","提示");
  90.                     return;
  91.                 }
  92.                 if (axMSComm1.PortOpen == false)
  93.                 {
  94.                     comstr = "";
  95.                     switch (comboBox2.SelectedIndex)
  96.                     {
  97.                         case 0:
  98.                             comstr = "4800,";
  99.                             break;
  100.                         case 1:
  101.                             comstr = "9600,";
  102.                             break;
  103.                         case 2:
  104.                             comstr = "19200,";
  105.                             break;
  106.                         default :
  107.                             comstr = "38400,";
  108.                             break;
  109.                     }
  110.                     switch (comboBox3.SelectedIndex)
  111.                     {
  112.                         case 0:
  113.                             comstr = comstr+ "N,8,1";
  114.                             break;
  115.                         case 1:
  116.                             comstr = comstr + "O,8,1";
  117.                             break;
  118.                         case 2:
  119.                             comstr = comstr + "E,8,1";
  120.                             break;
  121.                         case 3:
  122.                             comstr = comstr + "M,8,1";
  123.                             break;
  124.                         default:
  125.                             comstr = comstr + "S,8,1";
  126.                             break;
  127.                     }
  128.                     
  129.                     axMSComm1.InBufferSize = 1024;
  130.                     axMSComm1.OutBufferSize = 1024;
  131.                     axMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeBinary;//两进制模式
  132.                     axMSComm1.InputLen = 0;
  133.                     axMSComm1.InBufferCount = 0;//清除接收缓冲
  134.                     axMSComm1.OutBufferCount = 0;//清除发送缓冲
  135.                     axMSComm1.SThreshold = 1; // '0:一旦发送数据就触发OnComm()事件来检测是否返回数据
  136.                     axMSComm1.RThreshold = 1; //接收到1个字节数据就立即触发OnComm()事件
  137.                     axMSComm1.Settings = comstr;                    
  138.                     axMSComm1.CommPort = Convert.ToInt16(comboBox1.Text.Substring(3, comboBox1.Text.Length - 3));//设置串口号,要根据自己的电脑设为相应的
  139.                     try
  140.                     {
  141.                         timer1.Enabled = false;
  142.                         //checkBox2 .Checked =false ;
  143.                         axMSComm1.PortOpen = true;//打开串口
  144.                         button1.Text = "关闭串口";
  145.                         comboBox1.Enabled = false
  146.                     }
  147.                     catch (Exception ex)
  148.                     {
  149.                         //异常处理:打开端口失败
  150.                         MessageBox.Show("打开串口失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  151.                     }
  152.                 }
  153.             }
  154.             else
  155.             {
  156.                 if (connwaitnow == true)
  157.                 {
  158.                     MessageBox.Show("正在轮询站号,请先停止轮询再关闭串口!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  159.                     return;
  160.                 }
  161.                 axMSComm1.PortOpen = false;//关闭串口
  162.                 button1.Text = "打开串口";
  163.                 comboBox1.Enabled = true;
  164.             }
  165.         }
  166.         private void axMSComm1_OnComm(object sender, EventArgs e)
  167.         {
  168.             short i;
  169.             uint cardhao;
  170.             string cardstr;
  171.             string keystr;
  172.             string BufStr;
  173.             byte[] SendBuf=new byte[8];
  174.             byte[] ReceiveBuff = new byte[1024]; //串口接收数据缓冲            
  175.             short inbuffercountbak;                    //接收数据长度   
  176.             long timerbak;                       //用于计算数据包是否已经接收完毕
  177.             long timerbak1;
  178.             if (axMSComm1.CommEvent == 2)
  179.             {//收到数据 //先不再产生 OnComm 事件
  180.                 //axMSComm1.RThreshold = 0;     //设置/返回要接收的字符数  
  181.                 timerbak = DateTime.Now.Ticks;//单位为100纳秒,除10000后得出毫秒
  182.                 timerbak1 = timerbak;
  183.                 inbuffercountbak = 0;
  184.                 while ((timerbak1 - timerbak) < (delaytime1.Value  * 10000))//等待通讯超时长后再无数据表示这是一个数据包
  185.                 {
  186.                     if (inbuffercountbak != axMSComm1.InBufferCount)
  187.                     {
  188.                         inbuffercountbak = axMSComm1.InBufferCount;
  189.                         timerbak = DateTime.Now.Ticks;           //重新等待
  190.                     }
  191.                     timerbak1 = DateTime.Now.Ticks;
  192.                 }
  193.                 inbuffercountbak = axMSComm1.InBufferCount;
  194.                 ReceiveBuff = (byte[])(axMSComm1.Input);//接收到的内容放在接收缓冲
  195.                 axMSComm1.InBufferCount = 0;
  196.                                
  197.                 string ReceiveStr = "串口接收数据:";   //将接收到的数据显示在列表框
  198.                 for (i = 0; i <= inbuffercountbak-1; i++)
  199.                 {
  200.                     ReceiveStr = ReceiveStr + ReceiveBuff[i].ToString("X2")+" ";
  201.                 }
  202.                 listBox1.Items.Add(ReceiveStr);
  203.                 listBox1.SelectedIndex = listBox1.Items.Count - 1
  204.                 switch (SendCode)
  205.                 {
  206.                     case 1:
  207.                         if (inbuffercountbak < 4) { return; }
  208.                         else {textBox1 .Text =Convert.ToString (ReceiveBuff[4]); }
  209.                         break ;
  210.                     case 2:
  211.                         if (inbuffercountbak > 4
  212.                         {
  213.                             DialogResult result = MessageBox.Show("在线设备的站号已修改,是否要再次读出设备站号?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
  214.                             if (result ==DialogResult.OK )
  215.                             {
  216.                                 button2_Click_1(button2, EventArgs.Empty);
  217.                             }                            
  218.                         }
  219.                         break;
  220.                     case 9:
  221.                         if (inbuffercountbak > 4)
  222.                         {
  223.                             DialogResult result = MessageBox.Show("读卡器已执行读卡指令,是否要读出保存在寄存器内的读卡数据?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
  224.                             if (result == DialogResult.OK)
  225.                             {
  226.                                 button11_Click(button11, EventArgs.Empty);
  227.                             }        
  228.                         }
  229.                         break;
  230.                     case 10:
  231.                         if (inbuffercountbak > 4)
  232.                         {
  233.                             BufStr = "";
  234.                             for (i = 3; i <  ReceiveBuff[2]+3;i++ )
  235.                             {
  236.                                 BufStr = BufStr + ReceiveBuff[i].ToString("X2") + " ";
  237.                             }
  238.                             WinfBox.Text = BufStr;
  239.                             if (BEGEE.Value==7 && EENum.Value >2)
  240.                             {
  241.                                 if (ReceiveBuff[4] > 0)
  242.                                 {
  243.                                     cardhao = (uint)(ReceiveBuff[5] * 256 * 256 * 256 + ReceiveBuff[6] * 256 * 256 + ReceiveBuff[7] * 256 + ReceiveBuff[8]);
  244.                                     BufStr = "状态位:" + ReceiveBuff[4].ToString("X2") + " 物理卡号:" + ReceiveBuff[5].ToString("X2") + ReceiveBuff[6].ToString("X2") + ReceiveBuff[7].ToString("X2") + ReceiveBuff[8].ToString("X2");
  245.                                     BufStr = BufStr + " 换成十位卡号:" + Convert.ToString(cardhao).PadLeft(10, '0') + " 扇区内数据:";
  246.                                     string aaa = Convert.ToString(ReceiveBuff[4], 2).PadLeft(8,'0');
  247.                                     if (aaa.Substring(aaa.Length-2,1 ) == "1")
  248.                                     {
  249.                                         for(i=9;i<=inbuffercountbak-3;i++)
  250.                                         {
  251.                                             BufStr = BufStr + ReceiveBuff[i].ToString("X2");
  252.                                         }
  253.                                         textBox3.Text = BufStr;
  254.                                     }
  255.                                 }
  256.                             }                            
  257.                         }
  258.                         break;
  259.                     case 12:
  260.                         if (inbuffercountbak > 4)
  261.                         {
  262.                             SendBuf[0] = Convert.ToByte(textBox1.Text);    //站点号
  263.                             SendBuf[1] = 0x06//功能码
  264.                             SendBuf[2] = 0x00;
  265.                             SendBuf[3] = 0x07;
  266.                             SendBuf[4] = 0x00;
  267.                             SendBuf[5] = 0x14;
  268.                             long CRC16 = CRC_16(SendBuf, 6);  //CRC 
  269.                             SendBuf[6] = (byte)(CRC16 % 256);
  270.                             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  271.                             SendCode = 13;
  272.                             axMSComm1.Output = SendBuf;          //向串口发送数据
  273.                             axMSComm1.RThreshold = 1;
  274.                             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  275.                             for ( i = 0; i <= 7; i++)
  276.                             {
  277.                                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  278.                             }
  279.                             listBox1.Items.Add(SendStr);
  280.                             listBox1.SelectedIndex = listBox1.Items.Count - 1
  281.                         }                        
  282.                         break;
  283.                     case 13:
  284.                         if (inbuffercountbak > 4)
  285.                         {
  286.                             SendBuf[0] = Convert.ToByte(textBox1.Text);  //站点号
  287.                             SendBuf[1] = 0x03;
  288.                             SendBuf[2] = 0x00;
  289.                             SendBuf[3] = 0x07;
  290.                             SendBuf[4] = 0x00;
  291.                             SendBuf[5] = 0x01;
  292.                             long CRC16 = CRC_16(SendBuf, 6);
  293.                             SendBuf[6] = (byte)(CRC16 % 256);
  294.                             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  295.                             SendCode = 14;
  296.                             axMSComm1.Output = SendBuf;          //向串口发送数据
  297.                             axMSComm1.RThreshold = 1;
  298.                             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  299.                             for (i = 0; i <= 7; i++)
  300.                             {
  301.                                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  302.                             }
  303.                             listBox1.Items.Add(SendStr);
  304.                             listBox1.SelectedIndex = listBox1.Items.Count - 1;
  305.                         }
  306.                         break;
  307.                     case 14:
  308.                         if (inbuffercountbak > 4)
  309.                         {
  310.                             string aaa = Convert.ToString(ReceiveBuff[4], 2);
  311.                             if (aaa.Substring (aaa.Length -1)=="1")
  312.                             {
  313.                                 button5_Click_1(button5, EventArgs.Empty);
  314.                                 MessageBox.Show("写卡操作成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information );
  315.                             }
  316.                         }
  317.                         break;
  318.                     case 4:
  319.                         if (inbuffercountbak < 8) { return; }
  320.                         if (ReceiveBuff[0] == 0x69 && (ReceiveBuff[1] == 0xD2 || ReceiveBuff[1] == 0x3C) && ((byte)(ReceiveBuff[2] ^ ReceiveBuff[3] ^ ReceiveBuff[4] ^ ReceiveBuff[5] ^ ReceiveBuff[6]) == ReceiveBuff[7]))
  321.                         {
  322.                             cardhao = (uint)(ReceiveBuff[3] * 256 * 256 * 256 + ReceiveBuff[4] * 256 * 256 + ReceiveBuff[5] * 256 + ReceiveBuff[6]);
  323.                             cardstr=ReceiveBuff[3].ToString("X2")+"-"+ReceiveBuff[4].ToString("X2")+"-"+ReceiveBuff[5].ToString("X2")+"-"+ReceiveBuff[6].ToString("X2");
  324.                             textBox3.Text = "物理卡号:" + cardstr + "  换算成十位卡号:" + Convert.ToString(cardhao).PadLeft(10,'0');
  325.                         }
  326.                         break;
  327.                     case 5:
  328.                         if (inbuffercountbak < 2) { return; }
  329.                         if (ReceiveBuff[0] == 0x69  && inbuffercountbak > 2)
  330.                         {
  331.                             keystr = "";
  332.                             for(i=1;i<inbuffercountbak-1;i++)
  333.                             {
  334.                                 keystr = keystr + (char)(ReceiveBuff[i]); 
  335.                             }
  336.                             textBox3.Text = "设备按键:" + keystr;
  337.                         }
  338.                         //else if (ReceiveBuff[0] == 0x69 && ReceiveBuff[2] == 0x0D)
  339.                         //{
  340.                         //    textBox3.Text = "设备单键:" +(char)(ReceiveBuff[1]);
  341.                         //}
  342.                         break;
  343.                     case 6:
  344.                         if (inbuffercountbak < 8)
  345.                         {
  346.                             if (connwaitnow == true) { timer1.Enabled = true; }
  347.                             return;
  348.                         }
  349.                         if( ReceiveBuff[0] == 0x69 && ReceiveBuff[1] == 0x69)
  350.                         {
  351.                             if (ReceiveBuff[2] == 0x01 && ((byte)(ReceiveBuff[3] ^ ReceiveBuff[4] ^ ReceiveBuff[5] ^ ReceiveBuff[6] ^ ReceiveBuff[7]) == ReceiveBuff[8])) //'只有卡号
  352.                             {
  353.                                 cardhao = (uint)(ReceiveBuff[4] * 256 * 256 * 256 + ReceiveBuff[5] * 256 * 256 + ReceiveBuff[6] * 256 + ReceiveBuff[7]);
  354.                                 cardstr = ReceiveBuff[4].ToString("X2") + "-" + ReceiveBuff[5].ToString("X2") + "-" + ReceiveBuff[6].ToString("X2") + "-" + ReceiveBuff[7].ToString("X2");
  355.                                // textBox4.Text = "物理卡号:" + cardstr + "  换算成十位卡号:" + Convert.ToString(cardhao).PadLeft(10, '0');
  356.                                 dispstr = "卡号:" + Convert.ToString(cardhao).PadLeft(10, '0');
  357.                             }
  358.                             else if (ReceiveBuff[2] == 0x02  && inbuffercountbak > 8) //有*+数字按键
  359.                             {
  360.                                 keystr = "";
  361.                                 for (i = 3; i < inbuffercountbak - 3; i++)
  362.                                 {
  363.                                     keystr = keystr + (char)(ReceiveBuff[i]);
  364.                                 }
  365.                                 //textBox4.Text = "设备按键:" + keystr;
  366.                                 dispstr = "按键:" + Convert.ToString(keystr).PadRight (10, ' ');
  367.                             }
  368.                             else if (ReceiveBuff[2] == 0x03 && ((byte)(ReceiveBuff[3] ^ ReceiveBuff[4] ^ ReceiveBuff[5] ^ ReceiveBuff[6] ^ ReceiveBuff[7]) == ReceiveBuff[8])) //卡号和*+数字按键
  369.                             {
  370.                                 cardhao = (uint)(ReceiveBuff[4] * 256 * 256 * 256 + ReceiveBuff[5] * 256 * 256 + ReceiveBuff[6] * 256 + ReceiveBuff[7]);
  371.                                 cardstr = ReceiveBuff[4].ToString("X2") + "-" + ReceiveBuff[5].ToString("X2") + "-" + ReceiveBuff[6].ToString("X2") + "-" + ReceiveBuff[7].ToString("X2");
  372.                                 keystr = "";
  373.                                 for (i = 9; i < inbuffercountbak - 3; i++)
  374.                                 {
  375.                                     keystr = keystr + (char)(ReceiveBuff[i]);
  376.                                 }
  377.                                 
  378.                                 //textBox4.Text = "物理卡号:" + cardstr + "  换算成十位卡号:" + Convert.ToString(cardhao).PadLeft(10, '0') + "    设备按键:" + keystr;
  379.                                 dispstr = "卡号:" + Convert.ToString(cardhao).PadLeft(10, '0') + "按键:" + Convert.ToString(keystr).PadRight(10, ' ');
  380.                             }
  381.                             else if((byte)(ReceiveBuff[5] ^ ReceiveBuff[6]) == ReceiveBuff[7])
  382.                             {
  383.                                 keystr = ""+(char)(ReceiveBuff[3]);
  384.                                // textBox4.Text = "设备单键:" + keystr;
  385.                                 dispstr = "单键:" + Convert.ToString(keystr).PadRight (10, ' ');
  386.                             }
  387.                             if (checkBox1.Checked == true)
  388.                             {
  389.                                 //button12_Click(button12, EventArgs.Empty);
  390.                             }
  391.                         }
  392.                         if (connwaitnow == true) { timer1.Enabled = true; }
  393.                         break;
  394.                     case 21:    
  395.                         {
  396.                             if (inbuffercountbak < 4) { return; }
  397.                             else { textBox2.Text = Convert.ToString(ReceiveBuff[4]); }
  398.                         }
  399.                         break;
  400.                     case 22:
  401.                         if (inbuffercountbak > 4)
  402.                         {
  403.                             DialogResult result = MessageBox.Show("在线设备的站号已修改,是否要再次读出设备站号?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
  404.                             if (result == DialogResult.OK)
  405.                             {
  406.                                 button4_Click(button4, EventArgs.Empty);
  407.                             }
  408.                         }
  409.                         break;
  410.                     case 29:
  411.                         if (inbuffercountbak > 4)
  412.                         {
  413.                             string parastr = ReceiveBuff[4].ToString("X2");
  414.                             comboBox15.SelectedIndex =  Convert.ToInt16(parastr.Substring(0,1));
  415.                             int paraH = Convert.ToInt16(parastr.Substring(parastr.Length -1));
  416.                             comboBox13.SelectedIndex = paraH % 2;
  417.                             comboBox14.SelectedIndex = paraH / 2;
  418.                         }
  419.                         break;
  420.                     case 210:
  421.                         if (inbuffercountbak > 6)
  422.                         {
  423.                             if (ReceiveBuff[1] == 3 && (ReceiveBuff[3] + ReceiveBuff[4] + ReceiveBuff[5] + ReceiveBuff[6]>0))
  424.                             {
  425.                                 cardhao = (uint)(ReceiveBuff[3] * 256 * 256 * 256 + ReceiveBuff[4] * 256 * 256 + ReceiveBuff[5] * 256 + ReceiveBuff[6]);
  426.                                 cardstr = ReceiveBuff[3].ToString("X2") + "-" + ReceiveBuff[4].ToString("X2") + "-" + ReceiveBuff[5].ToString("X2") + "-" + ReceiveBuff[6].ToString("X2");
  427.                                 textBox4.Text = "物理卡号:" + cardstr + "  换算成十位卡号:" + Convert.ToString(cardhao).PadLeft(10, '0');
  428.                                 if (checkBox2.Checked )
  429.                                 {
  430.                                     button25_Click(button25, EventArgs.Empty);
  431.                                 }
  432.                             }
  433.                             else { textBox4.Text = ""; }
  434.                             
  435.                         }
  436.                         break;
  437.                     default :
  438.                             break ;
  439.                 }
  440.                
  441.             }
  442.         }
  443.                
  444.         private void button6_Click(object sender, EventArgs e)
  445.         {
  446.             listBox1.Items.Clear () ;
  447.         }
  448.         
  449.         private void checkBox2_MouseDown(object sender, MouseEventArgs e)
  450.         {
  451.             if (button1.Text == "打开串口")
  452.             {
  453.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  454.                 return;
  455.             }
  456.             if (textBox1 .Text=="0")
  457.             {
  458.                 MessageBox.Show("请先选择要轮询的站号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  459.                 return;
  460.             }
  461.             if (connwaitnow == false)
  462.             {
  463.                 connwaitnow = true;
  464.                 timer1.Interval = 50;
  465.                 timer1.Enabled = true;
  466.             }
  467.             else
  468.             {
  469.                 connwaitnow = false;
  470.                 timer1.Enabled =false ;                
  471.             }
  472.  
  473.         }
  474.         private void timer1_Tick(object sender, EventArgs e)
  475.         {
  476.             //button11_Click(button11, EventArgs.Empty);
  477.         }
  478.         private void checkBox2_CheckedChanged(object sender, EventArgs e)
  479.         {
  480.         }
  481.         private void delaytime1_ValueChanged(object sender, EventArgs e)
  482.         {
  483.             timer2.Interval = (int)delaytime1.Value+10;
  484.         }
  485.         private void timer2_Tick(object sender, EventArgs e)
  486.         {
  487.             timer2.Enabled = false;
  488.             if (connwaitnow == true) { timer1.Enabled = true; }
  489.         }
  490.         private void timer3_Tick(object sender, EventArgs e)
  491.         {
  492.             label16.Text = DateTime.Now.ToString();
  493.         }
  494.         private void button18_Click(object sender, EventArgs e)
  495.         {
  496.             byte[] SendBuf = new byte[5];
  497.             if (button1.Text == "打开串口")
  498.             {
  499.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  500.                 return;
  501.             }
  502.             int jihao = Convert.ToInt32(textBox1.Text);
  503.             SendBuf[0] = 0xAA;
  504.             SendBuf[1] = 0xAA;
  505.             SendBuf[2] = (byte)(jihao % 256);
  506.             SendBuf[3] = (byte)(jihao / 256);
  507.             SendBuf[4] = 0x3C;
  508.             textBox3.Text = "";
  509.             SendCode = 4;
  510.             axMSComm1.Output = SendBuf;          //向串口发送数据
  511.             axMSComm1.RThreshold = 1;
  512.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  513.             for (int i = 0; i <= 4; i++)
  514.             {
  515.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  516.             }
  517.             listBox1.Items.Add(SendStr);
  518.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  519.         }
  520.         private void button2_Click_1(object sender, EventArgs e)
  521.         {
  522.             byte[] SendBuf = new byte[8];
  523.             if (button1.Text == "打开串口")
  524.             {
  525.                 MessageBox.Show("请先打开串口后再执行读取在线设备的操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  526.                 return;
  527.             }
  528.             SendBuf[0] = 0x00;
  529.             SendBuf[1] = 0x03;
  530.             SendBuf[2] = 0x00;
  531.             SendBuf[3] = 0x00;
  532.             SendBuf[4] = 0x00;
  533.             SendBuf[5] = 0x01;
  534.             SendBuf[6] = 0x85;
  535.             SendBuf[7] = 0xDB;
  536.             SendCode = 1;
  537.             axMSComm1.Output = SendBuf;          //向串口发送数据
  538.             axMSComm1.RThreshold = 1;
  539.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  540.             for (int i = 0; i <= 7; i++)
  541.             {
  542.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  543.             }
  544.             listBox1.Items.Add(SendStr);
  545.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  546.         }
  547.         private void button5_Click_1(object sender, EventArgs e)
  548.         {
  549.             byte[] SendBuf = new byte[8];
  550.             if (button1.Text == "打开串口")
  551.             {
  552.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  553.                 return;
  554.             }
  555.             byte jihao = Convert.ToByte(textBox1.Text);
  556.             SendBuf[0] = jihao;
  557.             SendBuf[1] = 0x06;
  558.             SendBuf[2] = 0x00;
  559.             SendBuf[3] = 0x02;
  560.             SendBuf[4] = 0x00;
  561.             SendBuf[5] = (byte)(comboBox4.SelectedIndex + 1);
  562.             long CRC16 = CRC_16(SendBuf, 6);
  563.             SendBuf[6] = (byte)(CRC16 % 256);
  564.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  565.             SendCode = 4;
  566.             axMSComm1.Output = SendBuf;          //向串口发送数据
  567.             axMSComm1.RThreshold = 1;
  568.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  569.             for (int i = 0; i <= 7; i++)
  570.             {
  571.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  572.             }
  573.             listBox1.Items.Add(SendStr);
  574.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  575.         }
  576.         private void button3_Click_1(object sender, EventArgs e)
  577.         {
  578.             byte[] SendBuf = new byte[8];
  579.             if (button1.Text == "打开串口")
  580.             {
  581.                 MessageBox.Show("请先打开串口后再执行更改在线设备站号的操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  582.                 return;
  583.             }
  584.             byte oldjihao = Convert.ToByte(textBox1.Text);
  585.             byte newjihao = Convert.ToByte(newjihao1.Value);
  586.             SendBuf[0] = oldjihao;
  587.             SendBuf[1] = 0x06;
  588.             SendBuf[2] = 0x00;
  589.             SendBuf[3] = 0x00;
  590.             SendBuf[4] = 0x00;
  591.             SendBuf[5] = newjihao;
  592.             long CRC16 = CRC_16(SendBuf, 6);
  593.             SendBuf[6] = (byte)(CRC16 % 256);
  594.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  595.             SendCode = 2;
  596.             axMSComm1.Output = SendBuf;          //向串口发送数据
  597.             axMSComm1.RThreshold = 1;
  598.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  599.             for (int i = 0; i <= 7; i++)
  600.             {
  601.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  602.             }
  603.             listBox1.Items.Add(SendStr);
  604.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  605.         }
  606.         private void button8_Click_1(object sender, EventArgs e)
  607.         {
  608.             byte[] SendBuf = new byte[13];
  609.             if (button1.Text == "打开串口")
  610.             {
  611.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  612.                 return;
  613.             }
  614.             byte jihao = Convert.ToByte(textBox1.Text);
  615.             SendBuf[0] = jihao;
  616.             SendBuf[1] = 0x10;
  617.             SendBuf[2] = 0x00;
  618.             SendBuf[3] = 0x3E;
  619.             SendBuf[4] = 0x00;
  620.             SendBuf[5] = 0x02;
  621.             SendBuf[6] = 0x04;
  622.             SendBuf[7] = 0x00;
  623.             SendBuf[8] = (byte)(comboBox6.SelectedIndex);
  624.             SendBuf[9] = 0x55;
  625.             SendBuf[10] = 0xAA;
  626.             long CRC16 = CRC_16(SendBuf, 11);
  627.             SendBuf[11] = (byte)(CRC16 % 256);
  628.             SendBuf[12] = (byte)((CRC16 / 256) % 256);
  629.             SendCode = 3;
  630.             axMSComm1.Output = SendBuf;          //向串口发送数据
  631.             axMSComm1.RThreshold = 1;
  632.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  633.             for (int i = 0; i <= 12; i++)
  634.             {
  635.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  636.             }
  637.             listBox1.Items.Add(SendStr);
  638.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  639.         }
  640.         private void button17_Click_1(object sender, EventArgs e)
  641.         {
  642.             byte[] SendBuf = new byte[13];
  643.             if (button1.Text == "打开串口")
  644.             {
  645.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  646.                 return;
  647.             }
  648.             byte jihao = Convert.ToByte(textBox1.Text);
  649.             long Btl = Convert.ToInt16(comboBox5.Text);
  650.             SendBuf[0] = jihao;
  651.             SendBuf[1] = 0x10;
  652.             SendBuf[2] = 0x00;
  653.             SendBuf[3] = 0x3C;
  654.             SendBuf[4] = 0x00;
  655.             SendBuf[5] = 0x02;
  656.             SendBuf[6] = 0x04;
  657.             SendBuf[7] = (byte)((Btl / 256) % 256);
  658.             SendBuf[8] = (byte)(Btl % 256);
  659.             SendBuf[9] = 0x55;
  660.             SendBuf[10] = 0xAA;
  661.             long CRC16 = CRC_16(SendBuf, 11);
  662.             SendBuf[11] = (byte)(CRC16 % 256);
  663.             SendBuf[12] = (byte)((CRC16 / 256) % 256);
  664.             SendCode = 5;
  665.             axMSComm1.Output = SendBuf;          //向串口发送数据
  666.             axMSComm1.RThreshold = 1;
  667.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  668.             for (int i = 0; i <= 12; i++)
  669.             {
  670.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  671.             }
  672.             listBox1.Items.Add(SendStr);
  673.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  674.         }
  675.         private void button13_Click_1(object sender, EventArgs e)
  676.         {
  677.             byte[] SendBuf = new byte[8];
  678.             if (button1.Text == "打开串口")
  679.             {
  680.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  681.                 return;
  682.             }
  683.             byte jihao = Convert.ToByte(textBox1.Text);
  684.             long Deepdelay = (int)Deepdelay4.Value;
  685.             SendBuf[0] = jihao;
  686.             SendBuf[1] = 0x06;
  687.             SendBuf[2] = 0x00;
  688.             SendBuf[3] = 0x46;
  689.             SendBuf[4] = (byte)((Deepdelay / 256) % 256);
  690.             SendBuf[5] = (byte)(Deepdelay % 256);
  691.             long CRC16 = CRC_16(SendBuf, 6);
  692.             SendBuf[6] = (byte)(CRC16 % 256);
  693.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  694.             SendCode =7;
  695.             axMSComm1.Output = SendBuf;          //向串口发送数据
  696.             axMSComm1.RThreshold = 1;
  697.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  698.             for (int i = 0; i <= 7; i++)
  699.             {
  700.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  701.             }
  702.             listBox1.Items.Add(SendStr);
  703.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  704.         }
  705.         private void button14_Click_1(object sender, EventArgs e)
  706.         {
  707.             byte[] SendBuf = new byte[8];
  708.             if (button1.Text == "打开串口")
  709.             {
  710.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  711.                 return;
  712.             }
  713.             byte jihao = Convert.ToByte(textBox1.Text);
  714.             SendBuf[0] = jihao;
  715.             SendBuf[1] = 0x06;
  716.             SendBuf[2] = 0x00;
  717.             SendBuf[3] = 0x46;
  718.             SendBuf[4] = 0x00;
  719.             SendBuf[5] = 0x00;
  720.             long CRC16 = CRC_16(SendBuf, 6);
  721.             SendBuf[6] = (byte)(CRC16 % 256);
  722.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  723.             SendCode = 8;
  724.             axMSComm1.Output = SendBuf;          //向串口发送数据
  725.             axMSComm1.RThreshold = 1;
  726.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  727.             for (int i = 0; i <= 7; i++)
  728.             {
  729.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  730.             }
  731.             listBox1.Items.Add(SendStr);
  732.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  733.         }
  734.         private void button10_Click_1(object sender, EventArgs e)
  735.         {
  736.             byte[] SendBuf = new byte[8];
  737.             if (button1.Text == "打开串口")
  738.             {
  739.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  740.                 return;
  741.             }
  742.             byte jihao = Convert.ToByte(textBox1.Text);
  743.             SendBuf[0] = jihao;
  744.             SendBuf[1] = 0x06;
  745.             SendBuf[2] = 0x00;
  746.             SendBuf[3] = 0x01;
  747.             //if (checkBox1.Checked)
  748.             //{
  749.                 SendBuf[4] = 0x80;
  750.                 SendBuf[5] = (byte)(comboBox7.SelectedIndex + 2 * comboBox8.SelectedIndex);
  751.             //}
  752.             //else
  753.             //{
  754.             //    SendBuf[4] = 0x00;
  755.             //    SendBuf[5] = 0x00;
  756.             //}
  757.             long CRC16 = CRC_16(SendBuf, 6);
  758.             SendBuf[6] = (byte)(CRC16 % 256);
  759.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  760.             SendCode = 6;
  761.             axMSComm1.Output = SendBuf;          //向串口发送数据
  762.             axMSComm1.RThreshold = 1;
  763.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  764.             for (int i = 0; i <= 7; i++)
  765.             {
  766.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  767.             }
  768.             listBox1.Items.Add(SendStr);
  769.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  770.         }
  771.         private void button9_Click_1(object sender, EventArgs e)
  772.         {
  773.             byte[] SendBuf = new byte[8];
  774.             if (button1.Text == "打开串口")
  775.             {
  776.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  777.                 return;
  778.             }
  779.             byte jihao = Convert.ToByte(textBox1.Text);
  780.             SendBuf[0] = jihao;
  781.             SendBuf[1] = 0x06;
  782.             SendBuf[2] = 0x00;
  783.             SendBuf[3] = 0x07;
  784.             SendBuf[4] = 0x00;
  785.             SendBuf[5] = 0x08;
  786.             long CRC16 = CRC_16(SendBuf, 6);
  787.             SendBuf[6] = (byte)(CRC16 % 256);
  788.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  789.             SendCode = 9;
  790.             axMSComm1.Output = SendBuf;          //向串口发送数据
  791.             axMSComm1.RThreshold = 1;
  792.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  793.             for (int i = 0; i <= 7; i++)
  794.             {
  795.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  796.             }
  797.             listBox1.Items.Add(SendStr);
  798.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  799.         }
  800.         private void button11_Click(object sender, EventArgs e)
  801.         {
  802.             byte[] SendBuf = new byte[8];
  803.             if (button1.Text == "打开串口")
  804.             {
  805.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  806.                 return;
  807.             }
  808.             if(BEGEE.Value!=7)
  809.             {
  810.                 DialogResult result = MessageBox.Show("从第7寄存器开始读才能返回读写状态,是否要从第7寄存器开始读?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
  811.                 if (result == DialogResult.OK)
  812.                 {
  813.                     BEGEE.Value = 7;
  814.                 }
  815.             }
  816.             byte jihao = Convert.ToByte(textBox1.Text);
  817.             SendBuf[0] = jihao;
  818.             SendBuf[1] = 0x03;
  819.             SendBuf[2] = 0x00;
  820.             SendBuf[3] = (byte)(BEGEE.Value) ;
  821.             SendBuf[4] = 0x00;
  822.             SendBuf[5] = (byte)(EENum.Value);
  823.             long CRC16 = CRC_16(SendBuf, 6);
  824.             SendBuf[6] = (byte)(CRC16 % 256);
  825.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  826.             SendCode = 10;
  827.             axMSComm1.Output = SendBuf;          //向串口发送数据
  828.             axMSComm1.RThreshold = 1;
  829.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  830.             for (int i = 0; i <= 7; i++)
  831.             {
  832.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  833.             }
  834.             listBox1.Items.Add(SendStr);
  835.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  836.         }
  837.         private void button12_Click(object sender, EventArgs e)
  838.         {
  839.             byte[] SendBuf = new byte[100];
  840.             int i;
  841.             if (button1.Text == "打开串口")
  842.             {
  843.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  844.                 return;
  845.             }
  846.             if (BEGEE.Value != 10)
  847.             {
  848.                 DialogResult result = MessageBox.Show("写卡数据是存在第10寄存器开始的连续寄存器内,是否要将数据写入10以后的寄存器内?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
  849.                 if (result == DialogResult.OK)
  850.                 {
  851.                     BEGEE.Value = 10;
  852.                 }
  853.             }
  854.             byte jihao = Convert.ToByte(textBox1.Text);
  855.             int Wlen = Convert.ToInt16(EENum.Value)*2;
  856.  
  857.             SendBuf[0] = jihao;
  858.             SendBuf[1] = 0x10;
  859.             SendBuf[2] = 0x00;
  860.             SendBuf[3] = (byte)(BEGEE.Value);
  861.             SendBuf[4] = 0x00;
  862.             SendBuf[5] = (byte)(EENum.Value);
  863.             SendBuf[6] = (byte)Wlen;
  864.             string wstr = WinfBox.Text.Trim() ;     //确保写缓冲数据
  865.             for ( i=1;i<=Wlen;i++)
  866.             {
  867.                 wstr = wstr + " 00";
  868.             }
  869.             wstr = wstr.Trim();
  870.             for ( i = 0; i < Wlen; i++)
  871.             {
  872.                 SendBuf[7 + i] = Convert.ToByte(Convert.ToInt32(wstr.Substring(i * 3, 2), 16));
  873.             }
  874.             long CRC16 = CRC_16(SendBuf, (byte)(Wlen+7));
  875.             SendBuf[Wlen+7] = (byte)(CRC16 % 256);
  876.             SendBuf[Wlen+8] = (byte)((CRC16 / 256) % 256);
  877.             byte[] senddata = new byte[Wlen+9];
  878.             for (i=0;i<=Wlen+8;i++)
  879.             {
  880.                 senddata[i] = SendBuf[i];
  881.             }
  882.             SendCode = 11;
  883.             axMSComm1.Output = senddata;          //向串口发送数据
  884.             axMSComm1.RThreshold = 1;
  885.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  886.             for ( i = 0; i <= Wlen+8; i++)
  887.             {
  888.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  889.             }
  890.             listBox1.Items.Add(SendStr);
  891.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  892.         }
  893.         private void button18_Click_1(object sender, EventArgs e)
  894.         {
  895.             byte[] SendBuf = new byte[8];
  896.             if (button1.Text == "打开串口")
  897.             {
  898.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  899.                 return;
  900.             }
  901.             byte jihao = Convert.ToByte(textBox1.Text);
  902.             SendBuf[0] = jihao;
  903.             SendBuf[1] = 0x06;
  904.             SendBuf[2] = 0x00;
  905.             SendBuf[3] = 0x07;
  906.             SendBuf[4] = 0x00;
  907.             SendBuf[5] = 0x04;
  908.             long CRC16 = CRC_16(SendBuf, 6);
  909.             SendBuf[6] = (byte)(CRC16 % 256);
  910.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  911.             SendCode = 12;
  912.             axMSComm1.Output = SendBuf;          //向串口发送数据
  913.             axMSComm1.RThreshold = 1;
  914.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  915.             for (int i = 0; i <= 7; i++)
  916.             {
  917.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  918.             }
  919.             listBox1.Items.Add(SendStr);
  920.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  921.         }
  922.         private void axIcCardReader1_Enter(object sender, EventArgs e)
  923.         {
  924.         }
  925.         private void button4_Click(object sender, EventArgs e)
  926.         {
  927.             byte[] SendBuf = new byte[8];
  928.             if (button1.Text == "打开串口")
  929.             {
  930.                 MessageBox.Show("请先打开串口后再执行读取在线设备的操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  931.                 return;
  932.             }
  933.             SendBuf[0] = 0x00;
  934.             SendBuf[1] = 0x03;
  935.             SendBuf[2] = 0x00;
  936.             SendBuf[3] = 0x02;
  937.             SendBuf[4] = 0x00;
  938.             SendBuf[5] = 0x01;
  939.             SendBuf[6] = 0x24;
  940.             SendBuf[7] = 0x1B;
  941.             SendCode = 21;
  942.             axMSComm1.Output = SendBuf;          //向串口发送数据
  943.             axMSComm1.RThreshold = 1;
  944.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  945.             for (int i = 0; i <= 7; i++)
  946.             {
  947.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  948.             }
  949.             listBox1.Items.Add(SendStr);
  950.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  951.         }
  952.         private void button7_Click(object sender, EventArgs e)
  953.         {
  954.             byte[] SendBuf = new byte[8];
  955.             if (button1.Text == "打开串口")
  956.             {
  957.                 MessageBox.Show("请先打开串口后再执行更改在线设备站号的操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  958.                 return;
  959.             }
  960.             byte oldjihao = Convert.ToByte(textBox2.Text);
  961.             byte newjihao = Convert.ToByte(newjihao2.Value);
  962.             SendBuf[0] = oldjihao;
  963.             SendBuf[1] = 0x06;
  964.             SendBuf[2] = 0x00;
  965.             SendBuf[3] = 0x02;
  966.             SendBuf[4] = 0x00;
  967.             SendBuf[5] = newjihao;
  968.             long CRC16 = CRC_16(SendBuf, 6);
  969.             SendBuf[6] = (byte)(CRC16 % 256);
  970.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  971.             SendCode = 22;
  972.             axMSComm1.Output = SendBuf;          //向串口发送数据
  973.             axMSComm1.RThreshold = 1;
  974.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  975.             for (int i = 0; i <= 7; i++)
  976.             {
  977.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  978.             }
  979.             listBox1.Items.Add(SendStr);
  980.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  981.         }
  982.         private void button15_Click(object sender, EventArgs e)
  983.         {
  984.             byte[] SendBuf = new byte[8];
  985.             if (button1.Text == "打开串口")
  986.             {
  987.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  988.                 return;
  989.             }
  990.             byte jihao = Convert.ToByte(textBox2.Text);
  991.             SendBuf[0] = jihao;
  992.             SendBuf[1] = 0x06;
  993.             SendBuf[2] = 0x00;
  994.             SendBuf[3] = 0x04;
  995.             SendBuf[4] = 0x00;
  996.             SendBuf[5] = (byte)(comboBox9.SelectedIndex + 1);
  997.             long CRC16 = CRC_16(SendBuf, 6);
  998.             SendBuf[6] = (byte)(CRC16 % 256);
  999.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  1000.             SendCode = 24;
  1001.             axMSComm1.Output = SendBuf;          //向串口发送数据
  1002.             axMSComm1.RThreshold = 1;
  1003.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  1004.             for (int i = 0; i <= 7; i++)
  1005.             {
  1006.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  1007.             }
  1008.             listBox1.Items.Add(SendStr);
  1009.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  1010.         }
  1011.         private void button16_Click(object sender, EventArgs e)
  1012.         {
  1013.             byte[] SendBuf = new byte[8];
  1014.             if (button1.Text == "打开串口")
  1015.             {
  1016.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1017.                 return;
  1018.             }
  1019.             byte jihao = Convert.ToByte(textBox2.Text);
  1020.             long Opensj = (int)opendelay.Value;      //延时
  1021.             SendBuf[0] = jihao;
  1022.             SendBuf[1] = 0x06;
  1023.             SendBuf[2] = 0x00;
  1024.             SendBuf[3] = (byte)(0x46 + comboBox10.SelectedIndex);
  1025.             SendBuf[4] = (byte)((Opensj / 256) % 256);
  1026.             SendBuf[5] = (byte)(Opensj % 256);
  1027.             long CRC16 = CRC_16(SendBuf, 6);
  1028.             SendBuf[6] = (byte)(CRC16 % 256);
  1029.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  1030.             SendCode = 26;
  1031.             axMSComm1.Output = SendBuf;          //向串口发送数据
  1032.             axMSComm1.RThreshold = 1;
  1033.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  1034.             for (int i = 0; i <= 7; i++)
  1035.             {
  1036.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  1037.             }
  1038.             listBox1.Items.Add(SendStr);
  1039.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  1040.         }
  1041.         private void button19_Click(object sender, EventArgs e)
  1042.         {
  1043.             byte[] SendBuf = new byte[8];
  1044.             if (button1.Text == "打开串口")
  1045.             {
  1046.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1047.                 return;
  1048.             }
  1049.             byte jihao = Convert.ToByte(textBox2.Text);
  1050.             SendBuf[0] = jihao;
  1051.             SendBuf[1] = 0x06;
  1052.             SendBuf[2] = 0x00;
  1053.             SendBuf[3] = 0x46;
  1054.             SendBuf[4] = 0x00;
  1055.             SendBuf[5] = 0x00;
  1056.             long CRC16 = CRC_16(SendBuf, 6);
  1057.             SendBuf[6] = (byte)(CRC16 % 256);
  1058.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  1059.             SendCode = 27;
  1060.             axMSComm1.Output = SendBuf;          //向串口发送数据
  1061.             axMSComm1.RThreshold = 1;
  1062.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  1063.             for (int i = 0; i <= 7; i++)
  1064.             {
  1065.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  1066.             }
  1067.             listBox1.Items.Add(SendStr);
  1068.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  1069.         }
  1070.         private void button20_Click(object sender, EventArgs e)
  1071.         {
  1072.             byte[] SendBuf = new byte[13];
  1073.             if (button1.Text == "打开串口")
  1074.             {
  1075.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1076.                 return;
  1077.             }
  1078.             byte jihao = Convert.ToByte(textBox2.Text);
  1079.             long Btl = Convert.ToInt16(comboBox11.Text);
  1080.             SendBuf[0] = jihao;
  1081.             SendBuf[1] = 0x10;
  1082.             SendBuf[2] = 0x00;
  1083.             SendBuf[3] = 0x3C;
  1084.             SendBuf[4] = 0x00;
  1085.             SendBuf[5] = 0x02;
  1086.             SendBuf[6] = 0x04;
  1087.             SendBuf[7] = (byte)((Btl / 256) % 256);
  1088.             SendBuf[8] = (byte)(Btl % 256);
  1089.             SendBuf[9] = 0x55;
  1090.             SendBuf[10] = 0xAA;
  1091.             long CRC16 = CRC_16(SendBuf, 11);
  1092.             SendBuf[11] = (byte)(CRC16 % 256);
  1093.             SendBuf[12] = (byte)((CRC16 / 256) % 256);
  1094.             SendCode = 23;
  1095.             axMSComm1.Output = SendBuf;          //向串口发送数据
  1096.             axMSComm1.RThreshold = 1;
  1097.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  1098.             for (int i = 0; i <= 12; i++)
  1099.             {
  1100.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  1101.             }
  1102.             listBox1.Items.Add(SendStr);
  1103.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  1104.         }
  1105.         private void button21_Click(object sender, EventArgs e)
  1106.         {
  1107.             byte[] SendBuf = new byte[13];
  1108.             if (button1.Text == "打开串口")
  1109.             {
  1110.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1111.                 return;
  1112.             }
  1113.             byte jihao = Convert.ToByte(textBox2.Text);
  1114.             SendBuf[0] = jihao;
  1115.             SendBuf[1] = 0x10;
  1116.             SendBuf[2] = 0x00;
  1117.             SendBuf[3] = 0x3E;
  1118.             SendBuf[4] = 0x00;
  1119.             SendBuf[5] = 0x02;
  1120.             SendBuf[6] = 0x04;
  1121.             SendBuf[7] = 0x00;
  1122.             SendBuf[8] = (byte)(comboBox12.SelectedIndex);
  1123.             SendBuf[9] = 0x55;
  1124.             SendBuf[10] = 0xAA;
  1125.             long CRC16 = CRC_16(SendBuf, 11);
  1126.             SendBuf[11] = (byte)(CRC16 % 256);
  1127.             SendBuf[12] = (byte)((CRC16 / 256) % 256);
  1128.             SendCode = 25;
  1129.             axMSComm1.Output = SendBuf;          //向串口发送数据
  1130.             axMSComm1.RThreshold = 1;
  1131.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  1132.             for (int i = 0; i <= 12; i++)
  1133.             {
  1134.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  1135.             }
  1136.             listBox1.Items.Add(SendStr);
  1137.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  1138.         }
  1139.         private void button22_Click(object sender, EventArgs e)
  1140.         {
  1141.             byte[] SendBuf = new byte[8];
  1142.             if (button1.Text == "打开串口")
  1143.             {
  1144.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1145.                 return;
  1146.             }
  1147.             byte jihao = Convert.ToByte(textBox2.Text);
  1148.             SendBuf[0] = jihao;
  1149.             SendBuf[1] = 0x06;
  1150.             SendBuf[2] = 0x00;
  1151.             SendBuf[3] = 0x03;
  1152.             SendBuf[4] = 0x80;
  1153.             int para = comboBox13.SelectedIndex + 2 * comboBox14.SelectedIndex;
  1154.             string parahex = para.ToString("X");
  1155.             parahex = comboBox15.SelectedIndex.ToString("D") + parahex;
  1156.             SendBuf[5] = Convert.ToByte(Convert.ToInt32(parahex.Substring(0, 2), 16));
  1157.             long CRC16 = CRC_16(SendBuf, 6);
  1158.             SendBuf[6] = (byte)(CRC16 % 256);
  1159.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  1160.             SendCode = 28;
  1161.             axMSComm1.Output = SendBuf;          //向串口发送数据
  1162.             axMSComm1.RThreshold = 1;
  1163.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  1164.             for (int i = 0; i <= 7; i++)
  1165.             {
  1166.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  1167.             }
  1168.             listBox1.Items.Add(SendStr);
  1169.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  1170.         }
  1171.         private void button23_Click(object sender, EventArgs e)
  1172.         {
  1173.             byte[] SendBuf = new byte[8];
  1174.             if (button1.Text == "打开串口")
  1175.             {
  1176.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1177.                 return;
  1178.             }
  1179.             byte jihao = Convert.ToByte(textBox2.Text);
  1180.             SendBuf[0] = jihao;
  1181.             SendBuf[1] = 0x03;
  1182.             SendBuf[2] = 0x00;
  1183.             SendBuf[3] = 0x03;
  1184.             SendBuf[4] = 0x00;
  1185.             SendBuf[5] = 0x01;
  1186.             long CRC16 = CRC_16(SendBuf, 6);
  1187.             SendBuf[6] = (byte)(CRC16 % 256);
  1188.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  1189.             SendCode = 29;
  1190.             axMSComm1.Output = SendBuf;          //向串口发送数据
  1191.             axMSComm1.RThreshold = 1;
  1192.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  1193.             for (int i = 0; i <= 7; i++)
  1194.             {
  1195.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  1196.             }
  1197.             listBox1.Items.Add(SendStr);
  1198.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  1199.         }
  1200.         private void button24_Click(object sender, EventArgs e)
  1201.         {
  1202.             byte[] SendBuf = new byte[8];
  1203.             if (button1.Text == "打开串口")
  1204.             {
  1205.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1206.                 return;
  1207.             }
  1208.             byte jihao = Convert.ToByte(textBox2.Text);
  1209.             SendBuf[0] = jihao;
  1210.             SendBuf[1] = 0x03;
  1211.             SendBuf[2] = 0x00;
  1212.             SendBuf[3] = 0x00;
  1213.             SendBuf[4] = 0x00;
  1214.             SendBuf[5] = 0x02;
  1215.             long CRC16 = CRC_16(SendBuf, 6);
  1216.             SendBuf[6] = (byte)(CRC16 % 256);
  1217.             SendBuf[7] = (byte)((CRC16 / 256) % 256);
  1218.             SendCode = 210;
  1219.             axMSComm1.Output = SendBuf;          //向串口发送数据
  1220.             axMSComm1.RThreshold = 1;
  1221.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  1222.             for (int i = 0; i <= 7; i++)
  1223.             {
  1224.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  1225.             }
  1226.             listBox1.Items.Add(SendStr);
  1227.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  1228.         }
  1229.         private void button25_Click(object sender, EventArgs e)
  1230.         {
  1231.             byte[] SendBuf = new byte[13];
  1232.             if (button1.Text == "打开串口")
  1233.             {
  1234.                 MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1235.                 return;
  1236.             }
  1237.             byte jihao = Convert.ToByte(textBox2.Text);
  1238.             SendBuf[0] = jihao;
  1239.             SendBuf[1] = 0x10;
  1240.             SendBuf[2] = 0x00;
  1241.             SendBuf[3] = 0x00;
  1242.             SendBuf[4] = 0x00;
  1243.             SendBuf[5] = 0x02;
  1244.             SendBuf[6] = 0x04;
  1245.             SendBuf[7] = 0x00;
  1246.             SendBuf[8] = 0x00;
  1247.             SendBuf[9] = 0x00;
  1248.             SendBuf[10] = 0x00;
  1249.             long CRC16 = CRC_16(SendBuf, 11);
  1250.             SendBuf[11] = (byte)(CRC16 % 256);
  1251.             SendBuf[12] = (byte)((CRC16 / 256) % 256);
  1252.             SendCode = 211;
  1253.             axMSComm1.Output = SendBuf;          //向串口发送数据
  1254.             axMSComm1.RThreshold = 1;
  1255.             string SendStr = "串口发送数据:";   //将发送的数据显示在列表框
  1256.             for (int i = 0; i <= 12; i++)
  1257.             {
  1258.                 SendStr = SendStr + SendBuf[i].ToString("X2") + " ";
  1259.             }
  1260.             listBox1.Items.Add(SendStr);
  1261.             listBox1.SelectedIndex = listBox1.Items.Count - 1
  1262.         }
  1263.         private void checkBox3_CheckedChanged(object sender, EventArgs e)
  1264.         {
  1265.         }
  1266.         private void checkBox3_MouseUp(object sender, MouseEventArgs e)
  1267.         {
  1268.             if (checkBox3.Checked)
  1269.             {
  1270.                 if (button1.Text == "打开串口")
  1271.                 {
  1272.                     connwaitnow = false;
  1273.                     timer4.Enabled = false;
  1274.                     checkBox3.Checked = false;
  1275.                     MessageBox.Show("请先打开串口后再执行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1276.                     return;
  1277.                 }
  1278.                 if (Convert.ToByte(textBox2.Text) == 0)
  1279.                 {
  1280.                     connwaitnow = false;
  1281.                     timer4.Enabled = false;
  1282.                     checkBox3.Checked = false;
  1283.                     MessageBox.Show("请输入轮询的站点号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1284.                     return;
  1285.                 }
  1286.                 connwaitnow = true;
  1287.                 timer4.Enabled = true;
  1288.             }
  1289.             else 
  1290.             {
  1291.                 connwaitnow = false;
  1292.                 timer4.Enabled = false
  1293.             }
  1294.         }
  1295.         private void timer4_Tick(object sender, EventArgs e)
  1296.         {
  1297.             button24_Click(button24, EventArgs.Empty);
  1298.         }
  1299.     }
  1300. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/985962
推荐阅读
相关标签
  

闽ICP备14008679号