[?]: При обмене по ПРОФИБАС в слове меняется порядок байт!

Промышленные Логические Контроллеры SIMATIC S7-200/300/400
Post Reply
MagS7
Posts: 2
Joined: Tue Dec 25, 2007 2:19 pm

[?]: При обмене по ПРОФИБАС в слове меняется порядок байт!

Post by MagS7 » Tue Dec 25, 2007 2:33 pm

Есть контроллер S7-314 и слейв ПРОФИБАС ДП!!!
Обмен происходит 9 словами в передаваемой структуре описано 8 слов и 9 слово описано в виде струтуры битов! при обмене значение байтов в 9 слове изменено по сравнению с источником(слейвом) старший с младшим swap.
При изменении на пользовательский тип ничего не изменяется!
Но когда ставишь тип WORD все проходит нормально и биты находяться на своих местах!

CoMod
Site Admin
Posts: 3986
Joined: Thu Feb 16, 2006 3:25 pm
Location: Russia
Contact:

Post by CoMod » Tue Dec 25, 2007 3:21 pm

Про эту тонкость было написано в разговоре о протоколе обмена с частотником - байты в слове "меняются" местами
http://www.automation-drives.ru/forum/v ... php?t=5624

MagS7
Posts: 2
Joined: Tue Dec 25, 2007 2:19 pm

Post by MagS7 » Wed Dec 26, 2007 7:31 am

CoMod wrote:Про эту тонкость было написано в разговоре о протоколе обмена с частотником - байты в слове "меняются" местами
http://www.automation-drives.ru/forum/v ... php?t=5624
Просмотрел указаную ссылку и не нашел указания причины почему идет изменение порядка следования байтов в слове из-за использования не элементарного типа.

Объясните пожайлуста!

bunglehead
Posts: 109
Joined: Thu Oct 19, 2006 7:00 am
Location: Russia

Post by bunglehead » Wed Dec 26, 2007 10:26 am

Все просто. В S7 используется хранение для типов выше байта старшим байтом по меньшему адресу, в отличие от формата Intel например. В результате при использовании пользовательского типа становится виден этот внутренний способ хранения. Так что никаких тонкостей тут нет, если я правильно понял вопрос.

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

Post by komatic » Thu Dec 27, 2007 10:47 am

Википедия по этому поводу:
Порядок от младшего к старшему
Порядок от младшего к старшему (англ. little-endian, о происхождении термина ниже): , запись начинается с младшего и заканчивается старшим. Этот порядок записи принят в памяти персональных компьютеров с x86-процессорами, в связи с чем, иногда, его называют интеловский порядок байт (по названию фирмы-создателя архитектуры x86).


[править] Порядок от старшего к младшему
Порядок от старшего к младшему (англ. big-endian): , запись начинается со старшего и заканчивается младшим. Этот порядок является стандартным для протоколов TCP/IP, он используется в заголовках пакетов данных и во многих протоколах более высокого уровня, разработанных для использования поверх TCP/IP. Поэтому, порядок байтов от старшего к младшему часто называют сетевым порядком байтов (англ. network byte order). Этот порядок байт используется процессорами IBM 360/370/390, Motorola 68000, SPARC (отсюда третье название — порядок байтов Motorola, Motorola byte order).

В этом же виде (но с факторизацией по основанию 10) записываются числа индийско-арабскими цифрами.

Порядок байтов от старшего к младшему ныне является кроссплатформенным стандартом и применяется в многих стандартизованных форматах файлов, таких как PNG.

Post Reply