//复位函数
        public static void reset()
        {
            int sendCount = 0;//每条指令最多发送的次数变量,如果次数超过则报错

            //UsbIO.sendToARM(Form1.SCPIReset + SCPIStrSumChkGet(Form1.SCPIReset) + Form1.end1 + Form1.end2);
            UsbIO.sendToARM(Form1.SCPIReset);
            Form1.Delay(40);//先延时40ms,然后判断是否返回接收成功的信息,如果返回继续发送下一条,没返回则,每隔一段时间发送一次相同的请求,五次后还没返回正确信息则报错
            while (!Form1.SCPIsendSuccessFlag)
            {
                sendCount++;
                Form1.Delay(900);//延时900ms
                if (sendCount < 5)
                {
                    //UsbIO.sendToARM(Form1.SCPIReset + SCPIStrSumChkGet(Form1.SCPIReset) + Form1.end1 + Form1.end2);
                    UsbIO.sendToARM(Form1.SCPIReset);
                }
                else
                {
                    break;
                }
                Form1.SCPIsendSuccessFlag = false; //返回该指令的接收成功信息后再把标志置为false
            }
            Form1.SCPIsendSuccessFlag = false;     //返回该指令的接收成功信息后再把标志置为false
            if (sendCount < 5)
            {
                sendCount = 0;
                Form1.dialogMessageShow("复位成功!");
            }
            else
            {
                Form1.dialogMessageShow("设备复位失败,请检查设备!");
            }
        }
Exemplo n.º 2
0
        //从参数设置里读取内容,并判断设备连接状态和参数设置是否为空
        private void ReadSet()
        {
            setData.testVoltage       = textBox10.Text; //得到设置的测试电压值
            setData.electricUpLimit   = textBox9.Text;  //得到设置的充电电流上限值
            setData.powerUpLimit      = textBox8.Text;  //得到充电功率上限值
            setData.outputRes         = comboBox1.Text; //得到输出电阻值
            setData.dischargeElectric = textBox7.Text;  //得到放电电流值
            setData.dischargePower    = textBox1.Text;  //得到放电功率值
            setData.measurePattern    = comboBox3.Text; //得到测量模式
            setData.voltageRiseSlope  = textBox3.Text;  //(高压源的最大输出电压)电压上升斜率
            setData.voltageDropSlope  = textBox4.Text;  //(高压源的最大输出电压)电压下降斜率
            setData.chargePattern     = comboBox2.Text; //得到充电模式

            //判断设置参数是否填写完整
            if (UsbIO.is_Open())
            {
                if (setData.testVoltage == "" || setData.electricUpLimit == "" ||
                    setData.powerUpLimit == "" || setData.outputRes == "" ||
                    setData.dischargeElectric == "" || setData.dischargePower == "" ||
                    setData.measurePattern == "" || setData.voltageRiseSlope == "" ||
                    setData.voltageDropSlope == "" || setData.chargePattern == ""
                    )
                {
                    MessageBox.Show("设置参数不能为空,请填写完整!"); //弹出提示对话框
                }
                else
                {
                    SendDataHandle.SendToCMDMachine(setData);//用于发送设置参数到下位机
                }
            }
            else
            {
                MessageBox.Show("设备未连接!");//弹出提示对话框
            }
        }
Exemplo n.º 3
0
 //关闭连接按钮
 private void button2_Click(object sender, EventArgs e)
 {
     if (UsbIO.is_Open())//确保是设备处于连接状态才进行关闭连接的操作
     {
         if (!testStartFlag)
         {
             closeTest();                      //关闭接收数据
             SendDataHandle.SCPICDisconnect(); //先向下位机发送退出远控状态的指令
             UsbIO.DataRecieveStop();          //结束串口接收数据的线程
             UsbIO.Close_Port();               //关闭串口连接
             if (!UsbIO.is_Open())
             {
                 MessageBox.Show("设备已断开连接");             //弹出提示对话框
                 textBox11.Text      = "设备未连接";          //显示设备连接状态
                 textBox11.BackColor = Color.WhiteSmoke; //控件背景颜色改变
             }
             else
             {
                 MessageBox.Show("设备连接断开失败"); //弹出提示对话框
             }
         }
         else
         {
             MessageBox.Show("请先结束测试!"); //弹出提示对话框
         }
     }
 }
