NAMESPACE v0_0 FUNCTION_BLOCK Custom_Serial VAR def : string; handle : io.commhandle; data : array[0..31] of byte; dataRecv : array[0..31] of byte; received : int; change_runIN : bool := 0; index : int; END_VAR VAR_OUTPUT status : int := -1; readData : array[0..31] of byte; state : int := 0; END_VAR VAR_INPUT runIN : bool := 0; END_VAR IF runIN THEN case state of 0: (*def := 'tcp:192.168.1.4:7';*) (*def := 'udp:192.168.1.4:7';*) def := 'serial:1:9600,8,N,1'; handle := io.openport(def); if handle >= 0 then state := 1; end_if; 1: status := io.getportstatus(handle); if status = 0 then (* OperationStatus_Ok *) (* connection established *) data[0] := 5; data[1] := 10; data[2] := 6; data[3] := 11; if io.writeport(handle, adr data[0], 10) then state := 2; end_if; end_if; 2: if io.getportstatus(handle) = 0 then (* OperationStatus_Ok *) (* all data sent *) state := 3; end_if; 3: received := io.readport(handle, adr dataRecv[0], 20); if received > 0 then (* some data received *) io.closeport(handle); state := 4; readData := dataRecv; else status := io.getportstatus(handle); end_if; else state := 4; end_case; change_runIN := runIN; ELSE IF change_runIN <> runIN THEN state := 0; index := 0; FOR index := 0 TO 31 DO readData[index] := 0; END_FOR; change_runIN := runIN; END_IF; END_IF; END_FUNCTION_BLOCK END_NAMESPACE