Andmete saatmine PLC-st arvutisse kasutedes RS-485
Ülesande püstitus:
- 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.
- Teha füüsiline ühendus arvuti ja PLC vahel.
- Testida, et loodud lahendus töötab nõuetekohaselt.
Eeldused
- Vabalt programmeeritav tööstuskontroller (näiteks S7-1200 CPU 1214C)
- RS-485 Kommunikatsioonimoodul (näiteks CM 1241 (RS422/485)) või kontrollerile sisseehitatud RS-485 liides.
- Arvuti
- RS-485 kaart või RS-485 >< USB adapter arvutile (Näiteks Digitus DA-70157 või FTDI USB-COM485-PLUS1)
- Järjestikpordi terminali tarkvara (Näiteks MS Windowsile: PuTTY, RealTerm, HyperTerminal ; UNIX laadsetele süsteemidele: Minicom, CuteCom)
- 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
Üks võimalikest seadmete vahelistest ühendustest (põhimõtte-diagramm)
Üks võimalikest RS-485 ühendusskeemidest PLC ja arvuti ühendamiseks
CM 1241 RS422/RS485 pesa | ||
---|---|---|
Pin number | Nimetus | Kirjeldus |
1 | GND | Loogika ja kommunikatsiooni maa |
2 | TxD+ | RS422 TxD B (saatmine +) |
3 | TxD+ | RS485 Data B (Saatmine ja vastuvõtt +) või RS422 RxD B (Vastuvõtt +) |
4 | RTS | Palve saatmiseks (Request to send), TTL tasemega väljund |
5 | GND | Loogika ja kommunikatsiooni maa |
6 | PWR | +5V toiteväljund, läbi 100Ω takisti |
7 | N/A | |
8 | TXD- | RS485 Data A (Saatmine ja vastuvõtt -) või RS422 RxD A (Vastuvõtt -) |
9 | TXD- | RS-422 TxD A (saatmine -) |
Allikas: Simatic S7-1200 Programmable controller Manual (lk 825), täiendatud kujul
Digitus Digitus DA-70157 pistik | ||
---|---|---|
Pin number | Nimetus | Kirjeldus |
1 | DATA A | Vastuvõtt ja saatmine – |
2 | DATA B | Vastuvõtt ja saatmine + |
3 | N/A | |
4 | N/A | |
5 | GND | Loogika ja kommunikatsiooni maa |
6 | PWR | +5V toiteväljund |
7 | N/A | |
8 | N/A | |
9 | N/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.
Järjestikpordi terminali seadistus
PuTTY seadistamine järjestikporditermnaliks
PuTTY kasutamine järjestikporditerminalina: Ilmunud tekst pärast nupuvajutust PLC poolel
Lahenduse näide (Tarkvara, PLC)
Kommunikatsioonimooduli seadistus
- Tuleb veenduda, et RS-485 toega kommunikatsioonimoodul (Näiteks CM 1241 RS422/485) on projekti lisatud.
- Kommunikatsioonimoodulil tuleb valida õige töörežiim RS-485 põhise võrgu jaoks:
- Tuleb järgi vaadata kommunikatsioonimooduli süsteemikonstandist aadress, mille abil selle poole programmiliselt pöörduda saab:
Sümbolite nimekiri
Nimi | Andmetüüp | Aadress | Kommentaar | |
---|---|---|---|---|
start_btn | BOOL | %I8.0 | Surunupp S1 | |
frontmem_start_btn | BOOL | %M0.0 | Tõ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]
Nimi | Andmetüüp | Algne väärtus | Kommentaar | |
---|---|---|---|---|
buffer | string | ‘Tere! See on test.’ | PC-sse saadetav string | |
step | USInt | 0 | Sammu loend |
Programm: Main [OB1]
Nimi | Andmetüüp | Kommentaar | |
---|---|---|---|
serial_port | word | Serial 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";