Бета тестирование версии 4.4
Сюда постим все, что касается тестирования версии 4.4:
ошибки, недоработки, пожелания.
ошибки, недоработки, пожелания.
…
error = StreamReadFromDatabase(dtBegin, dtEnd, "Сигнальный", Stream);
…
Измениил…
error = StreamReadFromDatabase(dtBegin, dtEnd, "Сигнальный", Stream);
…
результат остался неизменным
// функция записи в базу данных заданных значений с шагом 1 секунда в пределах одних суток
// возвращает 1 при удачной записи, возвращает 0 - при неудаче (см.пример ниже)
// i = SaveBasePer("Сигнальный", "10.06.2015 01:00:00", "10.06.2015 03:01:00", 77);
// if(i==1) {ShowMessageBox("Заголовок","Запись в базу завершена успешно!",1);} else {ShowMessageBox("Заголовок","Ошибка записи!",1);}
int SaveBasePer(string sName, string sBegin, string sEnd, int iPer)
{
string stroka = sBegin, sHour, sMin, sSec;
int iSec = StrToInt(Copy(sBegin,18,2));
int iMin = StrToInt(Copy(sBegin,15,2));
int iHour = StrToInt(Copy(sBegin,12,2));
if(sName=="") { ShowMessage("Ошибка! Не задано имя канала!"); return 0; }
if(GetQuality(sName)!=192) { ShowMessage("Ошибка! Проверьте правильность написания имени канала!"); return 0; }
ShowMessage("Все готово для начала процесса зааписи! \n Нажмите ОК и ожидайте сообщения об окончании процесса записи!");
do
{
SaveChannelToDB(sName, StringToDateTime(stroka, "dd.mm.yyyy hh:nn:ss") , iPer);
iSec = iSec + 1;
if(iSec==60) {iSec=0; iMin=iMin+1;}
if(iMin==60) {iMin=0; iHour=iHour+1;}
sHour = IntToStr(iHour); if(iHour<10) sHour = "0" + sHour;
sMin = IntToStr(iMin); if(iMin<10) sMin = "0" + sMin;
sSec = IntToStr(iSec); if(iSec<10) sSec = "0" + sSec;
stroka = Copy(sBegin,1,11) + sHour + ":" + sMin + ":" + sSec;
}
while (stroka < sEnd);
return 1;
}
// Функция чтения базы данных и запись статистических данных в текстовый файл
// возвращает 1 при удачном завершении, соответственно 0 - при неудаче
// i = Statistika("Сигнальный", "10.06.2015 01:00:00", "10.06.2015 03:00:00");
// if(i==1) {ShowMessageBox("—","Всё готово!",1);} else {ShowMessageBox("—","Произошла ошибка!",1);}
int Statistika(string sName, string sBegin, string sEnd)
{
string stroka;
int count=0, i, iValue, iVozvrat=1;
TMemoryStream Stream;
word error;
TDateTime dtBegin = StrToDateTime(sBegin);
TDateTime dtEnd = StrToDateTime(sEnd);
TDateTime dtDate;
ShowMessageBox("—", "Приступаем!", 1);
Stream = TMemoryStream.Create;
error = StreamReadFromDatabase(dtBegin, dtEnd, sName, Stream);
if(error == 0)
{
stream.SaveToFile("d:\\stream.bin");
count = GetCountRecordToStream(Stream);
for(i=0;i<count;i++)
{
GetValueFromStream(Stream, dtDate, iValue);
stroka = " " + DateTimeToStr(dtDate) + " : " + IntToStr(iValue);
SaveToTxtFile("d:\\history.txt", stroka);
}
}
else { ShowMessageBox("—", "Ошибка считывания базы!", 1); iVozvrat=0; }
Stream.free;
return iVozvrat;
}
[/spoiler]После обновления до версии 4.4 ProModbus (unlimit) на станции разработчика после положенной работы Монитора 1 час, регулярно стала выпадать ошибка "Исключительная ситуация EInvalidPointer в модуле Monitor.exe по адресу 000041В1", что делать?
После обновления до версии 4.4 ProModbus (unlimit) на станции разработчика после положенной работы Монитора 1 час, регулярно стала выпадать ошибка "Исключительная ситуация EInvalidPointer в модуле Monitor.exe по адресу 000041В1", что делать?
Анатолий, попробуйте в качестве теста напрямую указать имя канала в функции - [error = StreamReadFromDatabase(dtBegin, dtEnd, имя канала, Stream)]
Проверим одну догадку.