mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-09 20:57:11 +00:00
44_S7_ARead: supports for Logo7 and Logo8 short notations AI,AQ,AM,NAI,NAQ
git-svn-id: https://svn.fhem.de/fhem/trunk@14456 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
f74c3ba12f
commit
92ec898c4f
@ -1,5 +1,7 @@
|
||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||
# Do not insert empty lines here, update check depends on it.
|
||||
- feature: 44_S7_ARead: supports for Logo7 and Logo8 short notations
|
||||
- feature: 44_S7_AWrite: supports for Logo7 and Logo8 short notations
|
||||
- feature: 37_Spotify: specify default device by its name
|
||||
- feature: 98_alarmclock: New feature stop Alarm
|
||||
- bugfix: 98_DOIFtools: fixed empty N_timer
|
||||
|
@ -50,36 +50,137 @@ sub S7_ARead_Define($$) {
|
||||
my ( $name, $area, $DB, $start, $datatype );
|
||||
|
||||
$name = $a[0];
|
||||
$area = lc $a[2];
|
||||
$DB = $a[3];
|
||||
$start = $a[4];
|
||||
$datatype = lc $a[5];
|
||||
if ( uc $a[2] =~ m/^[NA](\d*)/ ) {
|
||||
my $Offset;
|
||||
$area = "db";
|
||||
$DB = 0;
|
||||
my $startposition;
|
||||
|
||||
if ( $area ne "inputs"
|
||||
&& $area ne "outputs"
|
||||
&& $area ne "flags"
|
||||
&& $area ne "db" )
|
||||
{
|
||||
my $msg =
|
||||
"wrong syntax: define <name> S7_ARead {inputs|outputs|flags|db} <DB> <start> {u8|s8|u16|s16|u32|s32|float}";
|
||||
if ( uc $a[2] =~ m/^AI(\d*)/ ) {
|
||||
$startposition = 2;
|
||||
|
||||
if ( defined($hash->{IODev}{S7TYPE}) && $hash->{IODev}{S7TYPE} eq "LOGO7" ) {
|
||||
$Offset = 926;
|
||||
}
|
||||
elsif ( defined($hash->{IODev}{S7TYPE}) && $hash->{IODev}{S7TYPE} eq "LOGO8" ) {
|
||||
$Offset = 1032;
|
||||
}
|
||||
else {
|
||||
my $msg =
|
||||
"wrong syntax : define <name> S7_ARead {inputs|outputs|flags|db} <DB> <address> \n Only for Logo7 or Logo8:\n define <name> S7_ARead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
|
||||
}
|
||||
elsif ( uc $a[2] =~ m/^AQ(\d*)/ ) {
|
||||
$startposition = 2;
|
||||
|
||||
if ( defined($hash->{IODev}{S7TYPE}) && $hash->{IODev}{S7TYPE} eq "LOGO7" ) {
|
||||
$Offset = 944;
|
||||
}
|
||||
elsif ( defined($hash->{IODev}{S7TYPE}) && $hash->{IODev}{S7TYPE} eq "LOGO8" ) {
|
||||
$Offset = 1072;
|
||||
}
|
||||
else {
|
||||
my $msg =
|
||||
"wrong syntax : define <name> S7_ARead {inputs|outputs|flags|db} <DB> <address> \n Only for Logo7 or Logo8:\n define <name> S7_ARead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
|
||||
}
|
||||
elsif ( uc $a[2] =~ m/^AM(\d*)/ ) {
|
||||
$startposition = 2;
|
||||
|
||||
if ( defined($hash->{IODev}{S7TYPE}) && $hash->{IODev}{S7TYPE} eq "LOGO7" ) {
|
||||
$Offset = 952;
|
||||
}
|
||||
elsif ( defined($hash->{IODev}{S7TYPE}) && $hash->{IODev}{S7TYPE} eq "LOGO8" ) {
|
||||
$Offset = 1118;
|
||||
}
|
||||
else {
|
||||
my $msg =
|
||||
"wrong syntax : define <name> S7_ARead {inputs|outputs|flags|db} <DB> <address> \n Only for Logo7 or Logo8:\n define <name> S7_ARead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
}
|
||||
|
||||
elsif ( uc $a[2] =~ m/^NAI(\d*)/ ) {
|
||||
$startposition = 3;
|
||||
if ( $hash->{IODev}{S7TYPE} eq "LOGO8" ) {
|
||||
$Offset = 1262;
|
||||
}
|
||||
else {
|
||||
my $msg =
|
||||
"wrong syntax : define <name> S7_ARead {inputs|outputs|flags|db} <DB> <address> \n Only for Logo7 or Logo8:\n define <name> S7_ARead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
}
|
||||
elsif ( uc $a[2] =~ m/^NAQ(\d*)/ ) {
|
||||
$startposition = 3;
|
||||
if ( $hash->{IODev}{S7TYPE} eq "LOGO8" ) {
|
||||
$Offset = 1406;
|
||||
}
|
||||
else {
|
||||
my $msg =
|
||||
"wrong syntax : define <name> S7_ARead {inputs|outputs|flags|db} <DB> <address> \n Only for Logo7 or Logo8:\n define <name> S7_ARead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
}
|
||||
else {
|
||||
my $msg =
|
||||
"wrong syntax : define <name> S7_ARead {inputs|outputs|flags|db} <DB> <address> \n Only for Logo7 or Logo8:\n define <name> S7_ARead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
|
||||
$start = $Offset + ((int( substr( $a[2], $startposition ) ) - 1)*2);
|
||||
$datatype = "u16";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
else {
|
||||
|
||||
$area = lc $a[2];
|
||||
$DB = $a[3];
|
||||
$start = $a[4];
|
||||
$datatype = lc $a[5];
|
||||
|
||||
if ( $datatype ne "u8"
|
||||
&& $datatype ne "s8"
|
||||
&& $datatype ne "u16"
|
||||
&& $datatype ne "s16"
|
||||
&& $datatype ne "u32"
|
||||
&& $datatype ne "s32"
|
||||
&& $datatype ne "float" )
|
||||
{
|
||||
my $msg =
|
||||
"wrong syntax: define <name> S7_ARead {inputs|outputs|flags|db} <DB> <start> {u8|s8|u16|s16|u32|s32|float}";
|
||||
if ( $area ne "inputs"
|
||||
&& $area ne "outputs"
|
||||
&& $area ne "flags"
|
||||
&& $area ne "db" )
|
||||
{
|
||||
my $msg =
|
||||
"wrong syntax: define <name> S7_ARead {inputs|outputs|flags|db} <DB> <start> {u8|s8|u16|s16|u32|s32|float} \n Only for Logo7 or Logo8:\n define <name> S7_ARead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
|
||||
if ( $datatype ne "u8"
|
||||
&& $datatype ne "s8"
|
||||
&& $datatype ne "u16"
|
||||
&& $datatype ne "s16"
|
||||
&& $datatype ne "u32"
|
||||
&& $datatype ne "s32"
|
||||
&& $datatype ne "float" )
|
||||
{
|
||||
my $msg =
|
||||
"wrong syntax: define <name> S7_ARead {inputs|outputs|flags|db} <DB> <start> {u8|s8|u16|s16|u32|s32|float} \n Only for Logo7 or Logo8:\n define <name> S7_ARead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
}
|
||||
|
||||
$hash->{AREA} = $area;
|
||||
@ -445,4 +546,4 @@ newValue = <multiplicator> * Value + <offset>
|
||||
</ul>
|
||||
=end html_DE
|
||||
|
||||
=cut
|
||||
=cut
|
||||
|
@ -41,54 +41,156 @@ sub S7_AWrite_Define($$) {
|
||||
my ( $name, $area, $DB, $start, $datatype, $length );
|
||||
|
||||
$name = $a[0];
|
||||
$area = lc $a[2];
|
||||
$DB = $a[3];
|
||||
$start = $a[4];
|
||||
$datatype = lc $a[5];
|
||||
|
||||
if ( uc $a[2] =~ m/^[NA](\d*)/ ) {
|
||||
my $Offset;
|
||||
$area = "db";
|
||||
$DB = 0;
|
||||
my $startposition;
|
||||
|
||||
Log3 $name, 5, "$name S7_AWrite_Define called";
|
||||
if ( uc $a[2] =~ m/^AI(\d*)/ ) {
|
||||
$startposition = 2;
|
||||
|
||||
if ( defined($hash->{IODev}{S7TYPE}) && $hash->{IODev}{S7TYPE} eq "LOGO7" ) {
|
||||
$Offset = 926;
|
||||
}
|
||||
elsif ( defined($hash->{IODev}{S7TYPE}) && $hash->{IODev}{S7TYPE} eq "LOGO8" ) {
|
||||
$Offset = 1032;
|
||||
}
|
||||
else {
|
||||
my $msg =
|
||||
"wrong syntax : define <name> S7_AWrite {inputs|outputs|flags|db} <DB> <address> \n Only for Logo7 or Logo8:\n define <name> S7_DRead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
if ( $area ne "inputs"
|
||||
&& $area ne "outputs"
|
||||
&& $area ne "flags"
|
||||
&& $area ne "db" )
|
||||
{
|
||||
my $msg =
|
||||
"$name wrong syntax: define <name> S7_AWrite {inputs|outputs|flags|db} <DB> <start> {u8|s8|u16|s16|u32|s32|float}";
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
|
||||
}
|
||||
elsif ( uc $a[2] =~ m/^AQ(\d*)/ ) {
|
||||
$startposition = 2;
|
||||
|
||||
if ( defined($hash->{IODev}{S7TYPE}) && $hash->{IODev}{S7TYPE} eq "LOGO7" ) {
|
||||
$Offset = 944;
|
||||
}
|
||||
elsif ( defined($hash->{IODev}{S7TYPE}) && $hash->{IODev}{S7TYPE} eq "LOGO8" ) {
|
||||
$Offset = 1072;
|
||||
}
|
||||
else {
|
||||
my $msg =
|
||||
"wrong syntax : define <name> S7_AWrite {inputs|outputs|flags|db} <DB> <address> \n Only for Logo7 or Logo8:\n define <name> S7_DRead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
|
||||
}
|
||||
elsif ( uc $a[2] =~ m/^AM(\d*)/ ) {
|
||||
$startposition = 2;
|
||||
|
||||
if ( defined($hash->{IODev}{S7TYPE}) && $hash->{IODev}{S7TYPE} eq "LOGO7" ) {
|
||||
$Offset = 952;
|
||||
}
|
||||
elsif ( defined($hash->{IODev}{S7TYPE}) && $hash->{IODev}{S7TYPE} eq "LOGO8" ) {
|
||||
$Offset = 1118;
|
||||
}
|
||||
else {
|
||||
my $msg =
|
||||
"wrong syntax : define <name> S7_AWrite {inputs|outputs|flags|db} <DB> <address> \n Only for Logo7 or Logo8:\n define <name> S7_DRead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
}
|
||||
|
||||
elsif ( uc $a[2] =~ m/^NAI(\d*)/ ) {
|
||||
$startposition = 3;
|
||||
if ( $hash->{IODev}{S7TYPE} eq "LOGO8" ) {
|
||||
$Offset = 1262;
|
||||
}
|
||||
else {
|
||||
my $msg =
|
||||
"wrong syntax : define <name> S7_AWrite {inputs|outputs|flags|db} <DB> <address> \n Only for Logo7 or Logo8:\n define <name> S7_DRead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
}
|
||||
elsif ( uc $a[2] =~ m/^NAQ(\d*)/ ) {
|
||||
$startposition = 3;
|
||||
if ( $hash->{IODev}{S7TYPE} eq "LOGO8" ) {
|
||||
$Offset = 1406;
|
||||
}
|
||||
else {
|
||||
my $msg =
|
||||
"wrong syntax : define <name> S7_AWrite {inputs|outputs|flags|db} <DB> <address> \n Only for Logo7 or Logo8:\n define <name> S7_DRead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
}
|
||||
else {
|
||||
my $msg =
|
||||
"wrong syntax : define <name> S7_AWrite {inputs|outputs|flags|db} <DB> <address> \n Only for Logo7 or Logo8:\n define <name> S7_DRead {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 undef, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
|
||||
$start = $Offset + ((int( substr( $a[2], $startposition ) ) - 1)*2);
|
||||
$datatype = "u16";
|
||||
|
||||
Log3 $name, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
else {
|
||||
|
||||
$area = lc $a[2];
|
||||
$DB = $a[3];
|
||||
$start = $a[4];
|
||||
$datatype = lc $a[5];
|
||||
|
||||
if ( $datatype ne "u8"
|
||||
&& $datatype ne "s8"
|
||||
&& $datatype ne "u16"
|
||||
&& $datatype ne "s16"
|
||||
&& $datatype ne "u32"
|
||||
&& $datatype ne "s32"
|
||||
&& $datatype ne "float" )
|
||||
{
|
||||
my $msg =
|
||||
"$name wrong syntax: define <name> S7_AWrite {inputs|outputs|flags|db} <DB> <start> {u8|s8|u16|s16|u32|s32|float}";
|
||||
Log3 $name, 5, "$name S7_AWrite_Define called";
|
||||
|
||||
Log3 $name, 2, $msg;
|
||||
return $msg;
|
||||
if ( $area ne "inputs"
|
||||
&& $area ne "outputs"
|
||||
&& $area ne "flags"
|
||||
&& $area ne "db" )
|
||||
{
|
||||
my $msg =
|
||||
"$name wrong syntax: define <name> S7_AWrite {inputs|outputs|flags|db} <DB> <start> {u8|s8|u16|s16|u32|s32|float} \n Only for Logo7 or Logo8:\n define <name> S7_AWrite {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 $name, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
|
||||
if ( $datatype ne "u8"
|
||||
&& $datatype ne "s8"
|
||||
&& $datatype ne "u16"
|
||||
&& $datatype ne "s16"
|
||||
&& $datatype ne "u32"
|
||||
&& $datatype ne "s32"
|
||||
&& $datatype ne "float" )
|
||||
{
|
||||
my $msg =
|
||||
"$name wrong syntax: define <name> S7_AWrite {inputs|outputs|flags|db} <DB> <start> {u8|s8|u16|s16|u32|s32|float} \n Only for Logo7 or Logo8:\n define <name> S7_AWrite {AI|AM|AQ|NAI|NAQ}";
|
||||
|
||||
Log3 $name, 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
|
||||
|
||||
my $sname = $hash->{IODev}{NAME};
|
||||
|
||||
if ( $datatype eq "u16" || $datatype eq "s16" ) {
|
||||
$length = 2;
|
||||
}
|
||||
elsif ( $datatype eq "u32" || $datatype eq "s32" || $datatype eq "float" ) {
|
||||
$length = 4;
|
||||
}
|
||||
else {
|
||||
$length = 1;
|
||||
}
|
||||
}
|
||||
|
||||
AssignIoPort($hash); # logisches modul an physikalisches binden !!!
|
||||
|
||||
my $sname = $hash->{IODev}{NAME};
|
||||
|
||||
if ( $datatype eq "u16" || $datatype eq "s16" ) {
|
||||
$length = 2;
|
||||
}
|
||||
elsif ( $datatype eq "u32" || $datatype eq "s32" || $datatype eq "float" ) {
|
||||
$length = 4;
|
||||
}
|
||||
else {
|
||||
$length = 1;
|
||||
}
|
||||
|
||||
$hash->{AREA} = $area;
|
||||
$hash->{DB} = $DB;
|
||||
$hash->{ADDRESS} = $start;
|
||||
|
Loading…
x
Reference in New Issue
Block a user