⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zdjcform.~cpp

📁 织带机监测系统的上位机软件。RS-485总线
💻 ~CPP
📖 第 1 页 / 共 3 页
字号:
                        Debug += Hex;
                   }

                   Hex.printf ("%.2X ", CRCValue.b[0]);
                   Debug += Hex;
                   Hex.printf ("%.2X ", CRCValue.b[1]);
                   Debug += Hex;
                   Debug += "\n";
                   ErrorMessage (Debug.c_str());
               }
           }

           if (iBufLength == 4)
           {
               CRCValue.w = CRC16 (Buffer, 2);
               if (CRCValue.b[0] == Buffer[2] &&
                   CRCValue.b[1] == Buffer[3])  //校验码判断
               {
                   switch (Buffer[1])
                   {
                   case 0x86:
                        ShowMessage ("设置时间成功!");
                        break;
                   case 0x83:
                        ShowMessage ("设置信息成功!");
                        bAddress = EditAddress->Text.ToInt();
                        TreeView->Selected->Text = EditAddress->Text;
                        break;
                   case 0x81:
                        ShowMessage ("设置交班成功!");
                        break;
                   }
               }
               else
               {
                   StatusBar->Panels->Items[2]->Text = "CRC校验错!";
                   AnsiString Hex, Debug;
                   for (int i=0; i<iBufLength; i++)
                   {
                        Hex.printf ("%.2X ", Buffer[i]);
                        Debug += Hex;
                   }

                   Hex.printf ("%.2X ", CRCValue.b[0]);
                   Debug += Hex;
                   Hex.printf ("%.2X ", CRCValue.b[1]);
                   Debug += Hex;
                   Debug += "\n";
                   ErrorMessage (Debug.c_str());
               }
           }

      }
}

