Показано с 1 по 10 из 412

Тема: Codesys v3 + Raspberry Pi

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для uni
    Регистрация
    01.03.2016
    Адрес
    Екатеринбург
    Сообщений
    17

    По умолчанию

    Для тех потомков, кто будет пользовать этот самый codesys и столкнётся с глюком потери соединения при работе с event'ами, знайте, что CDRead() с принудительно установленным флагом O_NONBLOCK спасёт отца русской демократии. Такого флага конечно нет, но вы его можете объявить сами (O_NONBLOCK = 4000 - в десятичной (!) системе). Флаг нужно пользовать как в Си-программах.

    Ну и если вы хотите большего, к примеру, часами (/dev/rtc) поуправлять (ioctl) или чем другим, то запросы можно оформить так (я не нашёл эквиваленты макросов _IOR и _IOW):

    Код:
    var constant
    	RTC_RD_TIME: udint := 16#09;
    	RTC_SET_TIME: udint := 16#0a;
    	group: dword := 16#70;
    	IOC_OUT: dword := 16#80000000;
    	IOC_IN: dword := 16#40000000;	
    	IOCPARM_MASK: dword := 16#1fff;
    end_var
    
    method private ReadRequest : dword
    var_input
    	num: udint;
    	len: udint;
    end_var
    
    ReadRequest := IOC_OUT or ( shl( len and IOCPARM_MASK, 16 ) or ( shl( group, 8 ) or num ) );
    
    method private WriteRequest : dword
    var_input
    	num: udint;
    	len: udint;
    end_var
    
    WriteRequest := IOC_IN or ( shl( len and IOCPARM_MASK, 16 ) or ( shl( group, 8 ) or num ) );
    
    // ...
    
    hRtc := CDOpen( '/dev/rtc', CmpCharDevice.ACCESS_MODE.O_RDONLY, adr( Result ) );
    
    if hRtc <> RTS_INVALID_HANDLE then
    	
    	Request := dword_to_dint( ReadRequest( RTC_RD_TIME, sizeof( TRtcTime ) ) );
    
    	CDIoctl( hRtc, Request, dword_to_dint( adr( Read ) ), adr( Result ) );
    	
    	CDClose( hRtc, adr( Result ) );
    
    end_if
    
    // ...
    
    hRtc := CDOpen( '/dev/rtc', CmpCharDevice.ACCESS_MODE.O_WRONLY, adr( Result ) );
    
    if hRtc <> RTS_INVALID_HANDLE then
    	
    	Request := dword_to_dint( WriteRequest( RTC_SET_TIME, sizeof( TRtcTime ) ) );
    
    	CDIoctl( hRtc, Request, dword_to_dint( adr( rtctime ) ), adr( Result ) );
    	
    	CDClose( hRtc, adr( Result ) );
    
    end_if
    П.С. Оказывается CmpCharDevice.library после чистой установки CoDeSys почему-то недоступна. Видимо эта библиотека появляется при добавлении пакета с RaspberryPi, но на просторах сети её найти и скачать можно. Также можно добавить в проект библиотеки недостающий флаг и дополнительную функциональность по сборке запросов. Может быть где-то кто-то до меня это уже сделал, кто знает...
    Последний раз редактировалось uni; 25.03.2017 в 12:16. Причина: доп. информация

Похожие темы

  1. CoDeSys V3 и ноутбук
    от smk1635 в разделе СПК2xx (архив)
    Ответов: 14
    Последнее сообщение: 23.09.2020, 08:11
  2. codesys v3
    от nevii в разделе ПЛК3xx (архив)
    Ответов: 3
    Последнее сообщение: 18.09.2014, 11:23
  3. ПЛК110 и CoDeSys v3
    от DIG в разделе ПЛК1хх
    Ответов: 32
    Последнее сообщение: 09.11.2011, 17:02
  4. CodeSys V3
    от nnesterov в разделе ПЛК3xx (архив)
    Ответов: 13
    Последнее сообщение: 05.04.2010, 14:12
  5. CoDeSys v3
    от Alor в разделе Трёп (Курилка)
    Ответов: 1
    Последнее сообщение: 02.12.2008, 10:48

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •