UDP:服务器和客户端的示例
- 创建标准项目并选择 CODESYS Control Win V3 作为设备。
- 通过网络扫描连接目标系统。

从 SP17 开始:
- 打开库管理器并添加以下库: Net Base Services StringUtils

- 创建名为 gvlSettings 的全局变量列表,定义如下变量:
{attribute 'qualified_only'}
VAR_GLOBAL
// !!! Make sure that the firewall does not block these ports !!!
uiPort : UINT := 50000; // Port for the sender => receiver will set to uiPort + 1
sIPAddres : STRING(19) := '192.168.99.109';
END_VAR
- 在项目中添加一个 POU,名称为 UdpClient。

- 修改 UdpClient 如下:
声明
VAR
fbPeerClient : NBS.UDP_Peer;
ipAddress : NBS.IPv4Address;
xPeerActiv : BOOL := TRUE;
fbSend : NBS.UDP_Send;
xSend : BOOL;
sSendMsg : STRING(255) := 'Hello World';
END_VAR
实现
IF xPeerActiv AND NOT fbPeerClient.xBusy THEN
ipAddress.SetInitialValue(ipAddress := gvlSettings.sIPAddres);
fbPeerClient(xEnable := TRUE,
itfIPAddress := ipAddress,
uiPort := gvlSettings.uiPort + 1);
END_IF
fbPeerClient();
fbSend(xExecute := xSend AND fbPeerClient.xBusy,
itfPeer := fbPeerClient,
itfIPAddress := ipAddress,
uiPort := gvlSettings.uiPort,
pData := ADR(sSendMsg),
udiSize := DINT_TO_UDINT(Stu.StrLenA(ADR(sSendMsg))));
IF xSend THEN
xSend := FALSE;
END_IF
- 修改 PLC_PRG 如下:
声明
VAR
fbPeerServer : NBS.UDP_Peer;
ipAddress : NBS.IPv4Address;
fbReceive : NBS.UDP_Receive;
xPeerActiv : BOOL := TRUE;
xRead : BOOL;
abyReceive : ARRAY [0..255] OF BYTE;
sLastValidReceive : STRING(255);
udiIndex : UDINT;
END_VAR
实现
IF xPeerActiv AND NOT fbPeerServer.xBusy THEN
ipAddress.SetInitialValue(ipAddress := gvlSettings.sIPAddres);
fbPeerServer(xEnable := TRUE,
itfIPAddress := ipAddress,
uiPort := gvlSettings.uiPort);
END_IF
fbPeerServer();
fbReceive(xEnable := fbPeerServer.xBusy, itfPeer := fbPeerServer, pData := ADR(abyReceive), udiSize := SIZEOF(abyReceive));
IF fbReceive.udiCount > 0 THEN
IF fbReceive.udiCount < SIZEOF(sLastValidReceive) THEN
SysMem.SysMemCpy(pDest := ADR(sLastValidReceive), pSrc := ADR(abyReceive), udiCount := fbReceive.udiCount);
// Set End of String
sLastValidReceive[fbReceive.udiCount] := 0;
END_IF
END_IF
UdpClient();
- 启动项目并将 xSend 变量设置为 TRUE。

SP16 及以前:
- 打开库管理器并添加 Network 库。

- 在项目中添加一个全局变量列表,定义如下变量:
{attribute 'qualified_only'}
VAR_GLOBAL
sIpAddr : NBS.IP_ADDR := (sAddr := '192.168.99.74'); // Change to own IP-Address
// !!! Make sure that the firewall does not block these ports !!!
uiPort : UINT := 8181; // Port for the sender => receiver will set to uiPort + 1
END_VAR
- 在项目中添加一个 POU,名称为 UdpClient。

- 修改 UdpClient 如下:
声明
VAR
fbPeerClient : NBS.UDP_Peer;
fbReceive : NBS.UDP_Receive;
sRcvMsg : STRING;
END_VAR
实现
fbPeerClient(xEnable := TRUE, ipAddr:= GVL.stIpAddr, uiPort:= GVL.uiPort + 1);
fbReceive(xEnable := (fbPeerClient.hPeer <> CAA.gc_hINVALID),
hPeer := fbPeerClient.hPeer,
szSize := SIZEOF(sRcvMsg),
pData := ADR(sRcvMsg));
- 修改 PLC_PRG 如下:
声明
VAR
fbPeerServer : NBS.UDP_Peer;
fbSend : NBS.UDP_Send;
xSend : BOOL;
sSendMsg : STRING := 'Hello World';
END_VAR
实现
UdpClient();
fbPeerServer(xEnable := TRUE, ipAddr := GVL.stIpAddr, uiPort := GVL.uiPort);
IF fbPeerServer.hPeer <> CAA.gc_hINVALID THEN
fbSend(xExecute := xSend,
hPeer := fbPeerServer.hPeer,
ipAddr := GVL.stIpAddr,
uiPort := GVL.uiPort + 1,
szSize := SIZEOF(sSendMsg),
pData := ADR(sSendMsg));
END_IF
IF xSend THEN
xSend := FALSE;
END_IF
- 启动项目并将 xSend 变量设置为 TRUE。
