Данный CODESYS форум содержит архивную копию русской ветви только для чтения. Для создания сообщений пожалуйста используйте актуальную международную платформу CODESYS Forum. Close

Серийный номер Raspberry PI

zilog
2016-09-28
2016-10-05
  • zilog

    zilog - 2016-09-28

    Здравствуйте!
    Поддержана-ли в CDS для малинки библиотека SysTarget и в частности функция SysTargetGetSerialNumber ? Уж очень надо к железу привязаться.

     
  • CDSMaks

    CDSMaks - 2016-09-29

    Ну, компоненту SysTarget он загружает, но если есть Raspberry, то проще наверное написать программку и проверить работоспособность функций.

     
  • zilog

    zilog - 2016-09-29

    Следующий код возвращает ID процессора = 2 (ARM), а серийник возвращать не хочет - ret2 = 12, SN = ''.
    Или запрос неправильный или функция SysTargetGetSerialNumber не реализована.

    PROGRAM PLC_PRG
    VAR
    ProcID : UDINT;
    SN : STRING;
    pSN : POINTER TO STRING := ADR(SN);
    MaxLen: DINT;
    LenSN : INT;
    ret2: RTS_IEC_RESULT;
    ret1: RTS_IEC_RESULT;
    END_VAR

    ret1 := SysTargetGetProcessorId (ADR(ProcID));
    ret2 := SysTargetGetSerialNumber (ADR(pSN), ADR(MaxLen));
    LenSN := LEN (SN);

     
  • CDSMaks

    CDSMaks - 2016-09-29

    Ну тут и string надо определенной длины объявить и определить значение MaxLen равным этой длине.

     
  • zilog

    zilog - 2016-10-02

    Весь мозг сломал, не могу серийник малинки получить
    Может кто поделится рабочим примером. Если SysTargetGetSerialNumber реализована для RPI.

     
  • CDSMaks

    CDSMaks - 2016-10-03

    Да, посмотрел, SysTargetGetSerialNumber для Raspberry не реализована.
    Можно самому получить серийник прямо из системы. Только для этого необходимо настроить параметры codesys control.
    Для этого нужно в /etc/CODESYSControl.cfg изменить секцию

    [SysProcess]
    Command=AllowAll
    

    и перегрузить контроллер. (Можно, в принципе, добавить только те команды, которые необходимы).
    Ну и простенькую программу написать.

    PROGRAM PLC_PRG
    VAR
        outbuf:STRING(1000) := '';
        command:STRING:= 'cat /proc/cpuinfo | grep Serial | cut -d $':$' -f 2';
        first_start:BOOL:=TRUE;
        res: RTS_IEC_RESULT;
    END_VAR
    IF first_start THEN
        SysProcess._(pszCommand:=command, pszStdOut:= outbuf, udiStdOutLen:= SIZEOF(outbuf), pResult:= ADR(res));
        first_start:=FALSE;   
    END_IF
    
     
  • zilog

    zilog - 2016-10-03

    CDSMaks, как я понимаю, таким образом можно из CDS-программы любую Linux-команду выполнить и получить результат её выполнения обратно в CDS-программу ?!

     
  • CDSMaks

    CDSMaks - 2016-10-04

    Да, совершенно верно. По умолчанию, для Codesys control для Raspberry разрешена только команда shutdown. В приведенном мною примере разрешаются все команды.

     
  • zilog

    zilog - 2016-10-04

    CDSMaks, в очередной раз большое спасибо!
    Все работает, только в SysProcess. вместо . ExecuteCommand2

     
  • CDSMaks

    CDSMaks - 2016-10-05

    Ага, не заметил, что неправильно скопировал-вставил.