hello_jwei 发表于 2019-4-9 16:22:42

请教打开串口问题

用codesys3.5,想实现打开串口收发数据,基本上是照搬的CAA_SerialCom.library里面的例程,但是配置好执行como1(),como1.xError为FALSE,como1.eError为NO_ERROR,应该没有错误,但是como1.xDone为FALSE,没有执行完成,并且como1.hCom句柄为0。收不到数据。
求高人指点。
变量:
PROGRAM MyReadWrite
VAR
        xDone : BOOL;
        aCom1Params : ARRAY OF COM.PARAMETER;
        como1 : COM.Open;
        comc1 : COM.Close;
        comw1 : COM.Write;
        comError1: COM.ERROR;
        sWrite : STRING := 'Test String der L?nge 25!';
        sRead : STRING(25);
        szRead : CAA.SIZE;
        xCom1OpenError : BOOL;
        xCom1CloseError : BOOL;
        xCom1WriteError : BOOL;
END_VAR

程序:
CASE GVL_MyVar.uiComState OF
0:
        aCom1Params.udiParameterId := COM.CAA_Parameter_Constants.udiPort;
        aCom1Params.udiValue := 2;
        aCom1Params.udiParameterId := COM.CAA_Parameter_Constants.udiBaudrate;
        aCom1Params.udiValue := 9600;
        aCom1Params.udiParameterId := COM.CAA_Parameter_Constants.udiParity;
        aCom1Params.udiValue := COM.PARITY.NONE;
        aCom1Params.udiParameterId := COM.CAA_Parameter_Constants.udiStopBits;
        aCom1Params.udiValue := COM.STOPBIT.ONESTOPBIT;
        aCom1Params.udiParameterId := COM.CAA_Parameter_Constants.udiTimeout;
        aCom1Params.udiValue := 0;
        aCom1Params.udiParameterId := COM.CAA_Parameter_Constants.udiByteSize;
        aCom1Params.udiValue := 8;
        aCom1Params.udiParameterId := COM.CAA_Parameter_Constants.udiBinary;
        aCom1Params.udiValue := 0;
       
        como1.usiListLength := SIZEOF(aCom1Params)/SIZEOF(COM.PARAMETER);
        como1.pParameterList := ADR(aCom1Params);
        como1.xExecute := TRUE;
        como1();                                 
        IF como1.xError THEN
                xCom1OpenError := TRUE;
                GVL_MyVar.uiComState := 1000;
        END_IF
       
        comError1 := como1.eError;
        IF como1.xDone THEN
                GVL_MyVar.uiComState := 10;
        END_IF
       

10:
        comw1.hCom := como1.hCom;
        comw1.pBuffer := ADR(sWrite);
        comw1.szSize := 5;
        comw1.xExecute := TRUE;
        comw1();
                       
        IF comw1.xError THEN
           xCom1WriteError := TRUE;
        END_IF
       
        IF comw1.xDone THEN
           GVL_MyVar.uiComState := 25;
        END_IF

25:
        comc1.hCom := como1.hCom;
comc1.xExecute := TRUE;
comc1();

IF comc1.xError THEN
    xCom1CloseError := TRUE;
END_IF
       
        IF comc1.xDone OR comc1.xError THEN
                GVL_MyVar.uiComState := 1000;
        END_IF
1000:
           xDone := TRUE;
ELSE
        GVL_MyVar.uiComState := 0;         
END_CASE





页: [1]
查看完整版本: 请教打开串口问题