mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-20 13:26:02 +00:00
98_Modbus.pm: added small features and fixed a bug (register number 0) - also in ModbusAttr.pm
git-svn-id: https://svn.fhem.de/fhem/trunk@9129 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
ad610f8397
commit
e167ccfec5
@ -54,6 +54,7 @@
|
||||
# 2015-07-05 added revRegs / defRevRegs attributes
|
||||
# 2015-07-17 added bswapRegs to reverse Byte-order on arbitrary length string (thanks to Marco)
|
||||
# 2015-07-22 added encode and decode
|
||||
# 2015-08-17 allow register 0, delete unused variable assignments
|
||||
#
|
||||
# TODO: revRegs und bswapRegs for writing values
|
||||
#
|
||||
@ -291,7 +292,7 @@ ModbusLD_ObjKey($$) {
|
||||
my $parseInfo = $modHash->{parseInfo};
|
||||
|
||||
foreach my $a (keys %{$attr{$name}}) {
|
||||
if ($a =~ /obj-([cdih][1-9][0-9]*)-reading/ && $attr{$name}{$a} eq $reading) {
|
||||
if ($a =~ /obj-([cdih][0-9]+)-reading/ && $attr{$name}{$a} eq $reading) {
|
||||
return $1;
|
||||
}
|
||||
}
|
||||
@ -379,12 +380,8 @@ Modbus_ParseObj($$$;$) {
|
||||
|
||||
my $val = unpack ($unpack, $rest); # verarbeite so viele register wie passend (ggf. über mehrere Register)
|
||||
|
||||
if ($decode) {
|
||||
$val = decode($decode, $val);
|
||||
}
|
||||
if ($encode) {
|
||||
$val = encode($encode, $val);
|
||||
}
|
||||
$val = decode($decode, $val) if ($decode);
|
||||
$val = encode($encode, $val) if ($encode);
|
||||
|
||||
# Exp zur Nachbearbeitung der Werte?
|
||||
if ($expr) {
|
||||
@ -949,25 +946,25 @@ ModbusLD_Initialize($ )
|
||||
$readingFnAttributes;
|
||||
|
||||
$modHash->{ObjAttrList} =
|
||||
"obj-[cdih][1-9][0-9]*-reading " .
|
||||
"obj-[cdih][1-9][0-9]*-name " .
|
||||
"obj-[cdih][1-9][0-9]*-min " .
|
||||
"obj-[cdih][1-9][0-9]*-max " .
|
||||
"obj-[cdih][1-9][0-9]*-hint " .
|
||||
"obj-[cdih][1-9][0-9]*-map " .
|
||||
"obj-[cdih][1-9][0-9]*-set " .
|
||||
"obj-[cdih][1-9][0-9]*-setexpr " .
|
||||
"obj-[cdih][1-9][0-9]*-revRegs " .
|
||||
"obj-[cdih][1-9][0-9]*-bswapRegs " .
|
||||
"obj-[cdih][1-9][0-9]*-len " .
|
||||
"obj-[cdih][1-9][0-9]*-unpack " .
|
||||
"obj-[cdih][1-9][0-9]*-decode " .
|
||||
"obj-[cdih][1-9][0-9]*-encode " .
|
||||
"obj-[cdih][1-9][0-9]*-expr " .
|
||||
"obj-[cdih][1-9][0-9]*-format " .
|
||||
"obj-[cdih][1-9][0-9]*-showget " .
|
||||
"obj-[cdih][1-9][0-9]*-poll " .
|
||||
"obj-[cdih][1-9][0-9]*-polldelay ";
|
||||
"obj-[cdih][0-9]+-reading " .
|
||||
"obj-[cdih][0-9]+-name " .
|
||||
"obj-[cdih][0-9]+-min " .
|
||||
"obj-[cdih][0-9]+-max " .
|
||||
"obj-[cdih][0-9]+-hint " .
|
||||
"obj-[cdih][0-9]+-map " .
|
||||
"obj-[cdih][0-9]+-set " .
|
||||
"obj-[cdih][0-9]+-setexpr " .
|
||||
"obj-[cdih][0-9]+-revRegs " .
|
||||
"obj-[cdih][0-9]+-bswapRegs " .
|
||||
"obj-[cdih][0-9]+-len " .
|
||||
"obj-[cdih][0-9]+-unpack " .
|
||||
"obj-[cdih][0-9]+-decode " .
|
||||
"obj-[cdih][0-9]+-encode " .
|
||||
"obj-[cdih][0-9]+-expr " .
|
||||
"obj-[cdih][0-9]+-format " .
|
||||
"obj-[cdih][0-9]+-showget " .
|
||||
"obj-[cdih][0-9]+-poll " .
|
||||
"obj-[cdih][0-9]+-polldelay ";
|
||||
|
||||
$modHash->{DevAttrList} =
|
||||
"dev-([cdih]-)*read " .
|
||||
@ -1156,8 +1153,8 @@ ModbusLD_UpdateGetSetList($)
|
||||
my $set = ModbusLD_ObjInfo($hash, $objCombi, "set", 0); # default to 0
|
||||
my $map = ModbusLD_ObjInfo($hash, $objCombi, "map", "defMap");
|
||||
my $hint = ModbusLD_ObjInfo($hash, $objCombi, "hint");
|
||||
my $type = substr($objCombi, 0, 1);
|
||||
my $adr = substr($objCombi, 1);
|
||||
#my $type = substr($objCombi, 0, 1);
|
||||
#my $adr = substr($objCombi, 1);
|
||||
my $setopt;
|
||||
$hash->{getList} .= "$reading " if ($showget); # sichtbares get
|
||||
|
||||
@ -1204,9 +1201,9 @@ ModbusLD_Get($@)
|
||||
|
||||
if ($objCombi) {
|
||||
my ($err, $result);
|
||||
my $type = substr($objCombi, 0, 1);
|
||||
my $adr = substr($objCombi, 1);
|
||||
Log3 $name, 5, "$name: Get: Requesting $getName ($type $adr)";
|
||||
#my $type = substr($objCombi, 0, 1);
|
||||
#my $adr = substr($objCombi, 1);
|
||||
Log3 $name, 5, "$name: Get: Requesting $getName ($objCombi)";
|
||||
|
||||
if ($ioHash->{BUSY}) {
|
||||
Log3 $name, 5, "$name: Get: Queue is stil busy - taking over the read with ReadAnswer";
|
||||
@ -1256,13 +1253,13 @@ ModbusLD_Set($@)
|
||||
|
||||
if ($objCombi) {
|
||||
my $type = substr($objCombi, 0, 1);
|
||||
my $adr = substr($objCombi, 1);
|
||||
#my $adr = substr($objCombi, 1);
|
||||
my ($err,$result);
|
||||
if (!defined($setVal)) {
|
||||
Log3 $name, 3, "$name: No Value given to set $setName";
|
||||
return "No Value given to set $setName";
|
||||
}
|
||||
Log3 $name, 5, "$name: Set: found option $setName ($type $adr), setVal = $setVal";
|
||||
Log3 $name, 5, "$name: Set: found option $setName ($objCombi), setVal = $setVal";
|
||||
|
||||
if ($ioHash->{BUSY}) {
|
||||
Log3 $name, 5, "$name: Set: Queue still busy - taking over the read with ReadAnswer";
|
||||
@ -1484,11 +1481,11 @@ ModbusLD_GetUpdate($ ) {
|
||||
Log3 $name, 5, "$name: GetUpdate full object list: " . join (" ", sort @ObjList);
|
||||
|
||||
foreach my $objCombi (sort @ObjList) {
|
||||
my $type = substr($objCombi, 0, 1);
|
||||
my $adr = substr($objCombi, 1);
|
||||
#my $type = substr($objCombi, 0, 1);
|
||||
#my $adr = substr($objCombi, 1);
|
||||
my $reading = ModbusLD_ObjInfo($hash, $objCombi, "reading");
|
||||
my $objHashRef = $parseInfo->{$objCombi};
|
||||
my $devTypeRef = $devInfo->{$type};
|
||||
#my $devTypeRef = $devInfo->{$type};
|
||||
my $poll = ModbusLD_ObjInfo($hash, $objCombi, "poll", "defPoll", 0);
|
||||
my $lastRead = ($hash->{lastRead}{$objCombi} ? $hash->{lastRead}{$objCombi} : 0);
|
||||
Log3 $name, 5, "$name: GetUpdate check $objCombi => $reading, poll = $poll, last = $lastRead";
|
||||
@ -1514,7 +1511,7 @@ ModbusLD_GetUpdate($ ) {
|
||||
my ($obj, $type, $adr, $reading, $len, $span);
|
||||
my ($nextObj, $nextType, $nextAdr, $nextReading, $nextLen, $nextSpan);
|
||||
my $maxLen;
|
||||
$adr = 0; $span = 0; $nextSpan = 0;
|
||||
$adr = 0; $type = ""; $span = 0; $nextSpan = 0;
|
||||
foreach $nextObj (sort keys %readList) {
|
||||
$nextType = substr($nextObj, 0, 1);
|
||||
$nextAdr = substr($nextObj, 1);
|
||||
@ -1574,7 +1571,7 @@ sub
|
||||
ModbusLD_Send($$$;$$$){
|
||||
my ($hash, $objCombi, $op, $v1, $force, $span) = @_;
|
||||
# $hash : the logival Device hash
|
||||
# $obj : the hash ref to the object in ParseInfo -> ändern zu type+adr (objCombi)
|
||||
# $objCombi : type+adr
|
||||
# $op : read, write
|
||||
# $v1 : value for writing
|
||||
# $force : put in front of queue and don't reschedule but wait if necessary
|
||||
|
Loading…
x
Reference in New Issue
Block a user