Quantcast
Channel: SPS-Forum - Automatisierung und Elektrotechnik
Viewing all articles
Browse latest Browse all 46422

MODBUS RTU Coi

$
0
0
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

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


Viewing all articles
Browse latest Browse all 46422


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>