PDA

Просмотр полной версии : owen_io.dll + C#



binaryman
01.10.2014, 15:33
День добрый, уважаемые

Столкнулся с проблеммой, не могу прочитать данные типа float по протоколу Овен с прибора MB110.



string nm = "Read";
IntPtr name = Marshal.StringToCoTaskMemAnsi(nm);
int i = 0;

float value = 0;
int time = 0;

ConnectionError res = (ConnectionError)NativeMethods.ReadIEEE32(
deviceAddress + i, 0, name, ref value, ref time, -1);

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

}
Marshal.FreeCoTaskMem(name);


ошибка - NErr, код 104

обращение к dll


[DllImportAttribute("owen_io.dll", CharSet = CharSet.Unicode, EntryPoint = "ReadIEEE32", CallingConvention = CallingConvention.StdCall)]
public static extern int ReadIEEE32(int adr, int adr_type, System.IntPtr command, ref float value, ref int time, int index);


чтение через ReadUInt проходит успешно, работаю через АС4

binaryman
07.10.2014, 16:09
Ответ сам себе ( по доброй традиции форума )
для чтения параметра "rEAd" прибора МВ110-8а добавка к адресу и "индекс" должны быть равны (номер канала -1 ) .
для чтения канала 4 мы имеем:


ConnectionError res = (ConnectionError)NativeMethods.ReadIEEE32(
deviceAddress + 3, 0, name, ref value, ref time , 3);

binaryman
22.10.2014, 16:06
Может кому пригодится... работа с ТРМ212




public string trm_set_sp(int channel, int deviceAddress, float value)
{
string st = "";
string nm = "SP";
IntPtr name = Marshal.StringToCoTaskMemAnsi(nm);
int i = channel - 1;

ConnectionError res = (ConnectionError)NativeMethods.WriteFloat24(
deviceAddress + i, 0, name, value, -1);

if (res == ConnectionError.Ok)
{
st = "ok";
}
else
{
st = "Ошибка записи ТРМ: " + res.ToString();
}
Marshal.FreeCoTaskMem(name);
return st;
}





public string trm_get_pv(int channel, int deviceAddress, ref float value)
{
string st = "";
string nm = "PV";
IntPtr name = Marshal.StringToCoTaskMemAnsi(nm);
int i = channel - 1;

ConnectionError res = (ConnectionError)NativeMethods.ReadFloat24(
deviceAddress + i, 0, name, ref value, -1);

if (res == ConnectionError.Ok)
{
st = "ok";
}
else
{
st = "Ошибка чтения ТРМ: " + res.ToString();
}
Marshal.FreeCoTaskMem(name);
return st;
}





public string trm_set_vkl(int channel, int deviceAddress, int value)
{
string st = "";
string nm = "r-S";
IntPtr name = Marshal.StringToCoTaskMemAnsi(nm);
int i = channel - 1;

ConnectionError res = (ConnectionError)NativeMethods.WriteByte(
deviceAddress + i, 0, name, value, -1);

if (res == ConnectionError.Ok)
{
st = "ok";
}
else
{
st = "Ошибка записи ТРМ: " + res.ToString();
}
Marshal.FreeCoTaskMem(name);
return st;
}