Configuring ASCII Communications on Siemens CP 441-2 Modules

David Krause13 min read
Serial CommunicationSiemensTechnical Reference
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Configuring ASCII Communications on Siemens CP 441-2 Modules

The CP 441-2 is the high-performance point-to-point (PtP) communications processor for the S7-300 and S7-400 families. Two pluggable interface submodules can be fitted, giving either two independent physical ports (RS232, RS422, RS485, TTY, or 20 mA current loop depending on module), or one port plus one redundant/independent backup. When configured for the ASCII driver, the CP presents the same programming interface as the ISO-on-TCP variants (CP 441-2 - S7-300, S7-400 reference), but with the underlying transport replaced by raw character I/O. This article consolidates the configuration steps, parameter assignments, SCL block wiring, status-code interpretation, and field troubleshooting required to bring up a stable ASCII link.

Compatibility scope. The procedures below target CP 441-2 modules running the ASCII driver under STEP 7 V5.x. The same module also supports 3964(R), RK512, and Modbus master/slave drivers; the block choices and parameters differ for each, so do not transpose settings between drivers.

1. Hardware Identification and Slot Rules

The CP 441-2 occupies one slot in the S7-300 or S7-400 rack and requires one or two interface submodules plugged onto the front. Each submodule is independently addressable and each runs its own protocol stack. Without any submodule, no PtP port exists.

Component Typical Designation Function
CP 441-2 module 6ES7 441-2AA0x-0AE0 PtP processor, two submodule slots, occupies one S7 slot
IF submodule - RS232C IF 963-RS232 Asynchronous serial, full-duplex, hardware handshake
IF submodule - RS422/RS485 IF 963-RS422/RS485 Differential, half or full-duplex, X27/X27-1
PtP Parameter Assignment Tool Tool, installable under STEP 7 V5.x Hardware configuration, frame, baud, parity, driver selection

Download the PtP Parameter Assignment Tool from the Siemens support portal entry referenced in the CP 441-2 PtP configuration tool page (ID 27013524). The installer drops example projects into the STEP 7 example tree; these examples are the authoritative templates for ASCII link configuration and are the same examples referenced in the field report.

2. Driver Selection in HW Config

Right-click the CP 441-2 in HW Config, choose Properties > Interface > [submodule], then select the ASCII driver. The page exposes the following key parameters:

Parameter Typical Value for ASCII Notes
Baud rate 9600 / 19200 / 38400 / 115200 Match the partner device exactly; values are standard EIA/TIA rates
Data bits 8 7 for legacy ASCII devices
Parity None Even/odd selectable for parity-stripped protocols
Stop bits 1 2 selectable for slow slaves
Flow control None / XON-XOFF / RTS-CTS / XON/XOFF + RTS-CTS Disable hardware handshake unless the partner uses it; mismatched RTS/CTS will silence TX
End-of-message detection Fixed time, character count, or delimiter Determines when the CP forwards a received block to the CPU
Receive buffer size 1024 bytes default Larger buffers reduce CPU interrupt load

The driver choice is written to the CP at download. After changing driver parameters you must perform a full download of the station (PLC plus CP) and cycle power on the CP if the change is not picked up automatically.

3. NetPro Connection Configuration

Even for raw ASCII, NetPro must contain a configured PtP connection. The CP does not accept BSEND/BRECV calls until that connection is established and downloaded to the station. Without it, the connection remains in "not configured" state and BSEND returns status W#16#0001 indefinitely.

3.1 Creating the Connection

  1. Open SIMATIC Manager > Options > NetPro with the S7 project open.
  2. Drag from the CP 441-2 symbol to the same CP (the partner is the CP itself for ASCII). Alternatively, right-click the CP and select Insert New Connection; the partner object remains the same CP, type = PtP connection.
  3. Assign a connection ID. The connection ID is the decimal number that appears as the ID input of BSEND/BRECV. It is also exposed as W#16# in the connection properties dialog.
  4. Save and compile NetPro. The connection block is generated as a UDT attached to the CP.
  5. Perform PLC > Download to Station on the S7 CPU. The CP downloads the connection independently when its slot configuration is reloaded.
