IB-IL-RS232-PRO

2010-03-30
2012-05-25
  • mvkchowdaryfru - 2010-03-30

    Dear All.

    I am using Phoenix contact inline RS232 module "IB-IL-RS232-PRO"

    Can any one of you give me some sample program how to implement in the codesys. I am using rexroth L10 PLC.

     
  • Andreaz - 2010-04-09

    Hello, i created a example for the 485 module a while ago, it's quite similar to the RS232.

    The code is not overly commentated or in that high quality but it should give you some insights on how to do it. You need the manual for the inline module here:

    http://www.boschrexroth.com/borexmvz2/Detailview.jsp;jsessionid=558C3B601CA6CE02FC093C95143E79EC?language=en-GB&publication=NET&ccat_id=79915&edition_id=1111692&document_id=1111691

    PROGRAM PLC_PRG
    VAR
       inStatus   AT %IB10: WORD;
       outControl AT %QB10: WORD;
       inData   AT %IB10: ARRAY[0..11] OF BYTE;
       outData  AT %QB10: ARRAY[0..11] OF BYTE;
       SendConfig: BOOL;
       ReadConfig: BOOL;
       SendData: BOOL;
       ReadData: BOOL;
       ReadStatus: BOOL;
       Manual: BOOL := FALSE;
       Timer: TON;
       State: INT;
       Pulse: BOOL;
       CommandOut: BYTE:= 2;
       CommandIn : BYTE:= 2;
       ParamOut  : BYTE:= 2;
       ParamIn   : BYTE:= 2;
       TextIn: STRING(11);
       i: INT;
       strPtr: POINTER TO BYTE;
       NumRead: BYTE;
       TransmitBufffer: BUFFER_STATUS;
       RecieveBuffer: BUFFER_STATUS;
       TransmitError: ERROR_STATUS;
       RecieveError: ERROR_STATUS;
    END_VAR
    
    (* Read the in command from the RS485 status word *)
    CommandIn.0:= inData[0].4;
    CommandIn.1:= inData[0].5;
    CommandIn.2:= inData[0].6;
    (* Read the in parameter from the RS485 status word *)
    ParamIn.0:= inData[0].0;
    ParamIn.1:= inData[0].1;
    ParamIn.2:= inData[0].2;
    ParamIn.3:= inData[0].3;
    (* Read the out command from the RS485 controll word *)
    CommandOut.0:= outData[0].4;
    CommandOut.1:= outData[0].5;
    CommandOut.2:= outData[0].6;
    (* Read the out command from the RS485 controll word *)
    ParamOut.0:= outData[0].0;
    ParamOut.1:= outData[0].1;
    ParamOut.2:= outData[0].2;
    ParamOut.3:= outData[0].3;
    (* Reset the lower byte of the control word *)
    outData[0]:= 0;
    IF SendConfig THEN
       outData[0]:= 16#40;
       (* Error pattern *)
       outData[1]:= 16#24;
       (* Output type 0: 485 1: 422 *)
       outData[2].4:= 0;
       (* Protocol: 16#00: Transparent  *)
       outData[2].3:= 0;
       outData[2].2:= 0;
       outData[2].1:= 0;
       outData[2].0:= 0;
       (* Baud rate: 38400 Datawidth:8,1, Even *)
       outData[3]:= 16#92;
       (* First delimeter *)
       outData[4]:= 16#0D; (* CR *)
       (* Second delimeter *)
       outData[5]:= 16#0A;   (* LF *)
       RETURN;
    END_IF;
    IF ReadConfig THEN
       outData[0]:= 16#3D;
       RETURN;
    END_IF;
    IF SendData AND (Manual OR Pulse) THEN
       outData[0]:= 16#1B;
       outData[1]:= 65;
       outData[2]:= 66;
       outData[3]:= 67;
       outData[4]:= 68;
       outData[5]:= 69;
       outData[6]:= 70;
       outData[7]:= 71;
       outData[8]:= 72;
       outData[9]:= 73;
       outData[10]:= 74;
       outData[11]:= 75;
    END_IF;
    IF ReadData AND (Manual OR Pulse)  THEN
       outData[0]:= 16#30;
       NumRead:= ParamIn;
       strPtr:= ADR(TextIn);
       FOR i:=1 TO NumRead DO
          strPtr^:= inData[i];
          strPtr := strPtr + 1;
       END_FOR;
    (*   Read:= FALSE;*)
    END_IF;
    IF ReadStatus THEN
       outData[0]:= 16#00;
       NumRead:= ParamIn;
       TransmitBufffer:= BOOL_TO_BYTE( inData[0].6);
       RecieveBuffer  := BOOL_TO_BYTE( inData[0].5);
       TransmitError  := BOOL_TO_BYTE( inData[0].2);
       RecieveError   := BOOL_TO_BYTE( inData[0].1);
    END_IF;
    
     

    Related

    Talk.ru: 1
    Talk.ru: 11
    Talk.ru: 2
    Talk.ru: 3
    Talk.ru: 5
    Talk.ru: 7
    Talk.ru: 8

  • mvkchowdaryfru - 2010-04-12

    Hi

    Thank You Mr. Andreaz

    Thanks a lot for your inoformation.

    I will try your logic and let you know...

    Regars

    Vijay

     
  • jimiDMBthing - 2012-05-25

    Hello Andreas,

    I've been tasked with implementing a RS232-Pro inline module with an L40 (MLC04) to talk with a serial device (HID card reader). I have implemented the code you previously posted and have a few questions.

    1) In your "FOR" loop the line strPtr^:=inData[i] is taking the data in the array (which is the input data buffer) and moving it into the data of strPtr which is actually "TextIn". The loop just puts the value of each array position to the next character of the "TextIn" string. Are those statements correct? If that is the case I should be looking at "TextIn" for the data from my serial device.

    2) I see a value of <030e593b> for strPtr in my code which i'm guessing is the memory address of "TextIn"? I currently see a value of 59 in inData[0] and a value of 36 in inData[1] to inData[11]. Then in "TextIn" I see twenty two $ (I'm not sure why twenty two but the dollar signs correspond to the decimal ascii code of 36). Looking at the datasheet for the RS-232 module the 59 for byte 0 seems correct since I'm seeing 11 bytes of input data and the command is read characters.

    Is my thinking correct here? I have not implemented a RS232 interface before and I haven't used pointers all that much. I would appreciate any insight you have. Thanks!

    Pat

     

    Related

    Talk.ru: 1
    Talk.ru: 11


Log in to post a comment.