Hallo allerseits
Arbeiter derzeit auf ein Projekt wo 29St. A8R (8x Digital Output Relais) der Firma BD-Mechatronik eigebaut sind.
Die A8R habe ich schon öfters eingesetzt, dabei habe ich aber die Relais mit WriteSingleCoil geschaltet (siehe unten)
Dabei wird bei jedes Programmablauf die ModbusAddress um +1 geschaltet, jedes Ausgang wird dann separat geschaltet.
Mit diese Große Menge an Geräte wird das Schalten der Relais sehr langsam.
Kann mich jemand erklären wie ich das alles mit WriteMultipleCoil beschleunige?
Oder hat jemand ein Bespiel wie ich WriteMultipleCoil eisetze?
... Beckhoff SPS
Vielen Dank
Arbeiter derzeit auf ein Projekt wo 29St. A8R (8x Digital Output Relais) der Firma BD-Mechatronik eigebaut sind.
Die A8R habe ich schon öfters eingesetzt, dabei habe ich aber die Relais mit WriteSingleCoil geschaltet (siehe unten)
Dabei wird bei jedes Programmablauf die ModbusAddress um +1 geschaltet, jedes Ausgang wird dann separat geschaltet.
Mit diese Große Menge an Geräte wird das Schalten der Relais sehr langsam.
Kann mich jemand erklären wie ich das alles mit WriteMultipleCoil beschleunige?
Oder hat jemand ein Bespiel wie ich WriteMultipleCoil eisetze?
... Beckhoff SPS
Vielen Dank
Code:
1:
ModbusRTU.WriteSingleCoil (
UnitID:=ModbusAddress[Unit],
Quantity:=1 ,
MBAddr:=0,
cbLength:=1,
pMemoryAddr:= ADR(arrOut[0]),
Execute:= TRUE,
Timeout:= tTimeout,
BUSY=>bBUSY );
IF NOT bBusy THEN
ModbusRTU.WriteSingleCoil(Execute:= FALSE);
IF ModbusRTU.Error THEN
iStepConfig := 0;
ELSE
iStepConfig :=iStepConfig+1;
END_IF
END_IF
2:
ModbusRTU.WriteSingleCoil (
UnitID:=ModbusAddress[Unit],
Quantity:=1 ,
MBAddr:=1,
cbLength:=1,
pMemoryAddr:= ADR(arrOut[1]),
Execute:= TRUE,
Timeout:= tTimeout,
BUSY=>bBUSY );
IF NOT bBusy THEN
ModbusRTU.WriteSingleCoil(Execute:= FALSE);
IF ModbusRTU.Error THEN
iStepConfig := 0;
ELSE
iStepConfig :=iStepConfig+1;
END_IF
END_IF
3:
ModbusRTU.WriteSingleCoil (
UnitID:=ModbusAddress[Unit],
Quantity:=1 ,
MBAddr:=2,
cbLength:=1,
pMemoryAddr:= ADR(arrOut[2]),
Execute:= TRUE,
Timeout:= tTimeout,
BUSY=>bBUSY );
IF NOT bBusy THEN
ModbusRTU.WriteSingleCoil(Execute:= FALSE);
IF ModbusRTU.Error THEN
iStepConfig := 0;
ELSE
iStepConfig :=iStepConfig+1;
END_IF
END_IF
4:
ModbusRTU.WriteSingleCoil (
UnitID:=ModbusAddress[Unit],
Quantity:=1,
MBAddr:=3,
cbLength:=1,
pMemoryAddr:= ADR(arrOut[3]),
Execute:= TRUE,
Timeout:= tTimeout,
BUSY=>bBUSY );
IF NOT bBusy THEN
ModbusRTU.WriteSingleCoil(Execute:= FALSE);
IF ModbusRTU.Error THEN
iStepConfig := 0;
ELSE
iStepConfig :=iStepConfig+1;
END_IF
END_IF
5:
ModbusRTU.WriteSingleCoil (
UnitID:=ModbusAddress[Unit],
Quantity:=1 ,
MBAddr:=4,
cbLength:=1,
pMemoryAddr:= ADR(arrOut[4]),
Execute:= TRUE,
Timeout:= tTimeout,
BUSY=>bBUSY );
IF NOT bBusy THEN
ModbusRTU.WriteSingleCoil(Execute:= FALSE);
IF ModbusRTU.Error THEN
iStepConfig := 0;
ELSE
iStepConfig :=iStepConfig+1;
END_IF
END_IF
6:
ModbusRTU.WriteSingleCoil (
UnitID:=ModbusAddress[Unit],
Quantity:=1 ,
MBAddr:=5,
cbLength:=1,
pMemoryAddr:= ADR(arrOut[5]),
Execute:= TRUE,
Timeout:= tTimeout,
BUSY=>bBUSY );
IF NOT bBusy THEN
ModbusRTU.WriteSingleCoil(Execute:= FALSE);
IF ModbusRTU.Error THEN
iStepConfig := 0;
ELSE
iStepConfig :=iStepConfig+1;
END_IF
END_IF
7:
ModbusRTU.WriteSingleCoil (
UnitID:=ModbusAddress[Unit],
Quantity:=1 ,
MBAddr:=6,
cbLength:=1,
pMemoryAddr:= ADR(arrOut[6]),
Execute:= TRUE,
Timeout:= tTimeout,
BUSY=>bBUSY );
IF NOT bBusy THEN
ModbusRTU.WriteSingleCoil(Execute:= FALSE);
IF ModbusRTU.Error THEN
iStepConfig := 0;
ELSE
iStepConfig :=iStepConfig+1;
END_IF
END_IF
8:
ModbusRTU.WriteSingleCoil (
UnitID:=ModbusAddress[Unit],
Quantity:=1 ,
MBAddr:=7,
cbLength:=1,
pMemoryAddr:= ADR(arrOut[7]),
Execute:= TRUE,
Timeout:= tTimeout,
BUSY=>bBUSY );
IF NOT bBusy THEN
ModbusRTU.WriteSingleCoil(Execute:= FALSE);
IF ModbusRTU.Error THEN
iStepConfig := 0;
ELSE
iStepConfig :=iStepConfig+1;
END_IF
END_IF