Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched.
Close
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2017-02-13
Originally created by: Viacheslav Mezentsev
Up.
The same question. Is there a complete example of using asynchronous (non blocking) read? I need to read input event ('/dev/input/event1').
CoDeSys 3.5.10.x.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2017-03-15
Originally created by: Viacheslav Mezentsev
Worked example.
PROGRAMPLC_PRGvarconstant
  STATE_IDLE:   byte :=0;
  STATE_CONFIG:   byte :=1;
  STATE_OPEN:   byte :=2;
  STATE_FLUSH:   byte :=3;
  STATE_READ:   byte :=4;
  STATE_READWAIT: byte :=5;
  STATE_CATCHEVENT: byte :=6;
  STATE_CLOSE:   byte :=7;
  STATE_CLOSEWAIT: byte :=8;  end_varvar Â
  ready: bool; Â
  step: byte :=1; Â
  state: udint;
  result: RTS_IEC_RESULT;
  file : SysFileAsync.SysFileAsyncFB;
  jobparams : SysFileAsync.AsyncJob_Param;
  taskName : string :='EventTask';
 Â
  open : SysFileAsync.tSysFileOpen;
  write: SysFileAsync.tSysFileWrite;
  read: SysFileAsync.tSysFileRead;
  close : SysFileAsync.tSysFileClose;
  ulOut : SysFileAsync.RTS_IEC_RESULT;
   Â
  fileName: string :='/dev/input/event1';
  event: array [0 .. 15 ] ofbyte;  end_varcasestepof
 Â
  STATE_CONFIG:
 Â
    jobparams.TaskParam.pszTaskname   :=adr(taskName);
    jobparams.TaskParam.ulTaskPriority   :=SysFileAsync.TASK_PRIORITIES.TASKPRIO_IDLE;
    jobparams.TaskParam.ulTaskSleepTime :=10;
    jobparams.TaskParam.phTaskHandle   :=SysFileAsync.RTS_INVALID_HANDLE;
    jobparams.TaskParam.ulEndTaskAfterJob :=0;
   Â
    file.AsyncSetJobParams(SysFileAsync.ASYNCJOB_TASK, 1000000, adr(jobparams));
   Â
    step :=STATE_OPEN;
   Â
  STATE_OPEN:
 Â
    open.szFile :=fileName;
    open.am :=SysFileAsync.ACCESS_MODE.AM_READ;
    open.pulOut :=adr(ulOut);
   Â
    file.SysFileOpenAsync(adr(open), adr(state), adr(result));
    step :=STATE_READ;
   Â
  STATE_READ:
 Â
    ifstate=SysFileAsync.ASYNCSTATE_READYorstate=SysFileAsync.ASYNCSTATE_ERRORorstate=SysFileAsync.ASYNCSTATE_TIMEOUTthen
     Â
      (*Thefileiscorrectlyopened*)
      read.pbyBuffer :=adr(event);
      read.ulSize  :=sizeof(event);
      read.pResult  :=adr(result);
      read.pulOut   :=adr(ulOut);
      State :=0;
     Â
      file.SysFileReadAsync(adr(read), adr(state), adr(result));
     Â
      step :=STATE_READWAIT;
    end_if
   Â
  STATE_READWAIT:
   Â
    ready :=state=SysFileAsync.ASYNCSTATE_READYorstate=SysFileAsync.ASYNCSTATE_ERRORorState=SysFileAsync.ASYNCSTATE_TIMEOUT;
    step :=  sel(ready, STATE_READWAIT, STATE_CATCHEVENT);
 Â
  STATE_CATCHEVENT:
 Â
    step :=STATE_READ;
   Â
  STATE_CLOSE:
 Â
    close.pulOut :=adr(ulOut);
    file.SysFileCloseAsync(adr(close), adr(state), adr(result));   Â
    step :=STATE_CLOSEWAIT;
   Â
  STATE_CLOSEWAIT:
 Â
    ready :=state=SysFileAsync.ASYNCSTATE_READYorstate=SysFileAsync.ASYNCSTATE_ERRORorState=SysFileAsync.ASYNCSTATE_TIMEOUT;
   Â
    (*Thefileiscorrectlyclosed*)
    step :=  sel(ready, STATE_CLOSEWAIT, STATE_IDLE);   Â
   Â
  STATE_IDLE:  ;
 Â
end_case
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
When I run the following program, I get in ResultAsync the error 2.
That means invalid parameter for this operation.
What can be the cause of this ?
// DECLARATION:
PROGRAM Test
VAR
udStateOpen: UDINT := 16#FFFFFFFF;
TestFB : SysFileAsyncFB;
SFO : tSysFileOpen;
TestString: STRING;
TestAccessMode: UDINT;
Result, ResultAsync, OUT, hJob: UDINT;
END_VAR
// IMPLEMENTATION:
SFO.szFile := TestString;
SFO.am := TestAccessMode;
SFO.pResult := ADR(Result);
SFO.pulOut := ADR(OUT);
hJob := TestFB.SysFileOpenAsync(ADR(SFO), ADR(udStateOpen), ADR(ResultAsync));
Originally created by: Viacheslav Mezentsev
Up.
The same question. Is there a complete example of using asynchronous (non blocking) read? I need to read input event ('/dev/input/event1').
CoDeSys 3.5.10.x.
Originally created by: Viacheslav Mezentsev
Worked example.