Exemplo n.º 4
0
 //打开连接按钮
 private void button1_Click(object sender, EventArgs e)
 {
     if (!UsbIO.is_Open())//确保设备处于未连接状态再进行连接操作,否则不操作
     {
         portNum = PortNums.Text;
         UsbIO.Open_Port();        // 打开串口
         UsbIO.DataRecieveStart(); //开始串口接收数据的线程
         if (UsbIO.is_Open())
         {
             bool successFlag = SendDataHandle.SCPIConnect();//发送SCPI联机指令给下位机
             if (successFlag)
             {
                 MessageBox.Show("设备连接成功");       //弹出提示对话框
                 textBox11.Text      = "设备已连接";   //显示设备连接状态
                 textBox11.BackColor = Color.Red; //控件背景颜色改变
             }
             else
             {
                 MessageBox.Show("设备连接失败");              //弹出提示对话框
                 textBox11.Text      = "设备未连接";          //显示设备连接状态
                 textBox11.BackColor = Color.WhiteSmoke; //控件背景颜色改变
             }
         }
         else
         {
             MessageBox.Show("串口未打开");               //弹出提示对话框
             textBox11.Text      = "设备未连接";          //显示设备连接状态
             textBox11.BackColor = Color.WhiteSmoke; //控件背景颜色改变
         }
     }
 }
Exemplo n.º 5
0
        //form1加载时的显示(设置里面的下拉选项)
        private void Form1_Load(object sender, EventArgs e)
        {
            //枚举(列出)参数设置里面的输出电阻值
            comboBox1.Items.Add("NONE");
            comboBox1.Items.Add("DIOD");
            comboBox1.Items.Add("100K");
            comboBox1.Items.Add("1M");
            comboBox1.Items.Add("10M");
            comboBox1.SelectedIndex = 1; //下拉列表默认选择项是第二项,即:DIOD

            //枚举(列出)参数设置里面的测量模式
            comboBox3.Items.Add("IR");
            comboBox3.Items.Add("LC");
            comboBox3.SelectedIndex = 0; //下拉列表默认选择项是第一项,即:IR

            //枚举(列出)参数设置里面的充电模式
            comboBox2.Items.Add("Auto");
            comboBox2.Items.Add("Manu");
            comboBox2.SelectedIndex = 0; //下拉列表默认选择项是第一项,即:IR

            //保证下拉框只能选择不能自己填入
            comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
            comboBox2.DropDownStyle = ComboBoxStyle.DropDownList;
            comboBox3.DropDownStyle = ComboBoxStyle.DropDownList;
            PortNums.DropDownStyle  = ComboBoxStyle.DropDownList;
            string[] portNums = UsbIO.getComNums(); // 打开硬件设备,获取到端口号
            //枚举(列出)获得的串口号
            foreach (string s in portNums)
            {
                PortNums.Items.Add(s);
            }
            PortNums.SelectedIndex = 0; //下拉列表默认选择项是第一个串口号

            UsbIO.setForm(this);        //创建一个实例,把该界面和UsbIO中的静态变量form1绑定在一起
        }
Exemplo n.º 6
0
 //停止接收数据函数
 public static void closeTest()
 {
     //SendDataHandle.SCPITestStop();//给下位机发送停止测试的指令
     receiveStartFlag = false;  //开始发送请求结果数据标志位置1
     UsbIO.form1.timer1.Stop(); //关闭定时器
     UsbIO.DataRecieveStop();   //停止接收接收数据
     Form1.isGather = false;    //停止绘图显示的线程
     //Form1.testStartFlag = false;//开始测试标志置零
     //UsbIO.form1.textBox14.Text = "测试未开始"; //显示测试状态
 }
Exemplo n.º 7
0
 //停止接受数据按钮
 private void button8_Click(object sender, EventArgs e)
 {
     if (UsbIO.is_Open())
     {
         closeTest();
     }
     else
     {
         MessageBox.Show("设备未连接,请先连接设备"); //弹出提示对话框
     }
 }
Exemplo n.º 8
0
 //开始接受数据按钮(向下位机请求结果数据)
 private void button6_Click(object sender, EventArgs e)
 {
     if (UsbIO.is_Open())
     {
         TaskGatherRealTime = new Thread(GatherRealTime); //开启(创建)一个绘图线程
         startTest();
         receiveButtonClickFlag = true;                   //开始接收数据的按钮是否点击过
     }
     else
     {
         MessageBox.Show("设备未连接,请先连接设备"); //弹出提示对话框
     }
 }
