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

pic.JPG
Там есть во втором байте бит ibSetDefSet.
как его считать по средствам modbus без скриптов (с возможностью записи)

pic.JPG
Сервис поддержки клиентов работает на платформе UserEcho
Если не ошибаюсь, то считать можно только слово целиком. И без скрипта в данном случае не обойтись.
examplebit_2016-04-01.zip
наваял примерно такое, но не работает.
[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]Смотрим документацию:
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);
вот рабочий код, может кому пригодится.
[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]