void __fastcall TMainForm::TimerSeekTimer(TObject *Sender)
{
     //计算校验码
     WORDTYPE CRCValue;
     AnsiString TerCountString;
     AnsiString TryTimes;
     AnsiString AddressString;

     if (bAddress >= iPosBeg &&
         bAddress <= iPosEnd)
     {
         if (iTryTimes < iPosTimes)
         {
             SendData (bAddress, Command_85, 4, 11);

             AddressString = bAddress;
             TryTimes = iTryTimes;
             StatusBar->Panels->Items[1]->Text = "正在搜索" + AddressString + "号设备,第" + TryTimes +"次尝试 ...";
             iTryTimes ++;
         }
         else
         {
             iTryTimes = 0;
             bAddress ++;
         }
         StatusBar->Panels->Items[3]->Text = "正在搜索" + SelComNode->Text + "上的设备...";
     }
     else
     {
         TerCountString = iTerCount;
         TimerSeek->Enabled = false;

         if (Comm.IsOpen())
         {
             StatusBar->Panels->Items[0]->Text = SelComNode->Text + "已经关闭!";
             Comm.Close();
         }
         StatusBar->Panels->Items[1]->Text = "";
         StatusBar->Panels->Items[3]->Text = "搜索完毕,共搜索到" + TerCountString + "个设备!";
     }
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
     TimerSeek->Enabled = false;
     TimerQuery->Enabled = false;

     if (Comm.IsOpen())
         Comm.Close();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::TimerQueryTimer(TObject *Sender)
{
     switch (ComStatus)
     {
     case COM_80:
          SendData (bAddress, Command_80, 4, 22);
          break;
     case COM_82:
          SendData (bAddress, Command_82, 4, 22);
          break;
     case COM_84:
          SendData (bAddress, Command_84, 5, 35);
          break;
     case COM_85:
          SendData (bAddress, Command_85, 4, 11);
          break;
     }
     StatusBar->Panels->Items[3]->Text = "正在与" + TreeView->Selected->Text + "号设备通信!";
}
//---------------------------------------------------------------------------

void TMainForm::ReadZDClassInfo (Byte *Buffer)
{
     WORDTYPE WordType;
     //织带长度
     WordType.b[1] = Buffer[3];
     WordType.b[0] = Buffer[4];
     LCDZDCD->Value = WordType.w;
     //织带时间
     WordType.b[1] = Buffer[5];
     WordType.b[0] = Buffer[6];
     LCDZDSJ->Value = WordType.w;
     //调试长度
     WordType.b[1] = Buffer[7];
     WordType.b[0] = Buffer[8];
     LCDTSCD->Value = WordType.w;
     //调试时间
     WordType.b[1] = Buffer[9];
     WordType.b[0] = Buffer[10];
     LCDTSSJ->Value = WordType.w;
     //异常脉冲次数
     WordType.b[1] = Buffer[11];
     WordType.b[0] = Buffer[12];
     LCDYCMC->Value = WordType.w;
     //累计停机次数
     //WordType.b[1] = Buffer[9];
     //WordType.b[0] = Buffer[10];
     //LCDTJCS->Value = WordType.w;
     //主机停机次数
     WordType.b[1] = Buffer[13];
     WordType.b[0] = Buffer[14];
     LCDZJTCS->Value = WordType.w;
     //主机停机时间
     WordType.b[1] = Buffer[15];
     WordType.b[0] = Buffer[16];
     LCDZJTSJ->Value = WordType.w;
     //经线断停机次数
     LCDJDCS->Value = Buffer[17];
     //经线断停机时间
     LCDJDSJ->Value = Buffer[18];
     //纬线断停机次数
     LCDWDCS->Value = Buffer[19];
     //纬线断停机时间
     LCDWDSJ->Value = Buffer[20];
     //底线断停机次数
     LCDDDCS->Value = Buffer[21];
     //底线断停机时间
     LCDDDSJ->Value = Buffer[22];
     //卷绕停机次数
     LCDJRCS->Value = Buffer[23];
     //卷绕停机时间
     LCDJRSJ->Value = Buffer[24];
     //记录号
     LCDRecordID->Value = Buffer[2];
     //班开始时间
     LCDBegin->Value = GetBegin(Buffer);
     //班结束时间
     LCDEnd->Value = GetEnd(Buffer);
     //当班日期
     LCDClassDate->Value = GetDate(Buffer);
}

void TMainForm::ReadGroupInfo (Byte *Barray)
{
     Edit_11->Text = BCDToStr(Barray[2]);
     Edit_12->Text = BCDToStr(Barray[3]);
     Edit_13->Text = BCDToStr(Barray[4]);
     Edit_14->Text = BCDToStr(Barray[5]);

     Edit_21->Text = BCDToStr(Barray[6]);
     Edit_22->Text = BCDToStr(Barray[7]);
     Edit_23->Text = BCDToStr(Barray[8]);
     Edit_24->Text = BCDToStr(Barray[9]);

     Edit_31->Text = BCDToStr(Barray[10]);
     Edit_32->Text = BCDToStr(Barray[11]);
     Edit_33->Text = BCDToStr(Barray[12]);
     Edit_34->Text = BCDToStr(Barray[13]);

     if (Barray[18] == 0x03)
         RadioButtonThree->Checked = true;

     if (Barray[18] == 0x04)
         RadioButtonFour->Checked = true;

     if (RadioButtonFour->Checked)
     {
         Edit_41->Text = BCDToStr(Barray[14]);
         Edit_42->Text = BCDToStr(Barray[15]);
         Edit_43->Text = BCDToStr(Barray[16]);
         Edit_44->Text = BCDToStr(Barray[17]);
     }
     else
     {
         Edit_41->Text = "";
         Edit_42->Text = "";
         Edit_43->Text = "";
         Edit_44->Text = "";
     }
}


void __fastcall TMainForm::TBHaltCommClick(TObject *Sender)
{
     TimerSeek->Enabled = false;
     TimerQuery->Enabled = false;

     

     if (Comm.IsOpen ())
     {
         //Comm.Close ();
         //StatusBar->Panels->Items[0]->Text = SelComNode->Text + "已经关闭!";
         StatusBar->Panels->Items[1]->Text = "";
         StatusBar->Panels->Items[2]->Text = "";
         StatusBar->Panels->Items[3]->Text = "通信被终止!";
     }
}
//---------------------------------------------------------------------------

AnsiString TMainForm::GetDate(Byte *Barray)
{
      AnsiString DateString;
      DateString = BCDToStr(Barray[32]);
      DateString = DateString + ".";
      DateString = DateString + BCDToStr(Barray[30]);
      DateString = DateString + ".";
      DateString = DateString + BCDToStr(Barray[29]);
      return DateString;
}

AnsiString TMainForm::GetStartDate(Byte *Barray)
{
      AnsiString DateString;
      DateString = BCDToStr(Barray[19]);
      DateString = DateString + ".";
      DateString = DateString + BCDToStr(Barray[17]);
      DateString = DateString + ".";
      DateString = DateString + BCDToStr(Barray[16]);
      DateString = DateString + ".";
      DateString = DateString + BCDToStr(Barray[15]);
      DateString = DateString + ".";
      DateString = DateString + BCDToStr(Barray[14]);
      DateString = DateString + ".";
      DateString = DateString + BCDToStr(Barray[13]);
      return DateString;
}

AnsiString TMainForm::GetBegin (Byte *Barray)
{
      AnsiString DateString;
      DateString = BCDToStr(Barray[25]);
      DateString = DateString + ".";
      DateString = DateString + BCDToStr(Barray[26]);
      return DateString;
}

AnsiString TMainForm::GetEnd (Byte *Barray)
{
      AnsiString DateString;
      DateString = BCDToStr(Barray[27]);
      DateString = DateString + ".";
      DateString = DateString + BCDToStr(Barray[28]);
      return DateString;
}

//---------------------------------------------------------------------------
AnsiString TMainForm::BCDToStr(Byte bBCD)
{
      Byte bData;
      AnsiString StrDataH, StrDataL;
      bData = bBCD & 0xf0;   //高位
      bData = bData >> 4;
      StrDataH = bData;
      bData = bBCD & 0x0f;
      StrDataL = bData;
      return StrDataH + StrDataL;
}

//---------------------------------------------------------------------------
void TMainForm::ReadTermInfo (Byte *Buffer)        //读终端信息
{
     WORDTYPE WordType;
     //脉冲
     WordType.b[1] = Buffer[2];
     WordType.b[0] = Buffer[3];
     LCDPulse->Value = WordType.w;
     //K值
     WordType.b[1] = Buffer[4];
     WordType.b[0] = Buffer[5];
     EditKValue->Text = WordType.w;
     //本机状态
     switch (Buffer[6])
     {
     case 0x00:
          StatusBar->Panels->Items[1]->Text = "主机停——调试!";
          break;
     case 0x01:
          StatusBar->Panels->Items[1]->Text = "主机转——调试!";
          break;
     case 0x02:
          StatusBar->Panels->Items[1]->Text = "主机停——运行!";
          break;
     case 0x03:
          StatusBar->Panels->Items[1]->Text = "主机转——运行!";
          break;
     }
     //波特率
     ComboBoxBaud->ItemIndex = Buffer[7];
     //通信地址
     EditAddress->Text = Buffer[8];
     //机器号
     WordType.b[1] = Buffer[9];
     WordType.b[0] = Buffer[10];
     EditMachNum->Text = WordType.w;
     //车间号
     EditShopNum->Text = Buffer[11];
     //分厂号
     EditFactNum->Text = Buffer[12];
     //开机时间
     LCDStart->Value = GetStartDate (Buffer);
}

void TMainForm::ReadTimeInfo (Byte *Barray)
{
     WORDTYPE WordType;
     EditSecond->Text = BCDToStr(Barray[2]);
     EditMin->Text = BCDToStr(Barray[3]);
     EditHour->Text = BCDToStr(Barray[4]);

     EditWeek->Text = BCDToStr(Barray[7]);

     EditDate->Text = BCDToStr(Barray[5]);
     EditMonth->Text = BCDToStr(Barray[6]);
     EditYear->Text = BCDToStr(Barray[8]);
}

void TMainForm::SendData (Byte bAddr, Byte *Barray, int iLen, int iRecive)
{
     WORDTYPE CRCValue;
     Barray[0] = bAddr;
     CRCValue.w = CRC16 (Barray, iLen-2);
     Barray[iLen-2] = CRCValue.b[0];
     Barray[iLen-1] = CRCValue.b[1];
     Comm.Write (Barray, iLen);
     Comm.SetNotifyNum (iRecive);
}

void __fastcall TMainForm::EditKValueKeyPress(TObject *Sender, char &Key)
{
     KeyIsDigital (this->Handle, EditKValue, Key);
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::EditAddressKeyPress(TObject *Sender, char &Key)
{
     KeyIsDigital (this->Handle, EditAddress, Key);
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::EditMachNumKeyPress(TObject *Sender, char &Key)
{
     KeyIsDigital (this->Handle, EditMachNum, Key);
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::EditShopNumKeyPress(TObject *Sender, char &Key)
{
     KeyIsDigital (this->Handle, EditShopNum, Key);
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::EditFactNumKeyPress(TObject *Sender, char &Key)
{
     KeyIsDigital (this->Handle, EditFactNum, Key);
}
//---------------------------------------------------------------------------


void __fastcall TMainForm::BitBtnModifyClick(TObject *Sender)
{
     bool TimerStatus;
     Byte Buffer[22];
     WORDTYPE WordType;
     TimerStatus = TimerQuery->Enabled;
     TimerQuery->Enabled = false;

     //准备数据
     Buffer[0] = bAddress;
     //命令
     Buffer[1] = 0x83;
     //脉冲周期
     WordType.w = LCDPulse->Value.ToInt();
     Buffer[2] = WordType.b[1];
     Buffer[3] = WordType.b[0];
     //K值
     WordType.w = EditKValue->Text.ToIntDef(1);
     Buffer[4] = WordType.b[1];
     Buffer[5] = WordType.b[0];
     //波特率
     Buffer[7] = ComboBoxBaud->ItemIndex;
     //通信地址
     Buffer[8] = EditAddress->Text.ToIntDef(1);
     //机器号
     WordType.w = EditMachNum->Text.ToIntDef(0);
     Buffer[9] = WordType.b[1];
     Buffer[10] = WordType.b[0];
     //车间号
     Buffer[11] = EditShopNum->Text.ToIntDef(0);
     //分厂号
     Buffer[12] = EditFactNum->Text.ToIntDef(0);

     WordType.w = CRC16 (Buffer, 20);
     Buffer[20] = WordType.b[0];
     Buffer[21] = WordType.b[1];

     //发送数据
     SendData (bAddress, Buffer, 22, 4);

     TimerQuery->Enabled = TimerStatus;
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::BitBtnTimeClick(TObject *Sender)
{
     bool TimerStatus;
     Byte Buffer[11];
     WORDTYPE WordType;
     TimerStatus = TimerQuery->Enabled;
     TimerQuery->Enabled = false;

     //准备数据
     //地址
     Buffer[0] = bAddress;
     //命令
     Buffer[1] = 0x86;
     //年
     Buffer[8] = StrToBCD(EditYear->Text);
     //星期
     Buffer[7] = StrToBCD(EditWeek->Text);
     //月
     Buffer[6] = StrToBCD(EditMonth->Text);
     //日
     Buffer[5] = StrToBCD(EditDate->Text);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -