mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 03:06:37 +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.
|
# 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.
|
# 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: 37_Spotify: specify default device by its name
|
||||||
- feature: 98_alarmclock: New feature stop Alarm
|
- feature: 98_alarmclock: New feature stop Alarm
|
||||||
- bugfix: 98_DOIFtools: fixed empty N_timer
|
- bugfix: 98_DOIFtools: fixed empty N_timer
|
||||||
|
@ -50,36 +50,137 @@ sub S7_ARead_Define($$) {
|
|||||||
my ( $name, $area, $DB, $start, $datatype );
|
my ( $name, $area, $DB, $start, $datatype );
|
||||||
|
|
||||||
$name = $a[0];
|
$name = $a[0];
|
||||||
$area = lc $a[2];
|
if ( uc $a[2] =~ m/^[NA](\d*)/ ) {
|
||||||
$DB = $a[3];
|
my $Offset;
|
||||||
$start = $a[4];
|
$area = "db";
|
||||||
$datatype = lc $a[5];
|
$DB = 0;
|
||||||
|
my $startposition;
|
||||||
|
|
||||||
if ( $area ne "inputs"
|
if ( uc $a[2] =~ m/^AI(\d*)/ ) {
|
||||||
&& $area ne "outputs"
|
$startposition = 2;
|
||||||
&& $area ne "flags"
|
|
||||||
&& $area ne "db" )
|
if ( defined($hash->{IODev}{S7TYPE}) && $hash->{IODev}{S7TYPE} eq "LOGO7" ) {
|
||||||
{
|
$Offset = 926;
|
||||||
my $msg =
|
}
|
||||||
"wrong syntax: define <name> S7_ARead {inputs|outputs|flags|db} <DB> <start> {u8|s8|u16|s16|u32|s32|float}";
|
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"
|
if ( $area ne "inputs"
|
||||||
&& $datatype ne "s8"
|
&& $area ne "outputs"
|
||||||
&& $datatype ne "u16"
|
&& $area ne "flags"
|
||||||
&& $datatype ne "s16"
|
&& $area ne "db" )
|
||||||
&& $datatype ne "u32"
|
{
|
||||||
&& $datatype ne "s32"
|
my $msg =
|
||||||
&& $datatype ne "float" )
|
"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}";
|
||||||
{
|
|
||||||
my $msg =
|
|
||||||
"wrong syntax: define <name> S7_ARead {inputs|outputs|flags|db} <DB> <start> {u8|s8|u16|s16|u32|s32|float}";
|
|
||||||
|
|
||||||
Log3 undef, 2, $msg;
|
Log3 undef, 2, $msg;
|
||||||
return $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;
|
$hash->{AREA} = $area;
|
||||||
@ -445,4 +546,4 @@ newValue = <multiplicator> * Value + <offset>
|
|||||||
</ul>
|
</ul>
|
||||||
=end html_DE
|
=end html_DE
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
@ -41,54 +41,156 @@ sub S7_AWrite_Define($$) {
|
|||||||
my ( $name, $area, $DB, $start, $datatype, $length );
|
my ( $name, $area, $DB, $start, $datatype, $length );
|
||||||
|
|
||||||
$name = $a[0];
|
$name = $a[0];
|
||||||
$area = lc $a[2];
|
|
||||||
$DB = $a[3];
|
if ( uc $a[2] =~ m/^[NA](\d*)/ ) {
|
||||||
$start = $a[4];
|
my $Offset;
|
||||||
$datatype = lc $a[5];
|
$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"
|
Log3 undef, 2, $msg;
|
||||||
&& $area ne "outputs"
|
return $msg;
|
||||||
&& $area ne "flags"
|
}
|
||||||
&& $area ne "db" )
|
|
||||||
{
|
}
|
||||||
my $msg =
|
elsif ( uc $a[2] =~ m/^AQ(\d*)/ ) {
|
||||||
"$name wrong syntax: define <name> S7_AWrite {inputs|outputs|flags|db} <DB> <start> {u8|s8|u16|s16|u32|s32|float}";
|
$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"
|
Log3 $name, 5, "$name S7_AWrite_Define called";
|
||||||
&& $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, 2, $msg;
|
if ( $area ne "inputs"
|
||||||
return $msg;
|
&& $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 !!!
|
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->{AREA} = $area;
|
||||||
$hash->{DB} = $DB;
|
$hash->{DB} = $DB;
|
||||||
$hash->{ADDRESS} = $start;
|
$hash->{ADDRESS} = $start;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user