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.
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
- Open SIMATIC Manager > Options > NetPro with the S7 project open.
- 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.
- Assign a connection ID. The connection ID is the decimal number that appears as the
IDinput of BSEND/BRECV. It is also exposed asW#16#in the connection properties dialog. - Save and compile NetPro. The connection block is generated as a UDT attached to the CP.
- Perform PLC > Download to Station on the S7 CPU. The CP downloads the connection independently when its slot configuration is reloaded.
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:
- Confirm NetPro > Connection > Status shows the connection icon green (established).
- Confirm the connection has been downloaded to the station from NetPro (not just saved).
- 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).
- 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
- Open NetPro and confirm both the BSEND and BRECV connections show the green established icon.
- Open HW Config, verify the driver for the target port is set to ASCII, baud rate and frame match the partner.
- Download the entire station (CPU + CP) and ensure the CP STOP/RUN transitions are clean.
- Place a temporary breakpoint or flag monitoring
wSendStatusandwRecvStatusin the online watch table. - Trigger a 10-byte ASCII write of known content (e.g., "TEST12345\n"). Observe the TX LED flicker on the CP.
- Capture the partner side with a serial tap or port monitor. Confirm the byte stream matches what was sent.
- Trigger an echo test if the partner supports it; confirm BRECV reports
NDR=TRUEand the byte count equals the echoed length. - If TX never activates, immediately re-check ID format (hex vs decimal) and the connection download state.
12. Cross-Reference to Companion CP Manuals
- CP 441-2 Point-to-Point Communication, Installation and Parameter Assignment (ID 1137419)
- Data Transmission with the ASCII Driver, S7-300 / S7-400 (ID 1188835)
- PtP Parameter Assignment Tool download (ID 27013524)
- CP 441-2 configuration - TIA Documentation Cloud
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.