Connection ID format. NetPro displays the ID in hex (W#16#1001) but expects you to enter 1001 hex into BSEND's ID input - i.e., the value 4097 decimal. Entering the decimal value 1001 by mistake routes the job to a non-existent connection, the BSEND state machine never advances, and the TX LED never activates. This is the most common cause of the "connection open in NetPro but no TX activity" symptom documented in the source thread.

3.2 Multiple Cards and Multiple Ports

Each physical port (submodule) is independent. Each port receives its own connection entry in NetPro. The CP distinguishes ports internally; the user selects a port by selecting the corresponding connection ID. There is no separate "port number" parameter exposed in BSEND/BRECV. If two CP 441-2 cards occupy two slots, each slot has its own logical address range, and you must create the connection against the correct card - confirmed by checking the LADDR displayed in NetPro matches the LADDR of the slot you intended.

4. Block Selection: BSEND/BRECV vs PtP-Specific FB

The CP 441-2 differs from CP 340 and CP 341 in block selection:

CP Standard Blocks ASCII Driver Support
CP 340 P_SEND (FC) / P_RECV (FC) Yes
CP 341 P_SND_RK (FB) / P_RCV_RK (FB) Yes
CP 441-2 SFB12 BSEND / SFB13 BRECV from "Standard Library > Communication Blocks" Permitted for ASCII per CP 441-2 manual, despite the usual ISO-on-TCP pairing

The CP 441-2 does not expose a dedicated P_SEND/P_RECV or P_SND_RK/P_RCV_RK variant for ASCII. The CP 441-2 manual - CP 441-2 manual entry (ID 1137419) - confirms that BSEND and BRECV are the standard blocks used against the ASCII driver. The application program treats BSEND/BRECV as the PtP send/receive interface; the CP translates the buffer payload to/from the ASCII frame.

4.1 Asymmetric Use

For ISO-on-TCP and TCP, BSEND requires a BRECV partner. For ASCII, BSEND can be used standalone: the CP discards the framing rules and simply transmits the buffer. Likewise, BRECV can be invoked without a peer BSEND if the partner device is sending freely. This asymmetric use is explicitly permitted for the ASCII driver and is the basis of "generic" PtP communication.

5. BSEND and BRECV Inputs (SCL)

5.1 BSEND (SFB 12) Signature

// Send data to the CP 441-2 ASCII port
// ID and R_ID are hex values matching the NetPro connection entry

bsend_instance(REQ := bSendRequest,           // edge-triggered send
               R   := bSendReset,             // abort job
               ID  := W#16#1001,              // connection ID from NetPro
               R_ID:= W#16#0,                 // must be zero for ASCII
               SD_1:= pSendData,              // ANY pointer to send buffer
               LEN := iSendLen,               // byte length, 1..1024 typically
               DONE=> bSendDone,
               ERROR=> bSendError,
               STATUS=> wSendStatus);

5.2 BRECV (SFB 13) Signature

// Receive data from the CP 441-2 ASCII port

brecv_instance(EN_R := bRecvEnable,           // receive enable, level
               ID   := W#16#1002,             // receive connection ID
               R_ID := W#16#0,                // zero for ASCII
               RD_1 := pRecvData,             // ANY pointer to receive buffer
               LEN  := iRecvMaxLen,           // buffer size
               NDR  => bRecvNewData,
               ERROR=> bRecvError,
               STATUS=> wRecvStatus,
               LEN  => iRecvLen);             // actual bytes received

6. ID and R_ID Parameter Semantics

Parameter Type ASCII Driver Rule Why
ID WORD Hex value matching the NetPro connection ID; usually W#16#1001, W#16#1002, ... Identifies the connection on the local CP
R_ID DWORD W#16#0 (or any constant - not interpreted by ASCII driver) Used by ISO-on-TCP to identify a job between CPU pairs; ASCII does not use it

Example projects shipped with the PtP Parameter Assignment Tool typically assign ID = W#16#1000 for BSEND and ID = W#16#1001 for BRECV. The choice of 0x1000 vs 0x1001 is arbitrary - the only rule is that the value matches the connection ID assigned in NetPro. The decimal-vs-hex mismatch (1001 decimal vs 0x1001 hex) is the single most frequent configuration error reported on this module.

7. Common Status Codes and Root Cause Mapping

BSEND and BRECV expose STATUS (WORD) and ERROR (BOOL). The combination encodes the failure mode:

STATUS Source Meaning Action
W#16#0000 BSEND No job active, instance free Normal idle state
W#16#0001 BSEND First call; job accepted, pending handshake with CP Call BSEND again with REQ=FALSE to poll completion; if STATUS remains 1 indefinitely, the connection is not properly downloaded or the ID is wrong
W#16#0002 BSEND Subsequent call; job in progress Continue polling
W#16#0003 BSEND Last call; job completing Continue polling until DONE or ERROR
W#16#0004 BSEND Job completed successfully DONE=TRUE for one cycle
W#16#0007 BSEND Wait for partner / CP Connection not yet established
W#16#81A1 BSEND/BRECV Connection not configured or wrong ID Verify ID matches NetPro; verify NetPro downloaded to station
W#16#81B1 BSEND/BRECV Connection ID exists but slot not CP 441-2 Wrong CP selected when creating connection
W#16#81C1 BSEND/BRECV ID not in NetPro or instance DB wrong Re-save NetPro and re-download
W#16#8231 BSEND/BRECV LEN < 1 or LEN > max buffer Bound the ANY pointer length to the valid range
W#16#8452 BSEND CP reports the frame could not be sent (line fault) Check cable, partner device, handshake

When STATUS is W#16#0001 after the very first BSEND call and never advances, the diagnostic ladder is:

  1. Confirm NetPro > Connection > Status shows the connection icon green (established).
  2. Confirm the connection has been downloaded to the station from NetPro (not just saved).
  3. Confirm the ID entered into BSEND matches the connection ID in hex (NetPro shows it as W#16#1001; entering decimal 1001 by mistake routes to a non-existent connection).
  4. Confirm the CP's slot address (LADDR) is not conflicting with another module.

8. Cable Wiring Reference

For RS232 to a laptop or PC running a terminal emulator, the source thread documents the pinout used during debugging. The standard Siemens-issued crossover is:

CP 441-2 IF963-RS232 (DB9 Male) Signal Laptop (DB9 Female)
2 TXD (output from CP) 2 RXD (input to PC)
3 RXD (input to CP) 3 TXD (output from PC)
5 GND 5 GND
7 RTS (output from CP) 7 RTS (output from PC)
8 CTS (input to CP) 8 CTS (input to PC)

RS232 cable constraints for reliable ASCII communication:

  • Length limit 15 m (50 ft) for RS232 per EIA/TIA-574.
  • Shielded cable required for industrial environments; ground shield at CP end only.
  • If RTS/CTS handshake is enabled in HW Config, both sides must drive RTS high when ready to receive; mismatched handshake will stall the transmitter indefinitely (TX LED never lights).
  • If no handshake is selected, leave RTS/CTS lines disconnected at the partner device or wired back-to-back; do not tie them to a fixed level.

For RS422/RS485, terminate the bus at both ends with 120 ohm resistors and enable the failsafe biasing resistors built into the IF963-RS422/RS485 module through the HW Config > Properties > Interface tab. RS485 half-duplex applications must also configure the transmitter enable mode (auto via TXD echo or controlled via RTS).

9. LED Diagnostics on the CP 441-2

LED Indication
SF (red, group fault) Configuration error, driver mismatch, or diagnostic interrupt pending
RUN (green) CP firmware running
STOP (yellow) CP in stop state
TX (yellow, per port) CP is driving data on the port
RX (yellow, per port) CP has detected activity on the port
No TX, no RX, no SF Driver loaded but no job; check BSEND ID and connection state
TX flicker, no RX CP transmitting but partner not responding - check partner side, cable, handshake
RX flicker, no TX Partner transmitting but no application job to send - check application flow

The source thread reports all other LEDs off except the green RUN with no TX activity - the canonical fingerprint of an ID mismatch between BSEND and NetPro.

10. SCL Template for a Generic ASCII Transceiver

FUNCTION_BLOCK FB_AsciiPtP
VAR
    bSendReq   : BOOL;
    bSendDone  : BOOL;
    bSendError : BOOL;
    wSendStatus: WORD;
    iSendLen   : INT;
    pSendData  : POINTER TO BYTE;

    bRecvEn    : BOOL := TRUE;
    bRecvNDR   : BOOL;
    bRecvError : BOOL;
    wRecvStatus: WORD;
    iRecvLen   : INT;
    pRecvData  : POINTER TO BYTE;
    iRecvMax   : INT := 1024;

    bInit      : BOOL := TRUE;
END_VAR

BEGIN
    // One-shot init of receive enable
    IF bInit THEN
        bRecvEn := TRUE;
        bInit := FALSE;
    END_IF;

    // Receive side: always enabled, BRECV completes when CP delivers bytes
    brecv_instance(EN_R := bRecvEn,
                   ID   := W#16#1002,
                   R_ID := W#16#0,
                   RD_1 := pRecvData,
                   LEN  := iRecvMax,
                   NDR  => bRecvNDR,
                   ERROR=> bRecvError,
                   STATUS=> wRecvStatus,
                   LEN  => iRecvLen);

    // Send side: trigger on rising edge of bSendReq, then poll
    bsend_instance(REQ := bSendReq,
                   ID  := W#16#1001,
                   R_ID:= W#16#0,
                   SD_1:= pSendData,
                   LEN := iSendLen,
                   DONE=> bSendDone,
                   ERROR=> bSendError,
                   STATUS=> wSendStatus);

    // Reset the trigger
    bSendReq := FALSE;

    // Handle BSEND DONE / ERROR transitions in calling logic
END_FUNCTION_BLOCK

The block uses the same connection ID twice (0x1001 / 0x1002) for clarity; in production create one NetPro connection per direction and reference the IDs in their respective BSEND/BRECV calls.

11. Commissioning Verification Procedure

  1. Open NetPro and confirm both the BSEND and BRECV connections show the green established icon.
  2. Open HW Config, verify the driver for the target port is set to ASCII, baud rate and frame match the partner.
  3. Download the entire station (CPU + CP) and ensure the CP STOP/RUN transitions are clean.
  4. Place a temporary breakpoint or flag monitoring wSendStatus and wRecvStatus in the online watch table.
  5. Trigger a 10-byte ASCII write of known content (e.g., "TEST12345\n"). Observe the TX LED flicker on the CP.
  6. Capture the partner side with a serial tap or port monitor. Confirm the byte stream matches what was sent.
  7. Trigger an echo test if the partner supports it; confirm BRECV reports NDR=TRUE and the byte count equals the echoed length.
  8. If TX never activates, immediately re-check ID format (hex vs decimal) and the connection download state.

12. Cross-Reference to Companion CP Manuals

All status code interpretations above should be cross-checked against these references when commissioning new firmware revisions. The CP 441-2 module underwent several firmware updates; some STATUS values were reclassified across revisions. Always note the firmware version reported in the module's diagnostic buffer before escalating an issue.

Which FB/FC blocks does the CP 441-2 use for ASCII communications?

The CP 441-2 uses SFB12 BSEND and SFB13 BRECV from the Standard Library > Communication Blocks. Unlike CP 340 (P_SEND/P_RECV) and CP 341 (P_SND_RK/P_RCV_RK), the CP 441-2 has no dedicated PtP block; BSEND/BRECV are reused across ISO-on-TCP and ASCII drivers. For ASCII the blocks are used asymmetrically - BSEND can transmit without a matching BRECV partner because the ASCII driver does not enforce framing.

How do I select which physical port (RS232 or RS422) BSEND uses?

You do not select the port inside BSEND. Each physical port (each IF submodule) is bound to a separate NetPro connection with its own connection ID. Place BSEND calls against the connection ID that corresponds to the port you want to drive. If both submodule slots are populated, two separate connection entries appear in NetPro with distinct IDs.

Why does BSEND return STATUS = 1 forever and never transmit?

STATUS W#16#0001 on the first call means the job is queued. If it stays at 1 indefinitely and the TX LED never lights, the most common cause is a mismatch between the ID passed to BSEND and the connection ID assigned in NetPro. NetPro shows the ID as W#16#1001 (hex = 4097 decimal). Entering 1001 decimal by mistake routes the job to a non-existent connection; the CP silently discards it. Re-enter the ID as the hex literal W#16#1001.

What value do I use for the R_ID parameter in BSEND for ASCII?

Use W#16#0. R_ID is meaningful only for ISO-on-TCP/TCP connections where it identifies a job between two CPU pairs. The ASCII driver ignores R_ID, and the CP 441-2 example projects consistently assign W#16#0 for ASCII work.

How do I check whether the connection has actually been downloaded to the CP?

In NetPro, right-click the connection and confirm the green icon is shown - that indicates the connection is configured AND downloaded. If the connection has only been saved in the project but never downloaded, the icon remains grey/red. Trigger a full station download from NetPro (PLC > Download to Station) so that both CPU and CP are updated in one step.

Back to blog