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

Инженерное программное обеспечение
Ответить
obok
Любитель
Сообщения: 53
Зарегистрирован: 10 апр 2018, 20:16

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

Сообщение obok »

Помогите пожалуйста!
Имеется удаленный модуль с 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?

Аватара пользователя
Ka3ax
Специалист
Сообщения: 303
Зарегистрирован: 07 сен 2013, 10:09

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

Сообщение Ka3ax »

смутно задача описана.
Вход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

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

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

Сообщение Михайло »

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

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

obok
Любитель
Сообщения: 53
Зарегистрирован: 10 апр 2018, 20:16

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

Сообщение obok »

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

Ну и как написал Ка3ах:
Вход0:= Х.x0;
Вход1:= Х.x1;
Вход2:= Х.x2;
Вход3:= Х.x3;
...
Вход15:= Х.x15;
СПАСИБО! То что нужно!

Извините, что смутно описал проблему не знал как это объяснить.

obok
Любитель
Сообщения: 53
Зарегистрирован: 10 апр 2018, 20:16

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

Сообщение obok »

Еще подскажите как правильно это записать в цикле, я записываю так но у меня компилятор ругается см. картинку
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Ka3ax
Специалист
Сообщения: 303
Зарегистрирован: 07 сен 2013, 10:09

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

Сообщение Ka3ax »

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

obok
Любитель
Сообщения: 53
Зарегистрирован: 10 апр 2018, 20:16

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

Сообщение obok »

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

Ответить