labwindows串口连接问题





int WDCOMnum_val,DYCOMnum_val;
char WDCOM_lab[10]="com6",DYCOM_lab[10]="com8";

void GetCtrlValue()
{
    GetCtrlVal(csszPanel,CSSZ_PANEL_WDCOM,&WDCOMnum_val);
    
    GetCtrlVal(csszPanel,CSSZ_PANEL_DYCOM,&DYCOMnum_val);

}
void SetCtrlValue()
{
    SetCtrlVal(csszPanel,CSSZ_PANEL_WDCOM,WDCOMnum_val);
    
    SetCtrlVal(csszPanel,CSSZ_PANEL_DYCOM,DYCOMnum_val);
    
}



int main (int argc, char *argv[])
{
    if (InitCVIRTE (0, argv, 0) == 0)
        return -1;    /* out of memory */
    if ((panelHandle = LoadPanel (0, "界面1.0.uir", PANEL)) < 0)
        return -1;
    if ((csszPanel = LoadPanel (0, "界面1.0.uir", CSSZ_PANEL)) < 0)
        return -1;
    
    DisplayPanel (panelHandle);
    
    RunUserInterface ();
    DiscardPanel (panelHandle);
    
    return 0;
}





int CVICALLBACK CSSZ_callback (int panel, int control, int event,
                               void *callbackData, int eventData1, int eventData2)
{
    switch (event)
    {
        case EVENT_COMMIT:
            
    if ((csszPanel = LoadPanel (0, "界面1.0.uir", CSSZ_PANEL)) < 0)
        return -1;
             DisplayPanel(csszPanel);
             int ret=0;
             IniText ReadIniFileHandle;
             ReadIniFileHandle = Ini_New(TRUE);
             ret = Ini_ReadFromFile(ReadIniFileHandle,"date.ini");
             if(ret==0)//读取文件成功
             {
                 Ini_GetInt(ReadIniFileHandle,"CSSZ","WDCOM",&WDCOMnum_val);
                
                 Ini_GetInt(ReadIniFileHandle,"CSSZ","DYCOM",&DYCOMnum_val);
                
                 SetCtrlValue();
             }
             Ini_Dispose(ReadIniFileHandle);
            break;
    }
    return 0;
}







int CVICALLBACK LJCK_callback (int panel, int control, int event,
                               void *callbackData, int eventData1, int eventData2)
{
    int WDCOMnum_val=0,DYCOMnum_val=0;
    char WDCOM_lab[10]="com6",DYCOM_lab[10]="com8";
    int bod=9600;
    switch (event)
    {
        case EVENT_COMMIT:
            //int WDCOMnum_val=0;
             int ret=0;
             IniText ReadIniFileHandle;
             ReadIniFileHandle = Ini_New(TRUE);
             ret = Ini_ReadFromFile(ReadIniFileHandle,"date.ini");
             if(ret==0)
             {
                 Ini_GetInt(ReadIniFileHandle,"CSSZ","WDCOM",&WDCOMnum_val);
                
                 Ini_GetInt(ReadIniFileHandle,"CSSZ","DYCOM",&DYCOMnum_val);
                
                 SetCtrlValue();
             }
             Ini_Dispose(ReadIniFileHandle);
             
                    Connectionsta[0]=0;
                    RS232Error = OpenComConfig (WDCOMnum_val,WDCOM_lab, bod, 0, 8, 1, 512, 512);
                    if (RS232Error == 0)
                    {
                        com[1]=WDCOMnum_val;
                        SetComTime (WDCOMnum_val,0.3);  
                          
                        Connectionsta[1]=1;
                        
                        SetCtrlVal(panelHandle,PANEL_WD_LED,1);
                    }
            break;
    }
    return 0;
}

在最下面LJCK这部分的运行时会提示开头的setctrlval出错
Function SetCtrlValAnsi: (return value = -4 [Oxfffffffc]).Panel, menu bar, or control array handle is invalid

根据你提供的代码,可以看出可能存在如下问题:

  1. panelHandle 没有被正确初始化。在 main 函数中加载 PANEL 面板后,应该将其存储在 panelHandle 变量中并显示出来,例如:
panelHandle = LoadPanel (0, "界面1.0.uir", PANEL);
if (panelHandle < 0)
    return -1;
DisplayPanel (panelHandle);
  1. SetCtrlVal 函数的第一个参数应该是控件的句柄,而不是控件的标识符。在 LJCK_callback 函数中,你应该先获取控件的句柄,例如:
int wd_led_handle = GetCtrlHandleFromPanel(panelHandle, PANEL_WD_LED);

然后将 wd_led_handle 作为参数传递给 SetCtrlVal 函数,例如:

SetCtrlVal(panelHandle, wd_led_handle, 1);
  1. LJCK_callback 函数中,你定义了两个局部变量 WDCOMnum_valDYCOMnum_val,这会隐藏全局变量 WDCOMnum_valDYCOMnum_val,导致后面的代码中使用的是局部变量而非全局变量。因此,你应该删除这两个局部变量的定义,保留全局变量即可。

希望这些解释能够帮助你解决问题。