Andmete saatmine PLC-st arvutisse kasutedes RS-485

Ülesande püstitus:

  1. Koostada PLC programm, mis START nupu vajutusel saadaks ühekordselt PLC-st arvutisse stringi: “Tere! see on test.”, RS-485 protokolli vahendusel, kasutades arvuti järjestikporti ja kontrolleri vastavat kommunikatsioonimoodulit.Järgneval nupuvajutusel peab olema saatmine korratav.Andmeside boodikiirus peab olema 9600, kasutades ühte stopp-bitti ning mitte kasutama paari-bitte. Ühe märgi pikkus peab olema 8 bitti.
  2. Teha füüsiline ühendus arvuti ja PLC vahel.
  3. Testida, et loodud lahendus töötab nõuetekohaselt.

Eeldused

  1. Vabalt programmeeritav tööstuskontroller (näiteks S7-1200 CPU 1214C)
  2. RS-485 Kommunikatsioonimoodul (näiteks CM 1241 (RS422/485)) või kontrollerile sisseehitatud RS-485 liides.
  3. Arvuti
  4. RS-485 kaart või RS-485 >< USB adapter arvutile (Näiteks Digitus DA-70157 või FTDI USB-COM485-PLUS1)
  5. Järjestikpordi terminali tarkvara (Näiteks MS Windowsile: PuTTY, RealTerm, HyperTerminal ; UNIX laadsetele süsteemidele: Minicom, CuteCom)
  6. Kaabel PLC ja arvuti ühendamiseks või vahendid selle tegemiseks (D-SUB 9 F ja D-SUB 9 M pistikud ja keerupaariga kaabel)

RS-485 kaabli valmistammine

Seadmete vaheline ühendusÜks võimalikest seadmete vahelistest ühendustest (põhimõtte-diagramm)
RS-485 ühendusskeemÜks võimalikest RS-485 ühendusskeemidest PLC ja arvuti ühendamiseks

CM 1241 RS422/RS485 pesa
Pin numberNimetusKirjeldus
1GNDLoogika ja kommunikatsiooni maa
2TxD+RS422 TxD B (saatmine +)
3TxD+ RS485 Data B (Saatmine ja vastuvõtt +) või RS422 RxD B (Vastuvõtt +)
4RTSPalve saatmiseks (Request to send), TTL tasemega väljund
5GNDLoogika ja kommunikatsiooni maa
6PWR+5V toiteväljund, läbi 100Ω takisti
7N/A
8TXD-RS485 Data A (Saatmine ja vastuvõtt -) või RS422 RxD A (Vastuvõtt -)
9TXD- RS-422 TxD A (saatmine -) 

Allikas: Simatic S7-1200 Programmable controller Manual (lk 825), täiendatud kujul

Digitus Digitus DA-70157 pistik
Pin numberNimetusKirjeldus
1DATA AVastuvõtt ja saatmine –
2DATA BVastuvõtt ja saatmine +
3N/A
4N/A
5GNDLoogika ja kommunikatsiooni maa
6PWR+5V toiteväljund
7N/A
8N/A
9N/A

Märkus: Kui kasutusel on mõni teine USB<>RS-485 adapter või RS-485 kaart, siis tuleb selle ühendusviis järele vaadata selle dokumentatsioonist.

Lahenduse näide (Tarkvara, PC)

Järjestikpordi numbri leidmine

Et teada saada RS-485 pordi numbrit, võib USB adapterite puhul avada Windowsi Device Manager-i ning seejärel ühendada RS-485 ><USB adapteri arvuti USB pordiga, misjärel ilmub Device Manager-i alla uus seade, mille taga on kirjas pordi number.

Pordinumber jagatakse Windowsi poolt, seadme ühendamisel, viimati olnud seadistuse järgi või antakse järgmine teadaolev vaba pordinumber. Pordinumbrit on võimalik hiljem käsitsi muuta.

[joonis]

Järjestikpordi terminali seadistus

[joonis]

PuTTY seadistamine järjestikporditermnaliks

