IP - Adresse von Raspberry auslesen

Lambda
2014-08-21
2015-06-18
  • Lambda - 2014-08-21

    Hallo,

    hat jemand eine Ahnung, ob es eine Möglichkeit gibt Systeminformationen des Raspberry in CoDeSys zu integrieren?

    In meinem Fall würde ich gerne die aktuelle IP - Adresse sowie die Netzmaske und das Standardgateway auslesen und
    in der Visu sowie auf einem LCD Display anzeigen.

    Danke schon im Voraus für Eure Antworten.

     
  • eschwellinger

    eschwellinger - 2014-08-21

    Hi,

    das kann man mit der SysSocket.library

    die IP Adresse:

    (* Get own hostname. *)
    SysSockGetHostName(szHostName:=sHostName, diNameLen:=SIZEOF(sHostName));
    (* Get own IP address by its name. *)
    SysSockGetHostByName(szHostName:=sHostName,pHost:= ADR(Host));
    pIPAddress := Host.pAddrList[0];// select the adapter of addrList[]
    in_addr.ulAddr := pIPAddress^;
    SysSockInetNtoa(pInAddr := ADR(in_addr),szIPADDR := sIPAddress, diIPAddrSize:=SIZEOF(sIPAddress));
    

    Ob Gateway usw auch geht musst du mal schauen... ist mal ein Anfang.
    Grüße
    Edwin

    GetIPbyHostRaspi.project [142.52 KiB]

     
  • Lambda - 2014-08-22

    Hallo Edwin,

    danke für Deine schnelle Hilfe, hat gut funktioniert.

    Die Subnet Mask kann man dann noch mit der Funktion:

    SysSockGetSubnetMask(szIPAddress:=sIPAdress , szSubnetMask:=sMask , diMaxSugnetMask:=SIZEOF(sMask) );

    ermitteln. Die Funktion liefert durch eingabe der ermittelten IP - Adresse die Netmask zurück.

    Für die Ermittlung des Standard Gateway habe ich leider noch nichts gefunden, ist mir aber ersteinmal auch nicht
    so wichtig, mal sehen vielleicht find ich da irgendwann mal was.

    Gruß Werner

     
  • eschwellinger

    eschwellinger - 2015-06-18

    das auslesen der Gateway (alsi die Adresse die der Pi her nimmt in seiner netwerkconfig) funktioniert seit SP6 mit SysSockGetNextAdapterInfo aus der SysSocket.library
    Snippet:

    udiStructSize := SIZEOF(AdapterInfo);
    hAdapter := SysSockGetFirstAdapterInfo(ADR(AdapterInfo), ADR(udiStructSize), ADR(rResult));
    IF AdapterInfo.DefaultGateway.ulAddr <> 0 AND AdapterInfo.DefaultGateway.ulAddr <> 16#FFFFFFFFF THEN
       myStandardGateway:=AdapterInfo.DefaultGateway;
       
    ELSE
       WHILE rResult = 0 DO
          hAdapter := SysSockGetNextAdapterInfo(hAdapter, ADR(AdapterInfo), ADR(udiStructSize), ADR(rResult));
          IF AdapterInfo.DefaultGateway.ulAddr <> 0 AND AdapterInfo.DefaultGateway.ulAddr <> 16#FFFFFFFFF THEN
             myStandardGateway:=AdapterInfo.DefaultGateway;
          RETURN;
          END_IF
       END_WHILE
    END_IF
    

    IMG: Gateway.jpg

     

Log in to post a comment.