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

📄 basemain.cpp.bak

📁 符合移动协议的见空系统,很有使用简直,希望多下载
💻 BAK
📖 第 1 页 / 共 5 页
字号:
void __fastcall TForm1::btnOpenClick(TObject *Sender)
{
  m_bOpenPort=!m_bOpenPort;
  if(m_bOpenPort)
  {
    btnOpen->Caption = "打开";
    m_Port.ClosePort();
    ShpPort->Brush->Color = clBlack;
    m_bOpenPort = true;
  }
  else
  {
		m_nBaud = StrToInt(CmbBand->Text);
		m_nCom = strtol(((CmbPort->Text).SubString(4,1)).c_str(), NULL, 10);
		m_cParity='N';
		m_nDatabits=8;
		m_nStopbits=1;
		m_dwCommEvents = EV_RXFLAG | EV_RXCHAR;

	  if(m_Port.InitPort(m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
	  {
	    m_Port.StartMonitoring();
	    ShpPort->Brush->Color = clRed;
      btnOpen->Caption = "关闭";
	  }
	  else
	  {
      Form2->SetMsgText("串口资源被占用!");
      Form2->ShowModal();
	    ShpPort->Brush->Color = clBlack;
      btnOpen->Caption = "打开";
      m_bOpenPort = true;
	  }
  }
}
//---------------------------------------------------------------------------


void __fastcall TForm1::btnCloseClick(TObject *Sender)
{
  m_Port.ClosePort();
  ShpPort->Brush->Color = clBlack;
  btnOpen->Enabled = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnQueryClick(TObject *Sender)
{
	if(m_Port.m_hComm==NULL)
	{
    Form2->SetMsgText("请打开串行口!");
    Form2->ShowModal();
    return;
	}
	else
	{
    miCmd = 0x11;
    Form3->InitShow(DELAY_DIRECT/1000 * 9);
    Timer1->Enabled = false;
    SetEvent(m_Port.m_hEvent);
    if(gb_Direct)
    {
      gpmemfun = &TForm1::SendQueryPackDirect;
    }
    StartThread();
    Form3->ShowModal();
	}
}

void __fastcall TForm1::StartThread()
{
   mhSubThread	= CreateThread (NULL, 0, StartSubThread, NULL, 4, NULL);
   ResumeThread(mhSubThread);
}

int __fastcall TForm1::StaticsActualPack(INT8U QueryStatus, INT8U bModem)
{
  int i=0, posLen = 0;
  INT8U Temp[50], Max_Pack;
  bool flag = false;
  
  AnsiString  MessageText;
  if(QueryStatus == 0x02)
    MessageText = "请选择您要查询的监控参量";
  else if(QueryStatus == 0x03)
    MessageText = "你要设置的监控参量不能为空!";
  
  miSelCount = 0;
  for(i = 0; i < MAX_OBJECTID; i++)
  {
    if(gp_ComGrid[i].bUsed)
    {
      if(gp_ComGrid[i].pCb->Checked)
      {
        if(QueryStatus == 0x03)
        {
          if(i>0x0300 && i<0x03FF)
            continue;
          else if((i>0x0500 && i<0x05FF) || i==0x0606 || i==0x0019)
          {
            if(!flag)
            {
              mSelObject[miSelCount].Object_ID = 0xA204;
              mSelObject[miSelCount++].Object_Length = 24;
              flag = true;
            }
            continue;
          }
          if(gObjectValue[i].bSingle)
          {
            if(gp_ComGrid[i].pCbx->ItemIndex == -1)
            {
               Form2->SetMsgText("对不起,有对象未设置实例");
               Form2->ShowModal();
               return 0;
            }
          }
          else
          {
            if((gp_ComGrid[i].pEd->Text).IsEmpty())
            {
               Form2->SetMsgText("对不起,有对象未设置实例");
               Form2->ShowModal();
               return 0;
            }
          }
        }
        mSelObject[miSelCount].Object_ID = gp_ComGrid[i].ObjectID;
        mSelObject[miSelCount++].Object_Length = gp_ComGrid[i].SizeLen;
      }
    }
  }
  if(miSelCount == 0)
  {
    Form2->SetMsgText(MessageText);
    Form2->ShowModal();
    return 0;
  }

  PackCount = 0;
  posLen = 0;
  if(bModem)
    Max_Pack = MAX_MDM_VALID_PACK_SIZE;
  else
    Max_Pack = MAX_VALID_PACK_SIZE;
    
  for(i = 0; i < miSelCount; i++)
  {
    BuildObjectPack(mSelObject[i].Object_ID, mSelObject[i].Object_Length, Temp);
    if((posLen + mSelObject[i].Object_Length + 3) > Max_Pack)
    {
      posLen = 0;
      PackCount ++;
    }
    posLen = posLen + mSelObject[i].Object_Length + 3;
  }
  if(posLen > 0)
    PackCount++;
  return PackCount;
}

int __fastcall TForm1::StaticsObjPack(INT16U SelObject[][2], INT8U QueryStatus, INT8U bModem)
{
  int i=0, posLen = 0;
  INT8U Temp[50], Max_Pack;

  AnsiString  MessageText;
  if(QueryStatus == 0x02)
    MessageText = "请选择您要查询的监控参量";
  else if(QueryStatus == 0x03)
    MessageText = "你要设置的监控参量不能为空!";

  PackCount = 0;
  posLen = 0;
  if(bModem)
    Max_Pack = MAX_MDM_VALID_PACK_SIZE;
  else
    Max_Pack = MAX_VALID_PACK_SIZE;

  for(i = 0; i < SelObject[i][0]!=0; i++)
  {
    mSelObject[i].Object_ID = gp_ComGrid[SelObject[i][0]].ObjectID;
    mSelObject[i].Object_Length = gp_ComGrid[SelObject[i][0]].SizeLen;
    BuildObjectPack(mSelObject[i].Object_ID, mSelObject[i].Object_Length, Temp);
    if((posLen + mSelObject[i].Object_Length + 3) > Max_Pack)
    {
      posLen = 0;
      PackCount ++;
    }
    posLen = posLen + mSelObject[i].Object_Length + 3;
  }
  miSelCount = i;
  if(posLen > 0)
    PackCount++;
  return PackCount;
}

void __fastcall TForm1::CommonSend(INT8U QueryStatus, INT8U *SndPack, int PackLen)
{
  String InfoLine, InfoTitle;
  char szHead[100];
  INT8U rslt = FALSE;
  static char szType[][20]=
  {
    "",
    "查询监控列表",
    "查询",
    "设置",
    "恢复到出厂设置",
    "",
    "",
    "",
    "",
    "",
    "",
    "切换监控软件版本",
    "",
  };
  memset(gSPackData.depack_data, 0 , DEPACK_LENGTH);
  if(!gb_Direct)
  {
    Form3->InitShow(DELAY_DIRECT/1000 * 9);
    Timer2->Enabled = true;
  }
  if(QueryStatus == 0x0B)
    gSPackData.depack_data[PRTCL_POS_TYPE] = 0x11;
  else if(QueryStatus >= 0x03)
    gSPackData.depack_data[PRTCL_POS_TYPE] = 0x03;
  else
    gSPackData.depack_data[PRTCL_POS_TYPE] = 0x02;

  str_cpy(&gSPackData.depack_data[PRTCL_POS_VARIABLE], SndPack, PackLen);
  gp_SPack->Build_Pack(&gSPackData, PackLen);
  InfoTitle.sprintf("正在发送%d/%d包数据(%s)。", PackPos, PackCount,szType[QueryStatus]);

  Form3->st_Status->Caption = InfoTitle;
  if(gb_Direct)
    InfoLine = INT8U_2_Str(gSPackData.depack_data, gSPackData.len_depack);
  else
  {
    InfoLine = (char*)gSPackData.packed_data;

    sprintf(szHead, "成功接收%d/%d包数据:(%s)", PackPos, PackCount, szType[QueryStatus]);
    CIntPtrMap *t = new CIntPtrMap(gp_SPack->GetPackId(), szHead);
    if(!gSendPackTree.Insert(t))
	  {
      MessageBox(NULL, "Insert Node", "Fail!", MB_OK);
   	}
  }

  InfoTitle.sprintf("正在发送%d/%d包数据(%s):", PackPos++, PackCount, szType[QueryStatus]);
  InfoLine = InfoTitle + InfoLine;
  MergeObjectInfo(InfoLine);
  ResetEvent(gOkEvent);
  ResetEvent(gErrEvent);
  rslt = gp_SPack->Send_Data();
  if(!gb_Direct)
  {
    if(rslt == FALSE)
      InfoLine += "  发送失败!";
    else
      InfoLine += "  发送完毕!";
    EnterCriticalSection(&g_csSync);
    Memo1->Lines->Delete(Memo1->Lines->Count - 1);
    Memo1->Lines->Add(InfoLine);
    LeaveCriticalSection(&g_csSync);
    Timer2->Enabled = false;
  }
}

void TForm1::SendQueryPackDirect()
{
  String InfoLine, InfoTitle;
  char buf[_1K];
  INT8U SinglePack[MAX_PACK_SIZE], PackLen;
  DWORD Event;
  strcpy(buf, "00");

  PackPos = 1;
  PackCount = 1;
  gSendPackCount = PackCount;
  SinglePack[0] = 0x0;
  str_cpy(&gSPackData.depack_data[6], SinglePack, 0);
  gp_SPack->Build_485Pack(&gSPackData, 0, miCmd);

  InfoLine = INT8U_2_Str(gSPackData.depack_data, gSPackData.len_depack);
  InfoTitle.sprintf("正在发送数据包:%s", InfoLine);
  MergeObjectInfo(InfoTitle);
  Form3->st_Status->Caption = "正在发送1包数据....";
  ResetEvent(gOkEvent);
  ResetEvent(gErrEvent);

  gp_SPack->Send_Data();

  Timer2->Enabled = true;
  Form3->pr_Bar_Status->Position = 0;
  Event = WaitForMultipleObjects(2, m_hEventArray, FALSE, DELAY_DIRECT);
  Timer2->Enabled = false;
  if(Event == WAIT_TIMEOUT || Event == 1)
  {
    goto Exit;
  }
  gSendPackCount--;
  InfoLine.sprintf("成功接受数据包%s", INT8U_2_Str(gReceivePackData.depack_data, gReceivePackData.len_depack));
  MergeObjectInfo(InfoLine);
  DealReceivePack();
Exit:
  if(Form3->Visible)
    Form3->Close();
  if(gSendPackCount == 0)
    MsgText = "数据发送成功";
  else
    MsgText = "通讯超时:发送数据失败!";
  SendMessage(this->Handle, MESSAGE_SHOW, 0, 0);
}

//---------------------------------------------------------------------------


void __fastcall TForm1::DispReceiveLine(char *pStatus)
{
  String InfoLine, InfoTitle;
  if(gb_Direct)
    InfoLine = INT8U_2_Str(gReceivePackData.depack_data, gReceivePackData.len_depack);
  else
    InfoLine = (char*)gReceivePackData.packed_data;
  InfoTitle.sprintf("成功接收%d/%d包数据:(%s):", PackPos-1, PackCount, pStatus);
  InfoLine = InfoTitle + InfoLine;
  MergeObjectInfo(InfoLine);
}

void __fastcall TForm1::DispErrorLine(char *pStatus)
{
  String InfoLine, InfoTitle;
  if(gb_Direct)
    InfoLine = INT8U_2_Str(gReceivePackData.depack_data, gReceivePackData.len_depack);
  else
    InfoLine = (char*)gReceivePackData.packed_data;
  InfoTitle.sprintf("%s:", pStatus);
  InfoLine = InfoTitle + InfoLine;
  MergeObjectInfo(InfoLine);
}

void __fastcall TForm1::btnAllClick(TObject *Sender)
{
  for(int i=0; i<MAX_OBJECTID; i++)
  {
    if(gp_ComGrid[i].bUsed)
      gp_ComGrid[i].pCb->Checked = true;
  }
}
//---------------------------------------------------------------------------


void __fastcall TForm1::btnCancelClick(TObject *Sender)
{
  for(int i=0; i<MAX_OBJECTID; i++)
  {
    if(gp_ComGrid[i].bUsed)
      gp_ComGrid[i].pCb->Checked = false;
  }
}
//---------------------------------------------------------------------------



void __fastcall TForm1::CmbPortChange(TObject *Sender)
{
  mbConnect = false;
	if(m_Port.m_hComm!=NULL)
	{
		m_Port.ClosePort();
	}
  btnOpen->Caption = "打开";
  ShpPort->Brush->Color = clBlack;
  m_bOpenPort = true;
}
//---------------------------------------------------------------------------



void __fastcall TForm1::N12Click(TObject *Sender)
{
  INT8U pageid;
  INT16U iStart, iEnd;
  pageid = TabbedNotebook1->PageIndex;

  iStart = pageid<<8;
  iEnd = iStart + 0xFF;

  for(int i=iStart; i<iEnd; i++)
  {
    if(gp_ComGrid[i].bUsed)
      gp_ComGrid[i].pCb->Checked = true;
  }
}
//---------------------------------------------------------------------------


void __fastcall TForm1::N13Click(TObject *Sender)
{
  INT8U pageid;
  INT16U iStart, iEnd;
  pageid = TabbedNotebook1->PageIndex;

  iStart = pageid<<8;
  iEnd = iStart + 0xFF;

  for(int i=iStart; i<iEnd; i++)
  {
    if(gp_ComGrid[i].bUsed)
      gp_ComGrid[i].pCb->Checked = false;
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N15Click(TObject *Sender)
{
  for(int i= 0x0200; i<0x02FF; i++)
  {
    if(gp_ComGrid[i].bUsed)
      gp_ComGrid[i].pCbx->ItemIndex = 1;
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N16Click(TObject *Sender)
{
  for(int i= 0x0200; i<0x02FF; i++)
  {
    if(gp_ComGrid[i].bUsed)
      gp_ComGrid[i].pCbx->ItemIndex = 0;
  }
}
//---------------------------------------------------------------------------

void FreeMemory()
{
  for(int i=0; i< MAX_OBJECTID; i++)
  {
      gp_ComGrid[i].MakeEmpty();
  }
}

void __fastcall TForm1::SelectType()
{
  if(CmbWays->Text == "本地")
  {
    if(gp_SPack)
      delete gp_SPack;
    gp_SPack = new CPack485Local();
    if(gp_RPack)
      delete gp_RPack;
    gp_RPack = new CPack485Local();
    gb_Direct = true;
  }
  else
  {
    if(gp_SPack)
      delete gp_SPack;
    gp_SPack = new CPackSMS();
    if(gp_RPack)
      delete gp_RPack;
    gp_RPack = new CPackSMS();
    gb_Direct = false;
  }
  gp_SPack->SetSerialPort(&m_Port);
}

void __fastcall TForm1::btnIntClick(TObject *Sender)
{
  gsModuleAdd = txtAddr->Text;
}
//---------------------------------------------------------------------------

void  TForm1::RefreshGrid()
{
  if(!m_bWays)
  {
    for(int i=0; i<MAX_OBJECTID; i++)
    {
      if(gp_ComGrid[i].bUsed == 0)  continue;
      gp_ComGrid[i].pCb->Checked = false;
      if(gp_ComGrid[i].EditStyle == 0)
      {
        gp_ComGrid[i].pEd->Text = "";
      }
      else if(gp_ComGrid[i].EditStyle == 1)
      {
        if(i>=0x0200 && i<=0x02FF)
          gp_ComGrid[i].pCbx->ItemIndex = 0;
        else

⌨️ 快捷键说明

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