m2

来源:互联网 发布:淘宝中差评外包团队 编辑:程序博客网 时间:2024/06/01 23:12

//---------------------------------------------------------------------------
/******************************************************************************
*                                                                             *
*  功能:将pBuff中Ip转化为一字符串                                            *
*  输入:BYTE * pBuff(从pBuff[0] ~ pBuff[3]为一Ip地址)                     *
*  输出:Str(包含一Ip地址的字符串,如:255.255.255.255)                     *
*  创建日期:2005-04-05                                                     *
*                                                                             *
*******************************************************************************/
String TfmMain::UniteIp(BYTE * pBuff)
{/* TODO : 合并Ip地址 */
    String StrTemp = "",Str = "";

    StrTemp.sprintf("%d",pBuff[0]);
    StrTemp += ".";
    Str = Str + StrTemp;
    StrTemp.sprintf("%d",pBuff[1]);
    StrTemp += ".";
    Str = Str + StrTemp;
    StrTemp.sprintf("%d",pBuff[2]);
    StrTemp += ".";
    Str = Str + StrTemp;
    StrTemp.sprintf("%d",pBuff[3]);
    Str = Str + StrTemp;
    return Str;
}
//---------------------------------------------------------------------------
/******************************************************************************
*                                                                             *
*    功能描述:分析Edit控件,发现它有一个KeyPress事件,只需将Key参数赋值为0, *
*              该键值便不会置入输入缓冲区,即该键值输入无效                   *
*                                                                             *
******************************************************************************/
void __fastcall TfmMain::CheckEditKeyPress(char & Key)
{
    switch(Key)
    {
        case '0':   //接受数据键0~9的输入
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
        case 8:     //这是一个BackSpace键,不能禁止,否则不能实现删除功能了
        {
            break;
        }
        /*case '.':   //检查是否存在小数点
        {
            if(DotInStr(Edit1->Text))
            {
                Key = 0;
            }
            break;
        }
        case '+':
        case '-':
        {
            if(SignInStr(Edit1->Text))//检查是否已存在符号
            {
                Key = 0;
            }
            break;
        }*/
        default:
        {
            Key = 0;
            break;
        }
    }
}
//---------------------------------------------------------------------------
//该函数检查字符串中是否已存在小数点
bool __fastcall TfmMain::DotInStr(String ass)
{
    int ii,l1;
    l1 = ass.Length() ;
    for(int ii = 0;ii<l1;ii++)
    {
        if(ass.c_str() [ii] == '.')
        {
            return True;
        }
    }
    return False;
}
//---------------------------------------------------------------------------
//该函数检查字符串前面是否已存在“+”、“-”符号
bool __fastcall TfmMain::SignInStr(AnsiString ass)
{
    int ii,l1;
    l1 = ass.Length() ;
    for(ii = 0;ii<l1;ii++)
    {
        if((ass.c_str() [ii] == '+') || (ass.c_str() [ii] == '-'))
        {
            return True;
        }
    }
    return False;
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::CheckComboBoxKeyPress(char & Key)
{
    Key = 0;//禁止输入数据
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::UpDataClick(TObject *Sender)
{//远程升级
    //运行arp.exe命令
    SHELLEXECUTEINFO ShExecInfo = {0};
    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = NULL;
    ShExecInfo.lpFile = "arp.exe";
    ShExecInfo.lpParameters = " -d";
    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_HIDE;
    ShExecInfo.hInstApp = NULL;
    ShellExecuteEx(&ShExecInfo);
    WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
    CloseHandle(ShExecInfo.hProcess);
    //运行arp.exe命令 结束


    if(UpDateFlag == 0)
    {
     UpDateFlag = 1;//远程升级标记

        TTreeNode *Node1,*Node2;
        String SuName,asSql;//,GKDNAME;
        String LINENAME;

        int LINENUM = 0;
        int SUNUM = GetSuNum(NodeText);
        UpDateSu = SUNUM;
//        fmFarUpDateNew->LineNum->Text = LINENUM;
        fmFarUpDateNew->SuNum->Text = IntToStr(SUNUM);
        //fmFarUpDateNew->SmNum->Text = "";

        fmFarUpDateNew->TreeView1->Items->Clear();
        Node2 = fmFarUpDateNew->TreeView1->Items->Add(NULL, tvDevice->Selected->Text);
        Node2->ImageIndex = 1;
        Node1 = fmFarUpDateNew->TreeView1->Items->Item[0];

        Node2 = fmFarUpDateNew->TreeView1->Items->AddChild(Node1, "信道控制器");
        Node2->ImageIndex = 1;

        asSql= "select * from ct_videoserverparams where SUNUM=" + IntToStr(SUNUM);
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->Open();
        int num = ADOSelect->RecordCount;
        for(int i =0;i<num;i++)
        {
            int VIDEONUM = ADOSelect->FieldByName("VIDEONUM")->AsInteger;
            int DVRLX = ADOSelect->FieldByName("DVRLX")->AsInteger;
            if(DVRLX == 1)
            {
    Node2 = fmFarUpDateNew->TreeView1->Items->AddChild(Node1, "DVR"+IntToStr(VIDEONUM));
                Node2->ImageIndex = 2;
            }
            else
            {
                Node2 = fmFarUpDateNew->TreeView1->Items->AddChild(Node1, "DVR"+IntToStr(VIDEONUM));
                Node2->ImageIndex = 1;
            }
            ADOSelect->Next();
        }
        Node2 = fmFarUpDateNew->TreeView1->Items->AddChild(Node1, "ARM");
        Node2->ImageIndex = 1;

        Node2 = fmFarUpDateNew->TreeView1->Items->AddChild(Node1, "GAS");
        Node2->ImageIndex = 1;

        asSql= "select * from ct_stationparams where SUNUM=" + IntToStr(SUNUM);
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->Open();
        String MAINIP = ADOSelect->FieldByName("MAINIP")->AsString;
        fmFarUpDateNew->SmIp->Text = MAINIP;
        fmFarUpDateNew->TreeView1->Enabled = true;
        fmFarUpDateNew->QuerySMState->Enabled = false;
        BYTE DataInfo[2];
        memset(DataInfo, 0, 2);
        fmFarUpDateNew->MakePackNew(DataInfo,0,0X04,SUNUM,0X00,0XFE,LINENUM,SUNUM,"远程升级开始命令");
        fmFarUpDateNew->CGauge1->Progress = 0;

        fmFarUpDateNew->Show();
    }
    else if(UpDateFlag == 1)
    {
     int SUNUM = GetSuNum(NodeText);

        asSql = "select * from CT_SU where SUNUM=" + IntToStr(UpDateSu);
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->Open();
        String SUNAME = ADOSelect->FieldByName("SUNAME")->AsString;

        if(UpDateSu != SUNUM)
        {
   MessageShow(SUNAME+ "正在进行升级操作,其它车站此时不允许进行升级操作!");
        }
        else if(UpDateSu == SUNUM)
        {
      fmFarUpDateNew->Show();
        }
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::SpeedButton21Click(TObject *Sender)
{//主控参数复制
    String SUNAME;
    AnsiString asSql= "select * from CT_SU where SUNUM != 0 order by SUNUM";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    int SuCount = ADOSelect->RecordCount;

    if(SuCount > 0)
    {
        fmCopySuParams->SourceSuName->Items->Clear() ;
        fmCopySuParams->AimSuName->Items->Clear() ;
        fmCopySuParams->SourceSuNum->Caption = ADOSelect->FieldByName("SUNUM")->AsInteger;
        fmCopySuParams->AimSuNum->Caption = ADOSelect->FieldByName("SUNUM")->AsInteger;
        for(int i = 0;i<SuCount;i++)
        {
            SUNAME = ADOSelect->FieldByName("SUNAME")->AsString;
            fmCopySuParams->SourceSuName->Items->Add(SUNAME);
            fmCopySuParams->AimSuName->Items->Add(SUNAME);
            ADOSelect->Next();
        }
        fmCopySuParams->SourceSuName->ItemIndex = 0;
        fmCopySuParams->AimSuName->ItemIndex = 0;
    }
    fmCopySuParams->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::QueryNetClick(TObject *Sender)
{//查看后台设备信息
    int SMADDR,SMTYPE,PORT;
    String SMNAME,ADDRESS;

    SMNAME = tvDevice->Selected->Text;
    AnsiString asSql = "select * from CT_DEV where SMNAME='" + SMNAME + "'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();

    SMADDR = ADOSelect->FieldByName("SMADDR")->AsInteger;
    SMTYPE = ADOSelect->FieldByName("SMTYPE")->AsInteger;
    PORT = ADOSelect->FieldByName("PORT")->AsInteger;

    SMNAME = ADOSelect->FieldByName("SMNAME")->AsString;
    ADDRESS = ADOSelect->FieldByName("ADDRESS")->AsString;

    fmDevInfo->SmAddr->Text = IntToStr(SMADDR);
    fmDevInfo->SmType->Text = IntToStr(SMTYPE);
    fmDevInfo->Port->Text = IntToStr(PORT);
    fmDevInfo->SmName->Text = SMNAME;
    fmDevInfo->Address->Text = ADDRESS;

    fmDevInfo->SmAddr->Enabled = false;
    fmDevInfo->SmType->Enabled = false;
    fmDevInfo->Port->Enabled = false;
    fmDevInfo->SmName->Enabled = false;
    fmDevInfo->Address->Enabled = false;

    asSql = "select * from CT_CLOCK where SMADDR="+IntToStr(SMADDR)/
             + " AND " + "CID1=" + IntToStr(SMTYPE);
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();

    int CLOCKTYPE = ADOSelect->FieldByName("CLOCKTYPE")->AsInteger;
    if(SMTYPE == 200)
    {
        if(CLOCKTYPE == 16)
        {//主时钟
            fmDevInfo->DevClock->Caption = "主时钟";
        }
        else
        {
            fmDevInfo->DevClock->Caption = "第"+IntToStr(CLOCKTYPE)+"码流时钟";
        }
    }
    else
    {
        switch(CLOCKTYPE)
        {
            case 0:
            {
                fmDevInfo->DevClock->Caption = "从A向时钟";
                break;
            }
            case 1:
            {
                fmDevInfo->DevClock->Caption = "从B向时钟";
                break;
            }
            case 2:
            {
                fmDevInfo->DevClock->Caption = "主时钟";
                break;
            }
            case 3:
            {
                fmDevInfo->DevClock->Caption = "外部时钟";
                break;
            }
        }
    }
    fmDevInfo->ShowModal();  
}
//---------------------------------------------------------------------------


void __fastcall TfmMain::tvDeviceClick(TObject *Sender)
{
    idx = tvDevice->Selected->AbsoluteIndex ;   
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::DelNetClick(TObject *Sender)
{
    String SMNAME;
    int SMADDR,SMTYPE;

    SMNAME = tvDevice->Selected->Text;
    asSql = "select * from CT_DEV where SMNAME='" + NodeText + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSql);
    ADOIndex->Open();
    SMADDR = ADOIndex->FieldByName("SMADDR")->AsInteger;
    SMTYPE = ADOIndex->FieldByName("SMTYPE")->AsInteger;

    TfmOkCancel *okcancel = new TfmOkCancel(Application);
    okcancel->LabelTitle->Caption = "提示信息...";
    okcancel->lbMessage->Caption = "确定要删除该设备吗?";
    if(okcancel->lbMessage->Width > 216)
    {
        okcancel->Width = okcancel->lbMessage->Width + 70;
        okcancel->spbAdd->Left = (okcancel->Width/2 - 75)/2 + 22;
        okcancel->spbCancel->Left = okcancel->spbAdd->Left + 111;
    }
    okcancel->ShowModal();
    if(okcancel->bOk)
    {
        AnsiString asSql = "delete from CT_DEV where SMNAME='"+SMNAME + "'";
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->ExecSQL();

        asSql = "delete from CT_CLOCK where SMADDR="+IntToStr(SMADDR)/
         + " AND " + "CID1=" + IntToStr(SMTYPE);
        fmMain->ADOSelect->Close();
        fmMain->ADOSelect->SQL->Clear();
        fmMain->ADOSelect->SQL->Add(asSql);
        fmMain->ADOSelect->ExecSQL();
        idx = idx - 1;
        LoadData();
    }  
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::N15Click(TObject *Sender)
{
    //复位主控
    SetMainParamsFuWei = 0;
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    MakePack(DataInfo,0,0X04,0X00,0XCD,0XCD,LINENUM,SUNUM,"复位主控命令");
    //MakePack(BYTE *DataInfo,int DataLength,int Protocol,
    //int SmAddr,int Cid1,int Cid2,int LineNum,int SuNum);
   
    /*int SMADDR,LINENUM,SUNUM;

    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText,NodeParText);

    //复位主控
    BYTE SendBuf[] = {0XEB,0X90,0X07,0X00,0X01,0X02,0X00,0X00,0X00,0X58,0X00,LINENUM,SUNUM,0X00,0X00};
    int Length = sizeof(SendBuf);
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  复位主控命令",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }*/
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::N17Click(TObject *Sender)
{
    //复位信道控制器
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0,ADDR = 0;
    int SMTYPE = 1;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //信道控制器
    String asSql = "select * from ct_smaddrparams where SUNUM="+IntToStr(SUNUM)/
    + " AND " + "LINENUM=" + IntToStr(LINENUM) + " AND " + "SMTYPE=" + IntToStr(SMTYPE)/
    + " order by 'NUM'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();

    ADDR = ADOSelect->FieldByName("ADDR")->AsInteger;//

    //DATAINFO
    MakePack(DataInfo,0,0X04,ADDR,0XC0,0XCD,LINENUM,SUNUM,"复位信道控制器命令");
    //MakePack(BYTE *DataInfo,int DataLength,int Protocol,
    //int SmAddr,int Cid1,int Cid2,int LineNum,int SuNum);

/*    int LINENUM = 0,SUNUM = 0,ADDR = 0;
    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText,NodeParText);
    //选择为信道控制器  CID1 = 0XC0 模块地址 = 站号
    BYTE SendBuf[] = {0XEB,0X90,0X07,0X00,0X01,0X02,0X00,0X00,0X00,0X58,0X00,LINENUM,SUNUM,SUNUM,0XC0};
    int Length = sizeof(SendBuf);
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  复位信道控制器命令",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }*/
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::FarUpdateBack()
{
    /*switch(pBufParamsBack[9])
    {//远程升级
        case 0X59:
        {//选择数据通道0x0059返回
            if(fmFarUpDate->ResetFlag == false)
            {
                int LINENUM = 0,SUNUM = 0;

                fmFarUpDate->TimeBeyond->Enabled = false;
                LINENUM = fmFarUpDate->LineNum->Text.ToInt();
                SUNUM = fmFarUpDate->SuNum->Text.ToInt();

                if(fmFarUpDate->TreeView1->Selected->Text != "信道控制器")
                {
                    if(fmFarUpDate->TreeView1->Selected->Level == 0)
                    {//选择的是站

                        fmFarUpDate->TimerSendData->Enabled = true;

                    }
                    else if(fmFarUpDate->TreeView1->Selected->Level == 1)
                    {//选择的是模块 CID1 = 0XC4

                        //停止扫描命令
                        BYTE SendBuf[] = {0XEB,0X90,0X07,0X00,0X01,0X02,0X00,0X00,0X00,0X50,0X00,LINENUM,SUNUM,0X00,0X00};
                        int Length = sizeof(SendBuf);

                        if(ClientSocket->Active)
                        {
                            ClientSocket->Socket->SendBuf(SendBuf,Length);
                            SprintfData("-> ->  ",SendBuf,Length);
                            //MessageShow("下发成功!");
                        }
                        else
                        {
                            MessageShow("网络连接失败,请先确认网络连接状态!");
                        }

                        fmFarUpDate->TimeBeyond->Interval = TM_FRAMEWAITE;
                        fmFarUpDate->TimeBeyond->Enabled = true;
                    }
                }
                else if(fmFarUpDate->TreeView1->Selected->Text == "信道控制器")
                {//选择为信道控制器  CID1 = 0XC0 模块地址 = 站号
                    //停止扫描命令
                    BYTE SendBuf[] = {0XEB,0X90,0X07,0X00,0X01,0X02,0X00,0X00,0X00,0X50,0X00,LINENUM,SUNUM,0X00,0X00};
                    int Length = sizeof(SendBuf);

                    if(ClientSocket->Active)
                    {
                        ClientSocket->Socket->SendBuf(SendBuf,Length);
                        SprintfData("-> ->  ",SendBuf,Length);
                        //MessageShow("下发成功!");
                    }
                    else
                    {
                        MessageShow("网络连接失败,请先确认网络连接状态!");
                    }
                    fmFarUpDate->TimeBeyond->Interval = TM_FRAMEWAITE;
                    fmFarUpDate->TimeBeyond->Enabled = true;
                }
            }
            break;
        }
        case 0X50:
        {//停止扫描返回

            fmFarUpDate->TimeBeyond->Enabled = false;
            fmFarUpDate->TimerSendData->Enabled = true;
            break;

        }
        case 0X51:
        {//远程升级查询状态返回数据
            if(pBufParamsBack[15] == 0xff)
            {
                TfmMessage *message = new TfmMessage(Application);
                message->lbMessage->Caption = "查询状态失败!";
                message->ShowModal();
                break;
            }
            else
            {
                char *str1,*str2;

                int SMADDR = 0,LINENUM = 0,SUNUM = 0;
                int yehao = 0,banbenghao = 0;

                yehao = fmFarUpDate->PageNum;
                banbenghao = fmFarUpDate->bUpEdition;
                LINENUM = fmFarUpDate->LineNum->Text.ToInt();
                SUNUM = fmFarUpDate->SuNum->Text.ToInt();

                fmFarUpDate->TimerSendData->Enabled = false;
                fmFarUpDate->EnabledFlag->Caption = 1; //升级页标记
                fmFarUpDate->TimeBeyond->Enabled = false;  //以防万一,其实没用

                if(CompleteFlag)
                {//如果是结束之后和设为活动页的查询状态,则再加发一条激活命令
                    if(fmFarUpDate->TreeView1->Selected->Text != "信道控制器")
                        {
                            if(fmFarUpDate->TreeView1->Selected->Level == 0)
                            {//选择的是站

                                BYTE SendBuf[] = {0XEB,0X90,0X09,0X00,0X01,0X03,0X00,0X00,0X00,0X56,0X00,LINENUM,SUNUM,0X00,0X00,yehao,banbenghao};
                                int Length = sizeof(SendBuf);

                                if(ClientSocket->Active)
                                {
                                    ClientSocket->Socket->SendBuf(SendBuf,Length);
                                    SprintfData("-> ->  ",SendBuf,Length);
                                    //MessageShow("下发成功!");
                                }
                                else
                                {
                                    MessageShow("网络连接失败,请先确认网络连接状态!");
                                }
                            }
                            else if(fmFarUpDate->TreeView1->Selected->Level == 1)
                            {//选择的是模块 CID1 = 0XC4

                                SMADDR = fmFarUpDate->SmAddr->Text.ToInt();

                                BYTE SendBuf[] = {0XEB,0X90,0X09,0X00,0X01,0X03,0X00,0X00,0X00,0X56,0X00,LINENUM,SUNUM,SMADDR,0XC4,yehao,banbenghao};
                                int Length = sizeof(SendBuf);

                                if(ClientSocket->Active)
                                {
                                    ClientSocket->Socket->SendBuf(SendBuf,Length);
                                    SprintfData("-> ->  ",SendBuf,Length);
                                    //MessageShow("下发成功!");
                                }
                                else
                                {
                                    MessageShow("网络连接失败,请先确认网络连接状态!");
                                }
                            }
                        }
                        else if(fmFarUpDate->TreeView1->Selected->Text == "信道控制器")
                        {//选择为信道控制器  CID1 = 0XC0 模块地址 = 站号
                            BYTE SendBuf[] = {0XEB,0X90,0X09,0X00,0X01,0X03,0X00,0X00,0X00,0X56,0X00,LINENUM,SUNUM,SUNUM,0XC0,yehao,banbenghao};
                            int Length = sizeof(SendBuf);

                            if(ClientSocket->Active)
                            {
                                ClientSocket->Socket->SendBuf(SendBuf,Length);
                                SprintfData("-> ->  ",SendBuf,Length);
                                //MessageShow("下发成功!");
                            }
                            else
                            {
                                MessageShow("网络连接失败,请先确认网络连接状态!");
                            }
                        }
                    }
                    CompleteFlag = false;
                }

                VerH0 = pBufParamsBack[19]& 0X7F;
                VerH1 = pBufParamsBack[20]& 0X7F;
                VerH2 = pBufParamsBack[21]& 0X7F;
                VerH3 = pBufParamsBack[22]& 0X7F;

                for(int i=0;i<4;i++)
                {
                    if(pBufParamsBack[19 + i] == 0X00)
                    {
                        fmFarUpDate->ImageList2->Draw(fmFarUpDate->Image[i]->Canvas,0,0,4,true);
                        fmFarUpDate->Image[i]->Canvas->TextOutA(0,0,"");
                        fmFarUpDate->Ver[i]->Caption = "V0.0";
                        fmFarUpDate->Ver[i]->Left = (26 + i * 72);
                        fmFarUpDate->State[i]->Left = (24 + i * 72);
                        fmFarUpDate->State[i]->Caption = "无效页";
                    }
                    else
                    {
                        int  Version0 = 0,Version1 = 0;
                        Version0 =  (pBufParamsBack[19 + i] & 0X70) / 0X0F;
                        Version1 =  (pBufParamsBack[19 + i] & 0X0F);

                        if((pBufParamsBack[19 + i] & 0X80) == 0X80)
                        {//活动页标志=1,表示该页内容为活动页, 存放不可修改版本号。
                            if(i == 0)
                            {
                                fmFarUpDate->ImageList2->Draw(fmFarUpDate->Image[i]->Canvas,0,0,3,true);
                            }
                            else
                            {
                                fmFarUpDate->ImageList2->Draw(fmFarUpDate->Image[i]->Canvas,0,0,0,true);
                            }
                            fmFarUpDate->Image[i]->Canvas->TextOutA(0,0,"");
                            if(Version1 < 10)
                            {
                                if(Version1 == 0)
                                {
                                    fmFarUpDate->Ver[i]->Caption = "V" + FloatToStr(Version0) + ".0";
                                }
                                else
                                {
                                    fmFarUpDate->Ver[i]->Caption = "V" + FloatToStr(Version0 + Version1/10.0);
                                }
                                fmFarUpDate->Ver[i]->Left = (26 + i * 72);
                            }
                            else if(Version1 >= 10)
                            {
                                if(Version1 == 0)
                                {
                                    fmFarUpDate->Ver[i]->Caption = "V" + FloatToStr(Version0) + ".0";
                                }
                                else
                                {
                                    fmFarUpDate->Ver[i]->Caption = "V" + FloatToStr(Version0 + Version1/100.00);
                                }
                                fmFarUpDate->Ver[i]->Left = (24 + i * 72);
                            }

                            if(i == 0)
                            {
                                fmFarUpDate->State[i]->Left = (10 + i * 72);
                                fmFarUpDate->State[i]->Caption = "保留页(活动)";
                            }
                            else
                            {
                                fmFarUpDate->State[i]->Left = (23 + i * 72);
                                fmFarUpDate->State[i]->Caption = "活动页";
                            }
                        }
                        else if((pBufParamsBack[19 + i] & 0X80) == 0X00)
                        {//活动页标志=0,表示该页内容为非活动页, 存放可修改版本号。
                            if(i == 0)
                            {
                                fmFarUpDate->ImageList2->Draw(fmFarUpDate->Image[i]->Canvas,0,0,3,true);
                            }
                            else
                            {
                                fmFarUpDate->ImageList2->Draw(fmFarUpDate->Image[i]->Canvas,0,0,1,true);
                            }

                            fmFarUpDate->Image[i]->Canvas->TextOutA(0,0,"");
                            if(Version1 < 10)
                            {
                                if(Version1 == 0)
                                {
                                    fmFarUpDate->Ver[i]->Caption = "V" + FloatToStr(Version0) + ".0";
                                }
                                else
                                {
                                    fmFarUpDate->Ver[i]->Caption = "V" + FloatToStr(Version0 + Version1/10.0);
                                }
                                fmFarUpDate->Ver[i]->Left = (26 + i * 72);
                            }
                            else if(Version1 >= 10)
                            {
                                if(Version1 == 0)
                                {
                                    fmFarUpDate->Ver[i]->Caption = "V" + FloatToStr(Version0) + ".0";
                                }
                                else
                                {
                                    fmFarUpDate->Ver[i]->Caption = "V" + FloatToStr(Version0 + Version1/100.00);
                                }
                                fmFarUpDate->Ver[i]->Left = (24 + i * 72);
                            }
                            if(i == 0)
                            {
                                fmFarUpDate->State[i]->Left = (10 + i * 72);
                                fmFarUpDate->State[i]->Caption = "保留页(非活动)";
                            }
                            else
                            {
                                fmFarUpDate->State[i]->Left = (15 + i * 72);
                                fmFarUpDate->State[i]->Caption = "非活动页";
                            }
                        }
                    }
                }
                fmFarUpDate->DisableState(false);           
             break;
         }
        case 0X52:
        {//远程升级预发页版量0x0052返回报文
            if(fmFarUpDate->UpdataActive == true)
            {//开始下发程序数据
                fmFarUpDate->UpdataCount += 1;
                fmFarUpDate->TimerSendVer->Enabled = false;
                fmFarUpDate->TUpdata->Enabled = true;
                if(fmFarUpDate->ProgressBar1->Visible)
                {
                    fmFarUpDate->ProgressBar1->Position +=2;
                }
                fmFarUpDate->TimeBeyond->Enabled = false;
            }
            break;
        }
        case 0X53:
        {//程序下载命令0x0053返回报文

            if(fmFarUpDate->UpdataActive == true)
            {//还处于升级状态,即没有点“返回”按钮
                if(pBufParamsBack[15] != 0X05)
                {
                    fmFarUpDate->TimeBeyond->Enabled = false;
                    if(fmFarUpDate->UpdataCompl == true)
                    {//程序报文下发完成

                        fmFarUpDate->TUpdata->Enabled = false;
                        fmFarUpDate->TimerDataComp->Enabled = true;
                    }
                    else
                    {
                        fmFarUpDate->UpdataCount += 1;
                        fmFarUpDate->TUpdata->Enabled = true;  //其实没用 ,以防万一
                        if(fmFarUpDate->ProgressBar1->Visible)
                        {
                            fmFarUpDate->ProgressBar1->Position +=2;
                        }
                    }
                }
            }
            break;
        }
        case 0X54:
        {//发送结束报文0x0054返回确认
            if(fmFarUpDate->UpdataActive == true)
            {
                if(pBufParamsBack[15] != 0X05)
                {
                    fmFarUpDate->TimeBeyond->Enabled = false;
                    if(fmFarUpDate->UpdataCompl == true)
                    {//程序报文下发完成

                        fmFarUpDate->TimerDataComp->Enabled = false;
                        //关闭发送结束报文0x0054

                        int SMADDR = 0,LINENUM = 0,SUNUM = 0;

                        fmFarUpDate->TimeBeyond->Interval = TM_TIMEBEYOND;
                        fmFarUpDate->TimeBeyond->Enabled = true;

                        LINENUM = fmFarUpDate->LineNum->Text.ToInt();
                        SUNUM = fmFarUpDate->SuNum->Text.ToInt();
                        if(fmFarUpDate->ProgressBar1->Visible)
                        {
                            fmFarUpDate->ProgressBar1->Position = fmFarUpDate->ProgressBar1->Max/2;
                        }

                        fmFarUpDate->TimerWriteFalsh->Enabled = true;
                        //打开写FLASH命令定时器 0X55

                        //开始发送写FLASH报文0x0055
                        if(fmFarUpDate->TreeView1->Selected->Text != "信道控制器")
                        {
                            if(fmFarUpDate->TreeView1->Selected->Level == 0)
                            {//选择的是站

                                BYTE SendBuf[] = {0XEB,0X90,0X07,0X00,0X01,0X03,0X00,0X00,0X00,0X55,0X00,LINENUM,SUNUM,0X00,0X00};
                                int Length = sizeof(SendBuf);

                                //fmMain->ClientSocket->Socket->SendBuf(SendBuf,Length);

                                String StrTemp;
                                String Str = "";

                                for(int i = 0;i < Length; i++)
                                {
                                    StrTemp = "";
                                    StrTemp.sprintf("%X",SendBuf[i]);
                                    if (StrLen(StrTemp.c_str()) == 1)
                                    {
                                        StrTemp = "0" + StrTemp;
                                    }
                                    Str += StrTemp + " ";
                                }
                                fmReceiveData->Memo2->Lines->Add("-> ->  " + Str);
                            }
                            else if(fmFarUpDate->TreeView1->Selected->Level == 1)
                            {//选择的是模块 CID1 = 0XC4

                                SMADDR = fmFarUpDate->SmAddr->Text.ToInt();

                                BYTE SendBuf[] = {0XEB,0X90,0X07,0X00,0X01,0X03,0X00,0X00,0X00,0X55,0X00,LINENUM,SUNUM,SMADDR,0XC4};
                                int Length = sizeof(SendBuf);

                                if(ClientSocket->Active)
                                {
                                    ClientSocket->Socket->SendBuf(SendBuf,Length);
                                    SprintfData("-> ->  ",SendBuf,Length);
                                    //MessageShow("下发成功!");
                                }
                                else
                                {
                                    MessageShow("网络连接失败,请先确认网络连接状态!");
                                }
                            }
                        }
                        else if(fmFarUpDate->TreeView1->Selected->Text == "信道控制器")
                        {//选择为信道控制器  CID1 = 0XC0 模块地址 = 站号
                            BYTE SendBuf[] = {0XEB,0X90,0X07,0X00,0X01,0X03,0X00,0X00,0X00,0X55,0X00,LINENUM,SUNUM,SUNUM,0XC0};
                            int Length = sizeof(SendBuf);

                            if(ClientSocket->Active)
                            {
                                ClientSocket->Socket->SendBuf(SendBuf,Length);
                                SprintfData("-> ->  ",SendBuf,Length);
                                //MessageShow("下发成功!");
                            }
                            else
                            {
                                MessageShow("网络连接失败,请先确认网络连接状态!");
                            }
                        }
                    }
                }
            }
            break;
        }
        case 0X55:
        {//写FLASH命令0x0055完成之后反校数据

            if(fmFarUpDate->UpdataActive == true)
                {//还处于升级状态,即没有点“返回”按钮

                    fmFarUpDate->TimeBeyond->Enabled = false;

                    if(fmFarUpDate->UpdataCompl == true)
                    {
                        fmFarUpDate->TimerWriteFalsh->Enabled = false;
                        //关闭写FLASH定时器 0X55

                        if(fmFarUpDate->ProgressBar1->Visible)
                        {
                            fmFarUpDate->ProgressBar1->Position +=2;
                        }

                        fmFarUpDate->TimerFJ->Enabled = true;
                        //打开反校验确认定时器 0X57

                        if(RecLen_t > 20)
                        {
                            DataCount = pBufParamsBack[19];    //返回校验数据总包数
                            DataNum = pBufParamsBack[20];      //返回校验数据包序号
                            CheckSum = 0;
                            for(int i = 21 ; i < RecLen_t; i++)
                            {
                                CheckSum = CheckSum + pBufParamsBack[i];
                            }
                        }
                        else
                        {
                            DataCount = 0;    //返回校验数据总包数
                            DataNum = 1;      //返回校验数据包序号
                        }
                        fmFarUpDate->fp=fopen(fmFarUpDate->FileName->Text.c_str() ,"rb");
                    }
                }
            break;
        }
        case 0X56:
        {//启动下载程序0x0056返回报文

            if(CompleteFlag)
            {
                fmFarUpDate->TimeBeyond->Enabled = false;
                fmFarUpDate->TimerStart->Enabled = false;
                fmFarUpDate->TimerSendData->Enabled = true;
            }
            else
            {
             fmFarUpDate->ProgressBar1->Position = 0 ;
           }
            break;
        }
        case 0X57:
        {//反校验确认
            if(fmFarUpDate->UpdataActive == true)
            {//还处于升级状态,即没有点“返回”按钮

                fmFarUpDate->TimeBeyond->Enabled = false;
                //关闭超时等待定时器

                if(fmFarUpDate->UpdataCompl == true)
                {
                    int SMADDR = 0,LINENUM = 0,SUNUM = 0;

                    LINENUM = fmFarUpDate->LineNum->Text.ToInt();
                    SUNUM = fmFarUpDate->SuNum->Text.ToInt();
                    if(fmFarUpDate->ProgressBar1->Visible)
                    {
                        fmFarUpDate->ProgressBar1->Position +=2;
                    }

                    CheckSum = 0;
                    DataCount = pBufParamsBack[19];    //返回校验数据总包数
                    DataNum = pBufParamsBack[20];      //返回校验数据包序号
                    for(int i = 21 ; i < RecLen_t ; i++)
                    {
                        CheckSum = CheckSum + pBufParamsBack[i];
                    }
                    CheckSum = CheckSum % 0XFFFF;

                    //fmFarUpDate->TimerFJ->Enabled = true;

                    if(pBufParamsBack[19] == pBufParamsBack[20])
                    {//反校验结束  目标码包总数 == 目标码包序号
                        if(fmFarUpDate->TreeView1->Selected->Text != "信道控制器")
                        {
                             if(fmFarUpDate->TreeView1->Selected->Level == 0)
                             {//选择的是站

                                BYTE SendBuf[] = {0XEB,0X90,0X08,0X00,0X01,0X03,0X00,0X00,0X00,0X57,0X00,LINENUM,SUNUM,0X00,0X00,0X00};
                                int Length = sizeof(SendBuf);

                                if(ClientSocket->Active)
                                {
                                    ClientSocket->Socket->SendBuf(SendBuf,Length);
                                    SprintfData("-> ->  ",SendBuf,Length);
                                    //MessageShow("下发成功!");
                                }
                                else
                                {
                                    MessageShow("网络连接失败,请先确认网络连接状态!");
                                }
                             }
                             else if(fmFarUpDate->TreeView1->Selected->Level == 1)
                             {//选择的是模块 CID1 = 0XC4

                                 SMADDR = fmFarUpDate->SmAddr->Text.ToInt();

                                 BYTE SendBuf[] = {0XEB,0X90,0X08,0X00,0X01,0X03,0X00,0X00,0X00,0X57,0X00,LINENUM,SUNUM,SMADDR,0XC4,0X00};
                                 int Length = sizeof(SendBuf);

                                 if(ClientSocket->Active)
                                {
                                    ClientSocket->Socket->SendBuf(SendBuf,Length);
                                    SprintfData("-> ->  ",SendBuf,Length);
                                    //MessageShow("下发成功!");
                                }
                                else
                                {
                                    MessageShow("网络连接失败,请先确认网络连接状态!");
                                }
                             }
                        }
                        else if(fmFarUpDate->TreeView1->Selected->Text == "信道控制器")
                        {//选择为信道控制器  CID1 = 0XC0 模块地址 = 站号
                             BYTE SendBuf[] = {0XEB,0X90,0X08,0X00,0X01,0X03,0X00,0X00,0X00,0X57,0X00,LINENUM,SUNUM,SUNUM,0XC0,0X00};
                             int Length = sizeof(SendBuf);

                             if(ClientSocket->Active)
                            {
                                ClientSocket->Socket->SendBuf(SendBuf,Length);
                                SprintfData("-> ->  ",SendBuf,Length);
                                //MessageShow("下发成功!");
                            }
                            else
                            {
                                MessageShow("网络连接失败,请先确认网络连接状态!");
                            }
                        }

                        fmFarUpDate->TimeBeyond->Enabled = false;

                        if(fmFarUpDate->ProgressBar1->Visible)
                        {
                            fmFarUpDate->ProgressBar1->Position = fmFarUpDate->ProgressBar1->Max;
                        }
                        fmFarUpDate->EnabledFlag->Caption = 1; //升级页标记

                        fmFarUpDate->TimerFJ->Enabled = false;

                        fmFarUpDate->UpdataActive = false;  //升级开始标记
                        fmFarUpDate->UpdataCompl = false;  //升级结束标记
                        TfmOkCancel *okcancel = new TfmOkCancel(Application);
                        okcancel->LabelTitle->Caption = "提示信息...";
                        okcancel->lbMessage->Caption = "程序传送完毕,是否激活该页?";
                        okcancel->ShowModal();

                        fmFarUpDate->StateMessage->Visible = false;
                        fmFarUpDate->StateMessage->Caption = "";
                        if(okcancel->bOk)
                        {//下发启动程序0x0056
                            CompleteFlag = true;
                            fmFarUpDate->TimerStart->Enabled = true;
                        }
                        else
                        {
                            CompleteFlag = false;
                            fmFarUpDate->DisableState(false);
                        }
                    }
                }
            }
            break;
        }
        ///*case 0X58:
        {//复位返回数据
            if(pBufParamsBack[15] == 0X00)
            {
                if(pBufParamsBack[14] == 0X00)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "主控复位成功!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XC4)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "键盘控制器复位成功!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XC0)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "信道控制器复位成功!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XC8)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "DXC复位成功!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XC6)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "G2MP复位成功!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XD4)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "GAC4复位成功!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XC9)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "V35复位成功!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XC5)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "GPA复位成功!";
                    message->ShowModal();
                }
            }
            else
            {
                if(pBufParamsBack[14] == 0X00)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "主控复位失败!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XC4)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "键盘控制器复位失败!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XC0)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "信道控制器复位失败!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XC8)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "DXC复位失败!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XC6)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "G2MP复位失败!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XD4)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "GAC4复位失败!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XC9)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "V35复位失败!";
                    message->ShowModal();
                }
                else if (pBufParamsBack[14] == 0XC5)
                {
                    TfmMessage *message = new TfmMessage(Application);
                    message->lbMessage->Caption = "GPA复位失败!";
                    message->ShowModal();
                }
            }
            break;
        }
    }*/
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::QtMainParamsBack(BYTE *pRecBuf)
{
    int LINENUM = 0,SUNUM = 0;
    WORD DataLength = *(WORD *)(pRecBuf + 2) + 8;//返回报文的全长
    if(DataLength < 20)
    {
        MessageShow("返回数据为空!");
        return;
    }
    LINENUM = pBufParamsBack[11];//线路号
    SUNUM = pBufParamsBack[12];//站号
    if(pBufParamsBack[9] == 0XC5)
    {//获取主控参数返回数据
        if(pBufParamsBack[14] == 0XC0)
        {
            switch(pBufParamsBack[19])
            {
                case 6:
                {//获取2M告警返回
                    if((pBufParamsBack[20] & 0X01) == 1)
                    {//A向本地告警,包括无码和失步,0输出正常,1输出告警
                        fmTwoMalarmBack->Label2->Caption = "告警(无码和失步)";
                    }
                    else if((pBufParamsBack[20] & 0X01) == 0)
                    {//A向本地正常
                        fmTwoMalarmBack->Label2->Caption = "正常";
                    }
                    if((pBufParamsBack[20] & 0X02) == 2)
                    {//A向对端告警,即对端有无码和失步,0输出正常,1输出告警
                        fmTwoMalarmBack->Label1->Caption = "告警(对端有无码和失步)";
                    }
                    else if((pBufParamsBack[20] & 0X02) == 0)
                    {//A向对端正常
                        fmTwoMalarmBack->Label1->Caption = "正常";
                    }
                    if((pBufParamsBack[20] & 0X04) == 4)
                    {//B向本地告警,包括无码和失步,0输出正常,1输出告警
                        fmTwoMalarmBack->Label4->Caption = "告警(无码和失步)";
                    }
                    else if((pBufParamsBack[20] & 0X04) == 0)
                    {//B向本地正常
                        fmTwoMalarmBack->Label4->Caption = "正常";
                    }
                    if((pBufParamsBack[20] & 0X08) == 8)
                    {//B向对端告警,即对端有无码和失步,0输出正常,1输出告警
                        fmTwoMalarmBack->Label3->Caption = "告警(对端有无码和失步)";
                    }
                    else if((pBufParamsBack[20] & 0X08) == 0)
                    {//B向对端正常
                        fmTwoMalarmBack->Label3->Caption = "正常";
                    }
                    fmTwoMalarmBack->ShowModal();

                    break;
                }
                case 7:
                {//
                    if(E1TimeWorkFlag)
                    {//获取E1时钟工作方式返回
                        fmE1TimeWorkInfo->RadioGroup1->ItemIndex = pBufParamsBack[20];
                        fmE1TimeWorkInfo->ShowModal();
                    }
                    else if(!E1TimeWorkFlag)
                    {//获取时隙配置信息返回
                        BYTE DATAINFO[24] ;
                        memcpy(DATAINFO,pBufParamsBack+20,24);
                        DisposeGetInfoControl(DATAINFO);
                        GetInfoControlForm1->ShowModal();
                    }
                    break;
                }
                case 8:
                {//视频切换信息
                    BYTE DATAINFO[12*4] ;
                memcpy(DATAINFO,pBufParamsBack+20,48);
                    DisposeGetVedioSwitchStatusRByte(DATAINFO,SUNUM,LINENUM);
                    break;
                }
                case 9:
                {//音频切换信息
                    BYTE DATAINFO[12*4] ;
                memcpy(DATAINFO,pBufParamsBack+20,96);
                    DisposeGetAudioSwitchStatusRByte(DATAINFO,SUNUM,LINENUM);
                    break;
                }
            }
        }
        else
        {
            switch(pBufParamsBack[19])
            {
            /* TODO : 获取基本站名和镜头信息 01*/
                case 0X01:
                {//获取基本站名和镜头信息
                    String SuName = "",SmName = "";
                    int SmNum = 0,SmType = 0,AudioNum = 0,SwAddr = 0;
                    BYTE *sName = new BYTE[16];
                    memset(sName,0,16);
                    memcpy(sName, (char *)(pBufParamsBack+20), 16);
                    //memcpy(fmSuSmInfo->pBuff, (char *)(pRecBuf+37), TempCount - 36);
                    SuName.sprintf("%s",sName);//站名
                    int SmCount = pBufParamsBack[36];//镜头个数
                    fmSuSmInfo->SuName->Caption = SuName;
                    fmSuSmInfo->SmCount->Caption = SmCount;

                    SmNum = pBufParamsBack[37];//镜头编号
                    if(pBufParamsBack[38] == 255)
                    {//站长室镜头
                        SmType = pBufParamsBack[38];//镜头类型
                        fmSuSmInfo->EnableRec->Caption = "不录像";
                        fmSuSmInfo->Label10->Caption = "无";
                        fmSuSmInfo->Label12->Caption = "无";
                        fmSuSmInfo->Label20->Caption = "无返回";
                    }
                    else
                    {
                        SmType = pBufParamsBack[38] & 0X0F;//镜头类型
                        int ENABLEREC = pBufParamsBack[38] & 0X80;//该镜头是否有录像
                        if(ENABLEREC == 0X80)
                        {//有录像
                            fmSuSmInfo->EnableRec->Caption = "录像";
                        }
                        else if(ENABLEREC == 0)
                        {//不录像
                            fmSuSmInfo->EnableRec->Caption = "不录像";
                        }

                        if((pBufParamsBack[38] & 0X40) == 0X40)
                        {//有灯控
                            fmSuSmInfo->Label10->Caption = "有";
                        }
                        else if((pBufParamsBack[38] & 0X40) == 0)
                        {//无灯控
                            fmSuSmInfo->Label10->Caption = "无";
                        }

                        if((pBufParamsBack[38] & 0X20) == 0X20)
                        {//有预置点巡航
                            fmSuSmInfo->Label12->Caption = "有";
                        }
                        else if((pBufParamsBack[38] & 0X20) == 0)
                        {//无预置点巡航
                            fmSuSmInfo->Label12->Caption = "无";
                        }

                        if((pBufParamsBack[38] & 0X10) == 0X10)
                        {//无云台有返回
                            fmSuSmInfo->Label20->Caption = "无返回";
                        }
                        else if((pBufParamsBack[38] & 0X10) == 0)
                        {//有云台有返回
                            fmSuSmInfo->Label20->Caption = "有返回";
                        }
                        if((pBufParamsBack[38] & 0X08) == 0X08)
                        {//有雨刷
                            fmSuSmInfo->Label22->Caption = "有";
                        }
                        else if((pBufParamsBack[38] & 0X08) == 0)
                        {//无雨刷
                            fmSuSmInfo->Label22->Caption = "无";
                        }
                    }
                    switch(SmType)
                    {
                        case 0:
                        {
                            fmSuSmInfo->SmType->Caption = "固定镜头";
                            break;
                        }
                        case 1:
                        {
                            fmSuSmInfo->SmType->Caption = "云台镜头";
                            break;
                        }
                        case 2:
                        {
                            fmSuSmInfo->SmType->Caption = "快球镜头";
                            break;
                        }
                        case 255:
                        {
                            fmSuSmInfo->SmType->Caption = "会议镜头";
                            break;
                        }
                    }
                    memset(sName,0,16);
                    memcpy(sName, (char *)(pBufParamsBack+39), 16);
                    SmName.sprintf("%s",sName);//镜头名
                    AudioNum = pBufParamsBack[55];//音频编号
                    SwAddr = pBufParamsBack[56];//切换器地址

                    fmSuSmInfo->Label14->Caption = *(WORD *)(pBufParamsBack + 57);//
                    fmSuSmInfo->Label16->Caption = *(WORD *)(pBufParamsBack + 59);//
                    fmSuSmInfo->Label18->Caption = *(WORD *)(pBufParamsBack + 61);//

                    fmSuSmInfo->SmNum->Caption = SmNum;
                    fmSuSmInfo->SmName->Caption = SmName;
                    fmSuSmInfo->AudioNum->Caption = AudioNum;
                    fmSuSmInfo->SwAddr->Caption = SwAddr;
                    if(SmCount > 1)
                    {
                        fmSuSmInfo->SpeedButton7->Enabled = true;
                        fmSuSmInfo->SpeedButton6->Enabled = false;
                        fmSuSmInfo->SpeedButton8->Enabled = true;
                        fmSuSmInfo->SpeedButton9->Enabled = false;
                    }
                    fmSuSmInfo->ShowModal();
               
                    break;
                }

                /*case 0X01:
                {//获取基本站名和镜头信息
                    String SuName = "",SmName = "";
                    int SmNum = 0,SmType = 0,AudioNum = 0,SwAddr = 0;
                    BYTE *sName = new BYTE[16];
                    memset(sName,0,16);
                    memcpy(sName, (char *)(pBufParamsBack+20), 16);
                    //memcpy(fmSuSmInfo->pBuff, (char *)(pRecBuf+37), TempCount - 36);
                    SuName.sprintf("%s",sName);//站名
                    int SmCount = pBufParamsBack[36];//镜头个数
                    fmSuSmInfo->SuName->Caption = SuName;
                    fmSuSmInfo->SmCount->Caption = SmCount;

                    SmNum = pBufParamsBack[37];//镜头编号
                    if(pBufParamsBack[38] == 255)
                    {//站长室镜头
                        SmType = pBufParamsBack[38];//镜头类型
                        fmSuSmInfo->EnableRec->Caption = "不录像";
                    }
                    else
                    {
                        SmType = pBufParamsBack[38] & 0X7F;//镜头类型
                        int ENABLEREC = pBufParamsBack[38] & 0X80;//该镜头是否有录像
                        if(ENABLEREC == 0X80)
                        {//有录像
                            fmSuSmInfo->EnableRec->Caption = "录像";
                        }
                        else if(ENABLEREC == 0)
                        {//不录像
                            fmSuSmInfo->EnableRec->Caption = "不录像";
                        }
                    }
                    switch(SmType)
                    {
                        case 0:
                        {
                            fmSuSmInfo->SmType->Caption = "固定镜头";
                            break;
                        }
                        case 1:
                        {
                            fmSuSmInfo->SmType->Caption = "云台镜头";
                            break;
                        }
                        case 2:
                        {
                            fmSuSmInfo->SmType->Caption = "快球镜头";
                            break;
                        }
                        case 255:
                        {
                            fmSuSmInfo->SmType->Caption = "会议镜头";
                            break;
                        }
                    }
                    memset(sName,0,16);
                    memcpy(sName, (char *)(pBufParamsBack+39), 16);
                    SmName.sprintf("%s",sName);//镜头名
                    AudioNum = pBufParamsBack[55];//音频编号
                    SwAddr = pBufParamsBack[56];//切换器地址
                    fmSuSmInfo->SmNum->Caption = SmNum;
                    fmSuSmInfo->SmName->Caption = SmName;
                    fmSuSmInfo->AudioNum->Caption = AudioNum;
                    fmSuSmInfo->SwAddr->Caption = SwAddr;
                    if(SmCount > 1)
                    {
                        fmSuSmInfo->SpeedButton7->Enabled = true;
                        fmSuSmInfo->SpeedButton6->Enabled = false;
                        fmSuSmInfo->SpeedButton8->Enabled = true;
                        fmSuSmInfo->SpeedButton9->Enabled = false;
                    }
                    fmSuSmInfo->ShowModal();
               
                    break;
                }*/
                /* TODO : 获取IP地址信息 02*/
                case 0X02:
                {//获取IP地址信息
                    int VideoServerCount = 0,AudioServerCount = 0,TransServerCount = 0,/
                    VideoServerNum = 0,AvType = 0,DvrLx = 0,DvrPlace = 0;
                    int NumTemp = 0;
                    VideoServerCount = pBufParamsBack[20]; //视频服务器的个数
                    VideoServerNum = pBufParamsBack[21]; //视频服务器编号
                    AvType = pBufParamsBack[22] & 0X0F; //AV板类型(0:两路;1:四路)
                    switch(AvType)
                    {
                        case 0:
                        {
                            fmQtServerIpIfo->AvType->Caption = "两路";
                            break;
                        }
                        case 1:
                        {
                            fmQtServerIpIfo->AvType->Caption = "四路";
                            break;
                        }
                    }
                    DvrPlace = pBufParamsBack[22] / 16;//DVR板位置 0 -右侧 1-左侧
                    if(DvrPlace == 0)
                    {
                        fmQtServerIpIfo->Label14->Visible = false;
                        fmQtServerIpIfo->Label16->Visible = false;
                        fmQtServerIpIfo->Label17->Visible = false;
                        fmQtServerIpIfo->Label18->Visible = false;
                        fmQtServerIpIfo->Label15->Visible = true;
                        fmQtServerIpIfo->Label21->Visible = true;
                        fmQtServerIpIfo->Label20->Visible = true;
                        fmQtServerIpIfo->Label19->Visible = true;
                        fmQtServerIpIfo->DvrPlace->Caption = "右侧";
                    }
                    else if(DvrPlace == 1)
                    {
                        fmQtServerIpIfo->Label14->Visible = true;
                        fmQtServerIpIfo->Label16->Visible = true;
                        fmQtServerIpIfo->Label17->Visible = true;
                        fmQtServerIpIfo->Label18->Visible = true;
                        fmQtServerIpIfo->Label15->Visible = false;
                        fmQtServerIpIfo->Label21->Visible = false;
                        fmQtServerIpIfo->Label20->Visible = false;
                        fmQtServerIpIfo->Label19->Visible = false;
                        fmQtServerIpIfo->DvrPlace->Caption = "左侧";
                    }
                    DvrLx = pBufParamsBack[23]; //DVR是否带录像功能 0:不带;1:带
                    switch(DvrLx)
                    {
                        case 0:
                        {
                            fmQtServerIpIfo->DvrLx->Caption = "不带";
                            break;
                        }
                        case 1:
                        {
                            fmQtServerIpIfo->DvrLx->Caption = "带录像";
                            break;
                        }
                    }
                    String FalseVideoServerIp = UniteIp(pBufParamsBack+24);
                    String TrueVideoServerIp = UniteIp(pBufParamsBack+28);
                    fmQtServerIpIfo->VideoCount->Caption = VideoServerCount;
                    fmQtServerIpIfo->VideoNum->Caption = VideoServerNum;
                    fmQtServerIpIfo->FalseVideoServerIp->Caption = FalseVideoServerIp;
                    fmQtServerIpIfo->TrueVideoServerIp->Caption = TrueVideoServerIp;
                    if(VideoServerCount > 1)
                    {
                        fmQtServerIpIfo->SpeedButton7->Enabled = true;
                        fmQtServerIpIfo->SpeedButton6->Enabled = false;
                        fmQtServerIpIfo->SpeedButton8->Enabled = true;
                        fmQtServerIpIfo->SpeedButton9->Enabled = false;
                    }
               
                    NumTemp = 20 + VideoServerCount * 11;
                    AudioServerCount = pBufParamsBack[NumTemp + 1]; //音频服务器的个数
                    fmQtServerIpIfo->AudioCount->Caption = AudioServerCount;
                    fmQtServerIpIfo->AudioNum->Caption = pBufParamsBack[NumTemp + 2]; //音频服务器编号
                    fmQtServerIpIfo->AudioIp->Caption = UniteIp(pBufParamsBack+NumTemp + 3);
                    if(AudioServerCount > 1)
                    {
                        fmQtServerIpIfo->SpeedButton2->Enabled = true;
                        fmQtServerIpIfo->SpeedButton1->Enabled = false;
                        fmQtServerIpIfo->SpeedButton3->Enabled = true;
                        fmQtServerIpIfo->SpeedButton4->Enabled = false;
                    }

                    NumTemp += AudioServerCount * 5 + 1;
                    TransServerCount = pBufParamsBack[NumTemp + 1]; //转发服务器的个数
                    fmQtServerIpIfo->TransCount->Caption = TransServerCount;
                    fmQtServerIpIfo->TransNum->Caption = pBufParamsBack[NumTemp + 2]; //转发服务器编号
                    fmQtServerIpIfo->TransIp->Caption = UniteIp(pBufParamsBack+NumTemp + 3);
                    if(TransServerCount > 1)
                    {
                        fmQtServerIpIfo->SpeedButton10->Enabled = true;
                        fmQtServerIpIfo->SpeedButton5->Enabled = false;
                        fmQtServerIpIfo->SpeedButton11->Enabled = true;
                        fmQtServerIpIfo->SpeedButton12->Enabled = false;
                    }

                    NumTemp += TransServerCount * 5 + 1;
                    fmQtServerIpIfo->StationIp->Caption = UniteIp(pBufParamsBack+NumTemp + 1);
                    fmQtServerIpIfo->MainIp->Caption = UniteIp(pBufParamsBack+NumTemp + 1 + 4);

                    fmQtServerIpIfo->ShowModal();
                    break;
                }
                /* TODO : 获取模块地址信息03 */
                case 0X03:
                {//获取模块地址信息
                    int TempCount = 0;
                    int AudioSwCount = 0,VideoSwCount = 0,YtSwCount = 0,KqSwCount = 0;
                    fmSmAddrInfo->MainAddr->Caption = pBufParamsBack[20];//主控模块地址  20
                    fmSmAddrInfo->ControlAddr->Caption = pBufParamsBack[21];//信道控制模块地址  21

                    AudioSwCount = pBufParamsBack[22];//音频切换器的个数 22
                    fmSmAddrInfo->AudioSwCount->Caption = AudioSwCount;
                    fmSmAddrInfo->AudioSwAddr->Caption = pBufParamsBack[23];//音频切换器1的模块地址 23
                    if(AudioSwCount > 1)
                    {
                        fmSmAddrInfo->SpeedButton3->Enabled = true;
                        fmSmAddrInfo->SpeedButton2->Enabled = false;
                        fmSmAddrInfo->SpeedButton4->Enabled = true;
                        fmSmAddrInfo->SpeedButton1->Enabled = false;
                    }

                    TempCount = 22 + AudioSwCount * 1 + 1;
                    VideoSwCount = pBufParamsBack[TempCount];//视频切换器的个数 24
                    fmSmAddrInfo->VideoCount->Caption = VideoSwCount;
                    fmSmAddrInfo->VideoAddr->Caption = pBufParamsBack[TempCount + 1];//视频切换器1的模块地址 25
                    if(VideoSwCount > 1)
                    {
                        fmSmAddrInfo->SpeedButton7->Enabled = true;
                        fmSmAddrInfo->SpeedButton6->Enabled = false;
                        fmSmAddrInfo->SpeedButton8->Enabled = true;
                        fmSmAddrInfo->SpeedButton5->Enabled = false;
                    }

                    TempCount += VideoSwCount * 1 + 1;
                    YtSwCount = pBufParamsBack[TempCount];//云台控制器的个数 26
                    fmSmAddrInfo->YtCount->Caption = YtSwCount;
                    fmSmAddrInfo->YtAddr->Caption = pBufParamsBack[TempCount + 1];//云台控制器1的模块地址 27
                    if(YtSwCount > 1)
                    {
                        fmSmAddrInfo->SpeedButton11->Enabled = true;
                        fmSmAddrInfo->SpeedButton10->Enabled = false;
                        fmSmAddrInfo->SpeedButton12->Enabled = true;
                        fmSmAddrInfo->SpeedButton9->Enabled = false;
                    }

                    TempCount += YtSwCount * 1 + 1;
                    KqSwCount = pBufParamsBack[TempCount];//快球控制器的个数 29
                    fmSmAddrInfo->KqCount->Caption = KqSwCount;
                    fmSmAddrInfo->KqAddr->Caption = pBufParamsBack[TempCount + 1];//快球控制器1的模块地址 30
                    if(KqSwCount > 1)
                    {
                        fmSmAddrInfo->SpeedButton15->Enabled = true;
                        fmSmAddrInfo->SpeedButton14->Enabled = false;
                        fmSmAddrInfo->SpeedButton16->Enabled = true;
                        fmSmAddrInfo->SpeedButton13->Enabled = false;
                    }

                    fmSmAddrInfo->ShowModal();
                    break;
                }
                /* TODO : 获取视频切换方面的参数信息04 */
                case 0X04:
                {//获取视频切换方面的参数信息返回数据
                    int SmCount = 0;
                    SmCount = pBufParamsBack[20];//镜头个数
                    fmGetVideoSwInfo->SmCount->Caption = pBufParamsBack[20];//镜头个数
                    if(SmCount > 0)
                    {
                        fmGetVideoSwInfo->SpeedButton3->Enabled = true;
                        fmGetVideoSwInfo->SpeedButton2->Enabled = false;
                        fmGetVideoSwInfo->SpeedButton4->Enabled = true;
                        fmGetVideoSwInfo->SpeedButton1->Enabled = false;
                    }
                    asSql = "select *  from CT_SM where SUNUM=" + IntToStr(SUNUM)/
                     + " AND " + "SMNUM=" + IntToStr(pBufParamsBack[21]);
                    ADOSelect->Close();
                    ADOSelect->SQL->Clear();
                    ADOSelect->SQL->Add(asSql);
                    ADOSelect->Open();
                    fmGetVideoSwInfo->SmName->Caption = ADOSelect->FieldByName("SMNAME")->AsString;//镜头名称

                    fmGetVideoSwInfo->SmNum->Caption = pBufParamsBack[21];//镜头编号
                    fmGetVideoSwInfo->SuName->Caption = NodeText;//站名
                    fmGetVideoSwInfo->SuNum->Caption = SUNUM;//

                    fmGetVideoSwInfo->SwInPort->Caption = pBufParamsBack[22];//
                    if(pBufParamsBack[23] == 0)
                    {//0-表示没有级联
                        fmGetVideoSwInfo->ClassType->Caption = "无级联";
                    }
                    else if(pBufParamsBack[23] == 1)
                    {//1-表示有级联
                        fmGetVideoSwInfo->ClassType->Caption = "有级联";
                    }
                    fmGetVideoSwInfo->ClassSwAddr->Caption = pBufParamsBack[24];//级联切换器地址
                    int TwoClassType = 20 + pBufParamsBack[20] * 4 + 1;//二级级联类型
                    if(pBufParamsBack[(TwoClassType + 1)] > 0) //级联切换器端口个数M
                    {//有二级切换
                      fmGetVideoSwInfo->ClassSwCount->Caption = pBufParamsBack[(TwoClassType + 1)];//级联切换器端口个数M
                        fmGetVideoSwInfo->DvrChannels->Caption = pBufParamsBack[(TwoClassType + 2)];//DVR通道号
                        fmGetVideoSwInfo->OneSwInPort->Caption = pBufParamsBack[(TwoClassType + 3)];//一级切换器输入端口
                        fmGetVideoSwInfo->TwoClassSwOutPort->Caption = pBufParamsBack[(TwoClassType + 4)];//一级切换器输入端口对应的二级级联切换器输出端口
                        fmGetVideoSwInfo->TwoClassSwAddr->Caption = pBufParamsBack[(TwoClassType + 5)];//一级切换器输入端口对应的二级级联切换器地址
                        fmGetVideoSwInfo->SpeedButton7->Enabled = true;
                        fmGetVideoSwInfo->SpeedButton6->Enabled = false;
                        fmGetVideoSwInfo->SpeedButton8->Enabled = true;
                        fmGetVideoSwInfo->SpeedButton5->Enabled = false;
                    }
                    else if(pBufParamsBack[(TwoClassType + 1)] == 0)
                    {//没有二级切换
                      fmGetVideoSwInfo->ClassSwCount->Caption = 0;
                        fmGetVideoSwInfo->DvrChannels->Caption = 0;
                        fmGetVideoSwInfo->OneSwInPort->Caption = 0;
                        fmGetVideoSwInfo->TwoClassSwOutPort->Caption = 0;
                        fmGetVideoSwInfo->TwoClassSwAddr->Caption = 0;
                        fmGetVideoSwInfo->SpeedButton7->Enabled = false;
                        fmGetVideoSwInfo->SpeedButton6->Enabled = false;
                        fmGetVideoSwInfo->SpeedButton8->Enabled = false;
                        fmGetVideoSwInfo->SpeedButton5->Enabled = false;
                    }

                    fmGetVideoSwInfo->ShowModal();
                    break;
                }
                /* TODO : 获取网络控制方面的参数信息05 */
                case 0X05:
                {//获取网络控制方面的参数信息
                    fmGetNetControl->Label12->Caption = UniteIp(pBufParamsBack+20);//视频服务器的组播地址
                    fmGetNetControl->Label13->Caption = *(WORD *)(pBufParamsBack + 24);//视频服务器的组播起始端口
                    fmGetNetControl->Label14->Caption = pBufParamsBack[26];//视频服务器的组播端口个数

                    fmGetNetControl->Label15->Caption = UniteIp(pBufParamsBack+27);//音频服务器的组播地址
                    fmGetNetControl->Label16->Caption = *(WORD *)(pBufParamsBack + 31);//音频服务器的组播起始端口
                    fmGetNetControl->Label17->Caption = pBufParamsBack[33];//音频服务器的组播端口个数

                    fmGetNetControl->Label18->Caption = UniteIp(pBufParamsBack+34);//转发服务器的组播地址
                    fmGetNetControl->Label19->Caption = *(WORD *)(pBufParamsBack + 38);//转发服务器的组播起始端口
                    fmGetNetControl->Label21->Caption = pBufParamsBack[40];//转发服务器的组播端口个数

                    fmGetNetControl->Label22->Caption = UniteIp(pBufParamsBack+41);//视讯会议终端的组播地址
                    fmGetNetControl->Label23->Caption = *(WORD *)(pBufParamsBack + 45);//视讯会议终端的组播起始端口
                    fmGetNetControl->Label24->Caption = pBufParamsBack[47];//视讯会议终端的组播端口个数

                    fmGetNetControl->Label30->Caption = UniteIp(pBufParamsBack+48);//视讯会议终端的音频组播地址
                    fmGetNetControl->Label29->Caption = *(WORD *)(pBufParamsBack + 52);//视讯会议终端的音频组播起始端口
                    fmGetNetControl->Label28->Caption = pBufParamsBack[54];//视讯会议终端的音频组播端口个数
                    fmGetNetControl->ShowModal();
                    break;
                }
                case 0X0A:
                {
                 WORD RELEASETIME = *(WORD *)(pBufParamsBack + 20);
                    int IfVideo = 0,OutPutPort = 0;
                    IfVideo = pBufParamsBack[22];
                    OutPutPort = pBufParamsBack[23];

                    //MessageShow(NodeText + "当前前台释放权限时间为:" + IntToStr(RELEASETIME) + "秒");
                    fmControlBackInfo->Label1->Caption = NodeText + "当前前台释放权限时间为:" + IntToStr(RELEASETIME) + "秒";
                    if(IfVideo == 1)
                    {
                     fmControlBackInfo->Label2->Caption = "视讯会议模拟终端:模拟图像";
                    }
                    else
                    {
                     fmControlBackInfo->Label2->Caption = "视讯会议模拟终端:数字图像";
                    }
                   
                    fmControlBackInfo->Label3->Caption = "模拟图像输出端口(0~255):" + IntToStr(OutPutPort);

                    if(pBufParamsBack[24] == 1)
                    {
                     fmControlBackInfo->Label4->Caption = "视讯会议终端声音:模拟声音";
                    }
                    else
                    {
                     fmControlBackInfo->Label4->Caption = "视讯会议终端声音:数字声音";
                    }
                   
                    fmControlBackInfo->Label5->Caption = "模拟声音输出端口(0~11):" + IntToStr(pBufParamsBack[25]);

                    fmControlBackInfo->ShowModal();

                 break;
                }
                case 0X0B:
                {
                    int VideoServerCount = 0,AudioServerCount = 0,TransServerCount = 0,/
                    VideoServerNum = 0,AvType = 0,DvrLx = 0,DvrPlace = 0;
                    int NumTemp = 0;
                    int SINGLEPORT = 0,SINGLEPORTNUM = 0,SM1 = 0,SM2 = 0,SM3 = 0,SM4 = 0;
                    int SMCOUNT = 0;
                    int LINENUM = 0,SUNUM = 0;
                    String asSql = "";

                    LINENUM = pBufParamsBack[11];
                    SUNUM = pBufParamsBack[12];

                    VideoServerCount = pBufParamsBack[20]; //视频服务器的个数
                    VideoServerNum = pBufParamsBack[21]; //视频服务器编号
                    AvType = pBufParamsBack[22] & 0X01; //AV板类型(0:两路;1:四路)
                    switch(AvType)
                    {
                        case 0:
                        {
                            fmExtendDvrBack->AvType->Caption = "四路";
                            break;
                        }
                        case 1:
                        {
                            fmExtendDvrBack->AvType->Caption = "两路";
                            break;
                        }
                    }

                    DvrLx = (AvType & 0X02) / 2; //DVR是否带录像功能 0:不带;1:带
                    switch(DvrLx)
                    {
                        case 0:
                        {
                            fmExtendDvrBack->DvrLx->Caption = "不录像";
                            break;
                        }
                        case 1:
                        {
                            fmExtendDvrBack->DvrLx->Caption = "带录像";
                            break;
                        }
                    }
                    String FalseVideoServerIp = UniteIp(pBufParamsBack+23);
                    String TrueVideoServerIp = UniteIp(pBufParamsBack+27);
                    fmExtendDvrBack->VideoCount->Caption = VideoServerCount;
                    fmExtendDvrBack->VideoNum->Caption = VideoServerNum;
                    fmExtendDvrBack->FalseVideoServerIp->Caption = FalseVideoServerIp;
                    fmExtendDvrBack->TrueVideoServerIp->Caption = TrueVideoServerIp;

                    BYTE *SINGLEPORTTempBuf = new BYTE[2];
                    memset(SINGLEPORTTempBuf, 0, 2);
                    SINGLEPORTTempBuf[0] = pBufParamsBack[32];
                    SINGLEPORTTempBuf[1] = pBufParamsBack[31];
                    SINGLEPORT = *(WORD *)(SINGLEPORTTempBuf);//
                   
                    SINGLEPORTNUM = pBufParamsBack[33]; //
                    SMCOUNT = pBufParamsBack[34]; //
                    SM1 = pBufParamsBack[35]; //
                    SM2 = pBufParamsBack[36]; //
                    SM3 = pBufParamsBack[37]; //
                    SM4 = pBufParamsBack[38]; //

                    fmExtendDvrBack->SinglePort->Caption = SINGLEPORT;
                    fmExtendDvrBack->SinglePortNum->Caption = SINGLEPORTNUM;
                    fmExtendDvrBack->SmCount->Caption = SMCOUNT;

                    asSql = "select * from CT_SM where SUNUM=" + IntToStr(SUNUM) + " AND " + "SMNUM=" + IntToStr(SM1);
                    fmMain->ADOSelect->Close();
                    fmMain->ADOSelect->SQL->Clear();
                    fmMain->ADOSelect->SQL->Add(asSql);
                    fmMain->ADOSelect->Open();
                    int num = fmMain->ADOSelect->RecordCount;
                    if(num > 0)
                    {
                        fmExtendDvrBack->Sm1->Caption = fmMain->ADOSelect->FieldByName("SMNAME")->AsString;
                    }
                    else
                    {
                        fmExtendDvrBack->Sm1->Caption = "";
                    }

                    asSql = "select * from CT_SM where SUNUM=" + IntToStr(SUNUM) + " AND " + "SMNUM=" + IntToStr(SM2);
                    fmMain->ADOSelect->Close();
                    fmMain->ADOSelect->SQL->Clear();
                    fmMain->ADOSelect->SQL->Add(asSql);
                    fmMain->ADOSelect->Open();
                    num = fmMain->ADOSelect->RecordCount;
                    if(num > 0)
                    {
                        fmExtendDvrBack->Sm2->Caption = fmMain->ADOSelect->FieldByName("SMNAME")->AsString;
                    }
                    else
                    {
                        fmExtendDvrBack->Sm2->Caption = "";
                    }

                    asSql = "select * from CT_SM where SUNUM=" + IntToStr(SUNUM) + " AND " + "SMNUM=" + IntToStr(SM3);
                    fmMain->ADOSelect->Close();
                    fmMain->ADOSelect->SQL->Clear();
                    fmMain->ADOSelect->SQL->Add(asSql);
                    fmMain->ADOSelect->Open();
                    num = fmMain->ADOSelect->RecordCount;
                    if(num > 0)
                    {
                        fmExtendDvrBack->Sm3->Caption = fmMain->ADOSelect->FieldByName("SMNAME")->AsString;
                    }
                    else
                    {
                        fmExtendDvrBack->Sm3->Caption = "";
                    }

                    asSql = "select * from CT_SM where SUNUM=" + IntToStr(SUNUM) + " AND " + "SMNUM=" + IntToStr(SM4);
                    fmMain->ADOSelect->Close();
                    fmMain->ADOSelect->SQL->Clear();
                    fmMain->ADOSelect->SQL->Add(asSql);
                    fmMain->ADOSelect->Open();
                    num = fmMain->ADOSelect->RecordCount;
                    if(num > 0)
                    {
                        fmExtendDvrBack->Sm4->Caption = fmMain->ADOSelect->FieldByName("SMNAME")->AsString;
                    }
                    else
                    {
                        fmExtendDvrBack->Sm4->Caption = "";
                    }

                    if(VideoServerCount > 1)
                    {
                        fmExtendDvrBack->SpeedButton7->Enabled = true;
                        fmExtendDvrBack->SpeedButton6->Enabled = false;
                        fmExtendDvrBack->SpeedButton8->Enabled = true;
                        fmExtendDvrBack->SpeedButton9->Enabled = false;
                    }

                    fmExtendDvrBack->ShowModal();
                    break;
                }
                case 0X0C:
                {
                    fmExtendAudioBack->SmCount->Caption = pBufParamsBack[20];//镜头个数
                    fmExtendAudioBack->SmNum->Caption = pBufParamsBack[21];//镜头号
                    if(pBufParamsBack[22] == 0)//声音是否级联
                    {
                        fmExtendAudioBack->Ev_jilian->Caption = "不级联";
                    }
                    else
                    {
                        fmExtendAudioBack->Ev_jilian->Caption = "级联";
                    }
                    fmExtendAudioBack->Ev_mainselfinport->Caption = pBufParamsBack[23];//主控本身的声音输入口
                    fmExtendAudioBack->Ev_swaddr->Caption = pBufParamsBack[24];//级联音频切换器的地址
                    fmExtendAudioBack->Ev_swoutport->Caption = pBufParamsBack[25];//级联音频切换器的输出口
                    fmExtendAudioBack->Ev_swinport->Caption = pBufParamsBack[26];//级联音频切换器的输入口

                    if(pBufParamsBack[20] > 1)
                    {
                        fmExtendAudioBack->SpeedButton7->Enabled = true;
                        fmExtendAudioBack->SpeedButton6->Enabled = false;
                        fmExtendAudioBack->SpeedButton8->Enabled = true;
                        fmExtendAudioBack->SpeedButton9->Enabled = false;
                    }

                    fmExtendAudioBack->ShowModal();
                    break;
                }
                case 0X0D:
                {
                    fmExtendVideoBack->SmCount->Caption = pBufParamsBack[20];//镜头个数
                    fmExtendVideoBack->SmNum->Caption = pBufParamsBack[21];//镜头号
                    fmExtendVideoBack->Vs_addr->Caption = pBufParamsBack[22];//视频切换器的地址
                    fmExtendVideoBack->Vs_inport->Caption = pBufParamsBack[23];//视频切换器的输入口
                    fmExtendVideoBack->Vs_outport->Caption = pBufParamsBack[24];//视频切换器的输出口

                    if(pBufParamsBack[20] > 1)
                    {
                        fmExtendVideoBack->SpeedButton7->Enabled = true;
                        fmExtendVideoBack->SpeedButton6->Enabled = false;
                        fmExtendVideoBack->SpeedButton8->Enabled = true;
                        fmExtendVideoBack->SpeedButton9->Enabled = false;
                    }

                    fmExtendVideoBack->ShowModal();
                    break;
                }
            }
        }
    }
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::G2MPDxcClick(TObject *Sender)
{//获取G2MP时隙参数
    int SMADDR,TYPE;
    String SmName;

    SmName = tvDevice->Selected->Text;
    AnsiString asSqlIndex = "select * from CT_DEV where SMNAME='" + SmName + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSqlIndex);
    ADOIndex->Open();
    SMADDR = ADOIndex->FieldByName("SMADDR")->AsInteger;
    TYPE = 0X00;
    G2mpGetParamsFlag = true;
    BYTE SendBuf[] = {0XEB,0X90,0X06,0X00,0X01,0X02,0X00,0X00,0X00,0X77,0X00,0XC6,SMADDR,TYPE};
    int Length = sizeof(SendBuf);
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  获取G2MP时隙参数命令:",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::G2MPE1Click(TObject *Sender)
{//获取G2MPE1时钟参数
    /*String SMNAME;
    int SMADDR = 0,LINENUM = 0,SUNUM = 0;

    SMNAME = tvDevice->Selected->Text;
    AnsiString asSqlIndex = "select * from CT_DEV where SMNAME='" + SMNAME + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSqlIndex);
    ADOIndex->Open();
    SMADDR = ADOIndex->FieldByName("SMADDR")->AsInteger;

    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    //DATAINFO
    DataInfo[0] = 0X02;//
    MakePack(DataInfo,1,0X04,SMADDR,0XC6,0X47,LINENUM,SUNUM);*/
    int SMADDR,TYPE;
    String SmName;

    SmName = tvDevice->Selected->Text;
    AnsiString asSqlIndex = "select * from CT_DEV where SMNAME='" + SmName + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSqlIndex);
    ADOIndex->Open();
    SMADDR = ADOIndex->FieldByName("SMADDR")->AsInteger;
    TYPE = 0X02;

    BYTE SendBuf[] = {0XEB,0X90,0X06,0X00,0X01,0X02,0X00,0X00,0X00,0X77,0X00,0XC6,SMADDR,TYPE};
    int Length = sizeof(SendBuf);
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  获取G2MPE1时钟参数命令:",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }

}
//---------------------------------------------------------------------------

void __fastcall TfmMain::DXCN7Click(TObject *Sender)
{//DXC获取时钟配置
    String SMNAME;
    int SMADDR;
    SMNAME = tvDevice->Selected->Text;
    AnsiString asSqlIndex = "select * from CT_DEV where SMNAME='" + SMNAME + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSqlIndex);
    ADOIndex->Open();
    SMADDR = ADOIndex->FieldByName("SMADDR")->AsInteger;

    BYTE SendBuf[] = {0XEB,0X90,0X05,0X00,0X01,0X02,0X00,0X00,0X00,0X79,0X00,SMADDR,0X42};
    int Length = sizeof(SendBuf);

    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  获取DXC时钟配置命令:",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::DxcBack(BYTE * pRecBuf)
{
    int DXCIN,TSINBEGIN,TempData;
    int DXCMLNUM;//DXC 码流号
    int DXCSXNUM;//DXC 时隙号
    switch(pRecBuf[9])
    {
        case 0x79:
        {//DXC 获取参数返回报文
            if(pRecBuf[12] == 0xff)
            {
                TfmMessage *message = new TfmMessage(Application);
                message->lbMessage->Caption = "获取配置失败!";
                message->ShowModal();
            }
            else
            {
                imgMain->Canvas->Brush->Color = clBlue;
                imgMain->Canvas->Font->Color = clWhite;
                switch(pRecBuf[16])
                {
                    case 0x41:
                    {//获取接续配置数据返回
                        int TempAdd = 0;
                        for(DXCMLNUM = 0 ; DXCMLNUM < 16 ; DXCMLNUM++)
                        {
                            for(DXCSXNUM = 0 ; DXCSXNUM < 32 ; DXCSXNUM++)
                            {
                                TempData = pRecBuf[TempAdd + 17] & 0X80 ;
                                if(TempData == 128)
                                {//交换方式
                                    DXCIN = pRecBuf[TempAdd + 17] & 0X0F;
                                    TSINBEGIN = pRecBuf[TempAdd + 18] & 0X1F;

                                    imgMain->Canvas->FillRect(TRect(117+1+DXCSXNUM*20,62+1+DXCMLNUM*32,135-0+DXCSXNUM*20,76-0+DXCMLNUM*32));
                                    imgMain->Canvas->TextOutA(117+2+DXCSXNUM*20,62+1+DXCMLNUM*32,IntToStr(DXCIN));

                                    imgMain->Canvas->FillRect(TRect(117+1+DXCSXNUM*20,78+1+DXCMLNUM*32,135-0+DXCSXNUM*20,92-0+DXCMLNUM*32));
                                    imgMain->Canvas->TextOutA(117+2+DXCSXNUM*20,78+1+DXCMLNUM*32,IntToStr(TSINBEGIN));
                                }
                                else
                                {//消息方式
                                    imgMain->Canvas->FillRect(TRect(117+1+DXCSXNUM*20,62+1+DXCMLNUM*32,135-0+DXCSXNUM*20,76-0+DXCMLNUM*32));
                                    imgMain->Canvas->TextOutA(117+2+DXCSXNUM*20,62+1+DXCMLNUM*32,IntToStr(55));

                                    imgMain->Canvas->FillRect(TRect(117+1+DXCSXNUM*20,78+1+DXCMLNUM*32,135-0+DXCSXNUM*20,92-0+DXCMLNUM*32));
                                    imgMain->Canvas->TextOutA(117+2+DXCSXNUM*20,78+1+DXCMLNUM*32,IntToStr(55));
                                }
                                TempAdd = TempAdd + 2;
                            }
                        }
                        break;
                    }
                    case 0x42:
                    {//获取时钟选择配置数据返回
                        if(pRecBuf[17] == 0X10)
                        {
                            //MessageShow("DXC时钟:主时钟");
                            fmDxcSetR->Label2->Caption = "主时钟";
                            fmDxcSetR->GroupBox1->Enabled = false;
                            fmDxcSetR->ShowModal();
                        }
                        else
                        {
                            int DXCML = pRecBuf[17];
                            //MessageShow("DXC时钟:" + IntToStr(DXCML) + "  码流时钟");
                            fmDxcSetR->Label2->Caption = IntToStr(DXCML) + "  码流时钟";
                            fmDxcSetR->GroupBox1->Enabled = false;
                            fmDxcSetR->ShowModal();
                        }
                        break;
                    }
                    case 0x43:
                    {//获取码流方式配置数据返回
                        String asSql = "CREATE TABLE `DXCTEMP` (`DXCNUM` int(10) NOT NULL default '0',/
                        `WORKMODE` int(10) NOT NULL default '0',  PRIMARY KEY  (`DXCNUM`,`WORKMODE`))";
                        CreateTable(asSql);
                        for(int i = 0 ; i < 16 ; i++)
                        {
                            AnsiString asSql = "insert into DXCTEMP values("+IntToStr(i) +","+IntToStr(pRecBuf[17 + i])+")";
                            ADOUI->Close();
                            ADOUI->SQL->Clear();
                            ADOUI->SQL->Add(asSql);
                            ADOUI->ExecSQL();
                        }
                        fmDxcSetR->GroupBox1->Enabled = true;
                        fmDxcSetR->ShowModal();
                        break;
                    }
                }
            }
            break;
        }
        case 0x7A:
        {//查询DXC码流工作状态返回数据
            if(pRecBuf[12] == 0xff)
            {
                TfmMessage *message = new TfmMessage(Application);
                message->lbMessage->Caption = "获取配置失败!";
                message->ShowModal();
            }
            else
            {
                imgMain->Canvas->Brush->Color = clRed;
                imgMain->Canvas->Font->Color = clWhite;
                for(DXCMLNUM = 0;DXCMLNUM < 16;DXCMLNUM++)
                {
                    switch(pRecBuf[DXCMLNUM + 16])
                    {//imgMain->Canvas->Ellipse(37+1,62+1,37-2+20,62-2+32);
                        case 1:
                        {// 无码
                            imgMain->Canvas->Ellipse(37+1,62+1+DXCMLNUM*32,37-2+20,94-2+DXCMLNUM*32);
                            break;
                        }
                        case 2:
                        {// 失步
                            imgMain->Canvas->Ellipse(57+1,62+1+DXCMLNUM*32,57-2+20,94-2+DXCMLNUM*32);
                            break;
                        }
                        case 3:
                        {// 对告
                            imgMain->Canvas->Ellipse(77+1,62+1+DXCMLNUM*32,77-2+20,94-2+DXCMLNUM*32);
                            break;
                        }
                        case 4:
                        {// 全1
                            imgMain->Canvas->Ellipse(97+1,62+1+DXCMLNUM*32,97-2+20,94-2+DXCMLNUM*32);
                            break;
                        }
                    }
                }
            }
            break;
        }
    }
}

//---------------------------------------------------------------------------
//在数据库中创建一个新表
bool TfmMain::CreateTable(String AsSql)
{
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(AsSql);
    try
    {
        ADOSelect->ExecSQL();
        return true;
    }
    catch(...)
    {
        return false;
    }
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::DeleteTable(String AsSql)
{
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(AsSql);
    try
    {
        ADOSelect->ExecSQL();
    }
    catch(...)
    {
        return ;
    }
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::N10Click(TObject *Sender)
{//获取码流方式配置

    String SMNAME;
    int SMADDR;
    SMNAME = tvDevice->Selected->Text;
    AnsiString asSqlIndex = "select * from CT_DEV where SMNAME='" + SMNAME + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSqlIndex);
    ADOIndex->Open();
    SMADDR = ADOIndex->FieldByName("SMADDR")->AsInteger;

    BYTE SendBuf[] = {0XEB,0X90,0X05,0X00,0X01,0X02,0X00,0X00,0X00,0X79,0X00,SMADDR,0X43};
    int Length = sizeof(SendBuf);

    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> -> 获取DXC码流方式配置命令:",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::N11Click(TObject *Sender)
{//查询码流工作状态
    String SMNAME;
    int SMADDR;
    SMNAME = tvDevice->Selected->Text;
    AnsiString asSqlIndex = "select * from CT_DEV where SMNAME='" + SMNAME + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSqlIndex);
    ADOIndex->Open();
    SMADDR = ADOIndex->FieldByName("SMADDR")->AsInteger;
   
    BYTE SendBuf[] = {0XEB,0X90,0X04,0X00,0X01,0X02,0X00,0X00,0X00,0X7A,0X00,SMADDR};
    int Length = sizeof(SendBuf);

    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  查询DXC码流工作状态命令:",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::DevBack(BYTE *pRecBuf)
{
    switch(pRecBuf[9])
    {
        case 0X77:
        {// 获取后台设备参数 返回数据
            switch(pRecBuf[11])
            {
                case 0XC9:
                {// V35 返回数据
                    if(pRecBuf[13] == 0xff)
                    {//获取失败
                        switch(pRecBuf[17])
                        {
                            case 0X00:
                            {//获取E1时钟参数失败
                                TfmMessage *message = new TfmMessage(Application);
                                message->lbMessage->Caption = "获取E1时钟参数失败!";
                                message->ShowModal();
                                break;
                            }
                            case 0X01:
                            {//获取E1码流方式参数失败
                                TfmMessage *message = new TfmMessage(Application);
                                message->lbMessage->Caption = "获取E1码流方式参数失败!";
                                message->ShowModal();
                                break;
                            }
                            case 0X02:
                            {//获取子速率端口参数失败
                                TfmMessage *message = new TfmMessage(Application);
                                message->lbMessage->Caption = "获取子速率端口参数失败!";
                                message->ShowModal();
                                break;
                            }
                            default:
                            {
                                TfmMessage *message = new TfmMessage(Application);
                                message->lbMessage->Caption = "获取参数失败!";
                                message->ShowModal();
                            }
                        }
                    }
                    else
                    {
                        switch(pRecBuf[17])
                        {
                            case 0X00:
                            {//获取E1时钟参数返回数据
                                switch(pRecBuf[18])
                                {
                                    case 0X02:
                                    {// 主时钟
                                        RadioGroup10->ItemIndex = 2;
                                        break;
                                    }
                                    case 0X00:
                                    {//从A向时钟
                                        RadioGroup10->ItemIndex = 0;
                                        break;
                                    }
                                    case 0X01:
                                    {//从B向时钟
                                        RadioGroup10->ItemIndex = 1;
                                        break;
                                    }
                                }
                                break;
                            }
                            case 0X01:
                            {//获取E1码流方式参数返回数据
                                if((pRecBuf[18] & 0X20) == 0X00)
                                {
                                    RadioGroup13->ItemIndex = 0;
                                }
                                else if((pRecBuf[18] & 0X20) == 0X20)
                                {
                                    RadioGroup13->ItemIndex = 1;
                                }
                                if((pRecBuf[18] & 0X10) == 0X00)
                                {
                                    RadioGroup14->ItemIndex = 0;
                                }
                                else if((pRecBuf[18] & 0X10) == 0X10)
                                {
                                    RadioGroup14->ItemIndex = 1;
                                }
                                if((pRecBuf[18] & 0X02) == 0X00)
                                {
                                    RadioGroup12->ItemIndex = 0;
                                }
                                else if((pRecBuf[18] & 0X02) == 0X02)
                                {
                                    RadioGroup12->ItemIndex = 1;
                                }
                                if((pRecBuf[18] & 0X01) == 0X00)
                                {
                                    RadioGroup11->ItemIndex = 0;
                                }
                                else if((pRecBuf[18] & 0X01) == 0X01)
                                {
                                    RadioGroup11->ItemIndex = 1;
                                }
                                break;
                            }
                            case 0X02:
                            {//获取子速率端口参数返回数据
                                int V35SET = 0,V35TS = 0;

                                V35Num->Clear();
                                String asSql = "CREATE TABLE `V35TEMP` (`V35NUM` int(10) NOT NULL default '0',/
                                `V35SET` int(10) NOT NULL default '0',`V35TS` int(10) NOT NULL default '0',/
                                PRIMARY KEY  (`V35NUM`,`V35SET`,`V35TS`))";
                                if(!CreateTable(asSql))
                                {
                                    AnsiString asSqldel = "delete from V35TEMP";
                                    ADOUI->Close();
                                    ADOUI->SQL->Clear();
                                    ADOUI->SQL->Add(asSqldel);
                                    ADOUI->ExecSQL();
                                }

                                for(int i=0;i<30;i++)
                                {
                                    V35SET = pRecBuf[18 + i * 2];
                                    V35TS = pRecBuf[18 + i * 2 + 1];
                                    /*if((V35SET == 0) && (V35TS == 0))
                                    {
                                        break;
                                    } */
                                    //else
                                    {
                                        AnsiString asSql = "insert into V35TEMP values("+IntToStr(i) +","+IntToStr(V35SET)/
                                        +","+IntToStr(V35TS)+")";
                                        ADOUI->Close();
                                        ADOUI->SQL->Clear();
                                        ADOUI->SQL->Add(asSql);
                                        ADOUI->ExecSQL();
                                        V35Num->Items->Add("端口" + IntToStr(i + 1));
                                    }
                                }
                                V35Num->DropDownCount = V35Num->Items->Count;
                                V35Num->ItemIndex = 0;
                                //读取第一条记录
                                int V35NUM;
                                V35NUM = V35Num->ItemIndex;
                                asSql = "select * from V35TEMP where V35NUM=" + IntToStr(0);
                                ADOUI->Close();
                                ADOUI->SQL->Clear();
                                ADOUI->SQL->Add(asSql);
                                ADOUI->Open();
                                V35SET = ADOUI->FieldByName("V35SET")->AsInteger;
                                V35TS = ADOUI->FieldByName("V35TS")->AsInteger;

                                if((V35SET & 0X80) == 0X00)
                                {// 该 端 口 关 闭
                                    RadioGroup4->ItemIndex = 0;
                                }
                                else if((V35SET & 0X80) == 0X80)
                                {// 该 端 口 打 开
                                    RadioGroup4->ItemIndex = 1;
                                }
                                if((V35SET & 0X40) == 0X00)
                                {//0表示复用到A向
                                    RadioGroup5->ItemIndex = 0;
                                }
                                else if((V35SET & 0X40) == 0X40)
                                {//1表示复用到B向
                                    RadioGroup5->ItemIndex = 1;
                                }
                                Edit2->Text = IntToStr((V35SET & 0X1F));
                                Edit3->Text = IntToStr((V35TS & 0X1F));

                                /*if((V35SET & 0X80) == 0X00)
                                {// 该 端 口 关 闭
                                    RadioGroup4->ItemIndex = 0;
                                }
                                else if((V35SET & 0X80) == 0X80)
                                {// 该 端 口 打 开
                                    RadioGroup4->ItemIndex = 1;
                                }
                                if((V35SET & 0X40) == 0X00)
                                {//0表示复用到A向
                                    RadioGroup5->ItemIndex = 0;
                                }
                                else if((V35SET & 0X40) == 0X40)
                                {//1表示复用到B向
                                    RadioGroup5->ItemIndex = 1;
                                }
                                if((V35SET & 0X20) == 0X00)
                                {
                                    RadioGroup6->ItemIndex = 0;
                                }
                                else if((V35SET & 0X20) == 0X20)
                                {
                                    RadioGroup6->ItemIndex = 1;
                                }
                                Edit2->Text = IntToStr((V35SET & 0X1F));
                                /*if((V35TS & 0X80) == 0X00)
                                {// 该 端 口 关 闭
                                    RadioGroup7->ItemIndex = 0;
                                }
                                else if((V35TS & 0X80) == 0X80)
                                {// 该 端 口 打 开
                                    RadioGroup7->ItemIndex = 1;
                                }
                                if((V35TS & 0X40) == 0X00)
                                {
                                    RadioGroup8->ItemIndex = 0;
                                }
                                else if((V35TS & 0X40) == 0X40)
                                {
                                    RadioGroup8->ItemIndex = 1;
                                }
                                if((V35SET & 0X20) == 0X20)
                                {
                                    if((V35TS & 0X20) == 0X00)
                                    {
                                        RadioGroup9->ItemIndex = 0;
                                    }
                                    else if((V35TS & 0X20) == 0X20)
                                    {
                                        RadioGroup9->ItemIndex = 1;
                                    }
                                }
                                else
                                {
                                    RadioGroup9->ItemIndex = -1;
                                }
                                Edit3->Text = IntToStr((V35TS & 0X1F));*/

                                GroupBox28->Enabled = true;
                                break;
                            }
                        }
                    }
                    break;
                }
                case 0XC5:
                {//GPA 返回数据
                    if(pRecBuf[13] == 0xff)
                    {//获取失败
                        switch(pRecBuf[18])
                        {
                            case 0X00:
                            {//获取时隙参数失败
                                TfmMessage *message = new TfmMessage(Application);
                                message->lbMessage->Caption = "获取时隙参数失败!";
                                message->ShowModal();
                                break;
                            }
                            case 0X02:
                            {//获取E1时钟参数失败
                                TfmMessage *message = new TfmMessage(Application);
                                message->lbMessage->Caption = "获取E1 时钟参数失败!";
                                message->ShowModal();
                                break;
                            }
                            default:
                            {
                                TfmMessage *message = new TfmMessage(Application);
                                message->lbMessage->Caption = "获取参数失败!";
                                message->ShowModal();
                            }
                        }
                    }
                    else
                    {//获取成功
                        SelectDataFlag = true;
                        spbCancel->Enabled = false;
                        switch(pRecBuf[18])
                        {
                            case 0X00:
                            {//获取时隙参数返回数据
                                int GpaNum = 0,GPAH = 0,GPAL = 0;
                                GpaNum = pRecBuf[RecLen_t - 1];
                                GpaPortNum->Clear();
                                String asSql = "CREATE TABLE `GPATEMP` (`NUM` int(10) NOT NULL default '0',/
                                `GPAH` int(10) NOT NULL default '0',`GPAL` int(10) NOT NULL default '0',/
                                PRIMARY KEY  (`NUM`,`GPAH`,`GPAL`))";
                                if(!CreateTable(asSql))
                                {
                                    AnsiString asSqldel = "delete from GPATEMP";
                                    ADOUI->Close();
                                    ADOUI->SQL->Clear();
                                    ADOUI->SQL->Add(asSqldel);
                                    ADOUI->ExecSQL();
                                }
                                for(int i=0;i<GpaNum;i++)
                                {
                                    GPAH = pRecBuf[20 + i * 2];
                                    GPAL = pRecBuf[20 + i * 2 + 1];
                                    AnsiString asSql = "insert into GPATEMP values("+IntToStr(i) +","+IntToStr(GPAH)/
                                    +","+IntToStr(GPAL)+")";
                                    ADOUI->Close();
                                    ADOUI->SQL->Clear();
                                    ADOUI->SQL->Add(asSql);
                                    ADOUI->ExecSQL();
                                    GpaPortNum->Items->Add("端口" + IntToStr(i + 1));
                                }
                                GpaPortNum->DropDownCount = GpaPortNum->Items->Count;
                                GpaPortNum->ItemIndex = 0;
                                //读取第一条记录
                                int GPATS;

                                GPAL = 1;
                                asSql = "select * from GPATEMP where GPAL=" + IntToStr(GPAL);
                                ADOUI->Close();
                                ADOUI->SQL->Clear();
                                ADOUI->SQL->Add(asSql);
                                ADOUI->Open();
                                GPAH = ADOUI->FieldByName("GPAH")->AsInteger;

                                if((GPAH & 0X80) == 0X00)
                                {// 该 端 口 关 闭
                                    RadioGroup1->ItemIndex = 0;
                                }
                                else if((GPAH & 0X80) == 0X80)
                                {// 该 端 口 打 开
                                    RadioGroup1->ItemIndex = 1;
                                }

                                if((GPAH & 0X40) == 0X00)
                                {// A 向收发
                                    RadioGroup2->ItemIndex = 0;
                                }
                                else if((GPAH & 0X40) == 0X40)
                                {// B 向收发
                                    RadioGroup2->ItemIndex = 1;
                                }
                                GPATS = (GPAH & 0X1F);
                                Edit1->Text = IntToStr(GPATS);

                                GroupBox13->Enabled = true;
                                break;
                            }
                            case 0X02:
                            {//获取E1 时钟参数返回数据
                                switch(pRecBuf[19])
                                {
                                    case 0X00:
                                    {// 从A向时钟
                                        RadioGroup3->ItemIndex = 1;
                                        break;
                                    }
                                    case 0X01:
                                    {//从B向时钟
                                        RadioGroup3->ItemIndex = 2;
                                        break;
                                    }
                                    case 0X02:
                                    {//主时钟
                                        RadioGroup3->ItemIndex = 0;
                                        break;
                                    }
                                    case 0X03:
                                    {//外部时钟
                                        RadioGroup3->ItemIndex = 3;
                                        break;
                                    }
                                    default :
                                    {
                                        RadioGroup3->ItemIndex = 1;
                                        break;
                                    }
                                }
                                break;
                            }
                        }
                    }
                    break;
                }
                case 0XC6:
                {//G2MP返回数据
                    if(pRecBuf[13] == 0xff)
                    {//获取失败
                        switch(pRecBuf[18])
                        {
                            case 0X00:
                            {//获取时隙参数失败
                                TfmMessage *message = new TfmMessage(Application);
                                message->lbMessage->Caption = "获取时隙参数失败!";
                                message->ShowModal();
                                break;
                            }
                            case 0X02:
                            {//获取E1时钟参数失败
                                TfmMessage *message = new TfmMessage(Application);
                                message->lbMessage->Caption = "获取E1 时钟参数失败!";
                                message->ShowModal();
                                break;
                            }
                            default:
                            {
                                TfmMessage *message = new TfmMessage(Application);
                                message->lbMessage->Caption = "获取参数失败!";
                                message->ShowModal();
                            }
                        }
                    }
                    else
                    {//获取成功
                        SelectDataFlag = true;
                        G2mpSave->Enabled = false;
                        G2mpUpdate->Enabled = false;
                        G2mpDel->Enabled = false;
                        switch(pRecBuf[18])
                        {
                            case 0X00:
                            {//获取时隙参数返回数据
                                int G2mpNum = 0,G2mpH = 0,G2mpL = 0;
                                G2mpNum = pRecBuf[20];
                                G2mpPortNum->Clear();
                                String asSql = "CREATE TABLE `G2MPTEMP` (`NUM` int(10) NOT NULL default '0',/
                                `G2MPH` int(10) NOT NULL default '0',`G2MPL` int(10) NOT NULL default '0',/
                                PRIMARY KEY  (`NUM`,`G2MPH`,`G2MPL`))";
                                if(!CreateTable(asSql))
                                {
                                    AnsiString asSqldel = "delete from G2MPTEMP";
                                    ADOUI->Close();
                                    ADOUI->SQL->Clear();
                                    ADOUI->SQL->Add(asSqldel);
                                    ADOUI->ExecSQL();
                                }
                                for(int i=0;i<G2mpNum;i++)
                                {
                                    G2mpH = pRecBuf[21 + i * 2];
                                    G2mpL = pRecBuf[21 + i * 2 + 1];
                                    AnsiString asSql = "insert into G2MPTEMP values("+IntToStr(i) +","+IntToStr(G2mpH)/
                                    +","+IntToStr(G2mpL)+")";
                                    ADOUI->Close();
                                    ADOUI->SQL->Clear();
                                    ADOUI->SQL->Add(asSql);
                                    ADOUI->ExecSQL();
                                    G2mpPortNum->Items->Add("端口" + IntToStr(i + 1));
                                }
                                G2mpPortNum->DropDownCount = G2mpPortNum->Items->Count;
                                G2mpPortNum->ItemIndex = 0;
                                GroupBox32->Enabled = true;
                                int G2MPH,G2MPL,G2MPTS,NUM,G2MPTS2;

                                NUM = 0;//读取第一条记录
                                asSql = "select * from G2MPTEMP where NUM=" + IntToStr(NUM);
                                ADOUI->Close();
                                ADOUI->SQL->Clear();
                                ADOUI->SQL->Add(asSql);
                                ADOUI->Open();
                                G2MPH = ADOUI->FieldByName("G2MPH")->AsInteger;
                                G2MPL = ADOUI->FieldByName("G2MPL")->AsInteger;

                                if((G2MPH & 0X80) == 0X00)
                                {// 该 端 口 关 闭
                                    RadioGroup15->ItemIndex = 0;
                                }
                                else if((G2MPH & 0X80) == 0X80)
                                {// 该 端 口 打 开
                                    RadioGroup15->ItemIndex = 1;
                                }

                                if((G2MPH & 0X40) == 0X00)
                                {// A 向收发
                                    RadioGroup16->ItemIndex = 0;
                                }
                                else if((G2MPH & 0X40) == 0X40)
                                {// B 向收发
                                    RadioGroup16->ItemIndex = 1;
                                }
                                G2MPTS = (G2MPH & 0X1F);
                                Edit4->Text = IntToStr(G2MPTS);

                                G2MPTS2 = (G2MPL & 0X1F);
                                Edit5->Text = IntToStr(G2MPTS2);
                                break;
                            }
                            case 0X02:
                            {//获取E1 时钟参数返回数据
                                switch(pRecBuf[19])
                                {
                                    case 0X00:
                                    {// 从A向时钟
                                        RadioGroup17->ItemIndex = 1;
                                        break;
                                    }
                                    case 0X01:
                                    {//从B向时钟
                                        RadioGroup17->ItemIndex = 2;
                                        break;
                                    }
                                    case 0X02:
                                    {//主时钟
                                        RadioGroup17->ItemIndex = 0;
                                        break;
                                    }
                                    case 0X03:
                                    {//外部时钟
                                        RadioGroup17->ItemIndex = 3;
                                        break;
                                    }
                                    default :
                                    {
                                        RadioGroup17->ItemIndex = 1;
                                        break;
                                    }
                                }
                                break;
                            }
                        }
                    }
                    break;
                }
            }
            break;
        }
    }       
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::G2mpPortNumChange(TObject *Sender)
{
    if(SelectDataFlag)
    {//硬件返回数据
        int G2MPH,G2MPL,G2MPTS,NUM,G2MPTS2;

        NUM = G2mpPortNum->ItemIndex;
        AnsiString asSql = "select * from G2MPTEMP where NUM=" + IntToStr(NUM);
        ADOUI->Close();
        ADOUI->SQL->Clear();
        ADOUI->SQL->Add(asSql);
        ADOUI->Open();
        G2MPH = ADOUI->FieldByName("G2MPH")->AsInteger;
        G2MPL = ADOUI->FieldByName("G2MPL")->AsInteger;

        if((G2MPH & 0X80) == 0X00)
        {// 该 端 口 关 闭
            RadioGroup15->ItemIndex = 0;
        }
        else if((G2MPH & 0X80) == 0X80)
        {// 该 端 口 打 开
            RadioGroup15->ItemIndex = 1;
        }

        if((G2MPH & 0X40) == 0X00)
        {// A 向收发
            RadioGroup16->ItemIndex = 0;
        }
        else if((G2MPH & 0X40) == 0X40)
        {// B 向收发
            RadioGroup16->ItemIndex = 1;
        }
        G2MPTS = (G2MPH & 0X1F);
        Edit4->Text = IntToStr(G2MPTS);

        G2MPTS2 = (G2MPL & 0X1F);
        Edit5->Text = IntToStr(G2MPTS2);
    }
    /*else
    {//查看数据库数据
        int MODENUM,G2MPADDR,G2MPPORT,TSBEGIN,TSCOUNT,PORTDIR;

        MODENUM = fmSelectMode->ModeNum->Caption.ToInt();
        G2MPADDR = fmSelectMode->SmAddr->Caption.ToInt();
        G2MPPORT = G2mpPortNum->Text.ToInt();

        AnsiString asSql = "select * from CT_TSG2MP where MODENUM=" + IntToStr(MODENUM)/
        +" AND "+"G2MPADDR="+IntToStr(G2MPADDR)/
        +" AND "+"G2MPPORT="+IntToStr(G2MPPORT) ;
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->Open();

        TSBEGIN = ADOSelect->FieldByName("TSBEGIN")->AsInteger;
        TSCOUNT = ADOSelect->FieldByName("TSCOUNT")->AsInteger;
        PORTDIR = ADOSelect->FieldByName("PORTDIR")->AsInteger;

        Edit4->Text = IntToStr(TSBEGIN);
        Edit5->Text = IntToStr(TSCOUNT);
        if(PORTDIR == 0)
        {// A 向收发
            RadioGroup16->ItemIndex = 0;
        }
        else if(PORTDIR == 64)
        {// B 向收发
            RadioGroup16->ItemIndex = 1;
        }
    }*/   
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::ResetG2mpClick(TObject *Sender)
{//复位G2mp
 String SMNAME = tvDevice->Selected->Text;
    AnsiString asSql = "select * from CT_DEV where SMNAME='" + SMNAME + "'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();

    int SMADDR = ADOSelect->FieldByName("SMADDR")->AsInteger;
 BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0;

    MakePack(DataInfo,0,0X04,SMADDR,0XC6,0X91,LINENUM,SUNUM,"复位G2MP命令");

    /*int SMADDR,SMTYPE;
    String SMNAME;

    SMNAME = tvDevice->Selected->Text;
    AnsiString asSql = "select * from CT_DEV where SMNAME='" + SMNAME + "'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();

    SMADDR = ADOSelect->FieldByName("SMADDR")->AsInteger;
    SMTYPE = ADOSelect->FieldByName("SMTYPE")->AsInteger;

    BYTE SendBuf[] = {0XEB,0X90,0X07,0X00,0X01,0X02,0X00,0X00,0X00,0X58,0X00,0X00,0X00,SMADDR,SMTYPE};
    int Length = sizeof(SendBuf);
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  复位G2mp命令:",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }*/
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::ResetGpaClick(TObject *Sender)
{//复位GPA
 String SMNAME = tvDevice->Selected->Text;
    AnsiString asSql = "select * from CT_DEV where SMNAME='" + SMNAME + "'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();

    int SMADDR = ADOSelect->FieldByName("SMADDR")->AsInteger;
 BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0;

    MakePack(DataInfo,0,0X04,SMADDR,0XC5,0X91,LINENUM,SUNUM,"复位GPA命令");
    /*int SMADDR,SMTYPE;
    String SMNAME;

    SMNAME = tvDevice->Selected->Text;
    AnsiString asSql = "select * from CT_DEV where SMNAME='" + SMNAME + "'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();

    SMADDR = ADOSelect->FieldByName("SMADDR")->AsInteger;
    SMTYPE = ADOSelect->FieldByName("SMTYPE")->AsInteger;

    BYTE SendBuf[] = {0XEB,0X90,0X07,0X00,0X01,0X02,0X00,0X00,0X00,0X58,0X00,0X00,0X00,SMADDR,SMTYPE};
    int Length = sizeof(SendBuf);
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  复位GPA命令:",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }*/
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::GPADxcClick(TObject *Sender)
{//获取时隙参数
    int SMADDR,TYPE;
    String SmName;

    GPAGetParamsFlag = true;

    SmName = tvDevice->Selected->Text;
    AnsiString asSqlIndex = "select * from CT_DEV where SMNAME='" + SmName + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSqlIndex);
    ADOIndex->Open();
    SMADDR = ADOIndex->FieldByName("SMADDR")->AsInteger;
    TYPE = 0X00;

    BYTE SendBuf[] = {0XEB,0X90,0X06,0X00,0X01,0X02,0X00,0X00,0X00,0X77,0X00,0XC5,SMADDR,TYPE};
    int Length = sizeof(SendBuf);
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  获取GPA时隙参数命令:",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::GPAE1Click(TObject *Sender)
{//获取E1 时钟参数
    int SMADDR,TYPE;
    String SmName;

    SmName = tvDevice->Selected->Text;
    AnsiString asSqlIndex = "select * from CT_DEV where SMNAME='" + SmName + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSqlIndex);
    ADOIndex->Open();
    SMADDR = ADOIndex->FieldByName("SMADDR")->AsInteger;
    TYPE = 0X02;

    BYTE SendBuf[] = {0XEB,0X90,0X06,0X00,0X01,0X02,0X00,0X00,0X00,0X77,0X00,0XC5,SMADDR,TYPE};
    int Length = sizeof(SendBuf);
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  获取GPA E1 时钟参数命令:",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::ResetV35Click(TObject *Sender)
{//复位V35
 String SMNAME = tvDevice->Selected->Text;
    AnsiString asSql = "select * from CT_DEV where SMNAME='" + SMNAME + "'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();

    int SMADDR = ADOSelect->FieldByName("SMADDR")->AsInteger;
 BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0;

    MakePack(DataInfo,0,0X04,SMADDR,0XC9,0X91,LINENUM,SUNUM,"复位GVG(V35)命令");
    /*int SMADDR,SMTYPE;
    String SMNAME;

    SMNAME = tvDevice->Selected->Text;
    AnsiString asSql = "select * from CT_DEV where SMNAME='" + SMNAME + "'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();

    SMADDR = ADOSelect->FieldByName("SMADDR")->AsInteger;
    SMTYPE = ADOSelect->FieldByName("SMTYPE")->AsInteger;

    BYTE SendBuf[] = {0XEB,0X90,0X07,0X00,0X01,0X02,0X00,0X00,0X00,0X58,0X00,0X00,0X00,SMADDR,SMTYPE};
    int Length = sizeof(SendBuf);
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  复位V35命令:",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }*/
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::V35FClockClick(TObject *Sender)
{//获取E1时钟参数
    int SMADDR,TYPE;
    String SmName;

    SmName = tvDevice->Selected->Text;
    AnsiString asSqlIndex = "select * from CT_DEV where SMNAME='" + SmName + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSqlIndex);
    ADOIndex->Open();
    SMADDR = ADOIndex->FieldByName("SMADDR")->AsInteger;
    TYPE = 0X00;
   
    BYTE SendBuf[] = {0XEB,0X90,0X06,0X00,0X01,0X02,0X00,0X00,0X00,0X77,0X00,0XC9,SMADDR,TYPE};
    int Length = sizeof(SendBuf);
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  获取V35 E1时钟参数命令:",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::V35E1Click(TObject *Sender)
{//获取E1码流方式参数
    int SMADDR,TYPE;
    String SmName;

    SmName = tvDevice->Selected->Text;
    AnsiString asSqlIndex = "select * from CT_DEV where SMNAME='" + SmName + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSqlIndex);
    ADOIndex->Open();
    SMADDR = ADOIndex->FieldByName("SMADDR")->AsInteger;
    TYPE = 0X01;
   
    BYTE SendBuf[] = {0XEB,0X90,0X06,0X00,0X01,0X02,0X00,0X00,0X00,0X77,0X00,0XC9,SMADDR,TYPE};
    int Length = sizeof(SendBuf);
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  获取V35 E1码流方式参数命令:",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::V35ZslClick(TObject *Sender)
{//获取子速率端口参数
    int SMADDR,TYPE;
    String SmName;

    V35GetParamsFlag = true;
    SmName = tvDevice->Selected->Text;
    AnsiString asSqlIndex = "select * from CT_DEV where SMNAME='" + SmName + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSqlIndex);
    ADOIndex->Open();
    SMADDR = ADOIndex->FieldByName("SMADDR")->AsInteger;
    TYPE = 0X02;
   
    BYTE SendBuf[] = {0XEB,0X90,0X06,0X00,0X01,0X02,0X00,0X00,0X00,0X77,0X00,0XC9,SMADDR,TYPE};
    int Length = sizeof(SendBuf);
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(SendBuf,Length);
        SprintfData("-> ->  获取V35子速率端口参数:",SendBuf,Length);
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::V35NumChange(TObject *Sender)
{
    int V35SET,V35TS,V35NUM;
    V35NUM = V35Num->ItemIndex;
    AnsiString asSql = "select * from V35TEMP where V35NUM=" + IntToStr(V35NUM);
    ADOUI->Close();
    ADOUI->SQL->Clear();
    ADOUI->SQL->Add(asSql);
    ADOUI->Open();
    V35SET = ADOUI->FieldByName("V35SET")->AsInteger;
    V35TS = ADOUI->FieldByName("V35TS")->AsInteger;

    if((V35SET & 0X80) == 0X00)
    {// 该 端 口 关 闭
        RadioGroup4->ItemIndex = 0;
    }
    else if((V35SET & 0X80) == 0X80)
    {// 该 端 口 打 开
        RadioGroup4->ItemIndex = 1;
    }
    if((V35SET & 0X40) == 0X00)
    {//0表示复用到A向
        RadioGroup5->ItemIndex = 0;
    }
    else if((V35SET & 0X40) == 0X40)
    {//1表示复用到B向
        RadioGroup5->ItemIndex = 1;
    }
    Edit2->Text = IntToStr((V35SET & 0X1F));
    Edit3->Text = IntToStr((V35TS & 0X1F));
    /*if((V35SET & 0X80) == 0X00)
    {// 该 端 口 关 闭
        RadioGroup4->ItemIndex = 0;
    }
    else if((V35SET & 0X80) == 0X80)
    {// 该 端 口 打 开
        RadioGroup4->ItemIndex = 1;
    }
    if((V35SET & 0X40) == 0X00)
    {
        RadioGroup5->ItemIndex = 0;
    }
    else if((V35SET & 0X40) == 0X40)
    {
        RadioGroup5->ItemIndex = 1;
    }
    if((V35SET & 0X20) == 0X00)
    {
        RadioGroup6->ItemIndex = 0;
    }
    else if((V35SET & 0X20) == 0X20)
    {
        RadioGroup6->ItemIndex = 1;
    }
    Edit2->Text = IntToStr((V35SET & 0X1F));
    if((V35TS & 0X80) == 0X00)
    {// 该 端 口 关 闭
        RadioGroup7->ItemIndex = 0;
    }
    else if((V35TS & 0X80) == 0X80)
    {// 该 端 口 打 开
        RadioGroup7->ItemIndex = 1;
    }
    if((V35TS & 0X40) == 0X00)
    {
        RadioGroup8->ItemIndex = 0;
    }
    else if((V35TS & 0X40) == 0X40)
    {
        RadioGroup8->ItemIndex = 1;
    }
    if((V35SET & 0X20) == 0X20)
    {
        if((V35TS & 0X20) == 0X00)
        {
            RadioGroup9->ItemIndex = 0;
        }
        else if((V35TS & 0X20) == 0X20)
        {
            RadioGroup9->ItemIndex = 1;
        }
    }
    else
    {
        RadioGroup9->ItemIndex = -1;
    }
    Edit3->Text = IntToStr((V35TS & 0X1F));*/
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::GpaPortNumChange(TObject *Sender)
{
    if(SelectDataFlag)
    {//硬件返回数据
        int GPAH,GPAL,GPATS;
        GPAL = GpaPortNum->ItemIndex + 1;
        AnsiString asSql = "select * from GPATEMP where GPAL=" + IntToStr(GPAL);
        ADOUI->Close();
        ADOUI->SQL->Clear();
        ADOUI->SQL->Add(asSql);
        ADOUI->Open();
        GPAH = ADOUI->FieldByName("GPAH")->AsInteger;

        if((GPAH & 0X80) == 0X00)
        {// 该 端 口 关 闭
            RadioGroup1->ItemIndex = 0;
        }
        else if((GPAH & 0X80) == 0X80)
        {// 该 端 口 打 开
            RadioGroup1->ItemIndex = 1;
        }

        if((GPAH & 0X40) == 0X00)
        {// A 向收发
            RadioGroup2->ItemIndex = 0;
        }
        else if((GPAH & 0X40) == 0X40)
        {// B 向收发
            RadioGroup2->ItemIndex = 1;
        }
        GPATS = (GPAH & 0X1F);
        Edit1->Text = IntToStr(GPATS);
    }
    /*else
    {//查看数据库中数据
        int MODENUM,GPAPORT,TSNUM,PORTDIR;

        MODENUM = fmSelectMode->ModeNum->Caption.ToInt();
        GPAPORT = GpaPortNum->Text.ToInt();

        AnsiString asSql = "select * from CT_TSGPA where MODENUM=" + IntToStr(MODENUM)/
        +" AND "+"GPAPORT="+IntToStr(GPAPORT) ;
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->Open();

        TSNUM = ADOSelect->FieldByName("TSNUM")->AsInteger;
        PORTDIR = ADOSelect->FieldByName("PORTDIR")->AsInteger;

        Edit1->Text = IntToStr(TSNUM);
        if(PORTDIR == 0)
        {// A 向收发
            RadioGroup2->ItemIndex = 0;
        }
        else if(PORTDIR == 64)
        {// B 向收发
            RadioGroup2->ItemIndex = 1;
        }
    }*/   
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::ARM1Click(TObject *Sender)
{//复位前台ARM板 地址 = 01H CID1 = C2H
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0,ADDR = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    MakePack(DataInfo,0,0X04,0X01,0XC2,0XCD,LINENUM,SUNUM,"复位前台ARM板命令");
    //MakePack(BYTE *DataInfo,int DataLength,int Protocol,
    //int SmAddr,int Cid1,int Cid2,int LineNum,int SuNum);
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::N19Click(TObject *Sender)
{//前台复用器板复位 地址 = 02H CID1 = C2H
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0,ADDR = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    MakePack(DataInfo,0,0X04,0X02,0XC2,0XCD,LINENUM,SUNUM,"复位前台复用器板命令");
    //MakePack(BYTE *DataInfo,int DataLength,int Protocol,
    //int SmAddr,int Cid1,int Cid2,int LineNum,int SuNum);
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::N20Click(TObject *Sender)
{//前台视频切换器板复位 地址 = 10H CID1 = D3H
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0,ADDR = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    MakePack(DataInfo,0,0X04,0X10,0XD3,0XCD,LINENUM,SUNUM,"复位前台视频切换器板命令");
    //MakePack(BYTE *DataInfo,int DataLength,int Protocol,
    //int SmAddr,int Cid1,int Cid2,int LineNum,int SuNum);
}
//---------------------------------------------------------------------------


void __fastcall TfmMain::N23Click(TObject *Sender)
{//前台音频服务器板复位 地址 = 19H CID1 = CBH
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0,ADDR = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    MakePack(DataInfo,0,0X04,0X19,0XCB,0XCD,LINENUM,SUNUM,"复位前台音频服务器板命令");
    //MakePack(BYTE *DataInfo,int DataLength,int Protocol,
    //int SmAddr,int Cid1,int Cid2,int LineNum,int SuNum);
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::N24Click(TObject *Sender)
{//前台网桥板一路复位 地址 = 20H CID1 = C3H
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0,ADDR = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    MakePack(DataInfo,0,0X04,0X20,0XC3,0XCD,LINENUM,SUNUM,"复位前台网桥板一路命令");
    //MakePack(BYTE *DataInfo,int DataLength,int Protocol,
    //int SmAddr,int Cid1,int Cid2,int LineNum,int SuNum);
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::N25Click(TObject *Sender)
{//前台网桥板二路复位 地址 = 30H CID1 = C3H
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0,ADDR = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    MakePack(DataInfo,0,0X04,0X30,0XC3,0XCD,LINENUM,SUNUM,"复位前台网桥板二路命令");
    //MakePack(BYTE *DataInfo,int DataLength,int Protocol,
    //int SmAddr,int Cid1,int Cid2,int LineNum,int SuNum);
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::N26Click(TObject *Sender)
{//前台右侧视频服务器板复位 地址 = 40H CID1 = C1H
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0,ADDR = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    MakePack(DataInfo,0,0X04,0X40,0XC1,0XCD,LINENUM,SUNUM,"复位前台右侧视频服务器板命令");
    //MakePack(BYTE *DataInfo,int DataLength,int Protocol,
    //int SmAddr,int Cid1,int Cid2,int LineNum,int SuNum);
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::N27Click(TObject *Sender)
{//前台左侧视频服务器板复位 地址 = 50H CID1 = C1H
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0,ADDR = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    MakePack(DataInfo,0,0X04,0X50,0XC1,0XCD,LINENUM,SUNUM,"复位前台左侧视频服务器板命令");
    //MakePack(BYTE *DataInfo,int DataLength,int Protocol,
    //int SmAddr,int Cid1,int Cid2,int LineNum,int SuNum);
}
//---------------------------------------------------------------------------


void __fastcall TfmMain::N22Click(TObject *Sender)
{//前台音频切换器板复位 地址 = 18H CID1 = D4H
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0,ADDR = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    MakePack(DataInfo,0,0X04,0X18,0XD4,0XCD,LINENUM,SUNUM,"复位前台音频切换器板命令");
    //MakePack(BYTE *DataInfo,int DataLength,int Protocol,
    //int SmAddr,int Cid1,int Cid2,int LineNum,int SuNum);
}
//---------------------------------------------------------------------------


void __fastcall TfmMain::IO1Click(TObject *Sender)
{//全部I/O模块复位
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    MakePack(DataInfo,0,0X04,0XFF,0X00,0XCD,LINENUM,SUNUM,"复位全部I/O模块命令");
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::N33Click(TObject *Sender)
{
    char* szBuffer = new char[30];
    String NodeTextTemp = NodeText;
    int LINENUM = 0;
    int SUNUM = GetSuNum(NodeParText);
    //int LenTemp = StrLen(NodeTextTemp.c_str());
    //StrCopy(szBuffer,NodeTextTemp.c_str());
    //NodeTextTemp = szBuffer[LenTemp - 1];//获得镜头号

    int LenTemp = StrLen(NodeTextTemp.c_str());
    StrCopy(szBuffer,NodeTextTemp.c_str());
    int Temp_ = 0;
    for(int i = 0;i<LenTemp;i++)
    {
        if(szBuffer[i] == 0X5F)
        {//"_"
            Temp_ = i+1;
            break;   
        }
    }

    if((LenTemp - Temp_) == 1)
    {
        NodeTextTemp = szBuffer[LenTemp - 1];//获得镜头号
    }
    else if((LenTemp - Temp_) == 2)
    {
        NodeTextTemp = szBuffer[LenTemp - 2];
        NodeTextTemp = NodeTextTemp + szBuffer[LenTemp - 1];
    }


    //if(N33->Caption > "复位云台控制器")
    if(strstr(N33->Caption.c_str() ,"复位云台控制器"))
    {//判断N33->Caption里是否有“复位云台控制器”字符串
        //复位云台控制器
        BYTE DataInfo[2];
        memset(DataInfo, 0, 2);

        String asSql = "select * from ct_sm where SUNUM="+IntToStr(SUNUM)/
        + " AND " + "SMNUM=" + NodeTextTemp;
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->Open();

        int SWADDR = ADOSelect->FieldByName("SWADDR")->AsInteger;//

        //DATAINFO
        MakePack(DataInfo,0,0X04,SWADDR,0XD2,0XCD,LINENUM,SUNUM,"复位云台控制器命令");
        //MakePack(BYTE *DataInfo,int DataLength,int Protocol,
        //int SmAddr,int Cid1,int Cid2,int LineNum,int SuNum);
    }
    else if(strstr(N33->Caption.c_str() ,"复位快球控制器"))
    //else if(N33->Caption > "复位快球控制器")
    {
        //复位快球控制器
        BYTE DataInfo[2];
        memset(DataInfo, 0, 2);

        String asSql = "select * from ct_sm where SUNUM="+IntToStr(SUNUM)/
        + " AND " + "SMNUM=" + NodeTextTemp;
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->Open();

        int SWADDR = ADOSelect->FieldByName("SWADDR")->AsInteger;//

        //DATAINFO
        MakePack(DataInfo,0,0X04,SWADDR,0XD6,0XCD,LINENUM,SUNUM,"复位快球控制器命令");
        //MakePack(BYTE *DataInfo,int DataLength,int Protocol,
        //int SmAddr,int Cid1,int Cid2,int LineNum,int SuNum);
    }
}
//---------------------------------------------------------------------------
/*---------------------------------------------------------------------------
获取DVRIp地址事件
--------------------------------------------------------------------------- */

void __fastcall TfmMain::GetIpClick(TObject *Sender)
{//获取DVR板IP地址
    /* Old Cmd
    AnsiString SUNUM,LINENUM ;
    GetStationInfo(&LINENUM,&SUNUM) ;
    GetIPConfig(SUNUM,LINENUM);
    */

    //
    BYTE DataInfo[24];
    memset(DataInfo, 0, 24);
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    DataInfo[0] = 0X01;//0 - 监控 1 - 录像
    DataInfo[1] = 0X02;//
    DataInfo[2] = 0X00;//序号 WORD
    DataInfo[3] = 0XFF;//
    DataInfo[4] = 0X14;//长度 DWORD
    DataInfo[8] = 0X04;//命令码 DWORD

    MakePack(DataInfo,24,0X04,SUNUM,0XC1,0XC3,LINENUM,SUNUM,"获取DVR板IP地址命令");
}
/*---------------------------------------------------------------------------
获取DVRIp地址命令
--------------------------------------------------------------------------- */
void __fastcall TfmMain::GetIPConfig(AnsiString StationNo,AnsiString LineNo)
{

    /*BYTE pBuff[2048];
    SetSubHeader(pBuff,12,RMIP_GET_IPCONFIG,0xC1,0xC3) ;//设置子报文头
    SetZHeader(pBuff,0,0xC3,0,LineNo.ToInt(),0,1,StationNo.ToInt()) ;//设置总报文头
    SetZLength(pBuff) ;//设置报文的长度位[12],[13] ,
    Set4567pBuff(pBuff) ; //将第二个EB90 替换 为总长度-8
    SetSubCheckNum(pBuff) ;  //设置子校验 (部颁报文)
    SetEndSymbol(pBuff) ;//报文结束符
    SetZCheck(pBuff) ;  //设置主校验
    if(!SendMessage(pBuff,GetLength(pBuff)))
    {
        return ;
    }
    //ClientSocket->Socket->SendBuf(pBuff,GetLength(pBuff));

    AnsiString SendMessage = GetDemoStr(GetLength(pBuff),pBuff);
    fmReceiveData->Memo2->Lines->Add("-> ->  " + SendMessage);

    Command = RMIP_GET_IPCONFIG ;
    IsOvertimeTimer->Enabled = true ;
    SetSendRestrict(true);*/
}
//---------------------------------------------------------------------------
//根据当前选择的站点名获取站点的LineNo,StationNo
void __fastcall TfmMain::GetStationInfo(AnsiString * LINENUM, AnsiString * SUNUM)
{
    //Get站点信息
    String SUNAME,LINENAME;
    AnsiString asSql;
    //int SUNUM;
/*    LINENAME = tvDevice->Selected->Parent->Text;
    asSql = "select * from CT_LINE where LINENAME='"+LINENAME+"'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    *LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;        */
    SUNAME = tvDevice->Selected->Text;
    asSql = "select * from CT_SU where SUNAME='"+SUNAME+"'" + " AND " + "LINENUM=" + *LINENUM;
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
//    *LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;
    *SUNUM = ADOSelect->FieldByName("SUNUM")->AsInteger;
}

//---------------------------------------------------------------------------
//
void __fastcall TfmMain::FormatDiskMenuClick(TObject *Sender)
{//格式化硬盘
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = fmMain->GetLineNum(fmMain->NodeParText);
    SUNUM = fmMain->GetSuNum(fmMain->NodeText);
    fmFarUpDateNew->MakePackNew(DataInfo,0,0X04,SUNUM,0X00,0XFE,LINENUM,SUNUM,"远程升级开始命令");

    FormatDiskFrom1->StationNoEdit->Text = SUNUM ;
//    FormatDiskFrom1->LineNoEdit->Text = LINENUM ;
    FormatDiskFrom1->DVRTYPE->Caption = 1;
    FormatDiskFrom1->ShowModal();

    /*AnsiString SUNUM,LINENUM ;
    GetStationInfo(&LINENUM,&SUNUM) ;
    FormatDiskFrom1->StationNoEdit->Value = StrToInt(SUNUM);
    FormatDiskFrom1->StationNoEdit->Enabled = false ;
    FormatDiskFrom1->LineNoEdit->Value = StrToInt(LINENUM);
    FormatDiskFrom1->LineNoEdit->Enabled = false ;
    FormatDiskFrom1->ShowModal();*/
}
//---------------------------------------------------------------------------
/// <summary>格式化磁盘组报文,下发</summary>
/// <param name="stationNo">站点号码</param>
/// <param name="LineNo">线路号</param>
/// <param name="DiskNo">磁盘号(用户输入)</param>
/// <param name="CountNo">分区数目(用户shuru)</param>
/// <param name="Size">分区大小(用户输入)</param>
/// <returns>空</returns>
void __fastcall TfmMain::FormatDisk(AnsiString  StationNo, AnsiString LineNo,int DiskNo,int Count,long Size)
{
    BYTE pBuff[2048];
    SetSubHeader(pBuff,(Count+2)*4,RMIP_FORMAT_DISK,0xC1,0xC3) ;//设置子报文头
    SetZHeader(pBuff,0,0xC3,0,LineNo.ToInt(),0,1,StationNo.ToInt()) ;//设置总报文头
    SetZLength(pBuff) ;//设置报文的长度位[12],[13] ,
    Set4567pBuff(pBuff) ; //将第二个EB90 替换 为总长度-8
    pBuff[31] = DiskNo ;
    pBuff[35] = Count ;
    int i = 0 ;
    for(i = 0 ;i<Count-1;i++)
    {
     memcpy(pBuff+39+i*4,&Size,4);
    }
    pBuff[39+i*Count*4] = 0x00 ;
    SetSubCheckNum(pBuff) ;  //设置子校验 (部颁报文)
    SetEndSymbol(pBuff) ;//报文结束符
    SetZCheck(pBuff) ;  //设置主校验
    if(!SendMessage(pBuff,GetLength(pBuff)))
    {
        return ;
    }
    //ClientSocket->Socket->SendBuf(pBuff,GetLength(pBuff));
    AnsiString SendMessage = GetDemoStr(GetLength(pBuff),pBuff);
    fmReceiveData->Memo2->Lines->Add("-> ->  " + SendMessage);
    Command = RMIP_FORMAT_DISK ;
    IsOvertimeTimer->Enabled = true ;
    SetSendRestrict(true);
}
//-----------------------------------------------------
//列出当前数据传输和录像的状态
void __fastcall TfmMain::DataTransferStateMenuClick(TObject *Sender)
{//获取DVR数据传输状态
    /*AnsiString SUNUM,LINENUM ;
    GetStationInfo(&LINENUM,&SUNUM) ;
    GetCurDataTransferState(SUNUM,LINENUM);*/
    BYTE DataInfo[20];
    memset(DataInfo, 0, 20);
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    DataInfo[0] = 0X01;//0 - 监控 1 - 录像
    DataInfo[1] = 0X07;//
    DataInfo[2] = 0X00;//序号 WORD
    DataInfo[3] = 0XFF;//
    DataInfo[4] = 0X10;//长度 DWORD
    DataInfo[8] = 0X5E;//命令码 DWORD

    MakePack(DataInfo,20,0X04,SUNUM,0XC1,0XC3,LINENUM,SUNUM,"获取DVR数据传输状态命令");
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::GetCurDataTransferState(AnsiString StationNo, AnsiString LineNo)
{
    /*BYTE pBuff[2048];
    SetSubHeader(pBuff,8,RMIP_LIST_TRANSFER_STATUS,0xC1,0XC3) ;//设置子报文头
    SetZHeader(pBuff,0,0xC3,0,LineNo.ToInt(),0,1,StationNo.ToInt()) ;//设置总报文头
    SetZLength(pBuff) ;//设置报文的长度位[12],[13] ,
    Set4567pBuff(pBuff) ; //将第二个EB90 替换 为总长度-8
    SetSubCheckNum(pBuff) ;  //设置子校验 (部颁报文)
    SetEndSymbol(pBuff) ;//报文结束符
    SetZCheck(pBuff) ;  //设置主校验
    if(!SendMessage(pBuff,GetLength(pBuff)))
    {
        return ;
    }
    //ClientSocket->Socket->SendBuf(pBuff,GetLength(pBuff));
    AnsiString SendMessage = GetDemoStr(GetLength(pBuff),pBuff);
    fmReceiveData->Memo2->Lines->Add("-> ->  " + SendMessage);
    Command = RMIP_LIST_TRANSFER_STATUS ;
    IsOvertimeTimer->Enabled = true ;
    //SetSendRestrict(true);*/
}
//--------------------------------------------------------------------------------
//获得站点名
//返回值:成功 站名 ,失败 空串
AnsiString __fastcall TfmMain::GetStationName(int StationNo,int LineNo)
{
    //Get站信息
    String SUNAME,LINENAME;
    AnsiString asSql;
    asSql = "select * from CT_SU where SUNUM ='"+ IntToStr(StationNo) +"'" + " AND " + "LINENUM=" + LineNo ;

    try
    {
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->Open();
    }
    catch(...)
    {
        return "" ;
    }
    SUNAME = ADOSelect->FieldByName("SUNAME")->AsString;
    return SUNAME ;
}
//--------------------------------------------------------------------------------
//获得线路名
//返回值:成功 线路名 ,失败 空串
AnsiString __fastcall TfmMain::GetLineName(int LineNo)
{
    //Get线路信息
    String LINENAME;

    AnsiString asSql = "select * from CT_LINE where LINENUM=" + IntToStr(LineNo);

    try
    {
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->Open();
    }
    catch(...)
    {
        return "" ;
    }
    LINENAME = ADOSelect->FieldByName("LINENAME")->AsString;
    return LINENAME ;
}

//---------------------------------------------------------------------------
void __fastcall TfmMain::InforControlStateMenuClick(TObject *Sender)
{//获取时隙配置信息
    BYTE DataInfo[2];
    memset(DataInfo, 0, 2);
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);
    E1TimeWorkFlag = false;

    //DATAINFO
    DataInfo[0] = 0X07;//COMMAND TYPE 参数型号
    MakePack(DataInfo,1,0X04,SUNUM,0X00,0XC5,LINENUM,SUNUM,"获取时隙配置命令");

    /*AnsiString SUNUM,LINENUM ;
    GetStationInfo(&LINENUM,&SUNUM) ;
    //GetCurDataTransferState(SUNUM,LINENUM);
    GetInforControlState(SUNUM,LINENUM) ;*/
}
//---------------------------------------------------------------------------
//获取信道控制器状态
void __fastcall TfmMain::GetInforControlState(AnsiString StationNo, AnsiString LineNo)
{
    BYTE pBuff[2048];
    SetGetControlStateSubTHeader(pBuff,StrToInt(StationNo),2,0,0xC0,0x47) ;
//    SetSubHeader(pBuff,0,0,0xC0,0x47) ;//设置子报文头
    SetZHeader(pBuff,0,0x47,0,LineNo.ToInt(),0,2,StationNo.ToInt()) ;//设置总报文头

    SetZTLength(pBuff) ;//设置报文的长度位[12],[13] ,
    Set4567pBuff(pBuff) ; //将第二个EB90 替换 为总长度-8
    SetSubCheckNum(pBuff) ;  //设置子校验 (部颁报文)
    SetEndSymbol(pBuff) ;//报文结束符
    SetZCheck(pBuff) ;  //设置主校验
    if(!SendMessage(pBuff,GetLength(pBuff)))
    {
        return ;
    }
    //ClientSocket->Socket->SendBuf(pBuff,GetLength(pBuff));
    AnsiString SendMessage = GetDemoStr(GetLength(pBuff),pBuff);
    fmReceiveData->Memo2->Lines->Add("-> ->  " + SendMessage);
    CurrentYinShiPinCommand = 9 ;
    Command = 0x47 ;
    IsOvertimeTimer->Enabled = true ;
    SetSendRestrict(true);

}
//---------------------------------------------------------------------------
/********************************************************************************
设置报文总长度位的值 总长度值放在pBuff[12],pBuff[13]中,高前,底后
*********************************************************************************/
void __fastcall TfmMain::SetZLength(BYTE * pBuff)
{
    int lj = pBuff[24];
    lj = lj<<8;lj += pBuff[23] + 28;//28 报文固定部分的长度 子报文长度存在pBuff[23]
    int ll = lj;
    ll = ll&0xFF;                          //取低8位
    int lh = lj&0xFF00;   lh = lh/0x100;   //取高8位
    pBuff[12]=lh;pBuff[13]=ll;
}
//---------------------------------------------------------------------------
/********************************************************************************
设置报文总长度位的值 总长度值放在pBuff[12],pBuff[13]中,高前,底后(TianheBaoWen)
*********************************************************************************/
void __fastcall TfmMain::SetZTLength(BYTE * pBuff)
{
    pBuff[12]=0;pBuff[13]=pBuff[22]+28;
}
//---------------------------------------------------------------------------
/********************************************************************************
设置的第二个EB 90值为报文总长度-8 总长度值放在pBuff[12],pBuff[13]中,高前,底后
*********************************************************************************/
void __fastcall TfmMain::Set4567pBuff(BYTE * pBuff)
{
    int temp = MAKEWORD(pBuff[13],pBuff[12]);
    temp-=8 ;
    pBuff[3] = HIBYTE(temp);pBuff[2] = LOBYTE(temp);
}
//---------------------------------------------------------------------------
/********************************************************************************
设置总报文的校验和 总长度值放在pBuff[12],pBuff[13]中,高前,底后
校验和的算法为所有的报文(除掉总校验部分)的累加和 存于总报文的最后两位 高前底侯
*********************************************************************************/
void __fastcall TfmMain::SetZCheck(BYTE * pBuff)
{
    int Length = GetLength(pBuff) ;
    int CheckNum  = 0 ;
    for(int i = 0 ;i<Length-2;i++)
    {
        CheckNum +=pBuff[i] ;
    }
    int x = CheckNum;
    int j = x;  j = j&0xFF;        //取低8位
    x = x&0xFF00;   x = x/0x100;   //取高8位
    pBuff[Length-1] = x;
    pBuff[Length-2] = j;
}
//---------------------------------------------------------------------------
/********************************************************************************
设置子报文的校验和 子报文长度值放在pBuff[23]~~pBuff[26]中,高前,底后
校验和的算法为所有的报文(除掉总校验部分)的累加和 存于总报文的倒数第4,5位 高前底侯
*********************************************************************************/
void __fastcall TfmMain::SetSubCheckNum(BYTE * pBuff)
{
    int InfoSum = 0;
    int Length = GetLength(pBuff) ;
    for(int i=17;i<Length-5;i++)
    {
        InfoSum += pBuff[i];
    }
    int x = InfoSum;
    x = ~x;    x += 1;             //取反,+1
    int j = x;  j = j&0xFF;        //取低8位
    x = x&0xFF00;   x = x/0x100;   //取高8位
    pBuff[Length-5] = x;      pBuff[Length-4] = j;
}
//---------------------------------------------------------------------------
/********************************************************************************
设置报文结束符 放在主报文的倒数第三位
*********************************************************************************/
void __fastcall TfmMain::SetEndSymbol(BYTE * pBuff)
{
    int Length = GetLength(pBuff) ;
    pBuff[Length-3] = 0x0D ;
}
/********************************************************************************
获取报文的长度
参数: 报文指针
返回值: 报文长度
*********************************************************************************/
int __fastcall TfmMain::GetLength(BYTE * pBuff)
{
    return(MAKEWORD(pBuff[13],pBuff[12]));
}
//---------------------------------------------------------------------------
/********************************************************************************
设置总报文的头
参数: 报文 ,系统路径=0,Expand1 = 255,Expand2 = 0,线路号,终端号 = 254,协议类型 = 1, 站号
返回值: 报文长度
*********************************************************************************/
void __fastcall TfmMain::SetZHeader(BYTE * pBuff, int Path, int Expand1, int Expand2, int LineNo, int Terminal, int Type, int StationNo)
{
     pBuff[0] = 0xEB ;
     pBuff[1] = 0x90 ;
     pBuff[2] = 0xEB ;
     pBuff[3] = 0x90 ;
     pBuff[4] = 0xEB ;
     pBuff[5] = 0x90 ;
     pBuff[6] = 0x00 ;
     pBuff[7] = Path ;//Path
     pBuff[8] = Expand1 ;
     pBuff[9] = Expand2 ;
     pBuff[10] = LineNo ;
     pBuff[11] = Terminal ;
     pBuff[12] = 0;
     pBuff[13] = 0; //总长度暂时置为 0
     pBuff[14] = Type ;
     pBuff[15] = StationNo ;

}
//---------------------------------------------------------------------------
/********************************************************************************
设置子报文的头
参数: 报文 ,系统路径=0,Expand1 = 255,Expand2 = 0,线路号,终端号 = 254,协议类型 = 1, 站号
返回值: 报文长度
*********************************************************************************/
void __fastcall TfmMain::SetSubHeader(BYTE * pBuff, int SubLength, int Cmd,int CID1,int CID2)
{
    SReqHeader* reqHeader;//子报文头结构体
    BYTE s_reqBuf[1024];
    memset(s_reqBuf,0x00,1024);
 reqHeader = (SReqHeader*)s_reqBuf;
 reqHeader->cmd = Cmd;
    reqHeader->len = ReqHeaderLen + SubLength;
    pBuff[16] = 0x7E ;
    pBuff[17] = 0x30 ;
    pBuff[18] = 0x40 ;
    pBuff[19] = CID1 ;
    pBuff[20] = CID2 ;

    pBuff[21] = 0xB0;
    pBuff[22] = SubLength + 8;
    memcpy(pBuff+23,reqHeader,reqHeader->len);
}
//---------------------------------------------------------------------------
/********************************************************************************
设置子报文的头(适用于天河协议)
参数: 报文 ,系统路径=0,Expand1 = 255,Expand2 = 0,线路号,终端号 = 254,协议类型 = 1, 站号
返回值: 报文长度
*********************************************************************************/
void __fastcall TfmMain::SetGetControlStateSubTHeader(BYTE * pBuff,int StationNo, int SubLength, int Cmd, int CID1, int CID2)
{
    pBuff[16] = 0x7E ;
    pBuff[17] = 0x30 ;
    pBuff[18] = StationNo ;
    pBuff[19] = CID1 ;
    pBuff[20] = CID2 ;
    pBuff[21] = 0xB0 ;
    pBuff[22] = SubLength;
    pBuff[23] = 0x00 ;
    pBuff[24] = Cmd  ;

}
//---------------------------------------------------------------------------
//信道控制器获取参数时,返回报文处理
//参数:返回报文指针去掉无用的报文头
void __fastcall TfmMain::DisposeGetInfoControl(BYTE * pBuf)
{
    BYTE portMessage,portMessagep ;
    AnsiString PortState = "" ;
    AnsiString SendDirection = "" ;
    AnsiString ShiXi = "" ;
    AnsiString Send = "" ;
    AnsiString Accept = "" ;
    AnsiString HalfShiXi = "" ;
    AnsiString StartShiXi = "" ;
    AnsiString TbSate = "" ;
    AnsiString TbShixi = "" ;
    AnsiString TbDvrChannels = "" ;
    AnsiString TbShixiCount = "" ;

    switch(pBuf[0])
    {
        case 0:
        {
            GetInfoControlForm1->E1Clock->Caption = "从A向时钟";
            break;
        }
        case 1:
        {
            GetInfoControlForm1->E1Clock->Caption = "从B向时钟";
            break;
        }
        case 2:
        {
            GetInfoControlForm1->E1Clock->Caption = "主时钟";
            break;
        }
        case 3:
        {
            GetInfoControlForm1->E1Clock->Caption = "外部时钟";
            break;
        }
    }

    //R232-1
    DisposeRs232(pBuf[1],&PortState,&SendDirection, &ShiXi);
    GetInfoControlForm1->Rs2321OpenEdit->Text = PortState ;
    GetInfoControlForm1->Rs2321SendEdit->Text = SendDirection ;
    GetInfoControlForm1->Rs2321ShiXiEdit->Text = ShiXi ;
    //R232-2
    DisposeRs232(pBuf[2],&PortState,&SendDirection, &ShiXi);
    GetInfoControlForm1->Rs2322OpenEdit->Text = PortState ;
    GetInfoControlForm1->Rs2322SendEdit->Text = SendDirection ;
    GetInfoControlForm1->Rs2322ShiXiEdit->Text = ShiXi ;

    //V35-1高低
    DisPoseV35(pBuf[3],pBuf[4],&PortState,&SendDirection,&Send,&Accept,&HalfShiXi,&StartShiXi,&ShiXi);
    GetInfoControlForm1->V351OpenEdit->Text = PortState ;
    GetInfoControlForm1->V351SendDEdit->Text = SendDirection ;
    GetInfoControlForm1->V351SendEdit->Text = Send ;
    GetInfoControlForm1->V351AcceptEdit->Text = Accept ;
    GetInfoControlForm1->V351HalfShiXiEdit->Text = HalfShiXi ;
    GetInfoControlForm1->V351StartShiXiEdit->Text = StartShiXi ;
    GetInfoControlForm1->V351ShiXiEdit->Text = ShiXi ;

    //V35-2高低
    DisPoseV35(pBuf[5],pBuf[6],&PortState,&SendDirection,&Send,&Accept,&HalfShiXi,&StartShiXi,&ShiXi);
    GetInfoControlForm1->V352OpenEdit->Text = PortState ;
    GetInfoControlForm1->V352SendDEdit->Text = SendDirection ;
    GetInfoControlForm1->V352SendEdit->Text = Send ;
    GetInfoControlForm1->V352AcceptEdit->Text = Accept ;
    GetInfoControlForm1->V352HalfShiXiEdit->Text = HalfShiXi ;
    GetInfoControlForm1->V352StartShiXiEdit->Text = StartShiXi ;
    GetInfoControlForm1->V352ShiXiEdit->Text = ShiXi ;

    //图像同步串口1 高低
    DisposeVideo(pBuf[7],pBuf[8],&SendDirection,&Send,&Accept,&StartShiXi,&ShiXi);
    GetInfoControlForm1->Video1SendEdit->Text = SendDirection ;
    GetInfoControlForm1->Video1IsSendEdit->Text = Send ;
    GetInfoControlForm1->Video1IsAccecptEdit->Text = Accept ;
    GetInfoControlForm1->Video1StratShiXiEdit->Text = StartShiXi ;
    GetInfoControlForm1->Video1ShiXiEdit->Text = ShiXi ;

    //图像同步串口2 高低
    DisposeVideo(pBuf[9],pBuf[10],&SendDirection,&Send,&Accept,&StartShiXi,&ShiXi);
    GetInfoControlForm1->Video2SendEdit->Text = SendDirection ;
    GetInfoControlForm1->Video2IsSendEdit->Text = Send ;
    GetInfoControlForm1->Video2IsAcceptEdit->Text = Accept ;
    GetInfoControlForm1->Video2StratShiXiEdit->Text = StartShiXi ;
    GetInfoControlForm1->Video2ShiXiEdit->Text = ShiXi ;

    //图像同步串口3 高低
    DisposeVideo(pBuf[11],pBuf[12],&SendDirection,&Send,&Accept,&StartShiXi,&ShiXi);
    GetInfoControlForm1->Video3SendEdit->Text = SendDirection ;
    GetInfoControlForm1->Video3IsSendEdit->Text = Send ;
    GetInfoControlForm1->Video3IsAcceptEdit->Text = Accept ;
    GetInfoControlForm1->Video3StratShiXiEdit->Text = StartShiXi ;
    GetInfoControlForm1->Video3ShiXiEdit->Text = ShiXi ;

    //图像同步串口4 高低
    DisposeVideo(pBuf[13],pBuf[14],&SendDirection,&Send,&Accept,&StartShiXi,&ShiXi);
    GetInfoControlForm1->Video4SendEdit->Text = SendDirection ;
    GetInfoControlForm1->Video4IsSendEdit->Text = Send ;
    GetInfoControlForm1->Video4IsAcceptEdit->Text = Accept ;
    GetInfoControlForm1->Video4StratShiXiEdit->Text = StartShiXi ;
    GetInfoControlForm1->Video4ShiXiEdit->Text = ShiXi ;

    //数字音频端口
    DisposeAudio(pBuf[15],&SendDirection,&Send,&Accept,&ShiXi);
    GetInfoControlForm1->AudioSendEdit->Text = SendDirection ;
    GetInfoControlForm1->AudioIsSendEdit->Text = Send ;
    GetInfoControlForm1->AudioIsAcceptEdit->Text = Accept ;
    GetInfoControlForm1->AudioShiXiEdit->Text = ShiXi ;

    //同步口1
    DisposeTb(pBuf[16],pBuf[17],&TbSate,&TbShixi,&TbDvrChannels,&TbShixiCount);
    GetInfoControlForm1->TbState1->Text = TbSate ;
    GetInfoControlForm1->StartShiXi1->Text = TbShixi ;
    GetInfoControlForm1->DVRChannels1->Text = TbDvrChannels ;
    GetInfoControlForm1->ShiXiCount1->Text = TbShixiCount ;

    //同步口2
    DisposeTb(pBuf[18],pBuf[19],&TbSate,&TbShixi,&TbDvrChannels,&TbShixiCount);
    GetInfoControlForm1->TbState2->Text = TbSate ;
    GetInfoControlForm1->StartShiXi2->Text = TbShixi ;
    GetInfoControlForm1->DVRChannels2->Text = TbDvrChannels ;
    GetInfoControlForm1->ShiXiCount2->Text = TbShixiCount ;

    //同步口3
    DisposeTb(pBuf[20],pBuf[21],&TbSate,&TbShixi,&TbDvrChannels,&TbShixiCount);
    GetInfoControlForm1->TbState3->Text = TbSate ;
    GetInfoControlForm1->StartShiXi3->Text = TbShixi ;
    GetInfoControlForm1->DVRChannels3->Text = TbDvrChannels ;
    GetInfoControlForm1->ShiXiCount3->Text = TbShixiCount ;

    //同步口4
    DisposeTb(pBuf[22],pBuf[23],&TbSate,&TbShixi,&TbDvrChannels,&TbShixiCount);
    GetInfoControlForm1->TbState4->Text = TbSate ;
    GetInfoControlForm1->StartShiXi4->Text = TbShixi ;
    GetInfoControlForm1->DVRChannels4->Text = TbDvrChannels ;
    GetInfoControlForm1->ShiXiCount4->Text = TbShixiCount ;
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::DisposeRs232(BYTE Message, AnsiString * PortState,AnsiString *SendDirection, AnsiString *ShiXi)
{
        int Temp1 = Message&0x80;//7位
        if(Temp1!=0x80)//0
        {
            *PortState = "关闭" ;
        }
        else //1
        {
            *PortState = "打开" ;

        }
        Temp1 = Message&0x40 ;  //6
        if(Temp1!=0x40)//0
        {
            *SendDirection = "A向" ;
        }
        else //1
        {
            *SendDirection = "B向" ;

        }
        Temp1 = Message&0x1F ;     //0--4
        *ShiXi = IntToStr(Temp1) ;
}

//---------------------------------------------------------------------------
void __fastcall TfmMain::DisPoseV35(BYTE MessageG, BYTE MessageD,AnsiString * PortState,
                 AnsiString *Senddirection,AnsiString * Send,AnsiString *Accept,
                AnsiString * HalfShiXi,AnsiString * StartShiXi,AnsiString * ShiXi)
{
    int Temp1 = MessageG&0x80;//7位
    if(Temp1!=0x80)//0
    {
       *PortState  = "关闭" ;
    }
    else //1
    {
        *PortState = "打开" ;

    }
    int Temp2 = MessageD&0x80;//7位
    if(Temp2!=0x80)//0
    {
        *Send  = "上升沿有效" ;
    }
    else //1
    {
        *Send = "下降沿有效" ;
    }
    Temp1 = MessageG&0x40 ;  //6
    if(Temp1!=0x40)//0
    {
        *Senddirection = "A向" ;
    }
    else //1
    {
        *Senddirection = "B向" ;
    }
    Temp2 = MessageD&0x40 ; //6
    if(Temp2!=0x40)//0
    {
        *Accept = "上升沿有效" ;
    }
    else           //1
    {
        *Accept = "下降沿有效" ;
    }
    Temp1 = MessageG&0x20 ;  //5
    Temp2 = MessageD&0x20 ; //5
    if(Temp1!=0x20)//0
    {
        *HalfShiXi = "不用半时隙" ;
    }
    else //1
    {
        if(Temp2!=0x20)//0
        {
            *HalfShiXi = "前半时隙" ;
        }
        else //1
        {
            *HalfShiXi = "后半时隙" ;
        }

    }
    Temp1 = MessageG&0x1F ;  //0--4
    Temp2 = MessageD&0x1F ; //0--4
    *StartShiXi = StrToInt(Temp1) ;
    *ShiXi = StrToInt(Temp2) ;
}

//---------------------------------------------------------------------------
void __fastcall TfmMain::DisposeVideo(BYTE MessageG,BYTE MessageD,
                 AnsiString *Senddirection,AnsiString * Send,AnsiString *Accept,
                AnsiString * StartShiXi,AnsiString * ShiXi)
{
    int Temp1 = MessageG&0x80;//7位
    if(Temp1!=0x80)//0
    {
        *Send = "关闭" ;
    }
    else //1
    {
        *Send = "打开" ;
    }
    Temp1 = MessageG&0x40 ;  //6
    if(Temp1!=0x40)//0
    {
        *Accept = "关闭" ;
    }
    else //1
    {
        *Accept = "打开" ;
    }
    Temp1 = MessageG&0x20 ;     //5
    if(Temp1!=0x20)//0
    {
        *Senddirection = "由A向" ;
    }
    else //1
    {
        *Senddirection = "由B向" ;

    }
    Temp1 = MessageG&0x1F ;     //0--4
    int Temp2 = MessageD&0x1F ;
    *StartShiXi = IntToStr(Temp1) ;
    *ShiXi = IntToStr(Temp2) ;
}

//---------------------------------------------------------------------------
void __fastcall TfmMain::DisposeTb(BYTE MessageG,BYTE MessageD,
                 AnsiString *TbSate,AnsiString * TbShixi,AnsiString *TbDvrChannels,
                AnsiString * TbShixiCount)
{
    int Temp1 = MessageG&0x80;//7位
    if(Temp1!=0x80)//0
    {
        *TbSate = "关闭" ;
    }
    else //1
    {
        *TbSate = "打开" ;
    }
    *TbShixi = IntToStr(MessageG&0x1F);  //4~0
    *TbDvrChannels = IntToStr((MessageD&0xE0)>>5);  //7~5
    *TbShixiCount = IntToStr(MessageD&0x1F);  //4~0   
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::DisposeAudio(BYTE Message,
                 AnsiString *Senddirection,AnsiString * Send,AnsiString *Accept,
                 AnsiString * ShiXi)
{
    int Temp1 = Message&0x80;//7位
    if(Temp1!=0x80)//0
    {
        *Send = "关闭" ;
    }
    else //1
    {
        *Send = "打开" ;
    }
    Temp1 = Message&0x40 ;  //6
    if(Temp1!=0x40)//0
    {
        *Accept = "关闭" ;
    }
    else //1
    {
        *Accept = "打开" ;
    }
    Temp1 = Message&0x20 ;     //0--4
    if(Temp1!=0x20)//0
    {
        *Senddirection = "A向" ;
    }
    else //1
    {
        *Senddirection = "B向" ;
    }
    Temp1 = Message&0x1F ;     //0--4
    *ShiXi = IntToStr(Temp1) ;
}

/// <summary>将接收或发送的串转化为显示的字符串</summary>
/// <param name="LentTh">pBuf的长度</param>
/// <param name="pBuf">接收或发送的指针</param>
/// <returns>转化后的chuan</returns>
AnsiString __fastcall TfmMain::GetDemoStr(int Length, BYTE * pBuf)
{
    AnsiString StrTemp ;
    AnsiString Str = "";
 for(int i = 0;i < Length; i++)
    {
        StrTemp = "";
        StrTemp.sprintf("%X",pBuf[i]);
        if (StrLen(StrTemp.c_str()) == 1)
        {
        StrTemp = "0" + StrTemp;
        }
        Str += StrTemp + " ";
    }
    return Str ;
}

//---------------------------------------------------------------------------
void __fastcall TfmMain::SetIPMenuClick(TObject *Sender)
{//设置IP
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);   
    SetIpForm->DVRTYPE->Caption = 1;
    SetIpForm->StationNo = SUNUM ;
//    SetIpForm->LineNo = LINENUM ;
    SetIpForm->ShowModal();
    /*AnsiString SUNUM,LINENUM ;
    GetStationInfo(&LINENUM,&SUNUM) ;
    SetIpForm->StationNo = SUNUM ;
    SetIpForm->LineNo = LINENUM ;
    SetIpForm->ShowModal();*/
}
//---------------------------------------------------------------------------
/// <summary>设置DVR的IP地址</summary>
/// <param name="SuNum">站点编号</param>
/// <param name="LineNo">线路号</param>
/// <returns>转化后的chuan</returns>
void __fastcall TfmMain::SetIPConfig(AnsiString SuNum, AnsiString LineNo,AnsiString IP,AnsiString IPYanMa,AnsiString IPGate)
{
    BYTE pBuff[2048];
    int IP1,IP2,IP3,IP4 ;
    SetSubHeader(pBuff,12,RMIP_SET_IPCONFIG,0xC1,0xC3) ;//设置子报文头
    SetZHeader(pBuff,0,0xC3,0,LineNo.ToInt(),0,1,SuNum.ToInt()) ;//设置总报文头
    SetZLength(pBuff) ;//设置报文的长度位[12],[13] ,
    Set4567pBuff(pBuff) ; //将第二个EB90 替换 为总长度-8
    if(GetIPByte(IP,&IP1,&IP2,&IP3,&IP4))
    {
        pBuff[31] = IP1 ;
        pBuff[32] = IP2 ;
        pBuff[33] = IP3 ;
        pBuff[34] = IP4 ;
    }
    else
    {
     TfmMessage *message = new TfmMessage(Application);
        message->lbMessage->Caption = "IP地址输入有误,请您重新输入。";
        message->ShowModal();
    }
    if(GetIPByte(IPYanMa,&IP1,&IP2,&IP3,&IP4))
    {
        pBuff[35] = IP1 ;
        pBuff[36] = IP2 ;
        pBuff[37] = IP3 ;
        pBuff[38] = IP4 ;
    }
    else
    {
     TfmMessage *message = new TfmMessage(Application);
        message->lbMessage->Caption = "子网掩码输入有误,请您重新输入。";
        message->ShowModal();
    }
    if(GetIPByte(IPGate,&IP1,&IP2,&IP3,&IP4))
    {
        pBuff[39] = IP1 ;
        pBuff[40] = IP2 ;
        pBuff[41] = IP3 ;
        pBuff[42] = IP4 ;
    }
    else
    {
     TfmMessage *message = new TfmMessage(Application);
        message->lbMessage->Caption = "网关输入有误,请您重新输入。";
        message->ShowModal();
    }
    SetSubCheckNum(pBuff) ;  //设置子校验 (部颁报文)
    SetEndSymbol(pBuff) ;//报文结束符
    SetZCheck(pBuff) ;  //设置主校验
    if(!SendMessage(pBuff,GetLength(pBuff)))
    {
        return ;
    }
    //ClientSocket->Socket->SendBuf(pBuff,GetLength(pBuff));

    AnsiString SendMessage = GetDemoStr(GetLength(pBuff),pBuff);
    fmReceiveData->Memo2->Lines->Add("-> ->  " + SendMessage);

    Command = RMIP_SET_IPCONFIG ;
    IsOvertimeTimer->Enabled = true ;
    SetSendRestrict(true);
}
/// <summary>由IP地址串得到IP的各个端的整数</summary>
/// <param name="IP1">IP第一段</param>
/// <param name="IP2">IP第2段</param>
/// <param name="IP3">IP第3段</param>
/// <param name="IP4">IP第4段</param>
/// <returns>是否成功</returns>
bool __fastcall TfmMain::GetIPByte(AnsiString IP,int * IP1, int * IP2, int * IP3, int * IP4)
{
    AnsiString sIP1,sIP2,sIP3,sIP4;
 sIP1 = (IP.SubString(1,3)).Trim();
    sIP2 = (IP.SubString(5,3)).Trim();
    sIP3 = (IP.SubString(9,3)).Trim();
    sIP4 = (IP.SubString(13,3)).Trim();
    int v1,v2,v3,v4 ;
    *IP1 = sIP1.ToIntDef(-1);
    *IP2 = sIP2.ToIntDef(-1);
    *IP3 = sIP3.ToIntDef(-1);
    *IP4 = sIP4.ToIntDef(-1);
    if(*IP1==-1||*IP2==-1||*IP3==-1||*IP4==-1)
    {
     return false ;
    }
    else
    {
     return true ;

    }
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::GetPioHelperMenuClick(TObject *Sender)
{//获取ARM板IP地址和端口
    /* Old Cmd
    AnsiString SUNUM,LINENUM ;
    GetStationInfo(&LINENUM,&SUNUM) ;
    GetPioHelper(SUNUM,LINENUM);
    */

    //
    BYTE DataInfo[28];
    memset(DataInfo, 0, 28);
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    //DATAINFO
    DataInfo[0] = 0X01;//0 - 监控 1 - 录像
    DataInfo[1] = 0X01;//
    DataInfo[2] = 0X00;//序号 WORD
    DataInfo[3] = 0XFF;//
    DataInfo[4] = 0X18;//长度 DWORD
    DataInfo[8] = 0X4C;//命令码 DWORD

    MakePack(DataInfo,28,0X04,SUNUM,0XC1,0XC3,LINENUM,SUNUM,"获取ARM板IP地址和端口命令");
}
//---------------------------------------------------------------------------
/// <summary>获得并口的协处理板IP地址和端口</summary>
/// <param name="StationNo">站点号码</param>
/// <param name="LineNo">线路号码</param>
/// <returns>无</returns>
void __fastcall TfmMain::GetPioHelper(AnsiString StationNo, AnsiString LineNo)
{
    /*BYTE pBuff[2048];
    SetSubHeader(pBuff,16,RMIP_GET_PIOHELPER,0xC1,0xC3) ;//设置子报文头
    SetZHeader(pBuff,0,0xC3,0,LineNo.ToInt(),0,1,StationNo.ToInt()) ;//设置总报文头
    SetZLength(pBuff) ;//设置报文的长度位[12],[13] ,
    Set4567pBuff(pBuff) ; //将第二个EB90 替换 为总长度-8
    SetSubCheckNum(pBuff) ;  //设置子校验 (部颁报文)
    SetEndSymbol(pBuff) ;//报文结束符
    SetZCheck(pBuff) ;  //设置主校验
    if(!SendMessage(pBuff,GetLength(pBuff)))
    {
        return ;
    }
    //ClientSocket->Socket->SendBuf(pBuff,GetLength(pBuff));

    AnsiString SendMessage = GetDemoStr(GetLength(pBuff),pBuff);
    fmReceiveData->Memo2->Lines->Add("-> ->  " + SendMessage);

    Command = RMIP_GET_PIOHELPER ;
    IsOvertimeTimer->Enabled = true ;
    SetSendRestrict(true);*/
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::SetPioHelperMenuClick(TObject *Sender)
{//设置ARM板地址和端口
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);
    SetPioHelperForm->DVRTYPE->Caption = 1;
    SetPioHelperForm->StationNo = SUNUM ;
//    SetPioHelperForm->LineNo = LINENUM ;
    SetPioHelperForm->ShowModal();
    /*AnsiString SUNUM,LINENUM ;
    GetStationInfo(&LINENUM,&SUNUM) ;
    SetPioHelperForm->StationNo = SUNUM ;
    SetPioHelperForm->LineNo = LINENUM ;
    SetPioHelperForm->ShowModal();*/
}
//---------------------------------------------------------------------------
/// <summary>设置并口的协处理板IP地址和端口</summary>
/// <param name="StationNo">站点号码</param>
/// <param name="LineNo">线路号码</param>
/// <param name="IP">要设置的Ip</param>
/// <param name="StartPort">起始端口号</param>
/// <param name="ParallelInPutNum">输入并口数目</param>
/// <param name="ParallelOutPutNum">输出并口数目</param>
/// <returns>无</returns>
void __fastcall TfmMain::SetPioHelper(AnsiString StationNo,AnsiString LineNo,AnsiString Ip,
        long StartPort,int ParallelInPutNum,int ParallelOutPutNum)
{
 BYTE pBuff[2048];
    int IP1,IP2,IP3,IP4 ;
    SetSubHeader(pBuff,16,RMIP_SET_PIOHELPER,0xC1,0xC3) ;//设置子报文头
    SetZHeader(pBuff,0,0xC3,0,LineNo.ToInt(),0,1,StationNo.ToInt()) ;//设置总报文头
    SetZLength(pBuff) ;//设置报文的长度位[12],[13] ,
    Set4567pBuff(pBuff) ; //将第二个EB90 替换 为总长度-8
    if(GetIPByte(Ip,&IP1,&IP2,&IP3,&IP4))
    {
        pBuff[31] = IP1 ;
        pBuff[32] = IP2 ;
        pBuff[33] = IP3 ;
        pBuff[34] = IP4 ;
    }
    else
    {
     TfmMessage *message = new TfmMessage(Application);
        message->lbMessage->Caption = "IP地址输入有误,请您重新输入。";
        message->ShowModal();
    }
    pBuff[35] = StartPort ;
    pBuff[39] = ParallelInPutNum ;
    pBuff[43] = ParallelOutPutNum ;
    SetSubCheckNum(pBuff) ;  //设置子校验 (部颁报文)
    SetEndSymbol(pBuff) ;//报文结束符
    SetZCheck(pBuff) ;  //设置主校验
    if(!SendMessage(pBuff,GetLength(pBuff)))
    {
        return ;
    }
    //ClientSocket->Socket->SendBuf(pBuff,GetLength(pBuff));

    AnsiString SendMessage = GetDemoStr(GetLength(pBuff),pBuff);
    fmReceiveData->Memo2->Lines->Add("-> ->  " + SendMessage);

    Command = RMIP_SET_PIOHELPER ;
    IsOvertimeTimer->Enabled = true ;
    SetSendRestrict(true);                                                  
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::GetAVSettingMenuClick(TObject *Sender)
{
    /*AnsiString SUNUM,LINENUM ;
    GetStationInfo(&LINENUM,&SUNUM) ;
    GetAvSettingsForm->StationNoEdit->Text = SUNUM ;
    GetAvSettingsForm->LineNoEdit->Text = LINENUM ;
    GetAvSettingsForm->ShowModal();*/
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);
    GetAvSettingsForm->StationNoEdit->Text = SUNUM ;
//    GetAvSettingsForm->LineNoEdit->Text = LINENUM ;
    GetAvSettingsForm->DVRTYPE->Caption = 1;
    GetAvSettingsForm->ShowModal();
}
//---------------------------------------------------------------------------
/// <summary>获取音视频的参数</summary>
/// <param name="StationNo">站点号码</param>
/// <param name="LineNo">线路号码</param>
/// <param name="Port">起始端口号</param>
/// <returns>无</returns>
void __fastcall TfmMain::GetAvSetTings(AnsiString StationNo, AnsiString LineNo, int Port)
{
    BYTE pBuff[2048];
    SetSubHeader(pBuff,4,RMIP_GET_AVSETTINGS,0xC1,0xC3) ;//设置子报文头
    SetZHeader(pBuff,0,0xC3,0,LineNo.ToInt(),0,1,StationNo.ToInt()) ;//设置总报文头
    SetZLength(pBuff) ;//设置报文的长度位[12],[13] ,
    Set4567pBuff(pBuff) ; //将第二个EB90 替换 为总长度-8
    pBuff[31] = Port ;
    SetSubCheckNum(pBuff) ;  //设置子校验 (部颁报文)
    SetEndSymbol(pBuff) ;//报文结束符
    SetZCheck(pBuff) ;  //设置主校验
    if(!SendMessage(pBuff,GetLength(pBuff)))
    {
        return ;
    }
    //ClientSocket->Socket->SendBuf(pBuff,GetLength(pBuff));

    AnsiString SendMessage = GetDemoStr(GetLength(pBuff),pBuff);
    fmReceiveData->Memo2->Lines->Add("-> ->  " + SendMessage);

    Command = RMIP_GET_AVSETTINGS ;
    IsOvertimeTimer->Enabled = true ;
    SetSendRestrict(true);
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::SetAvSetTingsMenuClick(TObject *Sender)
{
//
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::GetMPEG4MenuClick(TObject *Sender)
{//获取I帧间隔
    /*AnsiString SUNUM,LINENUM ;
    GetStationInfo(&LINENUM,&SUNUM) ;
    GetMPEGForm->StationNoEdit->Text = SUNUM ;
    GetMPEGForm->LineNoEdit->Text = LINENUM ;
    GetMPEGForm->ShowModal();*/
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);
    GetMPEGForm->StationNoEdit->Text = SUNUM ;
    GetMPEGForm->LineNoEdit->Text = LINENUM ;
    GetMPEGForm->DVRTYPE->Caption = 1;
    GetMPEGForm->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::GetMPEG(AnsiString StationNo, AnsiString LineNo, int Port)
{
 BYTE pBuff[2048];
    SetSubHeader(pBuff,4,RMIP_GET_MP4VIDEOENCODER,0xC1,0xC3) ;//设置子报文头
    SetZHeader(pBuff,0,0xC3,0,LineNo.ToInt(),0,1,StationNo.ToInt()) ;//设置总报文头
    SetZLength(pBuff) ;//设置报文的长度位[12],[13] ,
    Set4567pBuff(pBuff) ; //将第二个EB90 替换 为总长度-8
    pBuff[31] = Port ;
    SetSubCheckNum(pBuff) ;  //设置子校验 (部颁报文)
    SetEndSymbol(pBuff) ;//报文结束符
    SetZCheck(pBuff) ;  //设置主校验
    if(!SendMessage(pBuff,GetLength(pBuff)))
    {
        return ;
    }
    //ClientSocket->Socket->SendBuf(pBuff,GetLength(pBuff));

    AnsiString SendMessage = GetDemoStr(GetLength(pBuff),pBuff);
    fmReceiveData->Memo2->Lines->Add("-> ->  " + SendMessage);

    Command = RMIP_GET_MP4VIDEOENCODER ;
    IsOvertimeTimer->Enabled = true ;
    SetSendRestrict(true);
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::SetMPEGMenuClick(TObject *Sender)
{//设置I帧
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);
    SetMPEGForm->StationNoEdit->Text = SUNUM ;
    SetMPEGForm->LineNoEdit->Text = LINENUM ;
    SetMPEGForm->DVRTYPE->Caption = 1;
    SetMPEGForm->ShowModal();
    /*AnsiString SUNUM,LINENUM ;
    GetStationInfo(&LINENUM,&SUNUM) ;
    SetMPEGForm->StationNoEdit->Text = SUNUM ;
    SetMPEGForm->LineNoEdit->Text = LINENUM ;
    SetMPEGForm->ShowModal();*/
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::SetMPEG(AnsiString StationNo, AnsiString LineNo, int Port, int IInterval)
{
    /*BYTE pBuff[2048];
    SetSubHeader(pBuff,8,RMIP_SET_MP4VIDEOENCODER,0xC1,0xC3) ;//设置子报文头
    SetZHeader(pBuff,0,0xC3,0,LineNo.ToInt(),0,1,StationNo.ToInt()) ;//设置总报文头
    SetZLength(pBuff) ;//设置报文的长度位[12],[13] ,
    Set4567pBuff(pBuff) ; //将第二个EB90 替换 为总长度-8
    pBuff[31] = LOBYTE(Port);
    pBuff[32] = HIBYTE(Port);
    pBuff[35] = LOBYTE(IInterval) ;
    pBuff[36] = HIBYTE(IInterval) ;
    SetSubCheckNum(pBuff) ;  //设置子校验 (部颁报文)
    SetEndSymbol(pBuff) ;//报文结束符
    SetZCheck(pBuff) ;  //设置主校验
    if(!SendMessage(pBuff,GetLength(pBuff)))
    {
        return ;
    }
    //ClientSocket->Socket->SendBuf(pBuff,GetLength(pBuff));

    AnsiString SendMessage = GetDemoStr(GetLength(pBuff),pBuff);
    fmReceiveData->Memo2->Lines->Add("-> ->  " + SendMessage);

    Command = RMIP_SET_MP4VIDEOENCODER ;
    IsOvertimeTimer->Enabled = true ;
    SetSendRestrict(true);*/
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::IsOvertimeTimerTimer(TObject *Sender)
{
    /*if(Command)
    {
     Command = 0 ;
        TfmMessage *message = new TfmMessage(Application);
        message->lbMessage->Caption = "命令执行超时!";
        message->ShowModal();
    }
    IsOvertimeTimer->Enabled = false ;
    SetSendRestrict(false);*/

}
//---------------------------------------------------------------------------
/// <summary>获取当前数据传输状态时返回报文时调用处理返回的报文</summary>
/// <param name="pRecBuf">返回的报文指针</param>
/// <returns>无</returns>
void __fastcall TfmMain::DisposeListTransferReturnBuff(BYTE * pRecBuf)
{
 int TransferNum = pRecBuf[31] ;//传输的路数
    //ListTransferStateForm->InitTransferForm(StationName,LineNo) ;
    AnsiString From = "" ;
    AnsiString To = "" ;
    if(TransferNum > 0)
    {
        for(int ii=(TransferNum-1);ii>-1;ii--)
        {
            From = "" ; To = "" ;
            for(int i=(35+ii*260);i<(61+ii*260);i++)
            {
              From += char(pRecBuf[i]);
            }
            for(int i=(163+ii*260);i<(189+ii*260);i++)
            {
              To += char(pRecBuf[i]);
            }
            ListTransferStateForm1->InsertListView("第"+IntToStr(ii+1)+"路",From,To);
        }
        ListTransferStateForm1->ShowModal();
    }
    else if(TransferNum <= 0)
    {
        MessageShow("当前没有数据传输");
    }
    /*switch(TransferNum)
    {
        case 4://四路
        {
             From = "" ; To = "" ;
             for(int i=815;i<841;i++)
             {
                  From += char(pRecBuf[i]);
             }
             for(int i=943;i<969;i++)
             {
                  To += char(pRecBuf[i]);
             }
             ListTransferStateForm1->InsertListView(4,From,To);
        }
        case 3://三路
        {
            From = "" ; To = "" ;
            for(int i=555;i<581;i++)
            {
                From += char(pRecBuf[i]);
            }
            for(int i=683;i<709;i++)
            {
                To += char(pRecBuf[i]);
            }
            ListTransferStateForm1->InsertListView(3,From,To);

        }
        case 2://二路
        {
            From = "" ; To = "" ;
              for(int i=295;i<321;i++)
              {
                  From += char(pRecBuf[i]);
              }
              for(int i=423;i<449;i++)
              {
                  To += char(pRecBuf[i]);
              }
              ListTransferStateForm1->InsertListView(2,From,To);

        }
        case 1://一路
        {
              From = "" ; To = "" ;
              for(int i=35;i<61;i++)
              {
                  From += char(pRecBuf[i]);
              }
              for(int i=163;i<189;i++)
              {
                  To += char(pRecBuf[i]);
              }
              ListTransferStateForm1->InsertListView(1,From,To);
              ListTransferStateForm1->ShowModal();
              break ;
        }
        default :
        {
            MessageShow("当前没有数据传输");
            break ;
        }
    }*///end switch(TransferNum)
}
//---------------------------------------------------------------------------
/// <summary>获取Ip地址返回报文时调用处理返回的报文</summary>
/// <param name="pRecBuf">返回的报文指针</param>
/// <returns>无</returns>
void __fastcall TfmMain::DisposeGetIpReturnBuff(BYTE * pRecBuf,AnsiString StationName,int StationNo,int LineNo)
{
 AnsiString IP = "";
    AnsiString YanMa = "" ;
    AnsiString Gate = "" ;
    for(int i = 31+2-3+1;i<35+2-3+1;i++) //获得IP串
    {
        IP += IntToStr(pRecBuf[i]) + ".";
    }
    IP = IP.Delete(IP.Length(),1);
    for(int i = 35+2-3+1;i<39+2-3+1;i++) //获得YanMa串
    {
        YanMa += IntToStr(pRecBuf[i]) + ".";
    }
    YanMa = YanMa.Delete(YanMa.Length(),1);
    for(int i = 39+2-3+1;i<43+2-3+1;i++) //获得网关串
    {
        Gate += IntToStr(pRecBuf[i]) + ".";
    }
    Gate = Gate.Delete(Gate.Length(),1);
    GetIPForm->InitForm(StationName,StationNo,LineNo,IP,YanMa,Gate);
    GetIPForm->ShowModal() ;
}
//---------------------------------------------------------------------------
/// <summary>获取协处理板信息时返回报文时调用处理返回的报文</summary>
/// <param name="pRecBuf">返回的报文指针</param>
/// <returns>无</returns>
void __fastcall TfmMain::DisposeGetPioReturnBuf(BYTE * pBuf)
{
    AnsiString IP = "";
 for(int i = 31+2-3+1;i<35+2-3+1;i++) //获得IP串
    {
        IP += IntToStr(pBuf[i]) + ".";
    }
    IP = IP.Delete(IP.Length(),1);
    int StartPort = 0 ;
    for(int i = 0;i<4;i++)
    {
     StartPort+= pBuf[35+2-3+1+i]<<(i*8) ;
    }
    int InputPort = 0 ;
    for(int i = 0;i<4;i++)
    {
     InputPort+= pBuf[39+2-3+1+i]<<(i*8) ;
    }
    int OutputPort = 0 ;
    for(int i = 0;i<4;i++)
    {
     OutputPort+= pBuf[43+2-3+1+i]<<(i*8) ;
    }
    GetPioReturnForm->IPEdit->Text = IP ;
    GetPioReturnForm->StartPortEdit->Value = StartPort ;
    GetPioReturnForm->InPutComboBox->Text = IntToStr(InputPort );
    GetPioReturnForm->OutComboBox->Text = IntToStr(OutputPort );
    GetPioReturnForm->ShowModal();

}
//---------------------------------------------------------------------------
/// <summary>获取MPEG时返回报文时调用处理返回的报文</summary>
/// <param name="pRecBuf">返回的报文指针</param>
/// <returns>无</returns>
void __fastcall TfmMain::DisposeGetMPEGReturnBYTE(BYTE * pBuf,int StationNo,int LineNo)
{
    int IInterval = 0 ;
    for(int i = 0 ;i<4;i++)
    {
        IInterval+=pBuf[33+i]<<(i*8);
    }
    GetMPEGRForm->StationNoEdit->Text = IntToStr(StationNo);
    GetMPEGRForm->LineNoEdit->Text = IntToStr(LineNo);
    GetMPEGRForm->IIntervalEdit->Text = IntToStr(IInterval);
    GetMPEGRForm->ShowModal();
}
//
//---------------------------------------------------------------------------
void __fastcall TfmMain::SetSendRestrict(bool IsSending)
{
 if(IsSending)
    {
     for(int i = 0;i<PopupMenuAddSm->Items->Count;i++)
        {
         if(PopupMenuAddSm->Items->Items[i]->GroupIndex == 3)
            {
                 PopupMenuAddSm->Items->Items[i]->Enabled = false ;
            }
        }
    }
    else
    {
     for(int i = 0;i<PopupMenuAddSm->Items->Count;i++)
        {
         if(PopupMenuAddSm->Items->Items[i]->GroupIndex ==3)
            {
                 PopupMenuAddSm->Items->Items[i]->Enabled = true ;
            }
        }
    }
}
//---------------------------------------------------------------------------
/// <summary>获取当前音视频参数返回报文时调用处理返回的报文</summary>
/// <param name="pBuf">返回的报文指针</param>
/// <returns>SReplyGetAVSettings结构体指针</returns>
void __fastcall TfmMain::DisposeGetAVSettingReturnBYTE(BYTE * pBuf)
{
    SReplyGetAVSettings *mySReplyGetAVSettings = new SReplyGetAVSettings;
    memcpy(mySReplyGetAVSettings,pBuf+30+1,pBuf[23]-8);

    int avComponents = mySReplyGetAVSettings->avComponents;
    if(avComponents&0x01)
    {
        GetAVSetTingReturnForm->HasVedioInEdit->Text = "是" ;
    }
    else
    {
        GetAVSetTingReturnForm->HasVedioInEdit->Text = "否" ;
    }
    if(avComponents&0x02)
    {
        GetAVSetTingReturnForm->HasAudioInEdit->Text = "是" ;
    }
    else
    {
        GetAVSetTingReturnForm->HasAudioInEdit->Text = "否" ;
    }
    if(avComponents&0x04)
    {
        GetAVSetTingReturnForm->HasVedioOutEdit->Text = "是" ;
    }
    else
    {
        GetAVSetTingReturnForm->HasVedioOutEdit->Text = "否" ;
    }
    if(avComponents&0x08)
    {
        GetAVSetTingReturnForm->HasAudioOutEdit->Text = "是" ;
    }
    else
    {
        GetAVSetTingReturnForm->HasAudioOutEdit->Text = "否" ;
    }

    int avEnabled = mySReplyGetAVSettings->avEnabled ;
    if(avEnabled&0x01)
    {
        GetAVSetTingReturnForm->VedioInEnabledEdit->Text = "是" ;
    }
    else
    {
        GetAVSetTingReturnForm->VedioInEnabledEdit->Text = "否" ;
    }

    if(avEnabled&0x02)
    {
        GetAVSetTingReturnForm->AudioInEnabledEdit->Text = "是" ;
    }
    else
    {
        GetAVSetTingReturnForm->AudioInEnabledEdit->Text = "否" ;
    }

    if(avEnabled&0x04)
    {
        GetAVSetTingReturnForm->VedioOutEnabledEdit->Text = "是" ;
    }
    else
    {
        GetAVSetTingReturnForm->VedioOutEnabledEdit->Text = "否" ;
    }
    if(avEnabled&0x08)
    {
        GetAVSetTingReturnForm->AudioOutEnabledEdit->Text = "是" ;
    }
    else
    {
        GetAVSetTingReturnForm->AudioOutEnabledEdit->Text = "否" ;
    }

    if(avEnabled&0x10)
    {
        GetAVSetTingReturnForm->VideoInBitmapEnabledEdit->Text = "是" ;
    }
    else
    {
        GetAVSetTingReturnForm->VideoInBitmapEnabledEdit->Text = "否" ;
    }

    if(avEnabled&0x20)
    {
        GetAVSetTingReturnForm->VideoInDateTimeEnabledEdit->Text = "是" ;
    }
    else
    {
        GetAVSetTingReturnForm->VideoInDateTimeEnabledEdit->Text = "否" ;
    }


    if(avEnabled&0x40)
    {
        GetAVSetTingReturnForm->VideoInMotionDetectionEnabledEdit->Text = "是" ;
    }
    else
    {
        GetAVSetTingReturnForm->VideoInMotionDetectionEnabledEdit->Text = "否" ;
    }

    if(avEnabled&0x80)
    {
        GetAVSetTingReturnForm->VideoInMaskAreaEnabledEdit->Text = "是" ;
    }
    else
    {
        GetAVSetTingReturnForm->VideoInMaskAreaEnabledEdit->Text = "否" ;
    }


    GetAVSetTingReturnForm->videoInMotionDetectEdit->Text = IntToStr(mySReplyGetAVSettings->videoInMotionDetectionAreas) ;
    GetAVSetTingReturnForm->videoInHueEdit->Text = IntToStr(mySReplyGetAVSettings->videoInHue) ;
    GetAVSetTingReturnForm->videoInSaturationEdit->Text = IntToStr(mySReplyGetAVSettings->videoInSaturation) ;
    GetAVSetTingReturnForm->videoInContrastEdit->Text = IntToStr(mySReplyGetAVSettings->videoInContrast) ;
    GetAVSetTingReturnForm->videoInBrightnessEdit->Text = IntToStr(mySReplyGetAVSettings->videoInBrightness) ;
    GetAVSetTingReturnForm->audioInVolumeEdit->Text = IntToStr(mySReplyGetAVSettings->audioInVolume) ;


    GetAVSetTingReturnForm->audioBitRateEdit->Text = IntToStr(mySReplyGetAVSettings->audioBitRate) ;
    GetAVSetTingReturnForm->videoOutBrightnessEdit->Text = IntToStr(mySReplyGetAVSettings->videoOutBrightness) ;
    GetAVSetTingReturnForm->videoOutContrastEdit->Text = IntToStr(mySReplyGetAVSettings->videoOutContrast) ;
    GetAVSetTingReturnForm->videoOutSaturationEdit->Text = IntToStr(mySReplyGetAVSettings->videoOutSaturation) ;
    GetAVSetTingReturnForm->videoOutHueEdit->Text = IntToStr(mySReplyGetAVSettings->videoOutHue) ;
    GetAVSetTingReturnForm->videoOutStandardEdit->Text = IntToStr(mySReplyGetAVSettings->videoOutStandard) ;

    GetAVSetTingReturnForm->videoInStandardEdit->Text = IntToStr(mySReplyGetAVSettings->videoInStandard) ;
    GetAVSetTingReturnForm->audioOutVolumeEdit->Text = IntToStr(mySReplyGetAVSettings->audioOutVolume) ;
    GetAVSetTingReturnForm->qualityEdit->Text = IntToStr(mySReplyGetAVSettings->quality) ;
    GetAVSetTingReturnForm->bitRateEdit->Text = IntToStr(mySReplyGetAVSettings->bitRate) ;
    GetAVSetTingReturnForm->widthEdit->Text = IntToStr(mySReplyGetAVSettings->width) ;
    GetAVSetTingReturnForm->heightEdit->Text = IntToStr(mySReplyGetAVSettings->height) ;

    GetAVSetTingReturnForm->frameRateEdit->Text = IntToStr(mySReplyGetAVSettings->frameRate) ;
    GetAVSetTingReturnForm->XCoordinateEdit->Text = IntToStr(mySReplyGetAVSettings->videoInDateTimeOverlayFormat.x);
    GetAVSetTingReturnForm->YCoordinateEdit->Text = IntToStr(mySReplyGetAVSettings->videoInDateTimeOverlayFormat.y);
    GetAVSetTingReturnForm->DataFormateEdit->Text = IntToStr(mySReplyGetAVSettings->videoInDateTimeOverlayFormat.dateTimeFormat) ;

    AnsiString StrTemp = "";
    AnsiString AvName = "";
    for(int i = 30+1;i<30+4+1;i++)
    {
        StrTemp.sprintf("%C",pBuf[i]);
        AvName += StrTemp ;
    }
//    GetAVSetTingReturnForm->AVNameEdit->Text = IntToStr(mySReplyGetAVSettings->avName) ;
    GetAVSetTingReturnForm->AVNameEdit->Text = AvName ;
    GetAVSetTingReturnForm->Show();
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::HideTimeMenuClick(TObject *Sender)
{
 /*AnsiString SUNUM,LINENUM;
    int ADR,CHANNEL ;
    GetStationOfLensInfo(&LINENUM,&SUNUM,&ADR,&CHANNEL) ;
    //GetCurDataTransferState(SUNUM,LINENUM);
    HideTime(SUNUM,LINENUM,CHANNEL,ADR) ; */
}
//---------------------------------------------------------------------------
/// <summary>设置镜头不显示时间</summary>
/// <param name="StationNo">站点号</param>
/// <param name="LineNo">线路号</param>
/// <returns>无</returns>
void __fastcall TfmMain::HideTime(AnsiString StationNo, AnsiString LineNo,int CHANNEL,int ADR)
{
 /*BYTE pBuff[2048];
    int IP1,IP2,IP3,IP4 ;
    SetSubHeader(pBuff,0x24,0x13,0xC1,0xC3) ;//设置子报文头
    SetZHeader(pBuff,0,0xC3,0,LineNo.ToInt(),0,1,StationNo.ToInt()) ;//设置总报文头
    SetZLength(pBuff) ;//设置报文的长度位[12],[13] ,
    Set4567pBuff(pBuff) ; //将第二个EB90 替换 为总长度-8

    pBuff[31] = CHANNEL ;
    pBuff[31+4] = 0x02 ;
    pBuff[31+4*2] = 0x02 ;
    pBuff[31+4*3] = 0x02 ;
    pBuff[31+4*4] = 0x02 ;
    pBuff[31+4*5] = 0x02 ;
    pBuff[31+4*6] = 0x00 ;
    pBuff[31+4*7] = 0x02 ;
    pBuff[31+4*8] = 0x02 ;

    SetSubCheckNum(pBuff) ;  //设置子校验 (部颁报文)
    SetEndSymbol(pBuff) ;//报文结束符
    SetZCheck(pBuff) ;  //设置主校验
    if(!SendMessage(pBuff,GetLength(pBuff)))
    {
        return ;
    }
    //ClientSocket->Socket->SendBuf(pBuff,GetLength(pBuff));

    AnsiString SendMessage = GetDemoStr(GetLength(pBuff),pBuff);
    fmReceiveData->Memo2->Lines->Add("-> ->  " + SendMessage);

    Command = 0x13 ;
    CurrentYinShiPinCommand = 1 ;
    IsOvertimeTimer->Enabled = true ;
    SetSendRestrict(true);*/
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::DisPlayTimeMenuClick(TObject *Sender)
{
    AnsiString SUNUM,LINENUM ;
    GetStationInfo(&LINENUM,&SUNUM) ;
    //GetCurDataTransferState(SUNUM,LINENUM);
    //DisPlayTime(SUNUM,LINENUM) ;
}
//---------------------------------------------------------------------------
/// <summary>设置镜头显示时间</summary>
/// <param name="StationNo">站点号</param>
/// <param name="LineNo">线路号</param>
/// <returns>无</returns>
void __fastcall TfmMain::DisPlayTime(AnsiString StationNo, AnsiString LineNo,int CHANNEL,int ADR)
{
    BYTE pBuff[2048];
    int IP1,IP2,IP3,IP4 ;
    SetSubHeader(pBuff,0x24,0x13,0xC1,0xc3) ;//设置子报文头
    SetZHeader(pBuff,0,0xc3,0,LineNo.ToInt(),0,1,StationNo.ToInt()) ;//设置总报文头
    SetZLength(pBuff) ;//设置报文的长度位[12],[13] ,
    Set4567pBuff(pBuff) ; //将第二个EB90 替换 为总长度-8

    pBuff[31] = CHANNEL ;
    pBuff[31+4] = 0x02 ;
    pBuff[31+4*2] = 0x02 ;
    pBuff[31+4*3] = 0x02 ;
    pBuff[31+4*4] = 0x02 ;
    pBuff[31+4*5] = 0x02 ;
    pBuff[31+4*6] = 0x01 ;
    pBuff[31+4*7] = 0x02 ;
    pBuff[31+4*8] = 0x02 ;

    SetSubCheckNum(pBuff) ;  //设置子校验 (部颁报文)
    SetEndSymbol(pBuff) ;//报文结束符
    SetZCheck(pBuff) ;  //设置主校验
    if(!SendMessage(pBuff,GetLength(pBuff)))
    {
        return ;
    }
    //ClientSocket->Socket->SendBuf(pBuff,GetLength(pBuff));

    AnsiString SendMessage = GetDemoStr(GetLength(pBuff),pBuff);
    fmReceiveData->Memo2->Lines->Add("-> ->  " + SendMessage);

    Command = 0x13 ;
    CurrentYinShiPinCommand = 2 ;
    IsOvertimeTimer->Enabled = true ;
    SetSendRestrict(true);
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::StartVoiceMenuClick(TObject *Sender)
{
    /*AnsiString SUNUM,LINENUM ;
    GetStationInfo(&LINENUM,&SUNUM) ;
    //GetCurDataTransferState(SUNUM,LINENUM);
    StartVoiceForm->StationNoEdit->Text = SUNUM ;
    StartVoiceForm->LineNoEdit->Text = LINENUM ;
    StartVoiceForm->ShowModal();
    //StartVoice(SUNUM,LINENUM) ;*/
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);
    StartVoiceForm->StationNoEdit->Text = SUNUM ;
    StartVoiceForm->LineNoEdit->Text = LINENUM ;
    StartVoiceForm->DVRTYPE->Caption = 1;
    StartVoiceForm->ShowModal();
}
//---------------------------------------------------------------------------
/// <summary>设置开始音频</summary>
/// <param name="StationNo">站点号</param>
/// <param name="LineNo">线路号</param>
/// <returns>无</returns>
void __fastcall TfmMain::StartVoice(AnsiString StationNo, AnsiString LineNo,int Port)
{
    /*BYTE pBuff[2048];
    int IP1,IP2,IP3,IP4 ;
    SetSubHeader(pBuff,0x28,0x13,0xC1,0xC3) ;//设置子报文头
    SetZHeader(pBuff,0,0xC3,0,LineNo.ToInt(),0,1,StationNo.ToInt()) ;//设置总报文头
    SetZLength(pBuff) ;//设置报文的长度位[12],[13] ,
    Set4567pBuff(pBuff) ; //将第二个EB90 替换 为总长度-8

    pBuff[31] = Port ;
    pBuff[31+4] = 0x02 ;
    pBuff[31+4*2] = 0x01 ;
    pBuff[31+4*3] = 0x02 ;
    pBuff[31+4*4] = 0x01 ;
    pBuff[31+4*5] = 0x02 ;
    pBuff[31+4*6] = 0x02 ;
    pBuff[31+4*7] = 0x02 ;
    pBuff[31+4*8] = 0x02 ;

    SetSubCheckNum(pBuff) ;  //设置子校验 (部颁报文)
    SetEndSymbol(pBuff) ;//报文结束符
    SetZCheck(pBuff) ;  //设置主校验
    if(!SendMessage(pBuff,GetLength(pBuff)))
    {
        return ;
    }
    //ClientSocket->Socket->SendBuf(pBuff,GetLength(pBuff));

    AnsiString SendMessage = GetDemoStr(GetLength(pBuff),pBuff);
    fmReceiveData->Memo2->Lines->Add("-> ->  " + SendMessage);

    Command = 0x13 ;
    CurrentYinShiPinCommand = 3 ;
    IsOvertimeTimer->Enabled = true ;
    SetSendRestrict(true);*/
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::StopVoiceMenuClick(TObject *Sender)
{
    /*AnsiString SUNUM,LINENUM ;
    GetStationInfo(&LINENUM,&SUNUM) ;
    //GetCurDataTransferState(SUNUM,LINENUM);
    StopVoiceForm->StationNoEdit->Text = SUNUM ;
    StopVoiceForm->LineNoEdit->Text = LINENUM ;
    StopVoiceForm->ShowModal();*/
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);
    StopVoiceForm->StationNoEdit->Text = SUNUM ;
//    StopVoiceForm->LineNoEdit->Text = LINENUM ;
    StopVoiceForm->DVRTYPE->Caption = 1;
    StopVoiceForm->ShowModal();
}
//---------------------------------------------------------------------------

原创粉丝点击