[?]: алгоритм SCL сдвига DB на слов вниз

Промышленные Логические Контроллеры SIMATIC S7-200/300/400
Post Reply
BRAIN
Posts: 27
Joined: Sat Nov 21, 2009 8:06 pm
Location: Yaroslavl, Russia

[?]: алгоритм SCL сдвига DB на слов вниз

Post by BRAIN » Fri Nov 05, 2010 11:54 pm

Добрый участники, опять требуется ваша помощь!
1) Итак потребовалась написать алгоритм сдвига DB на определённое количество слов вниз!
т. к. с косвенной адресацией дружу не очень хорошо, решил написать на SCL, проблема в том что алгоритм отлично работает на симуляторе а вот при погрузке в реальный контроллер (413) похоже уходит в зацикливание. ПРОШУ ПОМОЩИ!
Вот алгоритм:

Code: Select all

FUNCTION FC3:VOID 

VAR_INPUT
DB_NUMBER:WORD;//Номер DB
LENGHT:INT;//Длина DB
W_N:INT;//Кол-во слов в записи
END_VAR

VAR
I,J:INT;
END_VAR


    

BEGIN

I:=LENGHT;


FOR J:=1 TO W_N DO
REPEAT    
WORD_TO_BLOCK_DB(DB_NUMBER).DB[I]:=WORD_TO_BLOCK_DB(DB_NUMBER).DB[I-1];
I:=I-1;
UNTIL I=0
END_REPEAT;
I:=LENGHT;
END_FOR;

END_FUNCTION;



ПОМОГИТЕ РАЗОБРАТЬСЯ АЛГОРИТМАМ

komatic
Posts: 79
Joined: Thu Mar 15, 2007 12:59 pm
Location: Ukraine
Contact:

Re: Опять алгоритм!

Post by komatic » Sat Nov 06, 2010 5:07 am

похоже уходит в зацикливание или уходит? что в буфере диагностики?

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

BRAIN
Posts: 27
Joined: Sat Nov 21, 2009 8:06 pm
Location: Yaroslavl, Russia

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by BRAIN » Sat Nov 06, 2010 9:43 am

Да точно уходит! Time cycle except! типа больше 150ms.
А не может быть что контроллер старый и по просту медленный.! DB у меня большая 1600 byte, сдвигаю на 8 byte!

BRAIN
Posts: 27
Joined: Sat Nov 21, 2009 8:06 pm
Location: Yaroslavl, Russia

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by BRAIN » Sat Nov 06, 2010 11:21 am

Написал для теста на STL по замыслу должен сдвигать на 1byte но почему то вообще ничего не происходит! Тоесть в DB ничего не сдвигается!

Code: Select all

 L     #Nr_Byte                    
      T     #C_trasf

      L     #Nr_Byte                   
      DEC   1
      T     #C_trasf_I

      L     #DB_source
      T     #DB_s


