PDA

Просмотр полной версии : 8- битные регистры типа Byte



Р.Александр
02.04.2019, 16:51
Для управления шаговым приводом с по протоколу Модбас требуется использование 8 битных регистров типа (unsigned 8). Видимо, применительно к ПЛК-110 имеются в виду 8 битные регистры типа Byte.
Вопрос - как ведется их счет при программировании? Никогда не приходилось применять их в таком виде.

Р.Александр
02.04.2019, 19:26
Выравниваются как и везде.
word + byte = 2 regs //с неявным старшим байтом регистра 1
word + byte + byte = 2 regs
byte + word + byte = 3 regs //неявн. старшие байты регистров 0 и 2
dword + byte + dword = 6 regs //неявн. старш. байт регистра 2 и целиком неявный регистр 3
...

Спасибо. Видимо, я не совсем точно выразился - мне нужна адресация таких регистров в Modbus. как то - 0х300, 4х300 и так далее. Поскольку (применительно к СП300 ) они относятся к области памяти панели PSB, должны идти как 0х..., но тогда возникает путаница с однобитовыми флагами.
Или когда поставлена функция записи для одних 0х0f, для других 0х71, они читаются по разному ? Но тогда как в самой панели их различить, если они будут проходить как PSB?

Р.Александр
03.04.2019, 06:40
Схема такая - в панель СП-307 вводятся данные , которые оттуда считывает ПЛК по одному Сом-порту и по другому в зависимости от сработавших датчиков передает в контроллер ШД по протоколу Моdbus RTU
Контроллеру ШД требуются данные в 8 битном формате. В панели таких не предусмотрено.

capzap
03.04.2019, 08:36
речь скорее всего об 5 функции где различие как раз в одном байте (8 бит), тогда в панели можно посылать либо ноль либо 255

capzap
03.04.2019, 13:16
я имел ввиду это описание пятой функции: "Для флагов значение 0xFF00 означает включённое состояние, 0x0000 — выключенное, другие значения недопустимы. " Поэтому хоть речь и идет об одном бите но меняется байт в слове в самой посылке

Р.Александр
03.04.2019, 19:00
Да это я понял. Говорю что сама форма посылки для пользователя условно неизвестна. Этот 0000/FF00 не имеет никакого отношения к 8-битному формату данных на концах. Поэтому и спросил автора : WTF 8-битный формат ? В модбасе нет такого понятия. Есть 1 бит, много бит, регистр и много регистров. Всё. Если он скажет что только 5 и 15-ая, тогда понятно. А если бит за ради бита - то на кой ?
Ну и причем тут биты в панели если на девайс отправляет плк ? (его слова ж)
ПЛК , прежде чем отправить что то в девайс, должен получить это из панели.
Разьясняю - есть девайс, который управляется по Modbus RTU с ПК, есть номера его регистров, в которые записываются команды и данные. Команды передаются битами, данные, естественно, Word и Dword. Все было бы нормально, но команды - не однобитовые, обозначаются номерами, которые в двоичном виде могут занимать несколько бит, и передаются восьмибитовыми регистрами , указано - типа Byte. Получается :
1. Для каждой команды необходимо использовать один восьмибитовый регистр полностью, а не побитно.
2. У ПЛК есть восьмибитовые регистры как раз типа Byte, которые обычно используются для передачи переменных типа BOOL в каждом бите, однако здесь нужно делать запись именно в целый 8 битный регистр - данные имеют вид числа от 0 до 100.
При этом в описании написано, что используются функции 0х03, 0х06 и 0х10.
Поэтому и возникает вопрос не о битах, много битах, а о регистре из 8 бит и как его считать в памяти панели и ПЛК.
С панелью более менее ясно, оттуда можно забрать в Word , и уже в ПЛК преобразовать в Byte, там есть такая функция.
Но вот как его считать в ПЛК - например, 4х25.1 и 4х 25.2 или что то подобное ?
Видимо, нужно будет просто поэкспериментировать, и если не получиться напрямую , писать макрос.