[joonis]

PuTTY kasutamine järjestikporditerminalina: Ilmunud tekst pärast nupuvajutust PLC poolel

Lahenduse näide (Tarkvara, PLC)

Kommunikatsioonimooduli seadistus

  1. Tuleb veenduda, et RS-485 toega kommunikatsioonimoodul (Näiteks CM 1241 RS422/485) on projekti lisatud.
  2. Kommunikatsioonimoodulil tuleb valida õige töörežiim RS-485 põhise võrgu jaoks: 
    [Pilt: Kommunikatsioonimooduli töörežiimi valimine]
  3. Tuleb järgi vaadata kommunikatsioonimooduli süsteemikonstandist aadress, mille abil selle poole programmiliselt pöörduda saab: 
    [Pilt: Kommunikatsioonimooduli süsteemikonstandi leidmine]

Sümbolite nimekiri

NimiAndmetüüpAadressKommentaar
start_btnBOOL%I8.0Surunupp S1
frontmem_start_btnBOOL%M0.0Tõusva frondi tuvastuse mälubitt
Andmeplokk: PORT_CFG_DB [DB1]

Automaatselt genereeritud

Andmeplokk: SEND_CFG_DB [DB2]

Automaatselt genereeritud

Andmeplokk: SEND_PTP_DB [DB3]

Automaatselt genereeritud

Andmeplokk: com_serial [DB4]

NimiAndmetüüpAlgne väärtusKommentaar
bufferstring‘Tere! See on test.’PC-sse saadetav string
stepUSInt0Sammu loend

Programm: Main [OB1]

NimiAndmetüüpKommentaar
serial_portwordSerial port name/address
SCL (TIA V13.1)
// Define which serial port we use:
#serial_port := "Local~CM_1241_(RS422_485)_1";

// Port configuration:
"PORT_CFG_DB"("PORT":=#serial_port,  // Serial port name/address
        PROTOCOL:=0,  // 0: Point-to-point communication protocol
        BAUD:=6,  // 6: Port baud rate: 9600
        PARITY:=1,  // 1: No parity
        DATABITS:=1,  // 1: 8 bits per character
        STOPBITS:=1,  // 1: 1 stop bit
        FLOWCTRL:=1,  // 1: No flow control
        WAITTIME:=2000  // Wait time for XON or CTS after transmission start
        );

// Send procedure configuration:
"SEND_CFG_DB"("PORT":=#serial_port,
        RTSONDLY:=0,  // The time that should elapse after activating RTS until the start of transmission.
        RTSOFFDLY:=0,  // Time that should elapse after the end of transmission until deactivation of RTS.
        BREAK:=12,  // Specifies the bit times for a break, which are sent at the start of the message.
        IDLELINE:=12  // Specifies the bit times for idle line after the break at the start of the message.
        );

// Sending:
"SEND_PTP_DB"("PORT":=#serial_port,
        BUFFER:="com_serial".buffer,  // Send buffer
        LENGTH:=INT_TO_UINT(LEN("com_serial".buffer))  // Buffer length
        );

CASE "com_serial".step OF
  0:
    "PORT_CFG_DB".REQ := 1;
    "com_serial".step := 1;
  1:
    IF "PORT_CFG_DB".DONE THEN
      "PORT_CFG_DB".REQ := 0;
      "SEND_CFG_DB".REQ := 1;
      "com_serial".step := 2;
    END_IF;
  2:
    IF "SEND_CFG_DB".DONE THEN
      "SEND_CFG_DB".REQ := 0;
      "com_serial".step := 3;
    END_IF;
  3:
    IF "start_btn" AND NOT "frontmem_start_btn" THEN
      "SEND_PTP_DB".REQ := 1;
      "com_serial".step := 4;
    END_IF;
  4:
    IF "SEND_PTP_DB".DONE THEN
      "SEND_PTP_DB".REQ := 0;
      "com_serial".step := 3;
    END_IF;
END_CASE;

// Store start button state for rising front detection:
"frontmem_start_btn" := "start_btn";