loop: NOP   0

      L     #C_trasf                   
      SLD   3
      T     #Punt_source                
      L     #C_trasf_I
      SLD   3
      T     #Punt_dest                  

      AUF   DB [#DB_s]                  
      L     DBB [#Punt_dest]            
      T     DBB [#Punt_source]

      L     #C_trasf_I                 
      DEC   1                           
      T     #C_trasf_I
И не смог найти как добавить breakpoint? или при работе с симулятором это невозможно?

CHANt
Posts: 501
Joined: Tue Jun 27, 2006 5:52 am
Location: Russia

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by CHANt » Sat Nov 06, 2010 7:01 pm

команду loop в качестве метки использовать нельзя
правильней будет:
next: T #DB_s
... \\тело цикла
...
L #DB_s \\загружаем счетчик цикла
LOOP next \\уменьшение счетчика на 1 и переход на метку next если нет 0, если есть0 продолжается выполнение программы.
...

sania
Site Admin
Posts: 1372
Joined: Sat Aug 13, 2005 6:15 am
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by sania » Sat Nov 06, 2010 8:10 pm

вот тут ведь уже объяснялось как юзать люп
viewtopic.php?f=9&t=13179

BRAIN
Posts: 27
Joined: Sat Nov 21, 2009 8:06 pm
Location: Yaroslavl, Russia

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by BRAIN » Sat Nov 06, 2010 8:12 pm

Написал рабочий алгоритм но получается что он очень медленный! На реальном контроллере не пробовал, но на симуляторе при размере DB 1600 byte Сдвигаю на 8 байт не хватает 6 сек.

Code: Select all

   L     #Nr_Byte                    /
      T     #C_trasf

      L     #Nr_Byte                    
      L     1
      -I    
      T     #C_trasf_I

      L     0
      T     #C_byte_I

      L     #DB_source
      T     #DB_s

M002: NOP   0
M001: NOP   0
      L     #C_trasf                    
      SLD   3
      T     #Punt_source                

      L     #C_trasf_I
      SLD   3
      T     #Punt_dest                  
      AUF   DB [#DB_s]                  
      L     DBB [#Punt_dest]            
      T     DBB [#Punt_source]

      L     #C_trasf_I                  
      L     1                           
      -I    
      T     #C_trasf_I

      L     #C_trasf                    
      L     1                           
      -I    
      T     #C_trasf
      L     0
      ==I   
      SPBN  M001

      L     #C_byte_I
      L     1
      +I    
      T     #C_byte_I
      L     #C_byte
      ==I   
      SPBN  M002
Напомню что алгоритм в первом посте SCL на симуляторе работает отлично!.
sania wrote:вот тут ведь уже объяснялось как юзать люп
viewtopic.php?f=9&t=13179
я не использую луп вообще. Как я понимаю LOOP это удобная интерпретация того что я делаю переходами? Или я не прав?
То есть если я сделаю LOOP ом это ускорит процесс?

sania
Site Admin
Posts: 1372
Joined: Sat Aug 13, 2005 6:15 am
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by sania » Sat Nov 06, 2010 9:45 pm

ну не знаю... на моём симуляторе вот это занимает 11мсек

Code: Select all

FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1

VAR_INPUT
  DB_n : BLOCK_DB ;	
  N_Byte : INT ;	
  Nr_Shift : INT ;	
END_VAR
VAR_TEMP
  Nr_Loops : INT ;	
  Dest : DINT ;	
  Sour : DINT ;	
END_VAR
BEGIN
NETWORK
TITLE =

      L     #N_Byte; 
      L     #Nr_Shift; 
      -I    ; 
lop1: T     #Nr_Loops; 
      L     1; 
      -I    ; 
      SLW   3; 
      T     #Sour; 
      L     #Nr_Shift; 
      SLW   3; 
      +D    ; 
      T     #Dest; 

      OPN   #DB_n; 
      L     DBB [#Sour]; 
      T     DBB [#Dest]; 
      L     #Nr_Loops; 
      LOOP  lop1; 
END_FUNCTION
вызов

Code: Select all

           CALL FC     1 
           DB_n                     := DB     1
           N_Byte                   := 1600
           Nr_Shift                 := 8

Yury
Posts: 65
Joined: Thu Nov 01, 2007 9:41 pm
Location: Belarus

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by Yury » Sat Nov 06, 2010 10:59 pm

В момент когда #C_byte_I=1, 2, 3… #C_trasf=0, и последующий переход по метке M002 и декрементирование #C_trasf ведут к тому, что перебор байтов в блоке данных начинается с байта 65535 и вниз, отсюда – большое время цикла (и наверное SF в симуляторе).
Короче надо так

Code: Select all

       L     0
      T     #C_byte_I

      L     #DB_source
      T     #DB_s
M002: NOP   0
      L     #Nr_Byte
      T     #C_trasf

      L     #Nr_Byte
      L     1
      -I    
      T     #C_trasf_I
M001: NOP   0
      L     #C_trasf
      SLD   3
      T     #Punt_source

      L     #C_trasf_I
      SLD   3
      T     #Punt_dest
      OPN   DB [#DB_s]
      L     DBB [#Punt_dest]
      T     DBB [#Punt_source]

      L     #C_trasf_I
      L     1
      -I    
      T     #C_trasf_I

      L     #C_trasf
      L     1
      -I    
      T     #C_trasf
      L     0
      ==I   
      JCN   M001

      L     #C_byte_I
      L     1
      +I    
      T     #C_byte_I
      L     #C_byte
      ==I   
      JCN   M002

komatic
Posts: 79
Joined: Thu Mar 15, 2007 12:59 pm
Location: Ukraine
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by komatic » Sat Nov 06, 2010 11:19 pm

еще раз пересмотрел SCL
вы хочете сдвигать слова "[?]: алгоритм SCL сдвига DB на слов вниз"

а сдвигаете байты:
WORD_TO_BLOCK_DB(DB_NUMBER).DB:=WORD_TO_BLOCK_DB(DB_NUMBER).DB[I-1];

поэтому могут быть ошибки в расчете входных параметров

если сдвигаете слова - нужно .DW[I-1];
и соответственно внеший цикл нужно делать +2

может быть в этом проблема
Last edited by komatic on Sun Nov 07, 2010 12:13 am, edited 1 time in total.

sania
Site Admin
Posts: 1372
Joined: Sat Aug 13, 2005 6:15 am
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by sania » Sat Nov 06, 2010 11:24 pm

а никакой половой разницы при сдвиге слов или байтов,лишь бы не менять местами байты
P.S.BRAIN вот и посмотри:с люпом = 17 строк и 96 байт памяти,попробуй на SCL уложится в такой размер

komatic
Posts: 79
Joined: Thu Mar 15, 2007 12:59 pm
Location: Ukraine
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by komatic » Sat Nov 06, 2010 11:49 pm

sania wrote:а никакой половой разницы при сдвиге слов или байтов,лишь бы не менять местами байты
Как это никакой разницы?
LENGHT:INT;//Длина DB
W_N:INT;//Кол-во слов в записи

если W_N задавать в словах и сдвигать побайтно, соответсвенно сдвинется вполовину меньше...
sania wrote: P.S.вот и посмотри с люпом = 17 строк и 96 байт памяти,попробуй на SCL уложится в такой размер
Компактность STL под сомнение никогда не ставил :D
Но иногда читаемость значит не меньше...

ЗЫ: кстати по количеству строк в исходнике код функции в SCL ~9 строк :D размер правда 190 байт

sania
Site Admin
Posts: 1372
Joined: Sat Aug 13, 2005 6:15 am
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by sania » Sun Nov 07, 2010 12:09 am

komatic wrote:если W_N задавать в словах и сдвигать побайтно, соответсвенно сдвинется вполовину меньше...
этт верно,я подразумевал,что при сдвиге не важно чего там в самом блоке:слова,байты или биты
komatic wrote:размер правда 190 байт
хе-хе,вот поэтому и добавил о размере (suc)

komatic
Posts: 79
Joined: Thu Mar 15, 2007 12:59 pm
Location: Ukraine
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by komatic » Sun Nov 07, 2010 6:07 am

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

пишется - LOOP <jump label> (decrement ACCU 1-L and jump if ACCU 1-L <> 0)
ACCU 1-L это младшее СЛОВО акумулятора, а не байт, как сразу подумалось, значит ограничение - 65535

Вывод - надо спать по ночам... :D

sania
Site Admin
Posts: 1372
Joined: Sat Aug 13, 2005 6:15 am
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by sania » Sun Nov 07, 2010 8:13 am

> при записи числа в начало блока оно никуда не сдвинулось
поясни...
у меня двигается
может смотришь 8 слово...
указатель на байты,а не на слова,т.е. 8 байт - это DB1.DBW0 -> DB1.DBW8

счас загрузил в 6ES7315-2AF03-0AB0
115 мсек хоть проц и слабый,но всё равно дохрена...
а если пару раз вызвать,то и помрёт на времени цикла,наверно и в первом варианте с SCL было то же...
надо увеличивать время цикла

Yury
Posts: 65
Joined: Thu Nov 01, 2007 9:41 pm
Location: Belarus

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by Yury » Sun Nov 07, 2010 9:03 am

Есть STL, SCL вот тогда и вариант source для FBD/LAD (если не жалко места для буферной DB106 такой же как DB105) по времени в симуляторе 11 сек как и вариант sania

Code: Select all

FUNCTION FC 2 : VOID
TITLE =
VERSION : 0.1


VAR_TEMP
  temp : INT ;	
END_VAR
BEGIN
NETWORK
TITLE =

      A(    ; 
      CALL SFC   20 (
           SRCBLK                   := P#DB105.DBX0.0 BYTE 1600,
           RET_VAL                  := #temp,
           DSTBLK                   := P#DB106.DBX0.0 BYTE 1600);
      A     BR; 
      )     ; 
      JNB   _001; 
      CALL SFC   20 (
           SRCBLK                   := P#DB106.DBX0.0 BYTE 1600,
           RET_VAL                  := #temp,
           DSTBLK                   := P#DB105.DBX8.0 BYTE 1600);
_001: NOP   0; 
END_FUNCTION
P.S. В симуляторе работает и это:

Code: Select all

FUNCTION FC 3 : VOID
TITLE =
VERSION : 0.1


VAR_TEMP
  temp : INT ;	
END_VAR
BEGIN
NETWORK
TITLE =

      CALL SFC   20 (
           SRCBLK                   := P#DB105.DBX0.0 BYTE 1600,
           RET_VAL                  := #temp,
           DSTBLK                   := P#DB105.DBX8.0 BYTE 1600);
      NOP   0; 
END_FUNCTION

komatic
Posts: 79
Joined: Thu Mar 15, 2007 12:59 pm
Location: Ukraine
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by komatic » Sun Nov 07, 2010 10:02 am

sania wrote:> при записи числа в начало блока оно никуда не сдвинулось
поясни...
у меня двигается
Имелось ввиду, что если записываем например 1цу в DB1.DBB0, она начинает сдвигаться, но DB1.DBB0 не обнуляется.

sania
Site Admin
Posts: 1372
Joined: Sat Aug 13, 2005 6:15 am
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by sania » Sun Nov 07, 2010 10:32 am

Yury wrote: CALL SFC 20 (
SRCBLK := P#DB105.DBX0.0 BYTE 1600,
RET_VAL := #temp,
DSTBLK := P#DB105.DBX8.0 BYTE 1600);
NOP 0;
нда уж...
как говорится всё гениальное - просто (clap) и наглядно и коротко (gpost)
6 мсек на моём проце

P.S. не попрёт...
F1 wrote:The source and destination field must not overlap

BRAIN
Posts: 27
Joined: Sat Nov 21, 2009 8:06 pm
Location: Yaroslavl, Russia

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by BRAIN » Sun Nov 07, 2010 12:45 pm

sania wrote:P.S. не попрёт...
F1 wrote:The source and destination field must not overlap
Да функция интересная! Но похоже без буферной DB не работает! по край не мере код выше ничего с db105 не сделал! Но и контроллер в стоп не увёл :)

BRAIN
Posts: 27
Joined: Sat Nov 21, 2009 8:06 pm
Location: Yaroslavl, Russia

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by BRAIN » Sun Nov 07, 2010 7:55 pm

Чего то не работает не напрямую не с буферной DB! просто ничего не сдвигается!

sania
Site Admin
Posts: 1372
Joined: Sat Aug 13, 2005 6:15 am
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by sania » Sun Nov 07, 2010 8:26 pm

на первый взгляд - должно...,но только через доп.DB,напрямую точно не будет
байтов вот тока должно быть 1592 а не 1600

P.S.проверил на симуляторе: 1-й вариант с 2 DB - работает на ура

BRAIN
Posts: 27
Joined: Sat Nov 21, 2009 8:06 pm
Location: Yaroslavl, Russia

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by BRAIN » Sun Nov 07, 2010 9:01 pm

sania wrote:ну не знаю... на моём симуляторе вот это занимает 11мсек

Code: Select all

FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1

VAR_INPUT
  DB_n : BLOCK_DB ;	
  N_Byte : INT ;	
  Nr_Shift : INT ;	
END_VAR
VAR_TEMP
  Nr_Loops : INT ;	
  Dest : DINT ;	
  Sour : DINT ;	
END_VAR
BEGIN
NETWORK
TITLE =

      L     #N_Byte; 
      L     #Nr_Shift; 
      -I    ; 
lop1: T     #Nr_Loops; 
      L     1; 
      -I    ; 
      SLW   3; 
      T     #Sour; 
      L     #Nr_Shift; 
      SLW   3; 
      +D    ; 
      T     #Dest; 

      OPN   #DB_n; 
      L     DBB [#Sour]; 
      T     DBB [#Dest]; 
      L     #Nr_Loops; 
      LOOP  lop1; 
END_FUNCTION
вызов

Code: Select all

           CALL FC     1 
           DB_n                     := DB     1
           N_Byte                   := 1600
           Nr_Shift                 := 8
очень грамотный алгоритм!!! попробовал на симуляторе - работает! завтра залью в реальный контроллер посмотрим!

sania
Site Admin
Posts: 1372
Joined: Sat Aug 13, 2005 6:15 am
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by sania » Sun Nov 07, 2010 9:15 pm

опять же это много времени берёт(1600 байт - не шутка),если будет остановка,то на входе в блок вызови SFC43,
как-то так :
CALL SFC43
L #N_Byte
-------

BRAIN
Posts: 27
Joined: Sat Nov 21, 2009 8:06 pm
Location: Yaroslavl, Russia

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by BRAIN » Sun Nov 07, 2010 9:27 pm

sania wrote:опять же это много времени берёт(1600 байт - не шутка),если будет остановка,то на входе в блок вызови SFC43,
как-то так :
CALL SFC43
L #N_Byte
-------
Прочитал хелп по этой функции скудно как то. По подробней что она даёт?
P. S. Попробовал ещё раз вариант с SFC 20 заработало! Так что буду завтра тестить оба варианта!

Спасибо!!!!!!!

Yury
Posts: 65
Joined: Thu Nov 01, 2007 9:41 pm
Location: Belarus

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by Yury » Sun Nov 07, 2010 9:40 pm

TO BRAIN
Если с sfc20 не получается - посмотри не горит ли в ret_val код ошибки, возможно в CPU есть SFC83, тогда сюда

Если в вашей изначальной STL программе не сдвигать 8 раз блог данных по 1 байту, а сдвинуть 1 раз сразу 8 байт то не нужна вторая метка и по времени будет тоже самое что и у sania

Code: Select all

FUNCTION FC 70 : VOID
TITLE =
VERSION : 0.1

VAR_INPUT
  DB_source : INT ;	
  Nr_Byte : INT ;	
  C_byte : INT ;	
END_VAR
VAR_TEMP
  C_trasf : INT ;	
  C_trasf_I : INT ;	
  C_byte_I : INT ;	
  Punt_source : DINT ;	
  Punt_dest : DINT ;	
  DB_s : INT ;	
END_VAR
BEGIN
NETWORK
TITLE =
      L     #DB_source; 
      T     #DB_s; 

      L     #Nr_Byte; 
      T     #C_trasf; 

      L     #Nr_Byte; 
      L     8; 
      -I    ; 
      T     #C_trasf_I; 
M001: NOP   0; 
      L     #C_trasf; 
      SLD   3; 
      T     #Punt_source; 

      L     #C_trasf_I; 
      SLD   3; 
      T     #Punt_dest; 
      OPN   DB [#DB_s]; 
      L     DBB [#Punt_dest]; 
      T     DBB [#Punt_source]; 

      L     #C_trasf_I; 
      L     1; 
      -I    ; 
      T     #C_trasf_I; 

      L     #C_trasf; 
      L     1; 
      -I    ; 
      T     #C_trasf; 
      L     7; 
      ==I   ; 
      JCN   M001; 
END_FUNCTION

sania
Site Admin
Posts: 1372
Joined: Sat Aug 13, 2005 6:15 am
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by sania » Sun Nov 07, 2010 9:50 pm

не шибко стандартное использование цикла
это раза в 2-3 побыстрее будет,но одно требование : кол-во байтов общее и сдвига должны делится на 4

Code: Select all

      L     #N_Byte
      L     #Nr_Shift
      -I    
lop1: T     #Nr_Loops
      L     4                   // изменено
      -I    
      SLW   3
      T     #Sour
      L     #Nr_Shift
      SLW   3
      +I    
      T     #Dest

      OPN   #DB_n
      L     DBD [#Sour]         // изменено
      T     DBD [#Dest]         // изменено
      L     #Nr_Loops
      L     3                   // изменено
      -I                        // изменено    
      LOOP  lop1
SFC43 перезапускает проверку цикла,т.е. у тебя 150мсек на скан,вызвав SFC43,скажем в середине проги,получаешь ещё 150мсек и того ~300мсек,но не надо увлекаться этим,если проц зациклится,то не остановится,поэтому,вызывай тока внутри этого блока,он же по событию,а не в цикле будет работать,значит и на постоянку нефиг SFC43 вызывать

BRAIN
Posts: 27
Joined: Sat Nov 21, 2009 8:06 pm
Location: Yaroslavl, Russia

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by BRAIN » Mon Nov 08, 2010 12:07 pm

Сегодня реализовал по последнему алгоритму в реальном контроллере! Всё прекрасно работает - время цикла почти не увеличилось с 7 до 10 мс. (в 413). Теперь встала аналогичная задача но вот незадача сдвигать надо на 10 byte а DB будет 2000 Byte и контроллер 315.

sania
Site Admin
Posts: 1372
Joined: Sat Aug 13, 2005 6:15 am
Contact:

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by sania » Mon Nov 08, 2010 6:40 pm

а не было мысли,что если такие объёмы,то что-то неправильно организовано?
для 315(заказной номер?)это будет в районе 80-100 мсек
сдвиг словами,одно требование : кол-во байтов общее и сдвига должны быть кратны 2

Code: Select all

      L     #N_Byte
      L     #Nr_Shift
      -I    
lop1: T     #Nr_Loops
      L     2                   // изменено
      -I    
      SLW   3
      T     #Sour
      L     #Nr_Shift
      SLW   3
      +I    
      T     #Dest

      OPN   #DB_n
      L     DBW [#Sour]         // изменено
      T     DBW [#Dest]         // изменено
      L     #Nr_Loops
      L     1                   // изменено
      -I                        // изменено    
      LOOP  lop1

BRAIN
Posts: 27
Joined: Sat Nov 21, 2009 8:06 pm
Location: Yaroslavl, Russia

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by BRAIN » Tue Nov 09, 2010 7:50 am

Это существующие машины (разные). задача организовать лог определённого события по типу - дата- время - событие!
дата - 2 байта
время - 4 байтя (TOD)размеры сдвига и DB.
Сдвиг по сути для красоты так чтобы последняя запись всегда была вверху! но т. к. событие происходит 1-5 за сутки то почему бы и нет!.

Если будет тормозить на 315 придётся урезать DB в 2 раза!

indian
Posts: 122
Joined: Fri Aug 11, 2006 6:16 pm
Location: Russia, Komi

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by indian » Wed Nov 10, 2010 11:52 pm

не надо ничего сдвигать!
разрулите всё через индекс.

допустим текущий индекс равен 100, тогда самое старое значение будет иметь индекс 101.
для индекса я беру последнее слово в DB (или отдельный элемент в структуре), так удобнее когда и данные и текущий индекс в одном месте лежат (для FB), а последнее удобнее потому, что легче переход через 0 обработать(к отдельному элементу в структуре это замечание не относиться).

для S7 готовое решение задачи аналогичной вашей зашарить могу, для S5 уже выкладывал

BRAIN
Posts: 27
Joined: Sat Nov 21, 2009 8:06 pm
Location: Yaroslavl, Russia

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by BRAIN » Sat Nov 13, 2010 6:24 am

indian wrote:не надо ничего сдвигать!
разрулите всё через индекс.

допустим текущий индекс равен 100, тогда самое старое значение будет иметь индекс 101.
для индекса я беру последнее слово в DB (или отдельный элемент в структуре), так удобнее когда и данные и текущий индекс в одном месте лежат (для FB), а последнее удобнее потому, что легче переход через 0 обработать(к отдельному элементу в структуре это замечание не относиться).

для S7 готовое решение задачи аналогичной вашей зашарить могу, для S5 уже выкладывал
Я уже почти во все машины! Но с удовольствием посмотрю ваш вариант.

indian
Posts: 122
Joined: Fri Aug 11, 2006 6:16 pm
Location: Russia, Komi

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by indian » Sat Nov 13, 2010 10:07 pm

тоже почти во все машины подсаживал, отловил глюк - убрал или отключил.

тут выжимка из проекта (всё равно есть лишнее) и немножко не так сделано - не последний вариант, последний выжимать влом.

BRAIN
Posts: 27
Joined: Sat Nov 21, 2009 8:06 pm
Location: Yaroslavl, Russia

Re: [?]: алгоритм SCL сдвига DB на слов вниз

Post by BRAIN » Wed Nov 17, 2010 9:33 am

indian wrote:тоже почти во все машины подсаживал, отловил глюк - убрал или отключил.

тут выжимка из проекта (всё равно есть лишнее) и немножко не так сделано - не последний вариант, последний выжимать влом.
Не понял про выше написанное в чём глюк в вашем или моём алгоритме?

Post Reply