Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 25

Тема: МВА8 и ModBus-RTU

  1. #11

    По умолчанию

    Чему у вас равно [99][6C][41][A6], либо [41][A6][99][6C]?
    Интересно получается, если в моем массиве 5 элемент поставить на место 3-го и преобразовать во foat, то получается как и у вас 20,8735.

  2. #12

    По умолчанию

    Интересный случай:
    Код:
    21.443102 //до переноса
    21.408752
    
    21.443174 //до переноса
    21.388916
    
    21.318317 //до переноса
    21.349182
    
    21.443388 //до переноса
    21.388916
    Первое число с оригинальным массивом, второе с переносом 6 байта в 4.
    Код:
    tmp[3]=tmp[5];
    Каким образом "Циклическое время измерения" влияет на результат, причем погрешность небольшая?

  3. #13
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    Все дело в порядке передачи байт. В МВА температура храниться в 4 и 5 регистрах, вот с ними и работайте. То что у Вас и 3,4 регистры показывают почти правильно, это говорит о том что при формировании float основную роль играет четвертый регистр и он должен стоять в Вашей программе на втором месте, а третий или пятый, влияют только на зачения цифр после запятой. Я с самого начала на это намекаю, даже на видео показал, что перемена мест существенно изменяет значение, а Вы упорно пытаетесь использовать не нужный регистр

  4. #14

    По умолчанию

    Так получается порядок регистров, а не байт. Сначала передается младшее слово, а потом старшее.

  5. #15

    По умолчанию

    все в РЭ правильно про регистры написано
    Цитата Сообщение от porex Посмотреть сообщение
    Код:
    [32][03][0C][00][00][00][14][00][00][99][6C][41][A6][FD][18][26][20]
    1-й и 2-й - адрес и функция, 7-й - целое значение, 10-13-й - float значение. Это не соответствует таблице 6.2 в РЭ. Между целым значением и float должно быть 4 байта, где они? Что в 3-ем байте(0С)? Почему длина посылки 17 байт, вместо 16?
    Код:
    [32][03][0C][00][00][00][14][00][00][99][6C][41][A6][FD][18][26][20]
    [32] - адрес прибора
    [03] - номер функции
    [0C] - кол-во байт в ответе
    [00][00] - положение десятичной точки (старший, младший байты)
    [00][14] - целое значение (старший, младший байты)
    [00][00] - статус (старший, младший байты)
    [99][6C] - циклическое время (старший, младший байты)
    [41][A6][FD][18] - float
    [26][20] - crc (старший, младший байты)

    float надо собирать таким образом:
    Код:
    pointer2 := ADR(answer[X]) + 1;
    pointer1 := ADR(float_value);
    pointer1^ := pointer2^;
    pointer2 := ADR(answer[X]);
    pointer1 := pointer1 + 1;
    pointer1^ := pointer2^;
    
    pointer2 := ADR(answer[X]) + 3;
    pointer1 := pointer1 + 1;
    pointer1^ := pointer2^;
    pointer2 := ADR(answer[X]) + 2;
    pointer1 := pointer1 + 1;
    pointer1^ := pointer2^;
    где X - номер первого байта в буфере ответа answer от МВА8
    т.о. float имеет вид по байтам из ответа 3,4,1,2 и будет выглядеть как [FD][18][41][A6]
    Последний раз редактировалось swerder; 03.10.2011 в 11:56.

  6. #16

    По умолчанию

    Цитата Сообщение от swerder Посмотреть сообщение
    т.о. float имеет вид по байтам из ответа 3,4,1,2 и будет выглядеть как [FD][18][41][A6]
    Собственно как я выше и написал:
    Сначала передается младшее слово, а потом старшее
    только почему так, не понял. В описании не нашел.
    Ну да ладно, capzap и swerder, спасибо за помощь!

  7. #17

    По умолчанию

    вот так, обычно ссылаются на необговоренность правил передачи флоатов в протоколе модбас

  8. #18
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    3.2.1.8. Параметр «Порядок передачи байтов посылки» (Byte Sequence)
    В параметре «Порядок передачи байтов посылки» (Byte Sequence) –
    определяют, в каком порядке будут передаваться байты посылки протокола Modbus для переменных длиной 32 бита. У устройств разных производителей этот порядок разный, он не стандартизирован в самом протоколе, поэтому необходимо обговаривать его для конкретных устройств.
    Для работы с модулями ввода/вывода OВЕН (например МВА8) необходимо установить значение параметра Trace_mode.

  9. #19

    По умолчанию

    Цитата Сообщение от swerder Посмотреть сообщение
    вот так, обычно ссылаются на необговоренность правил передачи флоатов в протоколе модбас
    Было бы хорошо все это в РЭ написать. Дума не я один натыкался на подобное.

  10. #20

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    3.2.1.8. Параметр «Порядок передачи байтов посылки» (Byte Sequence)
    Откуда это взято?

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Похожие темы

  1. проблемка МВА8+ModBus
    от Igor_85 в разделе Помощь Разработчикам
    Ответов: 6
    Последнее сообщение: 01.12.2009, 18:30
  2. Modbus RTU и МВА8
    от Анастасия в разделе Мх110
    Ответов: 2
    Последнее сообщение: 30.06.2008, 07:13
  3. МВА8 + OPC ModBus
    от SeZon в разделе Помощь Разработчикам
    Ответов: 4
    Последнее сообщение: 21.09.2007, 11:56

Ваши права

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