beautypg.com

Schneider Optics Web Embedded Server User Manual

Page 83

background image

Ethernet Developers Guide

840 USE 115 00 Version 1.0

73

If the remote node is an IP address, or if it’s a name that has been resolved, then
CSample_View tcpip_connect_rq function is called to initiate a connect request to
the remote node. The listen port for the connect request is five hundred and two,
and is defined by the constant MBAP_LISTEN_PORT in modbus.h. If
tcpip_connect_rq succeeded in initiating a connect request, then tcpip_connect_rq
changes the transmit state to CONNECTING, otherwise it changes the transmit
state to IDLE.

The window sockets DLL generates a FD_CONNECT event which indicates if the
connect request succeeded or failed. CSample_View OnTcpIpConnect function
processes the FD_CONNECT event. If the connect request succeeded,
OnTcpIpConnect changes the transmit state to CONNECTED, otherwise it
changes the state to IDLE.

Recall that MFC architectural framework calls CSample_View OnPollInterval
member function to processes WM_POLL_INTERVAL message sent as result of
CMainFrame class processing a WM_TIMER message. OnPollInterval examines
the transmit state. If the transmit state is CONNECTED, and the user has selected
a transaction type, then OnPollInterval calls CSample_View TransmitUserRequest
function.

TransmitUserRequest encodes a request based on the transaction type, saves the
current time, and calls CSample_View TransmitMessage function. OnPollInterval
uses the saved time to determine when to transmit the next request.
TransmitMessage attempts to send a message to the remote side. To send the
message, TransmitMessage enters a loop. In the body of the loop transmit
message calls the window socket DLL send function. The following lists the
outcomes of the send function and the actions taken.

z

The message was sent successfully. TransmitMessage changes the transmit
state to TX_DONE and exits the loop.

z

Only part of the message was sent. TransmitMessage reenters the loop.

z

Send function returns an error indicating there is no buffer space within the
transport system. TransmitMessage changes the transmit state to BLOCKED
and exists the loop.

z

Send function returns some other error. TransmitMessage closes the
connection, changes the transmit state to IDLE, and exits the loop.

When buffer space within the transport system becomes available to transmit
messages, the window socket DLL generates a FD_WRITE event. CSample_View
OnTcpWrite function processes the FD_WRITE function by calling
TransmitMessage.