Автор Тема: Не работает переменная. Помогите пожалуйста  (Прочитано 800 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Parz

  • Зашел в гости
  • *
  • Сообщений: 7
    • Просмотр профиля
Помогите со скриптом.
Скорее всего нужно потоками писать, но я от этого далек.
Логика скрипта такая, есть  два варианта цвета зеленый и красный.
Если скрипт видит зеленый через время он должен проверить не пропал ли цвет по этим координатам то есть ищем пустой квадрат, если черный квадрат сек задержка и скрипт сначала. Если скрипт видит красный тоже самое что зеленый ток задержка больше. Проблема в том что цвет может меняться , скрипт должен запомнить какой цвет был последний и сделать запись в блокнот, что было последним красное или зеленое.

Вот пример то что я написал,  но скрипт попросту не выполняет функции, хотя запись в блокнот делает.

proverka:
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN(1000,810, 1090,40, 922256)
      WAITMS(100)
      GOTO(proverkablackplus)
   END_IF
ELSE
   GETSCREEN
   IF_PIXEL_IN(1000,810, 1090,40, 4798640)
      WAITMS(100)
      GOTO(proverkablackminus)
   END_IF
ELSE
   WAITMS(100)
   GOTO(start)
END_CYC


proverkablackplus:
WAIT(5)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PICTURE_IN (1000,810, 1090,40, "black.bmp", -1, 100)
      WAITMS(100)
      $check = 1
   END_IF
ELSE
   WAITMS(100)
   GOTO(proverka)
END_CYC

INC($orderplus,1)
log($note)
WAIT(1)
goto(start)

proverkablackminus:
WAIT(5)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PICTURE_IN (1000,810, 1090,40, "black.bmp", -1, 100)
      WAITMS(100)
      $check = 1
   END_IF
ELSE
   WAITMS(100)
   GOTO(proverka)
END_CYC

INC($orderminus,1)
log($note)
WAIT(60)
goto(start)
« Последнее редактирование: Октябрь 31, 2021, 10:20:19 am от Parz »

Parz

  • Зашел в гости
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Не работает переменная. Помогите пожалуйста
« Ответ #1 : Октябрь 31, 2021, 10:19:24 am »
Короче почитал форум понял что GOTO в циклах не работает.
Написал вот такое чудо но оно просто стопорит скрипт и ему вобще всеравно что там происходит. я так понимаю у меня переменная $check попросту не работает.

$check = 0
$time = $_time_d + 1
WHILE($time > $_time_d,$check = 0)
   GETSCREEN (1000,810, 1090,40)
   IF_PIXEL_IN(1000,810, 1090,40, 922256)
      $check = 1
      $time = 0
      LOGWRITE("нашел зеленый цвет")
      WAIT(1)
      GETSCREEN (60,770, 141,881)
      IF_PICTURE_IN (60,770, 140,880, "white.bmp", -1, 100)
         LOGWRITE("нашел черный квадрат после зеленого")
         INC($orderplus,1)
         WAITMS(50)
         log($note)
         WAIT(1)
      ELSE
         GETSCREEN (1000,810, 1090,40)
         IF_PIXEL_IN(1000,810, 1090,40, 4798640)
            $check = 1
            $time = 0
            LOGWRITE("нашел красный цвет")
            WAIT(1)
            GETSCREEN (60,770, 141,881)
            IF_PICTURE_IN (60,770, 140,880, "white.bmp", -1, 100)
               LOGWRITE("нашел черный квадрат после красного")
               INC($orderminus,1)
               WAITMS(50)
               log($note)
               WAIT(120)
            ELSE
LOGWRITE("не нашел ни один цвет")
               WAIT(1)
            END_IF
         END_IF
      END_IF
   END_IF
END_CYC

Но в таком виде он работает

$time = $_time_d + 1
WHILE($time > $_time_d)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "confirm.bmp", -1, 100) //подтвердить
   $time = 0   
MOVE_SLOW($_return1, $_return2)
      LCLICK($_return1, $_return2)
      WAIT(1)
   END_IF
ELSE
   WAIT
END_CYC

Помогите пожалуйста, я не понимаю что можно сделать
« Последнее редактирование: Октябрь 31, 2021, 10:24:15 am от Parz »

Parz

  • Зашел в гости
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Не работает переменная. Помогите пожалуйста
« Ответ #2 : Октябрь 31, 2021, 02:16:54 pm »
Если кому нужно вот код рабочий

GR:
$check = 0
$checc = 0
$time = $_time_d + 1
WHILE($time > $_time_d)
   GETSCREEN (1000,810, 1090,840)
   IF_PIXEL_IN(1000,810, 1090,840, 4601507, 4864436, 5127362, 5915625, 4272784)// красный
      $check = 1
      $time = 0
      WAITMS(100)
      LOGWRITE("пиксель красный")
      WAIT(1)
   ELSE
      GETSCREEN (1000,810, 1090,840)
      IF_PIXEL_IN(1000,810, 1090,840, 6922256, 6130193, 5074451, 6988304, 7846415)// зеленый
         $checc = 1
         $time = 0
         WAITMS(100)
         LOGWRITE("пиксель зеленый")
         WAIT(1)
      END_IF
   END_IF