Р.Александр
03.04.2019, 19:19
Да это я понял. Говорю что сама форма посылки для пользователя условно неизвестна. Этот 0000/FF00 не имеет никакого отношения к 8-битному формату данных на концах. Поэтому и спросил автора : WTF 8-битный формат ? В модбасе нет такого понятия. Есть 1 бит, много бит, регистр и много регистров. Всё. Если он скажет что только 5 и 15-ая, тогда понятно. А если бит за ради бита - то на кой ?
Ну и причем тут биты в панели если на девайс отправляет плк ? (его слова ж)
ПЛК , прежде чем отправить что то в девайс, должен получить это из панели.
Разьясняю - есть девайс, который управляется по Modbus RTU с ПК, есть номера его регистров, в которые записываются команды и данные. Команды передаются битами, данные, естественно, Word и Dword. Все было бы нормально, но команды - не однобитовые, обозначаются номерами, которые в двоичном виде могут занимать несколько бит, и передаются восьмибитовыми регистрами , указано - типа Byte. Получается :
1. Для каждой команды необходимо использовать один восьмибитовый регистр полностью, а не побитно.
2. У ПЛК есть восьмибитовые регистры как раз типа Byte, которые обычно используются для передачи переменных типа BOOL в каждом бите, однако здесь нужно делать запись именно в целый 8 битный регистр - данные имеют вид числа от 0 до 100.
При этом в описании написано, что используются функции 0х03, 0х06 и 0х10.
Поэтому и возникает вопрос не о битах, много битах, а о регистре из 8 бит и как его считать в памяти панели и ПЛК.
Видимо, нужно будет просто поэкспериментировать, и если не получиться напрямую , писать макрос.

capzap
03.04.2019, 19:28
ПЛК , прежде чем отправить что то в девайс, должен получить это из панели.
Разьясняю - есть девайс, который управляется по Modbus RTU с ПК, есть номера его регистров, в которые записываются команды и данные. Команды передаются битами, данные, естественно, Word и Dword. Все было бы нормально, но команды - не однобитовые, обозначаются номерами, которые в двоичном виде могут занимать несколько бит, и передаются восьмибитовыми регистрами , указано - типа Byte. Получается :
1. Для каждой команды необходимо использовать один восьмибитовый регистр полностью, а не побитно.
2. У ПЛК есть восьмибитовые регистры как раз типа Byte, которые обычно используются для передачи переменных типа BOOL в каждом бите, однако здесь нужно делать запись именно в целый 8 битный регистр - данные имеют вид числа от 0 до 100.
При этом в описании написано, что используются функции 0х03, 0х06 и 0х10.
Поэтому и возникает вопрос не о битах, много битах, а о регистре из 8 бит и как его считать в памяти панели и ПЛК.
Видимо, нужно будет просто поэкспериментировать, и если не получиться напрямую , писать макрос.

как то Вы странно понимаете протокол модбас. Регистр это двухбайтовое слово, других типов данных у него быть не может

Р.Александр
03.04.2019, 21:20
Да знаю я это все, не впервые . Не работает ничего, если брать как обычно. С собственного терминала от ПК работает, от ПЛК-110 не хочет. Причем посылки от терминала обычные, соответствуют Modbusу, я смотрел COM монитором. Остается, что регистры вообще ни при чем, у девайса капризный RS485, не через всякий адаптер работает, возможно, с портом ПЛК то же самое - он его просто не видит. Завтра попробую взять свободный ПЛК сваять что нибудь на RS-232, проверю так.

capzap
03.04.2019, 21:26
надо просто учитывать что проблема может скрываться как размещены байты в регистре

Р.Александр
04.04.2019, 10:05
Так перепишите на бумажку побайтно что уходит из собственного терминала

и сравните с тем что от ПЛК-110 уходит. Или вообще тишина ?


и что за бредовый термин такой - "не видит", ПЛК это кошка такая с глазами ? Может не туда смотрит ? или просто спит ? на хвост наступите и посмотрите реакцию

Вы мне кто, преподаватель или руководитель? Что за претензии на свою собственную божественную правоту ?
ПЛК " не видит " встречный порт - нормальное выражение, обозначающее либо неисправность, либо другую причину, по которой два девайса не могут связаться. В данном случае пока не знаю почему, девайс не работает через порт RS-485-1. заработал через RS-232. Упреждая ваше брюзжание, сразу скажу - с самого начала не мог использовать 232 порт, так как он занят , пришлось брать новый контроллер, проверять, что будет через тот и другой порт. Ну, а если вам не нравится выражение "не видит", пусть будет "не слышит" или " не унюхал" - разница маленьувя , все равно не обнаружил.
Причина сей темы в дурацкой привычке разных производителей писать неизвестно что в инструкциях.
Ну не встречал я ни разу относительно ПЛК термина unsignedint 8, что делать, а в описании девайса четко написано, что используются три вида регистров - unsignedint 8, unsignedint 16, unsignedint 32.
Тема закрыта. Кого интерескют подробности, в личку.

Р.Александр
04.04.2019, 19:36
Я не просил вас читать мне лекцию. У меня был конкретный вопрос, вы из него развели целый спектакль, только чтобы показать, насколько вы грамотный программист . Я - безграмотный, и я пишу "порт не видит". И буду писать, нравится вам это или нет. Всего хорошего.