Страница 1016 из 1044 ПерваяПервая ... 165169169661006101410151016101710181026 ... ПоследняяПоследняя
Показано с 10,151 по 10,160 из 10436

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #10151

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Не знаю насколько быстро и просто, но что-то типа такого наверное:

    Код:
    B2 AT %IB1.3: BYTE;
    B1 AT %IB1.2 : BYTE;
    B0 AT %IB1.1 : BYTE;
    
    wRESULT : WORD;
    
    wRESULT := DWORD_TO_WORD(SHR(SHL(SHL(BYTE_TO_DWORD(B2),8) OR BYTE_TO_DWORD(B1),8) OR BYTE_TO_DWORD(B0),4));
    Спасибо. Буду пробовать. У меня до этого момента было 14 условных операторов IF для определения, какой вход активный. И в зависимости от ситуации, я в программе в специальную переменную записывал номер активного входа (датчика). И этот номер датчика потом использовал в программе. Но вот на днях, я решил немного оптимизировать программу. И был готов установить CASE для определения активного датчика. Ведь, я думал, что CASE будет быстрее определять номер активного датчика, нежели 14 отдельных условных операторов? Ну и столкнулся с проблемой, как прочитать множество входов и записать все скопом в одно слово для CASE. Думаю, что Ваша функция будет работать быстро.

  2. #10152

    По умолчанию

    Цитата Сообщение от vsa Посмотреть сообщение
    Спасибо. Буду пробовать. У меня до этого момента было 14 условных операторов IF для определения, какой вход активный. И в зависимости от ситуации, я в программе в специальную переменную записывал номер активного входа (датчика). И этот номер датчика потом использовал в программе. Но вот на днях, я решил немного оптимизировать программу. И был готов установить CASE для определения активного датчика. Ведь, я думал, что CASE будет быстрее определять номер активного датчика, нежели 14 отдельных условных операторов? Ну и столкнулся с проблемой, как прочитать множество входов и записать все скопом в одно слово для CASE. Думаю, что Ваша функция будет работать быстро.
    Это oscat, там ещё много интересных функций

  3. #10153

    По умолчанию

    Цитата Сообщение от vsa Посмотреть сообщение
    Спасибо. Буду пробовать. У меня до этого момента было 14 условных операторов IF для определения, какой вход активный. И в зависимости от ситуации, я в программе в специальную переменную записывал номер активного входа (датчика). И этот номер датчика потом использовал в программе. Но вот на днях, я решил немного оптимизировать программу. И был готов установить CASE для определения активного датчика. Ведь, я думал, что CASE будет быстрее определять номер активного датчика, нежели 14 отдельных условных операторов? Ну и столкнулся с проблемой, как прочитать множество входов и записать все скопом в одно слово для CASE. Думаю, что Ваша функция будет работать быстро.
    Если так сделать, то D13 тоже попадает в WORD и биты будут не по порядку.
    Можно ещё проще и ничего лишнего не будет и все биты по порядку, с D14 по D27 .
    Код:
    w : WORD;
    
    w.0:=D14; w.1:=D15; w.2:=D16; w.3:=D17; w.4:=D18; w.5:=D19; w.6:=D20; w.7:=D21;
    w.8:=D22; w.9:=D23; w.10:=D24; w.11:=D25; w.12:=D26; w.13:=D27;
    Последний раз редактировалось kondor3000; 26.11.2023 в 19:09.

  4. #10154

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Если так сделать, то D13 тоже попадает в WORD и биты будут не по порядку.
    Можно ещё проще и ничего лишнего не будет и все биты по порядку, с D14 по D27 .
    Код:
    w : WORD;
    
    w.0:=D14; w.1:=D15; w.2:=D16; w.3:=D17; w.4:=D18; w.5:=D19; w.6:=D20; w.7:=D21;
    w.8:=D22; w.9:=D23; w.10:=D24; w.11:=D25; w.12:=D26; w.13:=D27;
    Неожиданно. А мне понравилось. Не знал, что так можно было. Мне необходимо, как можно быстрее сформировать это слово. Спасибо.

  5. #10155
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,251

    По умолчанию

    Цитата Сообщение от vsa Посмотреть сообщение
    .., я думал, что CASE будет быстрее определять номер активного датчика, нежели 14 отдельных условных операторов?...
    Напоминает продувку вилки в аэродинамической трубе для придания ей оптимальной формы чтоб быстрее съесть котлету. Эффективность такая же.
    CASE же магический, поток управления сразу же перейдет к нужной позиции))

  6. #10156

    По умолчанию

    Убедительно, но интуиция подсказывает, что 16 отдельных IF будут работать медленнее, чем один CASE. Хотя...?
    Ну и еще один тогда вопрос: имеется ли возможность в ПЛК110-24.69.Р(М02) работать с аппаратными прерываниями по дискретным входам? Уж очень утомительно контроллеру на каждом новом цикле работы опрашивать состояния каждого входа отдельно. А как было бы хорошо обслуживать дискретный вход только, если на нем появился сигнал. Только сразу не кидайте в меня тапки.

  7. #10157

    По умолчанию

    Цитата Сообщение от vsa Посмотреть сообщение
    Убедительно, но интуиция подсказывает, что 16 отдельных IF будут работать медленнее, чем один CASE. Хотя...?
    Ну и еще один тогда вопрос: имеется ли возможность в ПЛК110-24.69.Р(М02) работать с аппаратными прерываниями по дискретным входам? Уж очень утомительно контроллеру на каждом новом цикле работы опрашивать состояния каждого входа отдельно. А как было бы хорошо обслуживать дискретный вход только, если на нем появился сигнал. Только сразу не кидайте в меня тапки.
    Даже не заморачивайтесь, ни опрос входов, ни 10-100 IF нисколько не затормозят программу. Просто IF тут вообще не нужны, а CASE - излишен.
    Последний раз редактировалось kondor3000; 27.11.2023 в 13:25.

  8. #10158

    По умолчанию

    Цитата Сообщение от vsa Посмотреть сообщение
    ... но интуиция подсказывает, что 16 отдельных IF будут работать медленнее, чем один CASE. Хотя...
    Не правильно она Вам подсказывает. Что CASE, что аналогичный набор IF'ов будут работать по времени одинаково.

  9. #10159

    По умолчанию

    Мне IF требовались для простой задачи: - присвоение номера для активного входа. Например:
    ...
    IF D1 THEN
    COD_G_POZ_1 := 1;
    END_IF

    IF D2 THEN
    COD_G_POZ_1 := 2;
    END_IF

    IF D3 THEN
    COD_G_POZ_1 := 3;
    END_IF

    ...
    Я в программе работаю с номерами датчиков, которые подключены к отдельным дискретным входам. Датчиков бывает 25-30 шт. Возможно имеется более красивый способ формировать номер активного датчика.

  10. #10160
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,251

    По умолчанию

    Цитата Сообщение от vsa Посмотреть сообщение
    Мне IF требовались для простой задачи: - присвоение номера для активного входа. Например:..
    Не раскрыта тема D1 = D3 = TRUE

Страница 1016 из 1044 ПерваяПервая ... 165169169661006101410151016101710181026 ... ПоследняяПоследняя

Метки этой темы

Ваши права

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