从 AdapterInfo 读取 IP 和 MAC 地址
- 创建标准项目并选择 CODESYS Control Win V3作为设备。
- 通过网络扫描连接目标系统。

- 打开库管理器并添加以下库:
- SysSocket
- SM3_Shared
- SysTypes2 Interfaces

- 修改 PLC_PRG 如下:
声明
VAR
AdapterInfo : SOCK_ADAPTER_INFORMATION;
hAdapter : RTS_IEC_HANDLE;
udiStructSize : UDINT := SIZEOF(AdapterInfo);
rResult : RTS_IEC_RESULT;
sIpAddr : STRING(15);
sMacAddr : STRING(17);
xFirstAdapter : BOOL;
xReadInfo : BOOL;
END_VAR
实现
IF xReadInfo THEN
xReadInfo := FALSE;
xFirstAdapter := TRUE;
rResult := 0;
WHILE rResult = 0 DO
IF xFirstAdapter THEN
hAdapter := SysSockGetFirstAdapterInfo(ADR(AdapterInfo), ADR(udiStructSize), ADR(rResult));
ELSE
hAdapter := SysSockGetNextAdapterInfo(hAdapter, ADR(AdapterInfo), ADR(udiStructSize), ADR(rResult));
END_IF
IF rResult = 0 THEN
sIpAddr := Standard.CONCAT(BYTE_TO_STRING(AdapterInfo.IpAddr.S_un_b.s_b1),'.');
sIpAddr := Standard.CONCAT(sIpAddr,BYTE_TO_STRING(AdapterInfo.IpAddr.S_un_b.s_b2));
sIpAddr := Standard.CONCAT(sIpAddr,'.');
sIpAddr := Standard.CONCAT(sIpAddr,BYTE_TO_STRING(AdapterInfo.IpAddr.S_un_b.s_b3));
sIpAddr := Standard.CONCAT(sIpAddr,'.');
sIpAddr := Standard.CONCAT(sIpAddr,BYTE_TO_STRING(AdapterInfo.IpAddr.S_un_b.s_b4));
sMacAddr := Standard.CONCAT(SM0.Byte_To_HexString(AdapterInfo.abyMac[0]),'-');
sMacAddr := Standard.CONCAT(sMacAddr,SM0.Byte_To_HexString(AdapterInfo.abyMac[1]));
sMacAddr := Standard.CONCAT(sMacAddr,'-');
sMacAddr := Standard.CONCAT(sMacAddr,SM0.Byte_To_HexString(AdapterInfo.abyMac[2]));
sMacAddr := Standard.CONCAT(sMacAddr,'-');
sMacAddr := Standard.CONCAT(sMacAddr,SM0.Byte_To_HexString(AdapterInfo.abyMac[3]));
sMacAddr := Standard.CONCAT(sMacAddr,'-');
sMacAddr := Standard.CONCAT(sMacAddr,SM0.Byte_To_HexString(AdapterInfo.abyMac[4]));
sMacAddr := Standard.CONCAT(sMacAddr,'-');
sMacAddr := Standard.CONCAT(sMacAddr,SM0.Byte_To_HexString(AdapterInfo.abyMac[5]));
END_IF
xFirstAdapter := FALSE;
END_WHILE
END_IF
- 启动项目并在 PLC_PRG 的第 6 行设置断点。

- 设置 xReadInfo 变量后,读取每个适配器的信息:
