эти параметры -- буфер с содержимым поля данных протокола овен, и размер этих даннных. на выходе из функции в них помещаются данные из принятого пакета и их размер.
использовать эту функцию есть смысл только для строковых параметров.
эти параметры -- буфер с содержимым поля данных протокола овен, и размер этих даннных. на выходе из функции в них помещаются данные из принятого пакета и их размер.
использовать эту функцию есть смысл только для строковых параметров.
Понятно, да и опытным путем выяснили это. Речь-то о том, чтобы это было в хелпе поподробнее расписано и пример желательно иметь более развернутый
Здравствуйте, у меня проблема с чтением и записью параметра SP.LU
Owen_io.WriteStoredDotS(16 + (channel - 1), ADRTYPE_8BIT, "SP.LU", 35, -1);
ошибка: недопустимо большой линейный индекс
Подскажите с решением.
Последний раз редактировалось ToniPizecato; 06.03.2010 в 14:33.
можно подробней? на чем пишете, как функция объявлена, как давно брали библиотеку с сайта?
пишу на 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 ? или же я могу создать два класса и они не будут вмешиваться в память друг друга?
для оперативных параметров номер канала прибавляется к адресу, для конфигурационных -- передается как индекс. соответственно выглядит это так: error = Owen_io.WriteStoredDotS(16, ADRTYPE_8BIT, "SP.LU", (float)t, (channel - 1));
библиотека будет загружена один раз. два прибора можно опрашивать поочередно.
но странно, я записывал таким образом уставку (как для оперативных). и проверял вручную. все записывало правильно.
попробую ваш вариант. спасибо.
Код:char value[OWENIO_DATA_BUFFER_SIZE + 1]; DWORD param_sz = 0; int err = OwenIO(16, ADRTYPE_8BIT, 1, "ver", value, ¶m_sz); if (ERR_OK == err) { value[param_sz] = '\0'; strrev(value); }