Мне нужно читать и записывать уставки в ТРМ138. Скачал образец программы на C#, внес изменения на предмет импортирования функции ReadStoredDotS и чтения параметра C.SP.

Импортировал так:
Код:
[DllImportAttribute("owen_io.dll", EntryPoint = "ReadStoredDotS", CallingConvention = CallingConvention.StdCall)]
public static extern int ReadStoredDotS(int adr, int adr_type, System.IntPtr command, ref float value, int index);
Использую так (адрес 11-ти битный, с 8-мибитным ситуация та же):
Код:
IntPtr name = Marshal.StringToCoTaskMemAnsi("C.SP");

float value = 0;
deviceAddress = 0;

ConnectionError res = (ConnectionError)NativeMethods.ReadStoredDotS(deviceAddress, 1, name, ref value, -1);

if (res == ConnectionError.Ok)
{
    textBoxMemo.Text = value.ToString();
}
else
{
    MessageBox.Show("Ошибка чтения: " + res.ToString());
}

Marshal.FreeCoTaskMem(name);
При установленной в ТРМ138 уставке, равной 90 градусам, моя функция читает волшебное значение 499.6. Конфигуратор ТРМ138 читает и показывает 90.
Мало того, при просмотре обмена на порту, что от моей программы и обратно, что от конфигуратора и обратно идут абсолютно одинаковые пакеты.

Это запрос:
23 47 47 48 47 49 47 49 47 48 55 4E 4E 0D #GGHGIGIGHUNN.

Это ответ:
23 47 47 47 49 49 47 49 47 48 4A 4F 4B 54 4C 4E 49 0D #GGGIIGIGHJOKTLNI.

Откуда же берется такая разница после преобразования?
Заранее спасибо за помощь.