Exemplo n.º 9
0
 //开始测试按钮
 private void button3_Click(object sender, EventArgs e)
 {
     if (UsbIO.is_Open())
     {
         //TaskGatherRealTime = new Thread(GatherRealTime);//开启(创建)一个绘图线程
         //startTest();//调用测试开始的函数
         testStartFlag = true;                   //开始测试标志置一
         SendDataHandle.SCPITestStart();         //给下位机发送开始测试的指令
         UsbIO.form1.textBox14.Text = "正在测试";    //显示测试状态
         textBox14.BackColor        = Color.Red; //控件背景颜色改变
     }
     else
     {
         MessageBox.Show("设备未连接,请先连接设备"); //弹出提示对话框
     }
 }
        //发送设置参数到下位机
        public static void SendToCMDMachine(SysSet.SettingsStruct setData)
        {
            string[] packData = PackageData(setData); //把设置参数封装成SCPI指令
            //需要添加参数发送成功标志,通过条件判断,读取返回的设置成功与否的标志
            int  sendCount = 0;                       //每条指令最多发送的次数变量,如果次数超过则报错
            bool setDataDownloadSuccessFlag = true;   //设置参数全部下载到下位机的成功标志

            foreach (string s in packData)
            {
                UsbIO.sendToARM(s);
                Form1.Delay(40);//先延时40ms,然后判断是否返回接收成功的信息,如果返回继续发送下一条,没返回则,每隔一段时间发送一次相同的请求,五次后还没返回正确信息则报错
                while (!Form1.SCPIsendSuccessFlag)
                {
                    sendCount++;
                    Form1.Delay(900);//延时900ms
                    if (sendCount < 5)
                    {
                        UsbIO.sendToARM(s);
                    }
                    else
                    {
                        setDataDownloadSuccessFlag = false;
                        break;
                    }
                }
                if (sendCount < 5)
                {
                    sendCount = 0;
                }
                else
                {
                    break;
                }
                Form1.SCPIsendSuccessFlag = false;//返回该指令的接收成功信息后再把标志置为false
            }

            Form1.SCPIsendSuccessFlag = false;//返回该指令的接收成功信息后再把标志置为false
            if (setDataDownloadSuccessFlag)
            {
                Form1.dialogMessageShow("参数下载成功!");      //弹出提示对话框
                Form1.setDataDownloadSuccessFlag = true; //参数下载成功的标志
            }
            else
            {
                Form1.dialogMessageShow("参数下载失败,请检查设备并重新下载!");//弹出提示对话框
            }
        }
        //发送SCPI模块联机顺序指令到下位机中
        public static bool SCPIConnect()
        {
            int sendCount = 0;//每条指令最多发送的次数变量,如果次数超过则报错

            foreach (string s in Form1.SCPIConnect)
            {
                //UsbIO.sendToARM(s+ SCPIStrSumChkGet(s) + Form1.end1+Form1.end2);
                UsbIO.sendToARM(s);
                Form1.Delay(40);//先延时40ms,然后判断是否返回接收成功的信息,如果返回继续发送下一条,没返回则,每隔一段时间发送一次相同的请求,五次后还没返回正确信息则报错
                while (!Form1.SCPIsendSuccessFlag)
                {
                    sendCount++;
                    Form1.Delay(900);//延时900ms
                    if (sendCount < 5)
                    {
                        //UsbIO.sendToARM(s + SCPIStrSumChkGet(s) + Form1.end1 + Form1.end2);
                        UsbIO.sendToARM(s);
                    }
                    else
                    {
                        break;
                    }
                }
                if (sendCount < 5)
                {
                    sendCount = 0;
                }
                else
                {
                    Form1.dialogMessageShow("SCPI联机指令发送失败");
                    break;
                }
                Form1.SCPIsendSuccessFlag = false;//返回该指令的接收成功信息后再把标志置为false
            }
            //UsbIO.sendToARM(Form1.successReceiveMes + SCPIStrSumChkGet(Form1.successReceiveMes) + Form1.end1 + Form1.end2);
            Form1.SCPIsendSuccessFlag = false;//返回该指令的接收成功信息后再把标志置为false
            if (sendCount == 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 12
0
        //开始接收数据的函数
        public static void startTest()
        {
            UsbIO.DataRecieveStart();   //开始接收数据
            TaskGatherRealTime.Start(); //开始接受绘图数据的线程
            if (!receiveButtonClickFlag)
            {
                SaveDataToLocal.createPathFile();//创建指定目录和存储数据的txt文件
            }
            //testStartFlag = true;//开始测试标志置一
            //SendDataHandle.SCPITestStart();//给下位机发送开始测试的指令
            //UsbIO.form1.textBox14.Text = "正在测试"; //显示测试状态
            UsbIO.form1.timer1.Interval = Convert.ToInt32(UsbIO.form1.textBox2.Text);//把设置的请求时间间隔设置到定时器1中去
            float a = UsbIO.form1.timer1.Interval;

            xUnitTime        = a / 1000; //趋势图单个横坐标单位长度
            receiveStartFlag = true;     //开始发送请求结果数据标志位置1
            UsbIO.form1.timer1.Start();  //开启定时器
        }
        //发送请求结果数据的函数
        public static void sendGet(string[] str)
        {
            bool setDataDownloadSuccessFlag = true;//请求结果的SCPI指令全部下载到下位机的成功标志
            int  sendCount = 0;

            foreach (string s in str)
            {
                UsbIO.sendToARM(s);
                Form1.Delay(40);//先延时40ms,然后判断是否返回接收成功的信息,如果返回继续发送下一条,没返回则,每隔一段时间发送一次相同的请求,五次后还没返回正确信息则报错
                while (!Form1.SCPIsendSuccessFlag)
                {
                    sendCount++;
                    Form1.Delay(900);//延时900ms
                    if (sendCount < 5)
                    {
                        UsbIO.sendToARM(s);
                    }
                    else
                    {
                        //五次连续发送该条指令都没有返回接收成功的返回信息,则参数请求失败
                        setDataDownloadSuccessFlag = false;
                        break;
                    }
                }
                if (sendCount < 5)
                {
                    sendCount = 0;
                }
                else
                {
                    break;
                }
                Form1.SCPIsendSuccessFlag = false; //返回该指令的接收成功信息后再把标志置为false
            }
            Form1.SCPIsendSuccessFlag = false;     //返回该指令的接收成功信息后再把标志置为false
            if (!setDataDownloadSuccessFlag)
            {
                Form1.dialogMessageShow("结果参数请求失败,测试已停止,请检查设备!"); //弹出提示对话框
                //是否关闭测试?
                Form1.closeTest();                                //调用关闭测试的函数
            }
        }
        //校验得到的SCPI指令是否正确
        public static void SCPIReceiveCheck(byte[] buf)
        {
            int sum = 0;

            for (int i = 0; i < buf.Length - 3; i++)
            {
                sum += buf[i];
            }
            byte low = (byte)(sum & 0xFF);

            low = (byte)(low | 0x80);
            if (low == buf[buf.Length - 3])
            {
                SCPIReceiveAnalysis(Form1.receiveTempData.ToArray());//显示并解析收到的SCPI指令
            }
            else
            {
                UsbIO.sendToARM(Form1.errorCode + Form1.end1 + Form1.end2);//返回指令校验错误信息
                Form1.dialogMessageShow("接收的指令校验结果出错");
            }
        }
Exemplo n.º 15
0
 //参数下载按钮
 private void button5_Click(object sender, EventArgs e)
 {
     if (UsbIO.is_Open())
     {
         ReadSet();//读取设置的参数,并在ReadSet函数里调用sendToCMDMachine函数把设置的参数发送给下位机
         if (setDataDownloadSuccessFlag)
         {
             textBox13.Text             = "参数下载成功";
             textBox13.BackColor        = Color.Red;//控件背景颜色改变
             setDataDownloadSuccessFlag = false;
         }
         else
         {
             textBox13.Text      = "参数下载失败";
             textBox13.BackColor = Color.Red;//控件背景颜色改变
         }
     }
     else
     {
         MessageBox.Show("设备未连接,请先连接设备"); //弹出提示对话框
     }
 }
        //判断并得到SCPI指令
        public static void SCPIReceiveJudge(byte[] buf)
        {
            bool endFlag = false;//用来判断结束码的两个字节均满足要求

            foreach (byte b in buf)
            {
                Form1.receiveTempData.Add(b);

                if (b == Form1.end1)
                {
                    endFlag = true;
                }
                if (b == Form1.end2 && endFlag)
                {
                    endFlag = false;
                    UsbIO.receiveDataShow(System.Text.Encoding.Default.GetString(Form1.receiveTempData.ToArray())); //调用方法把接收到的SCPI指令信息显示到接收数据窗口
                    SCPIReceiveCheck(Form1.receiveTempData.ToArray());                                              //进行SCPI指令的校验码校验

                    Form1.receiveTempData.Clear();                                                                  //清空存储SCPI指令的字节列表
                }
            }
        }