PDA

Просмотр полной версии : СМИ2 - порядок байтов



Владислав Г.
12.03.2015, 09:56
На индикатор СМИ2 мне необходимо вывести поочередно сообщение, затем значение переменной. Все находится в string. После связи с ПЛК-150 и СМИ2 на индикаторе слова и цифры отображаются наоборот - с права на лева. Помогите разобраться.

Tempest
16.03.2015, 23:52
Доброго времени суток! Неужели никто не сталкивался с этой проблемой? Я начинающий, для меня это актуально. Может поделитесь простым примером отображение слов на СМИ2 ?

Владислав Г.
27.03.2015, 09:11
Стринг. Байты ПЛК/СМИ2 - 1234/2143
Было и так тоже ).

Владислав Г.
31.03.2015, 10:18
Ну так переставьте перед отправкойЯ уже отмахнулся от стринга, перевел в реал значения переменных. В стринге - перевертыши. Буквы можно было в ПЛК вывернуть под СМИ2, но проделать такое же с переменными не хватило духу ).

Гамзат
19.11.2016, 19:28
ПЛК110 + СМИ2 такая же проблема вывожу 'Err ' а выходи на экран 'rE' при перестановке по принципу (Байты ПЛК/СМИ2 - 1234/2143)
вывожу 'rE' а выходит 'Er' .. тупик

Гамзат
20.11.2016, 14:23
Мужик, тебе сказали 2143, значит 2143. К сетевому порядку это никаким боком. И почитай про asciiz.

да согласен 2143
но такая конструкция
IF temp1>=28 THEN datA:=3; chr1:='1d '; chr2:=WORD_TO_STRING(temp1); ELSE ; datA:=0; END_IF; (* chr1,chr2 -29,30 регистры СМИ2 *)
дает на выходе цифры менянные местами, а надо по нормальному

Гамзат
22.11.2016, 15:54
не очень понял вопрос.. chr2 это переменная сконфигурированная в настройках проекта codesys как 29 регистр устройства universal Modbus Device->string output module (точное название не припомню но где то так)

Гамзат
22.11.2016, 17:51
Не очень понял вопрос.. chr2 это переменная сконфигирированная в проекте codesys как 29 регистр СМИ2 universal modbus device-string output module ( не припомню точное название пишу с телефона но где то так

Гамзат
23.11.2016, 18:53
2 переменных использовал потому что если записывать в одну всю строку например chr1:='abcd' то ничего путного не получается выходит что то типа 'ba -' или типа того пробовал разные комбинации.. а вот если записать так chr1:='ba';chr2:='dc'; то тогда выходит на экран 'abcd'

Гарчев Евгений
24.11.2016, 18:27
2 переменных использовал потому что если записывать в одну всю строку например chr1:='abcd' то ничего путного не получается выходит что то типа 'ba -' или типа того пробовал разные комбинации.. а вот если записать так chr1:='ba';chr2:='dc'; то тогда выходит на экран 'abcd'

Для корректной передачи строки необходимо менять местами не регистры, а байты. Создаете строковую переменную из 8 байт, привязываете к 29-ому регистру, в программе меняете местами байты в этой переменной перед отправкой на панель.
байты
ПЛК - СМИ
0 - 1
1 - 0
2 - 3
3 - 2
4 - 5
5 - 4
6 - 7
7 - 6

Гамзат
24.11.2016, 20:33
покажите на примере ST, что с порядком байтов что то надо делать я понял, а как это сделать в ST не знаю

Гамзат
24.11.2016, 20:37
Чего то мутишь где то. Проект где ?

еще не мутю..мучу.. -изучаю

Гарчев Евгений
25.11.2016, 13:25
как-то так:

VAR
p_str:POINTER TO ARRAY [0..7] OF BYTE;
p_str1:POINTER TO ARRAY [0..7] OF BYTE;
END_VAR

--------------------------------------------------------
p_str:=ADR(str);
p_str1:=ADR(str1);

p_str1^[0]:=p_str^[1];
p_str1^[1]:=p_str^[0];
p_str1^[2]:=p_str^[3];
p_str1^[3]:=p_str^[2];
p_str1^[4]:=p_str^[5];
p_str1^[5]:=p_str^[4];
p_str1^[6]:=p_str^[7];
p_str1^[7]:=p_str^[6];

capzap
25.11.2016, 13:48
как-то так:

VAR
p_str:POINTER TO ARRAY [0..3] OF WORD;
END_VAR

--------------------------------------------------------
p_str:=ADR(str);

p_str^[0]:=ROL(p_str^[0],8);
p_str^[1]:=ROL(p_str^[1],8);
p_str^[2]:=ROL(p_str^[2],8);
p_str^[3]:=ROL(p_str^[3],8);

за исключением проверки на четность строки