从 AdapterInfo 读取 IP 和 MAC 地址


  • 创建标准项目并选择 CODESYS Control Win V3作为设备。
  • 通过网络扫描连接目标系统。

图1

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

图2

  • 修改 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 行设置断点。

图3

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

图4