Страница 847 из 1043 ПерваяПервая ... 347747797837845846847848849857897947 ... ПоследняяПоследняя
Показано с 8,461 по 8,470 из 10426

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

  1. #8461

    По умолчанию

    И в продолжении вопроса. А как быть, если внешний компьютер умеет только обмениваться с ПЛК 16-и битными словами. Как умудрится передать 32 бита? Например, %QD7.2.0 (DWORD). Возможно частями? Подскажите, как? Как понять, где адрес младшего WORD, а где старший WORD?

  2. #8462

    По умолчанию

    Цитата Сообщение от vsa Посмотреть сообщение
    И в продолжении вопроса. А как быть, если внешний компьютер умеет только обмениваться с ПЛК 16-и битными словами. Как умудрится передать 32 бита? Например, %QD7.2.0 (DWORD). Возможно частями? Подскажите, как? Как понять, где адрес младшего WORD, а где старший WORD?
    Почему только 16 битными? В слейве есть и 2 байтные и 4 байтные и флоат, выбирайте что надо и передавайте,
    в слейве 2 байт 1 регистр, 4 байт 2 регистра, считаете с 0 адреса. Все адреса известны.

    В мастере ещё проще, там прямо адрес регистра можно задать в 10-ричном формате.
    Если вы флоат прочитали и получили 2.3*e-38, понятно что регистры переставлены.
    Последний раз редактировалось kondor3000; 22.01.2022 в 15:48.

  3. #8463

    По умолчанию

    Я понял, как это можно сделать. Распределить, например, %QW 7.1.0 и в него записывать "минуты"*60. А при получении в ПЛК умножать еще на 1000 (MW60:=INT_TO_TIME(%QW 7.1.0)*1000 . Все получается! Или так не красиво? Меня же только минуты интересуют.

  4. #8464

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Почему только 16 битными? В слейве есть и 2 байтные и 4 байтные и флоат, выбирайте что надо и передавайте,
    в слейве 2 байт 1 регистр, 4 байт 2 регистра, считаете с 0 адреса. Все адреса известны.
    Вот пример конфигурации:
    Modbus
    %QW7.1.0
    %QD7.2.0

    Это 0, 1 и 2 адреса 16-и битных слов? Правильно?

  5. #8465

    По умолчанию

    С временем правильно.
    Зачем вы опять эти % везде лепите? У вас в слейве первые 2 BYTE - 0 регистр, вторые 2 BYTE - 1 регистр

  6. #8466

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    С временем правильно.
    Зачем вы опять эти % везде лепите? У вас в слейве первые 2 BYTE - 0 регистр, вторые 2 BYTE - 1 регистр
    Возможно я ошибаюсь, но я (для примера) распределил два регистра:
    12.png
    А там стоят %QW и %QD. Я и привожу их для примера. Или я что-то не то делаю?

  7. #8467

    По умолчанию

    Цитата Сообщение от vsa Посмотреть сообщение
    Возможно я ошибаюсь, но я (для примера) распределил два регистра:
    12.png
    А там стоят %QW и %QD. Я и привожу их для примера. Или я что-то не то делаю?
    Ну и что, это распределение внутренней памяти ПЛК, вам на неё пофиг. На разных ПЛК могут быть разные буквы.
    А вот, что надо помнить, это все 4 байтные переменные должны быть с чётными адресами. 2, 4 , 6, 8, 10.

    Если вы добавляете 5 шт 2 байт, то адреса будут с 0 по 4 , а потом поставите 4 байт или флоат, у него будет адрес не 5 как кажется должно быть, а 6.
    Чтобы не путаться, лучше добавить 6 шт 2 байт, адреса с 0 по 5, и флоат получится с адресом 6, следующий флоат с адресом 8.
    Последний раз редактировалось kondor3000; 22.01.2022 в 18:01.

  8. #8468

    По умолчанию

    Цитата Сообщение от vsa Посмотреть сообщение
    Я понял, как это можно сделать. Распределить, например, %QW 7.1.0 и в него записывать "минуты"*60. А при получении в ПЛК умножать еще на 1000 (MW60:=INT_TO_TIME(%QW 7.1.0)*1000 . Все получается! Или так не красиво? Меня же только минуты интересуют.
    Уточнение по поводу расчёта времени из минут.
    Код:
    	w : INT:=4 ;  (*  Время в минутах  *)
    	t1 : TIME ;
    	t2 : TIME ;
    ________________________________
    t1:=INT_TO_TIME  (w *60*1000);   (*  Расчёт времени - так тоже можно, ограничение 32767  минут    *)
    
    t2:=DWORD_TO_TIME ((INT_TO_DWORD (w))*60*1000) ;    (*  Расчёт времени -со всеми преобразованиями,   ограничение 32767  минут   *)
    Последний раз редактировалось kondor3000; 22.01.2022 в 23:25.

  9. #8469

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Уточнение по поводу расчёта времени из минут.
    Код:
    	w : INT:=4 ;  (*  Время в минутах  *)
    	t1 : TIME ;
    	t2 : TIME ;
    ________________________________
    t1:=INT_TO_TIME  (w *60*1000);   (*  Расчёт времени - так тоже можно, ограничение 32767  минут    *)
    
    t2:=DWORD_TO_TIME ((INT_TO_DWORD (w))*60*1000) ;    (*  Расчёт времени -со всеми преобразованиями,   ограничение 32767  минут   *)
    Красиво! Обязательно это буду использовать у себя в программе.

  10. #8470

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    что же так сложно-то
    t1 := t#1m * w
    Человек даже не знал о наличии преобразований. Поэтому как понятней написал.
    Последний раз редактировалось kondor3000; 23.01.2022 в 11:11.

Страница 847 из 1043 ПерваяПервая ... 347747797837845846847848849857897947 ... ПоследняяПоследняя

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

Ваши права

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