SIEMENS, DF&PD

Предыдущее посещение: Чт июл 07, 2016 17:24 Текущее время: Чт июл 07, 2016 17:24

Часовой пояс: UTC + 3 часа




 [ Сообщений: 30 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Преобразование байта в биты
СообщениеДобавлено: Пт мар 07, 2008 8:06 
Не в сети

Зарегистрирован: Пт мар 07, 2008 8:00
Сообщения: 5
Откуда: Челябинск
Как обратиться к одному биту какого-либо байта или слова?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 07, 2008 8:09 
Не в сети
Возможно это нечеловек

Зарегистрирован: Ср апр 19, 2006 20:58
Сообщения: 2390
Обращайся по Имени.Отчеству и посмотри по крайней мере картинки "[url=http://www.automation-drives.ru/as/products/doc.php?l1=Программное%20обеспечение&l2=Базовое%20ПО&l3=doc]Первые шаги в работе со STEP7 V5.3[/url]"
http://www.automation-drives.ru/as/down ... bols_r.pdf


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 07, 2008 8:19 
Вован! Ты крутой, в натуре!


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 07, 2008 8:38 
Не в сети

Зарегистрирован: Пт мар 07, 2008 8:00
Сообщения: 5
Откуда: Челябинск
В таблице символов переменная описана как BYTE. Мне нужно преобразовать этот байт в последовательность бит. Как это сделать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 07, 2008 8:43 
Не в сети
Возможно это нечеловек

Зарегистрирован: Ср апр 19, 2006 20:58
Сообщения: 2390
Рекомендую внимательно посмотреть картинки в предложенной выше АЗБУКЕ.
Если не поймёшь сам, то тебе нечего делать в программировании.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 07, 2008 8:46 
Не в сети
Новый писатель

Зарегистрирован: Пт фев 09, 2007 6:42
Сообщения: 47
;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 07, 2008 10:39 
Не в сети
Известный Писатель

Зарегистрирован: Ср мар 02, 2005 11:00
Сообщения: 448
Откуда: Ростов-на-Дону
Привет!
я например делал так:
в функциональном блоке ест входная переменная типа WORD
содержащая в себе сотояние устройства и всякую дополнительную информацию.
Мне в данном случае нужна только аварийная ситуация то есть второй байт.
далее в FB у меня есть 8 битов указывающих каждый на конкретную аварию и которые используются в разных местах программы.
Единственное условие чтобы 8 переменных шли в объявлении одна за другой.
LAR1 P##PZD_W0 // Загружаем в AR1 адрес входной переменной в которой содержится состояние привода
L DIB [AR1,P#1.0] // Загружаем в ACCU1 с адресного регистра один байт
LAR1 P##ReadyDRV // Загружаем в AR1 фдрес первой переменной, всего 8 переменных
T DIB [AR1,P#0.0] // Пересылаем из ACCU1 в стартовый адрес один байт


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 07, 2008 10:56 
Не в сети
Возможно это нечеловек

Зарегистрирован: Ср апр 19, 2006 20:58
Сообщения: 2390
Самый эффективный способ отпугнуть от тяги к программированию:
Yrok писал(а):
я например делал так:
...

Хотя судя по http://www.automation-drives.ru/forum/v ... php?t=7894 Yrok'у тоже надо почитать АЗБУКУ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 07, 2008 12:16 
Не в сети
Известный Писатель

Зарегистрирован: Вт фев 08, 2005 19:13
Сообщения: 127
Откуда: A/S "Biotehniskais centrs", Рига
Да ладно вам, господа, все мы когда-то были такими Вованами.:) Если не в Степе, так в том, с чего мы начинали.
Вован! Самое простое и наглядное - это объявлять переменные в области М. Это у тебя уже сделано, раз ты ссылаешься на символьную таблицу. Допустим, у тебя объявлено:
MyByte MB78 BYTE
Никто не мешает объявить битовые переменные в стиле:
MyByte0 M78.0 BOOL
MyByte1 M78.1 BOOL
.....
MyByte7 M78.7 BOOL

Таким же образом можно обозвать переменные и в областях I, Q. Вот в DB так не получится. Там тебе надо будет обращаться в программе к абсолютному адресу, а не символу. Но если ты РС-шник, то посмотри SCL. Паскалеподобный язык. Там твой вопрос решается конструкцией АТ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 07, 2008 13:18 
Не в сети
Возможно это нечеловек

Зарегистрирован: Ср апр 19, 2006 20:58
Сообщения: 2390
В. Хрижановский писал(а):
Да ладно вам, господа, все мы когда-то были такими Вованами !...

В том то и дело, что мы были ниже травы и тише воды и не показывали крутизну дворовой кликухой !
В любом случае начинающим рекомендуется прочитать Первые шаги и посмотреть примеры из них.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 07, 2008 13:49 
Не в сети
Известный Писатель

Зарегистрирован: Ср мар 02, 2005 11:00
Сообщения: 448
Откуда: Ростов-на-Дону
Читали, знаем!
И чувствую что в этой теме скоро пойдёт обсирание друг друга, поэтому предлагаю закрыть тему.

Мне кстати обсирания на форумах напоминают одну интересную картину
которую видел в жизни. Стоят две собаки и лают рычат и бросаются друг на друга, а между ними забор из сетки рабицы, так что достать друг друга не могут, зато в 2 метрах от них здаровая дыра ну подбегайте к ней и деритесь. Но этого они делать не хотят тагда ведь придёться дратся а вдруг что оторвёт соперник.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 07, 2008 14:23 
Не в сети
Возможно это нечеловек

Зарегистрирован: Ср апр 19, 2006 20:58
Сообщения: 2390
Yrok писал(а):
Читали, знаем!
И чувствую что ...

Не надо чувствовать, сначало надо подумать прежде чем писать и кликнуть на "Отправить".

Тема поучительна:
- прежде чем задать вопрос попробуй найти ответ по F1 (на иноязыке) и внутри справки поиском (и пользуемся Справками из разных источников);
- поиском в каталоге PDF документации;
- не обижаться при посылке посмотреть официальную документацию на русском;
- не забывать что, по "одёжке (кликухе) встречают и по уму проважают" - поэтому надо выбирать кликухи без претензий;

Изображение

То что написал В. Хрижановский ведь есть на картинке в Первых Шагах по указанной ссылке.
Тут кто то недавно спрашивал о надобности Тестовой программы для приёма "программиста" на работу. Я отнёсся поначалу к этому скептически, но выходит эта тема действительно созрела...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 07, 2008 16:37 
Не в сети
Известный Писатель

Зарегистрирован: Ср мар 02, 2005 11:00
Сообщения: 448
Откуда: Ростов-на-Дону
Да файлы справки у меня грохнутые да и некогда было разбиратся
поэтому и задал по бысрому вопросик про остаток от деления, помню что было, вот и задал. Пока мне ответили занимлся другой задачой.

А насчёт документации на русском языке то у меня её 216MB, и надо наверное обновить


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 10, 2008 8:38 
Не в сети
Известный Писатель

Зарегистрирован: Сб фев 09, 2008 8:43
Сообщения: 258
Сколько желчи и только один конструктивный ответ (у Yrok).

Господа, читайте вмимательно вопрос:
"Как обратиться к одному биту какого-либо байта или слова?"

Вся суть заключается именно в фразе какого-либо. То есть всё равно какого. Не было же ведь написано что бит принадлежит байту или слову из областей М, I или Q. И никто не спрашивал о том какие дополнительные пакеты нужно использовать чтобы сделать это.

небольшое дополнение только. Если речь идёт о FB, то обязательно нужно учитывать межзоновый указатель. Даже если FB не мультиэкземплярный.

Если речь идёт о FВ, то в приведенных Yrok строчках он

LAR1 P##PZD_W0 не учтён
L DIB [AR1,P#1.0] учтён
LAR1 P##ReadyDRV не учтён
T DIB [AR1,P#0.0] учтён

то есть в конечном счёте он учтён, и весьма красивым способом (возьму это на вооружение), но понятнее для новичка, как мне кажется, изложить так:

TAR2
LAR1 P##PZD_W0
+AR1
L B [AR1,P#1.0]
TAR2
LAR1 P##ReadyDRV
+AR1
POP
T B [AR1,P#0.0]

в принципе, ничего сложного всё описано в доке и у Бергера, но для того и нужны форумы чтобы экономить время. (своё время за счёт чужого, если у других меньший напряг со временем - отвечать на вопросы дело бодровольное. И вот поэтому тем более не понятно зачем изливать свою желчь здесь. Запусти игрушку, убей пару монстров - результат тот же, но при этом никто не пострадает)


Ах да, чуть не забыл про ответ на вопрос.

Аналогично приведённому обращению к байту.

Вариант 1. (если в FB нужно часто обращаться к битам одного и того же)
Декларируем вспомогательный массив - пусть #Temp[0..15]

L какого-либо
LAR1 P##Temp
T DIW [AR1,P#0.0]

далее обращаемся к битам например

A #Temp[5]
= #Temp[8]

И после всего, обратно

LAR1 P##Temp
L DIW [AR1,P#0.0]
T какого-либо

Вариант 2. (если в FB нужно один раз что-то посмотреть и всё)
тоже самое, но предположим что какого-либо это входная переменная #Input

LAR1 P##Input
A DIX [AR1,P#0.5]
= DIX [AR1,P#1.1]



----------------------------
Йо-хо-хо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 10, 2008 11:38 
Не в сети
Возможно это нечеловек

Зарегистрирован: Ср апр 19, 2006 20:58
Сообщения: 2390
умерший от инфаркта, спровоцированного хроническим алкоголизмом. писал(а):
Господа, читайте вмимательно вопрос...
и читайте вопросы на трезвую голову и не пытайтесь увидеть варианты ненаписанного.
В уточняющем сообщении описаны требования спрашивавшего (хотя всё равно расплывчато).
Vovann! писал(а):
Как обратиться к одному биту какого-либо байта или слова?
В таблице символов переменная описана как BYTE. Мне нужно преобразовать этот байт в последовательность бит. Как это сделать?

Надо научиться правильно формулировать прямые вопросы с первого раза.
И поменьше читайте кроссворды - они отупляют, а не развивают ум.
Первый попавшийся Кроссворд писал(а):
9.Нечто влекущее и искушающее


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 11, 2008 9:09 
Не в сети
Написал больше чем Вы читали

Зарегистрирован: Вс фев 26, 2006 21:44
Сообщения: 1688
Откуда: Липецк, ОАО "НЛМК"
Ещё рекомендую посмотреть такой метод, как наложение маски - бывает полезно, когда искомые данные получены из DI или подобного модуля.
Код:
L IB 0.0
A #00000111

результат - три последних бита исходного байта.
Полезно в том случае, если не нужно перебирать все комбинации, а выделить из всех вариантов входных данных один-два нужных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 11, 2008 10:32 
Не в сети
Известный Писатель

Зарегистрирован: Сб фев 09, 2008 8:43
Сообщения: 258
to Негатив

немного неточен код, канечно понятно что Вы хотели сказать, но чтобы ни у кого (включая Homist) не возникло негативной реакции правильнее вот так

L IB0
L 2#111
AW

при этом в аккумуляторе, действительно, три последних бита исходного байта. RLO остаётся при этом неизменным.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 11, 2008 10:46 
Вован!
Ты че нить понял из этого словесного потока?
По ссылке-то хоть сходил, че-то почитал?
Люди тут зубы ломают, а ты все молчишь?


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 11, 2008 12:32 
Не в сети
Написал больше чем Вы читали

Зарегистрирован: Вс фев 26, 2006 21:44
Сообщения: 1688
Откуда: Липецк, ОАО "НЛМК"
Билли Бонс писал(а):
to Негатив

немного неточен код, канечно понятно что Вы хотели сказать, но чтобы ни у кого (включая Homist) не возникло негативной реакции правильнее вот так

L IB0
L 2#111
AW

при этом в аккумуляторе, действительно, три последних бита исходного байта. RLO остаётся при этом неизменным.


Угу, просто степа под рукой не было - я сейчас WinCC рисую...
Специально выковырял из рабочей программы:
Код:
L     #IN0
AD    DW#16#1FFFFFF

Так даже на 1 инструкцию короче ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 12, 2008 8:21 
Не в сети
Известный Писатель

Зарегистрирован: Пт ноя 02, 2007 6:19
Сообщения: 458
Откуда: irk
Цитата:
В таблице символов переменная описана как BYTE. Мне нужно преобразовать этот байт в последовательность бит. Как это сделать?


байт - и так последовательность бит, преобразовывать ничего не надо.
" область адрес байта.номер бита" например, m 10.1
или db10.dbx 7.5

если же речь идет о работе fb с экземплярами
то можно обращаться напрямую к абсолютным адресам переменных,
в таблице переменных fb указаны адреса (смещения).
например переменная in1 типа byte смещение 1.0
обращение к её пятому биту A dix1.5
но это если ты сам не пользуешь ar2 и opn di...

или как уже писали
LAR1 P##Input
A DIX [AR1,P#0.5]
= DIX [AR1,P#1.1]
только имхо "=" присвоение - лишнее, сопрягай сразу дальше куда надо.
что касается примера который предложил Yrok - тут дублирование в экземплярном db одной и той же информации. зачем?
имхо, лучче сразу до вызова fb рассортировать все как нужно. вариант на картинке. Хотя вообще конечно как кому удобно, решений - полно. и маска - тоже хороший вариант

Изображение


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 [ Сообщений: 30 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


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

Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group