Для чего нужна перестановка байт в CoDeSyS ?

Автор Сообщение
#1 / 05.02.2019 12:25
admin

Xs6E4t7Vgos.jpg

В программной среде CoDeSyS перестановка байт требуется для правильных показаний датчиков при сопряжении двух устройств (Master и Slave), или когда на одном устройстве один порядок байт в слове, а втором другой. Компьютеры и оборудование, как и люди, разговаривают на разных языках. Одни хранят данные «слева направо», другие «справа налево». трудности возникают, когда требуется считать данные.

Всем привет!! Я решил написать небольшой минипост по теме перестановки байтов данных. Так как пытаюсь помочь себе разобраться в этом вопросе и считаю, что для вас эта информация будет не лишней. Честно говоря, я учился на энергетика, так что базовых знаний по программированию у меня к сожалению нет.

Всё приходится делать своими силами, и доходить приходится самому. Так что, где-то я могу ошибаться, но это ничего страшного. итак продолжим...

Циферки, числа, данные
Основная мысль заключается в понимании разницы между числами и данными вообще. Числа — это некие абстрактные понятия, исчисление чего-либо.

Возьмём число 10. Десять пальцев, десять яблок, десять корзинок, булочек и т.д. Понятие этого числа не изменяется, изменяется только его представление, римская цифра Х, машинная цифра в двоичной системе исчисления 1010 тоже «10».

А данные — это набор чисел, а так же и символов. Это некое машинное письмо. Ведь десять можно выразить и символами IO, и в форме записи на любом языке, или всё-таки значение в цифрах.

Другими словами данные — это последовательность битов и байтов, хранящихся на компьютере. Некая физическая величина. Процессор хранит данные в бинарной форме 0 и 1.

Процессоры говорят на разных языках, они имеют различные способы хранения абстрактного понятия числа «10».

Что хранит ПЛК?
В школе на уроках информатики нам говорили, что компьютер хранит данные в двоичной системе счисления. В виде нулей и единичек. Как происходит хранение данных.

  1. Самая первая и маленькая единица это Бит, он имеет два состояния 0 или 1.
  2. Байт это последовательность из 0 и 1. Байт состоит из 8 битов. То есть двоичная последовательность 10 является вот такой 00001010.

Биты нумеруются справа налево Бит 0 является младшим — это крайний правый, а бит 7 является старшим — это крайний левый.

А дальше мы с байтами поступаем как хотим, можно получить число Word — это два байта, или число Float — это 4 байта и т.д.

Машины отлично понимают, где находится «0» байт. И в каком порядке они начинают считаться. Ведь вроде бы все понятно с однобайтовыми системами. Но нет никакого соглашения в какой последовательности машины будут считать — в прямой или обратной.

Понятие указателя
Указатели являются ключевой частью программирования. Указатель представляет собой число, являющееся адресом в памяти. И это зависит только от нас (программистов), как интерпретировать данные по этому адресу.

В языке ST на CoDeSyS, когда вы приводите указатель к конкретному типу, это говорит компьютеру, как именно интерпретировать данные по этому адресу. Например, давайте объявим:

XVnrkbg-LAU.jpg

Это просто объявление указателя, теперь программист говорит ПЛК, что нужно указать на начало функции, и данные по этому адресу нужно интерпретировать как один символ (1 байт).

С помощью тех самых указателей мы можем проходиться по памяти считывать по одному байту за раз.

Таким образом мы можем преобразовать два Word'a (2 байта) в Float (4 байта).

Давайте сначала объявим переменные:

Re-I6auoEVA.jpg

Основная программа перестановки байт:

Re-I6auoEVA.jpg

В общем, как-то так. Если будут какие-то дополнения, пишите в комментариях.

Как я написал статью? Надеюсь понятно. Мне, честно говоря, тяжело даются эти понятия.

С уважением, Гридин Семён

Источник: http://kip-world.ru/dlya-chego-nuzhna-perestanovka-bajt-v-codesys.html

Сообщения: 463