Добрый день. Есть компьютер (типо встроенная система) который выводит данные из нескольких таблиц на OLED дисплей по RS-232. Иногда компьютер перестает обновлять определенные значения считываемые из таблиц на дисплей. Но начинает снова обновлять их если подключить к нему смартфон в режиме модема или ноутбук (На компьютере есть веб-морда работающая с этой же базой и таблицами). Данные в базу постоянно пишутся другой программой, при выгрузке аномалий и столбняка значение нет, есть только на дисплей. За работу с дисплеем отвечает моя программа. Она опрашивает 4 таблицы и вывод данные, а так же текущее системное время. Данные в таблицах обновляются не чаще 1 раза в секунду. База требуется только для хранения и асинхронного доступа к данным.
Текущее значение из таблиц считываю так, аналогично запрашиваю данные и из других таблиц:
void read_base_sensor(char *name_table_sensor0){
char buf1[255],buf2[255];
conn = PQconnectdb(name_base);
IF(PQstatus(conn)!=CONNECTION_OK){
PQfinish(conn);
exit(0);
}
else{
sprintf(buf1,"SELECT id,time,press,temp FROM %s WHERE id=(SELECT max(id) FROM %s);", name_table_sensor0 ,name_table_sensor0);
res = PQexec(conn, buf1);
// выводим название столбцов
nFields = PQnfields(res);
int max_lines = PQntuples(res);
IF(max_lines > 0){
p = atof(PQgetvalue(res,max_lines-1,2));
t = atof(PQgetvalue(res,max_lines-1,3));
PQclear(res);
IF(t < 0){t1 = 1; t2 = 4;}
IF((t >= 0) && (t < 10)){t1 = 1; t2 = 5;}
IF((t > 9) && (t < 100)){t1 = 2; t2 = 4;}
IF(t > 99){t1 = 3; t2 = 3;}
IF(p < 0){p1 = 1; p2 = 4;}
IF((p >= 0) && (p < 10)){p1 = 1; p2 = 5;}
IF((p > 9) && (p < 100)){p1 = 2; p2 = 4;}
IF(p > 99){p1 = 3; p2 = 2;}
sprintf(a_disp,"A:%*.*f\xDF\x43 %*.*fMPa;",t1,t2,t,p1,p2,p);
}
}
PQfinish(conn);
}