Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 25

Тема: ТРМ-148 и OWEN_IO.dll

  1. #11

    По умолчанию

    эти параметры -- буфер с содержимым поля данных протокола овен, и размер этих даннных. на выходе из функции в них помещаются данные из принятого пакета и их размер.

    использовать эту функцию есть смысл только для строковых параметров.

  2. #12

    По умолчанию

    Понятно, да и опытным путем выяснили это. Речь-то о том, чтобы это было в хелпе поподробнее расписано и пример желательно иметь более развернутый

  3. #13

    По умолчанию

    Здравствуйте, у меня проблема с чтением и записью параметра SP.LU
    Owen_io.WriteStoredDotS(16 + (channel - 1), ADRTYPE_8BIT, "SP.LU", 35, -1);
    ошибка: недопустимо большой линейный индекс

    Подскажите с решением.
    Последний раз редактировалось ToniPizecato; 06.03.2010 в 14:33.

  4. #14

    По умолчанию

    можно подробней? на чем пишете, как функция объявлена, как давно брали библиотеку с сайта?

  5. #15

    По умолчанию

    пишу на C#. функция объявлена так
    [DllImport("owen_io.dll", EntryPoint = "WriteStoredDotS", CharSet = CharSet.Ansi)]
    public static extern int _WriteStoredDotS(
    [MarshalAs(UnmanagedType.U4)] uint adr,
    [MarshalAs(UnmanagedType.U4)] uint adr_type,
    [MarshalAs(UnmanagedType.LPStr)] string command,
    [MarshalAs(UnmanagedType.R4)] float value,
    [MarshalAs(UnmanagedType.I4)] int index);

    брал библиотеку свежую.

    вопрос решился поиском идентичной проблемы в интернете.

    error = Owen_io.WriteStoredDotS(16 + (channel - 1), ADRTYPE_8BIT, "SP.LU", (float)t, 0);

    выяснилось, что индекс должен быть равен нулю.
    в документации непонятно описано назначение индекса.
    – для конфигурационных параметров индексация идет через значение index;
    и все. а как он меняется, в зависимости от чего и тд не понятно.


    Скажите, если я работаю с двумя трм девайсами, мне надо иметь две копии библиотеки owen_io.dll ? или же я могу создать два класса и они не будут вмешиваться в память друг друга?

  6. #16

    По умолчанию

    для оперативных параметров номер канала прибавляется к адресу, для конфигурационных -- передается как индекс. соответственно выглядит это так: error = Owen_io.WriteStoredDotS(16, ADRTYPE_8BIT, "SP.LU", (float)t, (channel - 1));

    библиотека будет загружена один раз. два прибора можно опрашивать поочередно.

  7. #17

    По умолчанию

    но странно, я записывал таким образом уставку (как для оперативных). и проверял вручную. все записывало правильно.
    попробую ваш вариант. спасибо.

  8. #18

    По умолчанию

    Цитата Сообщение от Дмитрий Егоренков Посмотреть сообщение
    эти параметры -- буфер с содержимым поля данных протокола овен, и размер этих даннных. на выходе из функции в них помещаются данные из принятого пакета и их размер.

    использовать эту функцию есть смысл только для строковых параметров.
    Нельзя ли привести пример чтения параметра с помощью команд "dev" и "ver"

  9. #19

    По умолчанию

    Код:
    	char value[OWENIO_DATA_BUFFER_SIZE + 1];
    	DWORD param_sz = 0;
    
    	int err = OwenIO(16, ADRTYPE_8BIT, 1, "ver", value, &param_sz);
    
    	if (ERR_OK == err)
    	{
    		value[param_sz] = '\0';
    		strrev(value);
    	}

  10. #20

    По умолчанию

    Цитата Сообщение от Дмитрий Егоренков Посмотреть сообщение
    Код:
    	char value[OWENIO_DATA_BUFFER_SIZE + 1];
    	DWORD param_sz = 0;
    
    	int err = OwenIO(16, ADRTYPE_8BIT, 1, "ver", value, &param_sz);
    
    	if (ERR_OK == err)
    	{
    		value[param_sz] = '\0';
    		strrev(value);
    	}
    Почему value передается не по ссылке ??? это получается чтение размера параметра (param_sz) само значение (value)не читается

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Ваши права

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