Exemplo n.º 1
0
 private void AskDataSend(byte cmd = 0x03, byte data = 0x00)
 {
     byte[] byteSendData = { 0x22, 0x06, 0x52, 0x02, 0x02, 0x00, 0x01, 0x00 };
     byteSendData[5] = cmd;
     byteSendData[6] = data;
     //计算校验和
     byteSendData[byteSendData.Length - 1] = Uart.byteCheakSum(byteSendData, 2, 5);
     //发送数据
     sp1_DataSend(Uart.byteToHexStr(byteSendData));
 }
Exemplo n.º 2
0
 private void menuRcvRhSave_Click(object sender, EventArgs e)
 {
     if (menuRcvRhSave.Text == "保存数据")
     {
         StartTimeNum = Uart.GetTimeStamp();
         SaveFileDialog save = new SaveFileDialog();
         save.Filter           = "表格格式|*.xls|文本格式|*.txt|所有格式|*.*";
         save.Title            = "保存参数";
         save.RestoreDirectory = true;
         save.FilterIndex      = 1;
         if (save.ShowDialog() == DialogResult.OK)
         {
             string str = save.FileName;
             try
             {
                 using (StreamWriter sw = new StreamWriter(str, false, Encoding.GetEncoding("gb2312")))
                 {
                     sw.Write("时间" + "\t" + "参数");
                     sw.Flush();
                     sw.Close();
                 }
             }
             catch (Exception)
             {
                 strRhOutPath = "";
                 MessageBox.Show("文件保存失败,请重新选择。");
                 return;
             }
             strRhOutPath       = str;
             menuRcvRhSave.Text = "取消保存";
         }
     }
     else
     {
         strRhOutPath       = "";
         menuRcvRhSave.Text = "保存数据";
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// 接收数据处理
        /// </summary>
        /// <param name="byteBuff">接收缓存数组</param>
        private void RcvDataProcess(byte[] byteBuff)
        {
            if (byteBuff.Length <= 0)
            {
                return;
            }
            else if (byteBuff.Length == 4)
            {
                if ((byteBuff[0] == 0x22) && (byteBuff[1] == 0x02))
                {
                    //水份参数
                    txtRcvRhH.Text = "0x" + byteBuff[2].ToString("X2") + byteBuff[3].ToString("X2");
                }
            }
            else if (byteBuff.Length == 17)
            {
                if ((byteBuff[0] == 0x22) && (byteBuff[1] == 0x0F) && (byteBuff[2] == 0xA5))
                {
                    if (byteBuff[16] == Uart.byteCheakSum(byteBuff, 2, 14))
                    {
                        //状态
                        switch (byteBuff[4])
                        {
                        case 0x00:
                            txtRcvStatus.Text = "关机";
                            break;

                        case 0x01:
                            txtRcvStatus.Text = "运行中";
                            break;

                        case 0x02:
                            txtRcvStatus.Text = "暂停";
                            break;

                        case 0x03:
                            txtRcvStatus.Text = "完成";
                            break;

                        case 0xA1:
                            txtRcvStatus.Text = "配置";
                            break;

                        default:
                            txtRcvStatus.Text = "未定义" + byteBuff[4].ToString("X2");
                            break;
                        }

                        //模式
                        if (Uart.isBinTest(byteBuff[5], 3))
                        {
                            txtRcvMode.Text   = "水份检测";
                            txtRcvAdjust.Text = "无";
                            if (!cbRH.DroppedDown && cbRH.SelectedIndex != 1)
                            {
                                cbRH.SelectedIndex = 1;
                            }
                        }
                        else
                        {
                            if (!cbRH.DroppedDown && cbRH.SelectedIndex != 0)
                            {
                                cbRH.SelectedIndex = 0;
                            }
                            string strMode   = "无";
                            string strAdjust = "无";
                            if (Uart.isBinTest(byteBuff[5], 0))
                            {
                                strAdjust = "弱";
                            }
                            if (Uart.isBinTest(byteBuff[5], 1))
                            {
                                strAdjust = "中";
                            }
                            if (Uart.isBinTest(byteBuff[5], 2))
                            {
                                strAdjust = "强";
                            }
                            if (Uart.isBinTest(byteBuff[5], 4))
                            {
                                strMode = "清洁";
                            }
                            if (Uart.isBinTest(byteBuff[5], 5))
                            {
                                strMode = "保湿";
                            }
                            if (Uart.isBinTest(byteBuff[5], 6))
                            {
                                strMode = "导入";
                            }
                            if (Uart.isBinTest(byteBuff[5], 7))
                            {
                                strMode = "冷敷";
                            }
                            txtRcvMode.Text   = strMode;
                            txtRcvAdjust.Text = strAdjust;
                        }

                        //运行时长
                        txtRcvTime.Text = byteBuff[6].ToString() + "秒";

                        //水份百分比
                        txtRcvRh1.Text = byteBuff[7].ToString() + "%";

                        //油分百分比
                        txtRcvRh2.Text = byteBuff[8].ToString() + "%";

                        //弹性百分比
                        txtRcvRh3.Text = byteBuff[9].ToString() + "%";

                        //加热片温度
                        txtRcvHotTemp.Text = byteBuff[10].ToString() + "℃";

                        //环境温度
                        txtRcvThTemp.Text = byteBuff[11].ToString() + "℃";

                        //水份参数
                        txtRcvRhH.Text = "0x" + byteBuff[12].ToString("X2") + byteBuff[13].ToString("X2");

                        //软件版本号
                        txtRcvVersion.Text = "V" + byteBuff[15].ToString();

                        //检测完成
                        DetectTaskDone();
                    }
                    else
                    {
                        //检验和错误
                        txtRcvError.Text = Convert.ToString((Convert.ToInt64(txtRcvError.Text) + 1));
                        funcOutputLog("校验和错误,应为" + Uart.byteCheakSum(byteBuff, 2, 14).ToString("X2") + ",实为" + byteBuff[16] + "。", "错误");
                    }
                }
            }
            else if (byteBuff.Length == 14)
            {
                if ((byteBuff[0] == 0x22) && (byteBuff[1] == 12) && (byteBuff[2] == 0x52) && (byteBuff[3] == 0x02))
                {
                    if (byteBuff[13] == Uart.byteCheakSum(byteBuff, 2, byteBuff[1] - 1))
                    {
                        if (byteBuff[5] == 0x03)
                        {
                            //状态
                            switch (byteBuff[6])
                            {
                            case 0x00:
                                txtRcvStatus.Text = "关机";
                                break;

                            case 0x01:
                                txtRcvStatus.Text = "运行中";
                                break;

                            case 0x02:
                                txtRcvStatus.Text = "暂停";
                                break;

                            case 0x03:
                                txtRcvStatus.Text = "完成";
                                break;

                            case 0xA1:
                                txtRcvStatus.Text = "配置";
                                break;

                            default:
                                txtRcvStatus.Text = "未定义" + byteBuff[6].ToString("X2");
                                break;
                            }

                            //模式
                            if (Uart.isBinTest(byteBuff[7], 3))
                            {
                                txtRcvMode.Text   = "水份检测";
                                txtRcvAdjust.Text = "无";
                                if (!isSendDataChange && !cbRH.DroppedDown && cbRH.SelectedIndex != 1)
                                {
                                    cbRH.SelectedIndex = 1;
                                }
                            }
                            else
                            {
                                if (!isSendDataChange && !cbRH.DroppedDown && cbRH.SelectedIndex != 0)
                                {
                                    cbRH.SelectedIndex = 0;
                                }
                                string strMode   = "无";
                                string strAdjust = "无";
                                if (Uart.isBinTest(byteBuff[7], 0))
                                {
                                    strAdjust = "弱";
                                }
                                if (Uart.isBinTest(byteBuff[7], 1))
                                {
                                    strAdjust = "中";
                                }
                                if (Uart.isBinTest(byteBuff[7], 2))
                                {
                                    strAdjust = "强";
                                }
                                if (Uart.isBinTest(byteBuff[7], 4))
                                {
                                    strMode = "清洁";
                                }
                                if (Uart.isBinTest(byteBuff[7], 5))
                                {
                                    strMode = "保湿";
                                }
                                if (Uart.isBinTest(byteBuff[7], 6))
                                {
                                    strMode = "导入";
                                }
                                if (Uart.isBinTest(byteBuff[7], 7))
                                {
                                    strMode = "冷敷";
                                }
                                txtRcvMode.Text   = strMode;
                                txtRcvAdjust.Text = strAdjust;
                            }
                            //运行时长
                            txtRcvTime.Text = byteBuff[8].ToString() + "秒";

                            //水份百分比
                            txtRcvRh1.Text = byteBuff[9].ToString() + "%";

                            //油分百分比
                            txtRcvRh2.Text = byteBuff[10].ToString() + "%";

                            //弹性百分比
                            txtRcvRh3.Text = byteBuff[11].ToString() + "%";

                            //环境温度
                            txtRcvThTemp.Text = byteBuff[12].ToString() + "℃";

                            //发送应答数据
                            AskDataSend();
                        }

                        //检测完成
                        DetectTaskDone();
                    }
                    else
                    {
                        //检验和错误
                        txtRcvError.Text = Convert.ToString((Convert.ToInt64(txtRcvError.Text) + 1));
                        funcOutputLog("校验和错误,应为" + Uart.byteCheakSum(byteBuff, 2, byteBuff[1] - 1).ToString("X2") + ",实为" + byteBuff[13] + "。", "错误");
                    }
                }
            }
            else if (byteBuff.Length == 15)
            {
                if ((byteBuff[0] == 0x22) && (byteBuff[1] == 13) && (byteBuff[2] == 0x52) && (byteBuff[3] == 0x02))
                {
                    if (byteBuff[14] == Uart.byteCheakSum(byteBuff, 2, byteBuff[1] - 1))
                    {
                        if (byteBuff[5] == 0x03)
                        {
                            //状态
                            switch (byteBuff[6])
                            {
                            case 0x00:
                                txtRcvStatus.Text = "关机";
                                break;

                            case 0x01:
                                txtRcvStatus.Text = "运行中";
                                break;

                            case 0x02:
                                txtRcvStatus.Text = "暂停";
                                break;

                            case 0x03:
                                txtRcvStatus.Text = "完成";
                                break;

                            case 0xA1:
                                txtRcvStatus.Text = "配置";
                                break;

                            default:
                                txtRcvStatus.Text = "未定义" + byteBuff[6].ToString("X2");
                                break;
                            }

                            //模式
                            if (Uart.isBinTest(byteBuff[7], 3))
                            {
                                txtRcvMode.Text   = "水份检测";
                                txtRcvAdjust.Text = "无";
                                if (!isSendDataChange && !cbRH.DroppedDown && cbRH.SelectedIndex != 1)
                                {
                                    cbRH.SelectedIndex = 1;
                                }
                            }
                            else
                            {
                                if (!isSendDataChange && !cbRH.DroppedDown && cbRH.SelectedIndex != 0)
                                {
                                    cbRH.SelectedIndex = 0;
                                }
                                string strMode   = "无";
                                string strAdjust = "无";
                                if (Uart.isBinTest(byteBuff[7], 0))
                                {
                                    strAdjust = "弱";
                                }
                                if (Uart.isBinTest(byteBuff[7], 1))
                                {
                                    strAdjust = "中";
                                }
                                if (Uart.isBinTest(byteBuff[7], 2))
                                {
                                    strAdjust = "强";
                                }
                                if (Uart.isBinTest(byteBuff[7], 4))
                                {
                                    strMode = "清洁";
                                }
                                if (Uart.isBinTest(byteBuff[7], 5))
                                {
                                    strMode = "保湿";
                                }
                                if (Uart.isBinTest(byteBuff[7], 6))
                                {
                                    strMode = "导入";
                                }
                                if (Uart.isBinTest(byteBuff[7], 7))
                                {
                                    strMode = "冷敷";
                                }
                                txtRcvMode.Text   = strMode;
                                txtRcvAdjust.Text = strAdjust;
                            }
                            //运行时长
                            txtRcvTime.Text = byteBuff[8].ToString() + "秒";

                            //水份百分比
                            txtRcvRh1.Text = byteBuff[9].ToString() + "%";

                            //油分百分比
                            txtRcvRh2.Text = byteBuff[10].ToString() + "%";

                            //弹性百分比
                            txtRcvRh3.Text = byteBuff[11].ToString() + "%";

                            //环境温度
                            txtRcvThTemp.Text = byteBuff[12].ToString() + "℃";

                            //电量
                            switch (byteBuff[13])
                            {
                            case 0x00:
                                txtRcvVersion.Text = "充电中";
                                break;

                            case 0x01:
                                txtRcvVersion.Text = "一格";
                                break;

                            case 0x02:
                                txtRcvVersion.Text = "二格";
                                break;

                            case 0x03:
                                txtRcvVersion.Text = "三格";
                                break;

                            case 0x04:
                                txtRcvVersion.Text = "四格";
                                break;

                            case 0x05:
                                txtRcvVersion.Text = "满格";
                                break;

                            case 0x06:
                                txtRcvVersion.Text = "充电完成";
                                break;

                            default:
                                txtRcvVersion.Text = byteBuff[13].ToString();
                                break;
                            }

                            //发送应答数据
                            AskDataSend();
                        }

                        //检测完成
                        DetectTaskDone();
                    }
                    else
                    {
                        //检验和错误
                        txtRcvError.Text = Convert.ToString((Convert.ToInt64(txtRcvError.Text) + 1));
                        funcOutputLog("校验和错误,应为" + Uart.byteCheakSum(byteBuff, 2, byteBuff[1] - 1).ToString("X2") + ",实为" + byteBuff[14] + "。", "错误");
                    }
                }
            }
            else if (byteBuff.Length == 8)
            {
                if ((byteBuff[0] == 0x22) && (byteBuff[1] == 6) && (byteBuff[2] == 0x52) && (byteBuff[3] == 0x02))
                {
                    if (byteBuff[7] == Uart.byteCheakSum(byteBuff, 2, byteBuff[1] - 1))
                    {
                        if (byteBuff[5] == 0x0E)
                        {
                            txtRcvError.Text = Convert.ToString((Convert.ToInt64(txtRcvError.Text) + 1));
                            funcOutputLog("接收端通信错误,错误代号:" + byteBuff[6] + "。", "错误");
                        }
                    }
                }
            }
            else
            {
                txtRcvError.Text = Convert.ToString((Convert.ToInt64(txtRcvError.Text) + 1));
                funcOutputLog("接收到无法解析的数据。", "错误");
            }
        }
Exemplo n.º 4
0
        private void timUart_Tick(object sender, EventArgs e)
        {
            if (Function.F_PROT_SEND == "0")
            {
                byte[] byteSendData = { 0x22, 0x06, 0xA5, 0x00, 0x00, 0x00, 0x01, 0x00 };
                //设置命令帧类型
                if (isSendDataChange)
                {
                    isSendDataChange = false;
                    byteSendData[3]  = 0x01;
                }

                //设置APP状态
                byteSendData[4] = byteSendDataAPP;
                if (byteSendDataAPP != 0x00)
                {
                    byteSendDataAPP     = 0x00;
                    cbAPP.SelectedIndex = 0; // 复位APP状态
                }

                //设置水份检测开关
                byteSendData[5] = byteSendDataRH;

                //计算校验和
                byteSendData[byteSendData.Length - 1] = Uart.byteCheakSum(byteSendData, 2, 5);

                //发送数据
                sp1_DataSend(Uart.byteToHexStr(byteSendData));
            }
            else if (Function.F_PROT_SEND == "1")
            {
                //判断发送命令标志
                if (isSendDataChange || (byteSendDataAPP != 0x00))
                {
                    byte[] byteSendData = { 0x22, 0x06, 0x52, 0x02, 0x01, 0x01, 0x00, 0x00 };
                    isSendDataChange = false;

                    //设置APP状态
                    if (byteSendDataAPP != 0x00)
                    {
                        byteSendData[5] = 0x01;
                        switch (byteSendDataAPP)
                        {
                        case 0xA0:
                            byteSendData[6] = 0x01;
                            break;

                        case 0xA1:
                            byteSendData[6] = 0x02;
                            break;

                        case 0xA2:
                            byteSendData[6] = 0x03;
                            break;

                        case 0xAE:
                            byteSendData[6] = 0x04;
                            break;

                        default:
                            byteSendData[6] = 0x00;
                            break;
                        }
                        // 复位APP状态
                        byteSendDataAPP     = 0x00;
                        cbAPP.SelectedIndex = 0;
                    }
                    //设置水份检测开关
                    else
                    {
                        byteSendData[5] = 0x02;
                        byteSendData[6] = Convert.ToByte(byteSendDataRH == Convert.ToByte(0x08) ? 0x01 : 0x00);
                    }

                    //计算校验和
                    byteSendData[byteSendData.Length - 1] = Uart.byteCheakSum(byteSendData, 2, 5);

                    //发送数据
                    sp1_DataSend(Uart.byteToHexStr(byteSendData));
                }
            }
            else
            {
                funcOutputLog("无法识别发送协议,请在功能设置中重新选择", "错误");
                return;
            }

            if (++intCharNum > 3)
            {
                intCharNum = 1;
            }
            funcOutputLog("串口通信中" + new string('.', intCharNum), "状态");
        }