Мне нужно читать и записывать уставки в ТРМ138. Скачал образец программы на C#, внес изменения на предмет импортирования функции ReadStoredDotS и чтения параметра C.SP.
Импортировал так:
Использую так (адрес 11-ти битный, с 8-мибитным ситуация та же):Код:[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);
При установленной в ТРМ138 уставке, равной 90 градусам, моя функция читает волшебное значение 499.6. Конфигуратор ТРМ138 читает и показывает 90.Код: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);
Мало того, при просмотре обмена на порту, что от моей программы и обратно, что от конфигуратора и обратно идут абсолютно одинаковые пакеты.
Это запрос:
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.
Откуда же берется такая разница после преобразования?
Заранее спасибо за помощь.


Ответить с цитированием
.