END_CYC

IF($check = 1)
   LOGWRITE("да пиксель красный")
   GOTO(red)
END_IF

IF($checc = 1)
   LOGWRITE("да пиксель зеленый")
   GOTO(green)
END_IF

red:
$check = 0
$time = $_time_t + 1
WHILE($time > $_time_t)
   getscreen (60,770, 141,881)
   IF_PICTURE_IN (60,770, 140,880, "white.bmp", -1, 100)
      $check = 1
      LOGWRITE ("нашел картинку")
   ELSE
      LOGWRITE ("не нашел картинку")
      WAIT(1)
   END_IF
end_cyc

IF($check = 1)
   INC($orderminus,1)
   WAITMS(50)
   log($note)
   LOGWRITE ("закрыл ордер на красный")
   WAIT(5)
   halt
END_IF

IF($time ! 0)
   GOTO(GR)
END_IF

green:
$check = 0
$time = $_time_t + 1
WHILE($time > $_time_t)
   getscreen (60,770, 141,881)
   IF_PICTURE_IN (60,770, 140,880, "white.bmp", -1, 100)
      $check = 1
      LOGWRITE ("нашел картинку")
   ELSE
      LOGWRITE ("не нашел картинку")
      WAIT(1)
   END_IF
end_cyc

IF($check = 1)
   INC($orderplus,1)
   WAITMS(50)
   log($note)
   LOGWRITE ("закрыл ордер на зеленый")
   WAIT(1)
   halt
END_IF

IF($time ! 0)
   GOTO(GR)
END_IF

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3831
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Не работает переменная. Помогите пожалуйста
« Ответ #3 : Ноябрь 02, 2021, 09:41:01 am »
Короче почитал форум понял что GOTO в циклах не работает.
Неправильно понял, всё работает, но конечно не так как написано.

Вот это что такое?
Цитировать
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN(1000,810, 1090,40, 922256)
      WAITMS(100)
      GOTO(proverkablackplus)
   END_IF
ELSE
   GETSCREEN
   IF_PIXEL_IN(1000,810, 1090,40, 4798640)
      WAITMS(100)
      GOTO(proverkablackminus)
   END_IF
ELSE
   WAITMS(100)
   GOTO(start)
END_CYC

Что это за чудеса? Откуда в цикле ELSE и почему их два? Было бы интересно понять ход мыслей как оно должно было работать.
Ну вот заходим в бесконечный цикл WHILE($check = 0)
Ищем цвет 922256 по НЕПРАВИЛЬНЫМ координатам
IF_PIXEL_IN(1000,810, 1090,40, 922256)
Потом ЕLSE (иначе) иначе от чего?


Там везде в коде чудеса. Вот откуда взято это? В какой справке так написано?
Код: Clickermann
  1. WHILE($time > $_time_d,$check = 0)
« Последнее редактирование: Ноябрь 02, 2021, 09:44:04 am от Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3831
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Не работает переменная. Помогите пожалуйста
« Ответ #4 : Ноябрь 02, 2021, 10:09:26 am »
И описание из первого поста имеет мало общего с кодом из последнего.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3831
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Не работает переменная. Помогите пожалуйста
« Ответ #5 : Ноябрь 02, 2021, 10:23:19 am »
Код: Clickermann
  1. DEFINE($orderminus, 0)
  2. DEFINE($orderplus, 0)
  3.  
  4. SUB(wait_white)
  5.    $white = 0
  6.    WHILE($white = 0)
  7.        GETSCREEN(60,770, 141,881)
  8.        IF_PICTURE_IN (60,770, 140,880, "white.bmp")
  9.            $white = 1
  10.        ELSE
  11.            WAITMS(100)
  12.        END_IF
  13.    end_cyc
  14. END_SUB
  15.  
  16. SUB(red_green, $color, $W)
  17.    $check = 1
  18.    LOGWRITE("пиксель ", $color)
  19.    wait_white()
  20.    IF($color = "красный")
  21.        INC($orderminus)
  22.    ELSE
  23.        INC($orderplus)
  24.    END_IF
  25.    log($note)  // хз что это такое
  26.    LOGWRITE("закрыл ордер на ", $color)
  27.    WAIT($W)
  28. END_SUB
  29.  
  30. $check = 0
  31. WHILE($check = 0)
  32.    GETSCREEN(1000,810, 1090,840)
  33.    IF_PIXEL_IN(1000,810, 1090,840, 4601507, 4864436, 5127362, 5915625, 4272784)
  34.        red_green("красный", 5)
  35.    ELSE
  36.        IF_PIXEL_IN(1000,810, 1090,840, 6922256, 6130193, 5074451, 6988304, 7846415)
  37.            red_green("зеленый", 1)
  38.        ELSE
  39.            WAITMS(80)
  40.        END_IF
  41.    END_IF
  42. END_CYC
  43.  
  44. HALT