PDA

Просмотр полной версии : Проблема с ТРМ151 запись уставки



Modal
25.01.2011, 15:41
Здраствуйте, столкнулся со следующей проблемой:
Необходимо записывать значения в уставку типа мощность
При записи часть значений прибором не воспринимается
Т.е 0,07 записывается а 0,08 уже нет.
http://s008.radikal.ru/i303/1101/f2/bea6476938bb.jpg

На графике значения 0 - запись прошла успешно, -104 ошибка
значения не записываются одни и теже.

код записи
s:=FormatFloat('0.00',TrackBar2.Position/100);
f:=StrToFloat(s) ;
i:=WriteStoredDotS(16,0,'sp.lu',f,1);

Папулов Сергей
25.01.2011, 16:47
Через какую программу меняете параметры?

Modal
25.01.2011, 17:09
Через Delphi 7

Modal
25.01.2011, 17:12
Да, кстати, через конфигуратор ТРМ151 все пишется замечательно, -104 это вроде неверный формат данных, но я хоть убей не понимаю почему 0,07 0,09 0,10 верные данные, а тоже 0,09 0,12 итд нет

Илья Глан
01.02.2011, 15:38
Если вы используете библиотеку owen_io, то -104 означает что прибор вернул ошибку nErr, после получения такого сообщения надо бы считать из прибора эту самую ошибку функцией LastErrToStr из набора библиотеки. Посмотрев ошибку можно попробовать понять в чем проблема.

Modal
08.02.2011, 19:04
var i,res:integer;

p:array [0..300] of char ;

ss,tt:double;
//****************
tt:=0.01;
for i:=1 to 100 do
begin
ss:=tt*i;
ss:=RoundTo(ss,-3);

res:=WriteStoredDots(16,0,'sp.lu',ss,1);
LastErrToStr(p);
Memo1.Lines.Add(floattostr(ss)+' '+p);
sleep(500);
end;

//**************************************************

0,01 Неверно задано положение точки (при фиксированной точке)
0,02 Неверно задано положение точки (при фиксированной точке)
0,03 Неверно задано положение точки (при фиксированной точке)
0,04 Неверно задано положение точки (при фиксированной точке)
0,06 Неверно задано положение точки (при фиксированной точке)
0,08 Неверно задано положение точки (при фиксированной точке)
0,12 Неверно задано положение точки (при фиксированной точке)
0,16 Неверно задано положение точки (при фиксированной точке)
0,24 Неверно задано положение точки (при фиксированной точке)
0,29 Неверно задано положение точки (при фиксированной точке)
0,32 Неверно задано положение точки (при фиксированной точке)
0,48 Неверно задано положение точки (при фиксированной точке)
0,53 Неверно задано положение точки (при фиксированной точке)
0,58 Неверно задано положение точки (при фиксированной точке)
0,59 Неверно задано положение точки (при фиксированной точке)
0,61 Неверно задано положение точки (при фиксированной точке)
0,64 Неверно задано положение точки (при фиксированной точке)
0,96 Неверно задано положение точки (при фиксированной точке)
0,97 Неверно задано положение точки (при фиксированной точке)

Все остальные значения - Операция завершилась успешно :confused:

Дмитрий Егоренков
11.02.2011, 14:00
возьмите последнюю версию библиотеки и воспользуйтесь функцией ReadStoredDotEx(). предпоследний параметр -- позиция запятой. попробуйте передать туда 3.

Modal
12.02.2011, 16:40
Я так понимаю, что нужна WriteStoredDotEx()
Не подскажете декларацию функции, в хелпе с библиотекой она отсутствует. Какой тип должен быть у позиции запятой?

Илья Глан
14.02.2011, 12:09
вроде так
WriteStoredDotEx(DWORD adr,DWORD adr_type,char *command, float value, int point, int index)

Modal
14.02.2011, 16:32
Данное описание не проходит
TWriteStoredDotEx=function(adr: DWORD ;
adr_type: DWORD ;command:PChar;value:single;point:integer;
index:integer): integer;stdcall;

Дмитрий Егоренков
14.02.2011, 16:36
point все-таки последний параметр. это я напутал. остальное как у WriteStoredDots.

Modal
14.02.2011, 17:27
не проходит на уровне
WriteStoredDotEx:=
GetProcAddress(hLibInst,'WriteStoredDotEx');
if(not Assigned(WriteStoredDotEx)) then
begin
func_avail:=false;
exit;
end;

Дмитрий Егоренков
14.02.2011, 17:32
_WriteStoredDotEx@24 должно сработать.

Modal
14.02.2011, 17:37
Вообще изначально ошибка я так понимаю связана с машинным представлением типа Single

0,100000001490116 Операция завершилась успешно
0,109999999403954 Операция завершилась успешно
0,119999997317791 Неверно задано положение точки (при фиксированной точке)
0,129999995231628 Операция завершилась успешно
0,140000000596046 Операция завершилась успешно
0,150000005960464 Операция завершилась успешно
0,159999996423721 Неверно задано положение точки (при фиксированной точке)
0,170000001788139 Операция завершилась успешно

Modal
14.02.2011, 17:39
_WriteStoredDotEx@24 должно сработать.

Да,сработало, сейчас проверю.

Modal
14.02.2011, 18:08
Спасибо, все заработало.

P.S.

point все-таки последний параметр. это я напутал. остальное как у WriteStoredDots.

Всетаки предпоследний