Ваши комментарии

Проблема решена, цикл for изменен, так как получались числа с огромным остатком и он не находил равные(не останавливался).


Вот конечный результат:
{

  double speed=ReadValue("123");
  double konc=ReadValue("345");
  double massa=ReadValue("567");
  double i;
  double j;
  integer tv1=0;
  integer tx1=0;
  double koncn=konc/100.0;
  double massav=massa*(1.0-koncn);
  double tv=massav/speed*1000.0;
  for (i=0; i<=tv; i++) {tv1++;};
  WriteValue("3 клапан",1);
  delay(tv1);
  WriteValue("3 клапан",0);

  double massax=massa*koncn;
  double tx=massax/speed*1000.0;
  for (j=0; j<=tx; j++) {tx1++;};
  WriteValue("1 клапан",1);
  delay(tx1);
  WriteValue("1 клапан",0);
}


Отладка не запускается, монитор работает как надо

Я же уже несколько раз написал, что я не могу использовать знак делить, потому что в таком случае скрипт не выполняется.

Методом искоючения, проблема оказалась в переменной "speed", это пример с умножением, работает как надо.

Если же, поставить знак деления, то окно "выполнения" даже не открывается, просто моргнет и исчезнет.

Вообщем как оказывается вот так ничего поделить нельзя

{
  double b;
  double a;
  double c=a/b;
}

Каким тогда образом можно решить мою задачу?
А именно, мне необходимо открывать клапан на определенное время, которое будет зависеть от требуемой массы жидкости.

Чтобы знать на сколько его открыть, мне необходимо массу заданной жидкости разделить на скорость ее истечения. 

Значение необходимого кол-ва жидкости будет в форме ХХХ.Х, а скорость истечения ХХ.Х




С этим то все понятно, но вот откуда берется этот минус?
Если из степени (-1), то каким тогда образом мне делить эти 2 переменные? Если я ставлю знак / скрипт не выполняется, даже в "Выполнить" не зайти см. выше.

Изменил, как сказали, еще умножение на 1000 сделал после того как рассчитываем время

{
  double speed=ReadValue("скорость истечения жидкости");
  double konc=ReadValue("концентрация раствора");
  double massa=ReadValue("необходимая масса раствора");
  double i;
  double j;
  integer tv1=0;
  integer tx1=0;
  double koncn=konc/100;
  double massav=massa*(1.0-koncn);
  double tv=massav*(speed^(-1));
  double tvv=tv*1000.0;
  for (i=0; i!=tvv; i++) {tv1=tv1+1;};
  WriteValue("3 клапан",1);
  delay(tv1, true);
  WriteValue("3 клапан",0);
  double massax=massa*koncn;
  double tx=massax*(speed^(-1));
  double txx=tx*1000.0;
  for (j=0; j!=txx; j++) {tx1=tx1+1;};
  WriteValue("3 клапан",1);
  delay(tx1, true);
  WriteValue("3 клапан",0);
}


Вот скрин "выполнения"


Одно изменение есть, tv равно не -3000009.. а -120, ноя не понимаю, как при делении 20 на 5, получается -120...

и почему i такое огромное..


Забавно, если вместо
double tv=massav/speedv;

набрать
double tv=massav*(speedv^(-1));

то функция "выполнить" работает. Только вот не могу понять, почему так много насчитывает, должно считать по 2000(в задержку) примерно, а он миллионы считает, команда "выполнить" останавливается и пишет, что "таймаут времени выполнения, проверьте логику скрипта" . Не знаю в чем проблема, пробовал вместо While на for делать

 for (i=0; i!=tv; i++) {tv1=tv1+1;};

но получаю такой же результат

Я не специалист в программировании, поэтому был бы признателен узнать способ контролирования задержки, или функции, которая позволяла бы открывать клапан на рассчитанное(с помощью переменных) время, так как к примеру в этом проекте, масса раствора, концентрация и скорость истечения это не постоянные значения.

К сожалению проекта не осталось, я переписал все на С++, там все работает.
Но столкнулся с новой проблемой. Мне необходимо контролировать задержку открытия клапана, написал вот это

  double speed=ReadValue("скорость истечения жидкости");
  double konc=ReadValue("концентрация раствора");
  double massa=ReadValue("необходимая масса раствора");
  double i;
  double j;
  integer tv1;
  integer tx1;
  double koncn=konc/100;
  double speedv=speed*1000.0;
  double massav=massa*(1-koncn);
  double tv=massav/speedv;
  while (i!=tv) {i++; tv1++;};
  WriteValue("1 клапан",1);
  delay(tv1);
  WriteValue("1 клапан",0);
  double massax=massa*koncn;
  double tx=massax/speedv;
  while (i!=tx) {i++; tx1++;};
  WriteValue("3 клапан",1);
  delay(tx1);
  WriteValue("3 клапан",0);

}


А проблема в том, что если стоит знак "/"(как сейчас) то ничего не выполняется(наверное), при нажатии на кнопку "выполнить" в окне скрипта, оно даже не появляется, иногда моргнет на миллисекунду и все. А вот если эти 2 знака поменять на "*", то все прекрасно работает, только мне делить нужно, а не умножать. 
Если есть другой способ контролировать задержку, буду рад взять на вооружение. 

Кода в запросах прописываются переменные(:PrID), то справа, если протестировать отчет, пропадают данные для дизайнера

Я понимаю, что в примере написано, что сначала в запросах указываются конкретные теги/время/ и т. д., а только потом, когда уже все сделано(как я понял), переменные, но в любом случае это не очень удобно, так как приходится вручную прописывать, или же перезапускать дизайнер.

Я имел ввиду вот это окно

Только при 64х драйвере он тут появляется, при 32 версии его тут нет(напомню система 64)

При 64 драйвере(создав по инструкции) репортер жалуется, после переустановки его целиком(то есть после того как поставился драйвер 32 из вашего инсталера) репортер работает, но в администрации драйверов настройки не открываются, ругается на различие архитектур


Забавно
Переустановив репортер он не ругается на отсутствие драйвера, но зайдя в администратор ODBC и кликнув по sldb он не открывается и говорит о несоответствии архитектур

Ваш репортер для 32 бит?

Скачав 32 версию, в окне выбора драйвера не было предложения на SQLite драйвер, скачал 64, все появилось, создал по инструкции, но все равно репортер не видит драйвер

Система стоит 64



Сервис поддержки клиентов работает на платформе UserEcho