Помогите преобразовать

Инженерное программное обеспечение

Помогите преобразовать

Сообщение obok » 24 сен 2018, 18:12

Помогите пожалуйста!
Имеется удаленный модуль с 4 входами, соединяется с контроллером по RS485 через modbus
О замкнутых контактах на входе модуль сообщает Битовой маской значений входов, он присылает число от 0 до 15

где 0 - нет замкнутых контактов, 15 замкнуты все поясняю:

Присылаемое число 1 - замкнут контакт номер 1 что соответствует (в двоичной системе) - 1
Присылаемое число 2 - замкнут контакт номер 2 что соответствует (в двоичной системе) - 10
Присылаемое число 3 - замкнут контакт номер 1 и 2 что соответствует (в двоичной системе) - 11
Присылаемое число 4 - замкнут контакт номер 1 что соответствует (в двоичной системе) -100
Присылаемое число 8 - замкнут контакт номер 1 что соответствует (в двоичной системе) - 1000
.....
Присылаемое число 15 замкнуты все контакты что соответствует (в двоичной системе) - 1111

т.е. кажый контакт соответствует 0 или 1 у входа контакта модуля, и это регистр у двоичного числа
Так вот ....
Помогите как мне из полученного числа "Х" (в десятичной системе) перевести его в двоичную и понять 1 или 0 стоит в соответствующем регистре?

Примерно это должно выглядеть как то так (в SCL):
Вход1:= Взять_регистр 1 ( Преобразовать_в_двоичный код (Х) )
Вход2:= Взять_регистр 2 ( Преобразовать_в_двоичный код (Х) )
Вход3:= Взять_регистр 3 ( Преобразовать_в_двоичный код (Х) )
Вход4:= Взять_регистр 4 ( Преобразовать_в_двоичный код (Х) )

где Вход тип (bool), а у X тип (int)

Пожалуйста помогите как это записать в SCL?
obok
Любитель
 
Сообщения: 47
Зарегистрирован: 10 апр 2018, 20:16

Re: Помогите Перобразовать

Сообщение Ka3ax » 25 сен 2018, 00:44

смутно задача описана.
Вход1:= Взять_регистр 1 ( Преобразовать_в_двоичный код (Х) )

входу присвоить?
и здесь не ясно
Присылаемое число 4 - замкнут контакт номер 1 что соответствует (в двоичной системе) -100
Присылаемое число 8 - замкнут контакт номер 1 что соответствует (в двоичной системе) - 1000

отчего "страдает" всегда первый контакт? ожидаемые контакты 4 и 8
исхожу из
где 0 - нет замкнутых контактов, 15 замкнуты все поясняю:


в scl имеются команды int_to_bool bool_to_word, SHR, SHl
можно двигать и маскировать
Код: Выделить всё
VAR_INPUT
    Input_word:           WORD;
   
END_VAR
VAR
   
    comp_1_in:              INT;
    comp_2_in:              INT;
    temp:       bool;
END_VAR

    BEGIN;
   
    comp_1_in     := Input_word AND w#16#ff;
    comp_2_in := Input_word AND w#16#00ff SHR(in:=Input_word, N:=8);

или двигать и младший бит считывать
Код: Выделить всё
temp := int_to_bool( SHR(in:=Input_word, N:=8))

или слайс. в TIA
Код: Выделить всё
temp := Input_word.%x1
temp12 := Input_word.%x11
 

все через case реализовать

ps
пока отвечал. понял, что входящяя переменная int тип.
тогда расскладываем по битам int_to_word и далее один из вышеприведенных принципов.
только вместо
temp := int_to_bool( SHR(in:=Input_word, N:=8))
temp := word_to_bool( SHR(in:=Input_word, N:=8))
извиняйте. засыпаю :)
Supervision of erection
Аватара пользователя
Ka3ax
Специалист
 
Сообщения: 299
Зарегистрирован: 07 сен 2013, 10:09

Re: Помогите преобразовать

Сообщение Михайло » 25 сен 2018, 06:25

obok писал(а):где Вход тип (bool), а у X тип (int)

Вместо INT используйте тип WORD, INT - для хранения числовых значений, WORD - для наборов отдельных битов (как в вашем случае).

Ну и как написал Ка3ах:
Вход0:= Х.x0;
Вход1:= Х.x1;
Вход2:= Х.x2;
Вход3:= Х.x3;
...
Вход15:= Х.x15;
Михайло
Администратор
 
Сообщения: 3818
Зарегистрирован: 19 сен 2012, 19:16

Re: Помогите преобразовать

Сообщение obok » 25 сен 2018, 08:23

Михайло писал(а):
obok писал(а):где Вход тип (bool), а у X тип (int)

Вместо INT используйте тип WORD, INT - для хранения числовых значений, WORD - для наборов отдельных битов (как в вашем случае).

Ну и как написал Ка3ах:
Вход0:= Х.x0;
Вход1:= Х.x1;
Вход2:= Х.x2;
Вход3:= Х.x3;
...
Вход15:= Х.x15;


СПАСИБО! То что нужно!

Извините, что смутно описал проблему не знал как это объяснить.
obok
Любитель
 
Сообщения: 47
Зарегистрирован: 10 апр 2018, 20:16

Re: Помогите преобразовать

Сообщение obok » 25 сен 2018, 08:38

Еще подскажите как правильно это записать в цикле, я записываю так но у меня компилятор ругается см. картинку
У вас нет необходимых прав для просмотра вложений в этом сообщении.
obok
Любитель
 
Сообщения: 47
Зарегистрирован: 10 апр 2018, 20:16

Re: Помогите преобразовать

Сообщение Ka3ax » 25 сен 2018, 09:00

а никак :D
слайст не работает в цикле, я недавно бегал, сам спрашивал как.
тупо 16 значений прописать и все, что сименс в своих примерах тоже делает.
или через оверлей AT и массив к битам обращаться.
но в Вашем случае проще 1 раз прописать 16 бит
Supervision of erection
Аватара пользователя
Ka3ax
Специалист
 
Сообщения: 299
Зарегистрирован: 07 сен 2013, 10:09

Re: Помогите преобразовать

Сообщение obok » 25 сен 2018, 12:13

Ka3ax писал(а):а никак :D
слайст не работает в цикле, я недавно бегал, сам спрашивал как.
тупо 16 значений прописать и все, что сименс в своих примерах тоже делает.
или через оверлей AT и массив к битам обращаться.
но в Вашем случае проще 1 раз прописать 16 бит


Спасибо, а то бился не мог понять, что же не правильно пишу и кавычки ставил и скобки, и фигурные скобки .... вобщем не мог я сдаться, а оказалось так просто нельзя))) :wall:
obok
Любитель
 
Сообщения: 47
Зарегистрирован: 10 апр 2018, 20:16


Вернуться в Simatic TIA Portal / Step7

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

Сейчас этот форум просматривают: Bing [Bot] и гости: 0