чтение тега типа bool

Avatar
  • обновлен
имеем 1 word 2 байта по 8 бит каждый, с адресом 0
Там есть во втором байте бит ibSetDefSet.
как его считать по средствам modbus без скриптов (с возможностью записи)

Image 201
pic.JPG
Avatar
vik
Работает, спасибо.
вот рабочий код, может кому пригодится.
[spoiler]{объявляем переменные} var b0,b1,b2,b3,b4,b5,b6,b7:int; var Out: word; var str: string; Begin {опрашиваем все биты и присваиваем промежуточным переменным} B7:=ReadValue('bit_(7)'); B6:=ReadValue('bit_(6)'); B5:=ReadValue('bit_(5)'); B4:=ReadValue('bit_(4)'); B3:=ReadValue('bit_(3)'); B2:=ReadValue('bit_(2)'); B1:=ReadValue('bit_(1)'); B0:=ReadValue('bit_(0)'); {набираем стринг из 0 и 1} str:=IntToStr(b7)+IntToStr(b6)+IntToStr(b5)+IntToStr(b4)+IntToStr(b3)+IntToStr(b2)+IntToStr(b1)+IntToStr(b0); {конвертируем стринг из нолей и единиц в ворд} out:= BinToWord(str); {записываем результат} WriteValue('outword',out); end.[/spoiler]
Avatar
SIMP Tech (Сергей)
День добрый.

а как опросить виртуальные каналы типа boolean и записать из них слово word
наваял примерно такое, но не работает.

{Пример Pascal Script}
var b0,b1,b2,b3,b4,b5,b6,b7: boolean;
Var Out,: Integer;
Begin

B7:=ReadValue('bit_(7)');
B6:=ReadValue('bit_(6)');
B5:=ReadValue('bit_(5)');
B4:=ReadValue('bit_(4)');
B3:=ReadValue('bit_(3)');
B2:=ReadValue('bit_(2)');
B1:=ReadValue('bit_(1)');
B0:=ReadValue('bit_(0)');

out:= BinToWord('B7');
out:= out*2+BinToWord('B6');
out:= out*2+BinToWord('B5');
out:= out*2+BinToWord('B4');
out:= out*2+BinToWord('B3');
out:= out*2+BinToWord('B2');
out:= out*2+BinToWord('B1');
out:= out*2+BinToWord('B0');
WriteValue('outword',out);

end.

Смотрим документацию:

function BinToWord(ABin: String): Word (функция преобразует входное значение ABin строкового типа
в десятичное значение. Пример ABin = '01001001' , результат = 73)
В качестве параметра в функцию передается строка, в Вашем случае Вы отдаете out:= BinToWord('B7') строку вида "В7", поэтому и не работает. Нужно сделать примерно так:
var b0,b1,b2,b3,b4,b5,b6,b7: integer;

str := IntToStr(b7) + … IntToStr(b0);
out:= BinToWord(str);
Avatar
vik
а как опросить виртуальные каналы типа boolean и записать из них слово word
наваял примерно такое, но не работает.
[spoiler]{Пример Pascal Script} var b0,b1,b2,b3,b4,b5,b6,b7: boolean; Var Out,: Integer; Begin B7:=ReadValue('bit_(7)'); B6:=ReadValue('bit_(6)'); B5:=ReadValue('bit_(5)'); B4:=ReadValue('bit_(4)'); B3:=ReadValue('bit_(3)'); B2:=ReadValue('bit_(2)'); B1:=ReadValue('bit_(1)'); B0:=ReadValue('bit_(0)'); out:= BinToWord('B7'); out:= out*2+BinToWord('B6'); out:= out*2+BinToWord('B5'); out:= out*2+BinToWord('B4'); out:= out*2+BinToWord('B3'); out:= out*2+BinToWord('B2'); out:= out*2+BinToWord('B1'); out:= out*2+BinToWord('B0'); WriteValue('outword',out); end.[/spoiler]
Avatar
SIMP Tech (Сергей)
День добрый.

какой командой скрипта (паскаль, СИ) записать бит в слово?

examplebit_2016-04-01.zip
Avatar
vik
какой командой скрипта (паскаль, СИ) записать бит в слово?
Avatar
SIMP Tech (Сергей)
Добрый вечер.

имеем 1 word 2 байта по 8 бит каждый, с адресом 0
Там есть во втором байте бит ibSetDefSet.
как его считать по средствам modbus без скриптов (с возможностью записи)


Если не ошибаюсь, то считать можно только слово целиком. И без скрипта в данном случае не обойтись.