Помогите пожалуйста!
Имеется удаленный модуль с 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?
Помогите преобразовать
Re: Помогите Перобразовать
смутно задача описана.
и здесь не ясно
исхожу из
можно двигать и маскировать
или двигать и младший бит считывать
или слайс. в TIA
все через 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))
извиняйте. засыпаю
входу присвоить?Вход1:= Взять_регистр 1 ( Преобразовать_в_двоичный код (Х) )
и здесь не ясно
отчего "страдает" всегда первый контакт? ожидаемые контакты 4 и 8Присылаемое число 4 - замкнут контакт номер 1 что соответствует (в двоичной системе) -100
Присылаемое число 8 - замкнут контакт номер 1 что соответствует (в двоичной системе) - 1000
исхожу из
в scl имеются команды int_to_bool bool_to_word, SHR, SHlгде 0 - нет замкнутых контактов, 15 замкнуты все поясняю:
можно двигать и маскировать
Код: Выделить всё
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))
Код: Выделить всё
temp := Input_word.%x1
temp12 := Input_word.%x11
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
Re: Помогите преобразовать
Вместо INT используйте тип WORD, INT - для хранения числовых значений, WORD - для наборов отдельных битов (как в вашем случае).obok писал(а):где Вход тип (bool), а у X тип (int)
Ну и как написал Ка3ах:
Вход0:= Х.x0;
Вход1:= Х.x1;
Вход2:= Х.x2;
Вход3:= Х.x3;
...
Вход15:= Х.x15;
Re: Помогите преобразовать
СПАСИБО! То что нужно!Михайло писал(а):Вместо INT используйте тип WORD, INT - для хранения числовых значений, WORD - для наборов отдельных битов (как в вашем случае).obok писал(а):где Вход тип (bool), а у X тип (int)
Ну и как написал Ка3ах:
Вход0:= Х.x0;
Вход1:= Х.x1;
Вход2:= Х.x2;
Вход3:= Х.x3;
...
Вход15:= Х.x15;
Извините, что смутно описал проблему не знал как это объяснить.
Re: Помогите преобразовать
Еще подскажите как правильно это записать в цикле, я записываю так но у меня компилятор ругается см. картинку
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Re: Помогите преобразовать
а никак
слайст не работает в цикле, я недавно бегал, сам спрашивал как.
тупо 16 значений прописать и все, что сименс в своих примерах тоже делает.
или через оверлей AT и массив к битам обращаться.
но в Вашем случае проще 1 раз прописать 16 бит
слайст не работает в цикле, я недавно бегал, сам спрашивал как.
тупо 16 значений прописать и все, что сименс в своих примерах тоже делает.
или через оверлей AT и массив к битам обращаться.
но в Вашем случае проще 1 раз прописать 16 бит
Supervision of erection
Re: Помогите преобразовать
Спасибо, а то бился не мог понять, что же не правильно пишу и кавычки ставил и скобки, и фигурные скобки .... вобщем не мог я сдаться, а оказалось так просто нельзя)))Ka3ax писал(а):а никак
слайст не работает в цикле, я недавно бегал, сам спрашивал как.
тупо 16 значений прописать и все, что сименс в своих примерах тоже делает.
или через оверлей AT и массив к битам обращаться.
но в Вашем случае проще 1 раз прописать 16 бит