This is topic Ошибка Calc loop is big in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/001093.html

Posted by Константинов Сергей (Участник № / Member № 5626) on :
 
Здравствуйте!
Я создал проекта по вашему примеру из 5-го занятия "Учебный проект. Создания SQL-запроса для работы с внешней реляционной базой данных", я его изменил так, что бы значения записывались постоянно, записывает он данные с генератора синусоиды. Вопросы следующие:
1) При записи в Access интервал записи всегда разный, от полу минуты, до 7 минут и на оборот, почему так?
2) Лог проекта выдает ошибку Calc loop is big через минут 10 работы проекта, проект от этого не завершается, а продолжает нормально работать, может быть эта причина разного интервала записи и как это исправить?
 
Posted by Nico (Участник № / Member № 5342) on :
 
Для SQL-эапросов период пересчета idle. ТМ не предназначен для быстрой записи в базы данных. Необходимо контролировать окончание запроса и только после этого инициировать следующий.

[ 08.06.2012, 13:34: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
 
Posted by Константинов Сергей (Участник № / Member № 5626) on :
 
В какое поле узла RTM выстовлять период пересчета idle?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Нужно открыть канал вызова SQL-запроса на редактирование и в качестве единицы периода пересчета выставить "цикл IDLE".
 
Posted by Константинов Сергей (Участник № / Member № 5626) on :
 
Теперь попробовал перенести ваш пример создания базы данных в свой проект и в новосозданную базу данных нечего не вносится, не знаю что делать. Лог трассировщика прилогаю http://narod.ru/disk/52687763001.18f82740e8925c2af2a7b107ff9bf0a0/SQL.LOG.html
 
Posted by Константинов Сергей (Участник № / Member № 5626) on :
 
Так же если пройти в базу данных access и ввести любое значения вручную, то видно, что инентификатор изменился в соотведствии с количеством отправленных запросов. Получается что запрос проходит, но нечего не вводит в базу
 
Posted by Константинов Сергей (Участник № / Member № 5626) on :
 
Проект в МРВ работает, но сигнала от ком порта не получает так, как сейчас нет возможности подключить программу в месте применения. Запустил проект и вручную изменил все входные параметры с датчиков, значения в базу данных записались. Может быть так, что из-за отсутствия сигнала от ком порта значения в базу данных не записываются или же из-за настроек множителя и смещения в минусовое значение в каналах привязанных к базе данных?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В файле трассировщика ошибка несоответствия типа данных.

Вероятней всего проблема в различие разделителе дробной и целой части числа в базе данных и Trace Mode. В Trace Mode в качестве разделителя используется точка. Убедитесь, что в базе данных разделителем тоже является точка.
 
Posted by Константинов Сергей (Участник № / Member № 5626) on :
 
Спасибо, помогло.

И появился еще один вопрос, как ограничить количество записей в базу данных? Нужно что бы после записи допустим id=65536, значения в базу данных прекращались записываться, а просто обновляли старые записи, все как в СПАД архиве или есть другие варианты?
 
Posted by Nico (Участник № / Member № 5342) on :
 
после достижения нужного числа записей(INSERT)
работать через другой SQL шаблон (UPDATE)
 
Posted by Константинов Сергей (Участник № / Member № 5626) on :
 
И все таки не пойму как этого добиться. Запись в базу данных при достяжении определенного числа записей остановить удалось.
Запустить обновления вроде как тоже удалось, но не работает, шаблон такой:

UPDATE tab1
SET
mktime=#mktime#,
pila=#Пила_1_R#,
sinus=#Синусоида_3_R#,
treug=#Треугольник_2_R#

Для всего этого используется 2 канала вызова базы данных и опять стало вылазить сообщение Calc loop is big
 
Posted by Nico (Участник № / Member № 5342) on :
 
а какая запись в базе при этом обновися ?
 
Posted by Константинов Сергей (Участник № / Member № 5626) on :
 
да по плану старые по порядку дожны начать обновляться
 
Posted by Nico (Участник № / Member № 5342) on :
 
если mktime - это время текущей записи
где указание какую запись нужно обновить
 
Posted by Константинов Сергей (Участник № / Member № 5626) on :
 
Мне нужно что бы обновлялась каждая запись по порядку при подачи запроса на обновления, нет смысла обновлять одну строчку или одно значение
 
Posted by Nico (Участник № / Member № 5342) on :
 
может ошибаюсь а WHERE где ?
 
Posted by Константинов Сергей (Участник № / Member № 5626) on :
 
функция WHERE в том что бы сузить круг изменений производимых функцией UPDATE, т.е. допустим
моя функция:

UPDATE tab1
SET
mktime='#mktime#',
pila='#Пила_1_R#',
sinus='#Синусоида_3_R#',
treug='#Треугольник_2_R#'

обновит все что косается выше перечисленных полей, а функция:

UPDATE tab1
SET
mktime='#mktime#',
pila='#Пила_1_R#',
sinus='#Синусоида_3_R#',
treug='#Треугольник_2_R#'
WHERE
pila=5

обновит только те поля где будут совпадения колонки pila со значением 5.

Я же в свою очаредь приследую такую цель:
Нужно произвести запись в базу данных за неделю с интервалом между записью в 1 минуту итого 10080 записей за недель. После достижения 10080 строк нужно прекратить записывать новые, а начать обновлять старые и так в цикле.
Остановить запись мне удалось, обнавить старые данные тоже удалось, но обнавление проходит криво. Вместо обновления одной строки по порядку с каждым запросом, происходит одновременное обновления всех строк итого во всех 10080 записях одно и тоже время и значения.

Вопрос в следующем как правильно составить запрос на обновления или же какой другой вариант есть по реализации данной задачи
 
Posted by Nico (Участник № / Member № 5342) on :
 
сами же себе ответили
UPDATE tab1
SET
mktime='#mktime#',
pila='#Пила_1_R#',
sinus='#Синусоида_3_R#',
treug='#Треугольник_2_R#'

обновит все что косается выше перечисленных полей, во всех записях

1.
Проще всегда INSERT и иногда вызывать DELETE (старые по времени)
2 или иметь номер записи = F(time) и UPDATE по нему
3 Да и INSERT не нужен при старте создать недостоверные записи и только UPDATE
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2