1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

"Сумма бит" LWORD (S7 1500, CPU1515-F2 PN)

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)
Ответить

Автор темы
i2s
здесь недавно
здесь недавно
Сообщения: 9
Зарегистрирован: 16 сен 2019, 13:31
Имя: _i2s_
Поблагодарили: 2 раза

"Сумма бит" LWORD (S7 1500, CPU1515-F2 PN)

Сообщение i2s »

Уважаемые коллеги, Добрый день!

Подскажите пожалуйста алгоритм суммы бит формата LWORD (64 бит).

Ранее удалось найти код в STL для DWORD, для S7 300, CPU315-2 PN/DP:

L #Input
// x = (x & 0x55555555) + (x & 0xAAAAAAAA) >> 1;
PUSH
// копия ACCU1 в ACCU2
AD DW#16#55555555
// ACCU1 and 0x55555555
TAK
// ACCU1 <-> ACCU2
AD DW#16#AAAAAAAA
// ACCU1 and 0xAAAAAAAA
SRD 1
// ACCU1 >> 1
+D
// ACCU1 <- ACCU1 + ACCU2
// x = (x & 0x33333333) + (x & 0xCCCCCCCC) >> 2;
PUSH
AD DW#16#33333333
TAK
AD DW#16#CCCCCCCC
SRD 2
+D
// x = (x & 0x0F0F0F0F) + (x & 0xF0F0F0F0) >> 4;
PUSH
AD DW#16#0F0F0F0F
TAK
AD DW#16#F0F0F0F0
SRD 4
+D
// x = (x & 0x00FF00FF) + (x & 0xFF00FF00) >> 8;
PUSH
AD DW#16#00FF00FF
TAK
AD DW#16#FF00FF00
SRD 8
+D
// x = (x & 0x0000FFFF) + (x & 0xFFFF0000) >> 16;
PUSH
AD DW#16#0000FFFF
TAK
AD DW#16#FFFF0000
SRD 16
+D
T #Output
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2330
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 1990 раз
Поблагодарили: 176 раз

"Сумма бит" LWORD (S7 1500, CPU1515-F2 PN)

Сообщение keysansa »

По моему, 128 строк простого "ИЛИ" проще?
Тем долее что для DWORD тоже много получилось...
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.

NewOrdered
осмотрелся
осмотрелся
Сообщения: 166
Зарегистрирован: 24 янв 2018, 11:18
Имя: Антон
Страна: Россия
город/регион: Калининград
Благодарил (а): 26 раз
Поблагодарили: 27 раз

"Сумма бит" LWORD (S7 1500, CPU1515-F2 PN)

Сообщение NewOrdered »

Можно же проще (word):

Код: Выделить всё

 
      L     #in_Word
      T     #inout_StoreWord

     L     0
      T     #out_NumberofBitsHigh

      L     16
NEXT: T     #inout_LoopCounter

      L     #inout_StoreWord
      T     LW     0

      A     L      1.0
      JCN   zero

      L     1
      L     #out_NumberofBitsHigh
      +I    
      T     #out_NumberofBitsHigh


zero: L     #inout_StoreWord
      SRW  1
      T     #inout_StoreWord

      L     #inout_LoopCounter
      LOOP  NEXT
Для DWORD надо заменить:

16 на 32
LW0 на LD0
L1.0 на L2.0
SRW на SRD

Ну и инкремент счетчика можно оптимизировать
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2330
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 1990 раз
Поблагодарили: 176 раз

"Сумма бит" LWORD (S7 1500, CPU1515-F2 PN)

Сообщение keysansa »

NewOrdered писал(а): 22 окт 2019, 13:03 Можно же проще (word):
Цикл не всегда проще, но всегда дольше.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.

NewOrdered
осмотрелся
осмотрелся
Сообщения: 166
Зарегистрирован: 24 янв 2018, 11:18
Имя: Антон
Страна: Россия
город/регион: Калининград
Благодарил (а): 26 раз
Поблагодарили: 27 раз

"Сумма бит" LWORD (S7 1500, CPU1515-F2 PN)

Сообщение NewOrdered »

keysansa писал(а): 22 окт 2019, 13:22
NewOrdered писал(а): 22 окт 2019, 13:03 Можно же проще (word):
Цикл не всегда проще, но всегда дольше.
Для данного случая код уж точно проще. Да и для понимания легче. В цикле тут копеечные инструкции, итераций мало, поэтому не критично.
Но в общем случае вы правы.

Поправка:
L1.0 на L3.0

Автор темы
i2s
здесь недавно
здесь недавно
Сообщения: 9
Зарегистрирован: 16 сен 2019, 13:31
Имя: _i2s_
Поблагодарили: 2 раза

"Сумма бит" LWORD (S7 1500, CPU1515-F2 PN)

Сообщение i2s »

Всем спасибо и с наступающим новым годом!
Забыл отписать. Все намного проще оказалось)
Фото в покреплении
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить

Вернуться в «Simatic TIA Portal»