Seri Protokoller
TEKNİK REHBER SERİ PROTOKOLLER PROFIBUS 2026

PROFIBUS
endüstriyel fieldbus.

12 Mbps'e kadar, 1200 metreye kadar, 126 node — Siemens PLC'lerden proses enstrümantasyonuna, üretim hatlarından su arıtma tesislerine endüstriyel otomasyon standardı.

00 PROFIBUS nedir

PROFIBUS (Process Field Bus) — Siemens, Bosch ve Phoenix Contact öncülüğünde 1987'de geliştirilen, DIN 19245 ve IEC 61158 kapsamındaki açık endüstriyel fieldbus standardı.

Tarihçe ve standartlar

Almanya Federal Araştırma Bakanlığı'nın finanse ettiği PROFIBUS projesi 1987'de başladı. Farklı üreticilerin PLC, sensör ve aktüatörlerinin ortak bir bus üzerinde haberleşmesi hedeflendi. Günümüzde dünya genelinde 60 milyondan fazla node kurulu olup endüstriyel otomasyon alanında en yaygın fieldbus protokollerinden biridir.

VaryantAçıklamaUygulama
PROFIBUS DPDecentralized Periphery. RS-485 tabanlı, 12 Mbps.PLC I/O, servo sürücü, sensör ağları
PROFIBUS PAProcess Automation. MBP (Manchester Bus Powered), 31.25 kbps.Proses ölçüm, IS (intrinsically safe) alan cihazları
PROFIBUS FMSFieldbus Message Specification. Eski, yerini PROFINET aldı.Eski fabrika otomasyon sistemleri

PROFIBUS vs PROFINET

PROFIBUS DPSeri bus (RS-485), deterministik token ring, özel kablo, 12 Mbps, olgunlaşmış teknoloji.
PROFINETEthernet tabanlı (100 Mbps / 1 Gbps), TCP/IP + IRT gerçek zamanlı, standart ağ altyapısı kullanır.
NOT

Siemens yeni projeler için PROFINET önermektedir. Ancak kurulu PROFIBUS altyapılarının ömrü uzundur ve PROFIBUS DP hâlâ milyonlarca çalışan sistemde aktif olarak kullanılmaktadır. Mevcut sistemi anlamak PROFINET geçişini de kolaylaştırır.

01 Fiziksel katman (PROFIBUS DP)

PROFIBUS DP, RS-485 tabanlı diferansiyel seri bus kullanır. Mor (violet) renkli 9-pin D-sub konnektörlü özel kablo ile hız-mesafe dengesi sağlar.

Kablo ve konnektör

Kablo rengiStandart PROFIBUS kablosu mor (violet) renktedir. Bu renk, sahada RS-485 veya diğer kablolardan ayırt etmek için belirlenmiştir.
Konnektör9-pin D-sub (DB9). Pin 3: RxD/TxD-P (B/+), Pin 8: RxD/TxD-N (A/−), Pin 6: VP (+5V), Pin 5: DGND.
Kablo özellikleri100-150 Ω empedans, <30 pF/m kapasitans, twisted pair, ekranlı.

Hız ve maksimum mesafe tablosu

Baud rateMax segment mesafesiTipik uygulama
9.6 kbps1200 mUzak sahada yavaş sensörler
19.2 kbps1200 m
93.75 kbps1200 m
187.5 kbps1000 mEndüstriyel standart hız
500 kbps400 mServo sürücü, hızlı I/O
1.5 Mbps200 m
3 Mbps100 m
6 Mbps100 m
12 Mbps100 mHızlı motion control

Aktif terminasyon

PROFIBUS DP bus'ının her iki ucundaki konnektörde terminasyon etkinleştirilir. PROFIBUS terminasyon pasif direnç yerine aktif terminasyon devresi (VP − 390Ω − A hattı − 220Ω − B hattı − 390Ω − DGND) kullanır. Bu, fail-safe bias ve terminasyonu tek devre ile sağlar.

  VP (+5V)
    │
   390Ω
    │
    ├──── A hattı (RxD/TxD-N)
    │
   220Ω
    │
    ├──── B hattı (RxD/TxD-P)
    │
   390Ω
    │
  DGND
    
UYARI

Her PROFIBUS segmentinde yalnızca iki uç konnektörde terminasyon etkin olmalıdır. Ortadaki konnektörlerde terminasyon kapalı olmalıdır. Yanlış terminasyon refleksiyon ve iletişim hatalarına yol açar.

02 Token Ring protokolü

PROFIBUS fiziksel topolojisi bus (lineer), mantıksal topolojisi ise token ring'dir. Birden fazla master varsa sırayla konuşma hakkı (token) elde ederler.

Token geçişi (token passing)

Aktif istasyonlar (master'lar) arasında token dolaşır. Tokeni elinde bulunduran master istediği slave ile haberleşebilir, sonra tokeni bir sonraki master'a geçirir. Bus arbitrasyonu ihtiyacı yoktur — deterministik zamanlama sağlanır.

  Master A (addr 0) ──token──► Master B (addr 2) ──token──► Master A
         │                              │
         ▼                              ▼
    Slave 5, 6, 7               Slave 10, 11

  GAP list: Masters ring = [0, 2]
  Slave listesi: DP master her slave'le veri değişimi yapar.
    

FDL katmanı (Fieldbus Data Link)

PROFIBUS veri bağlantı katmanı (Layer 2) FDL olarak adlandırılır. FDL üç mesaj tipi tanımlar: SD1 (8 byte sabit), SD2 (değişken uzunluk), SD3 (5 byte sabit) ve token frame.

Frame tipiSD byteKullanım
SD10x10Data Exchange, kısa sabit frame
SD20x68Değişken uzunluk — standart DP mesajı
SD30xA25 byte sabit uzunluk
Token0xDCMaster'dan master'a token transferi
Short ACK0xE5Slave pozitif yanıtı (1 byte)

İstasyon adresleme

Her PROFIBUS node'u 0-126 arasında benzersiz bir adrese sahiptir. Adres 127 broadcast içindir. Master adresler genel olarak düşük (0, 1, 2...), slave adresler ise daha yüksek değerlerde olur. Adres ataması DIP switch, yazılım veya GSD üzerinden yapılır.

03 PROFIBUS DP mesaj tipleri

DP-V0 siklik veri değişiminden DP-V2'nin isokron moduna — PROFIBUS DP protokol versiyonları ve servis tipleri.

DP versiyonları

VersiyonÖzellikler
DP-V0Temel siklik veri değişimi, parametrelendirme ve konfigurasyon, diagnostics.
DP-V1Asiklik veri okuma/yazma (DP-V1 Class 1/2), alarm mekanizması, upload/download.
DP-V2İsokron mod (eş zamanlı slave tazeleme), broadcast Data Exchange, slave-slave iletişimi.

Temel servis tipleri

SRD (Send and Request Data)Veri gönder ve yanıt iste. Siklik I/O değişiminin temel servisi. Her DP siklusunda master slave'e çıkış verisini gönderir, giriş verisini alır.
SDN (Send Data with No Acknowledge)Broadcast/multicast veri gönderimi. Onay beklenmez. Tüm slave'lere eş zamanlı komut için kullanılır.
SDA (Send Data with Acknowledge)Tek slave'e veri gönder, onay iste. Asiklik parametrelendirme için kullanılır.

Siklik DP veri değişimi

  DP Master                        DP Slave (addr 5)
  ─────────────                    ─────────────────
  1. Set_Prm (parametrelendirme) →
                                 ← Short ACK (0xE5)
  2. Chk_Cfg (konfigurasyon)    →
                                 ← Short ACK
  3. Get_Cfg (doğrulama)        →
                                 ← Cfg data
  4. Data_Exchange (siklik)     ←──►  (her siklus)
     [çıkış verisi]             →
                                 ← [giriş verisi]
  5. Slave_Diag (tanılama)      →    (periyodik)
                                 ← Diag data
    

DP-V1 asiklik okuma/yazma

PROFIBUS DP-V1 servis yapısı
/* DP-V1 MS1 (Class 1 asiklik) okuma isteği: */
/* [SD2][Uzunluk][Uzunluk][SD2][DA][SA][FC][DSAP][SSAP][FCV_CNT] */
/* [Function=READ][Slot][Index][Uzunluk][FCS][ED] */
/*                 ↑     ↑               */
/*                 │     └── parametre index (0-255)
/*                 └──────── slot numarası (0=cihaz, 1+= modül)

04 GSD dosyası

GSD (General Station Description) — PROFIBUS slave cihazının özelliklerini tanımlayan yapılandırma dosyası. ASCII metin formatında, .gsd uzantılı.

GSD yapısı

ET200S.gsd — kısaltılmış örnek
; Siemens ET200S distributed I/O GSD (kısaltılmış)
#Profibus_DP

GSD_Revision      = 5
Vendor_Name       = "Siemens"
Model_Name        = "IM151-1 STANDARD"
Revision          = "V5.2"
Ident_Number      = 0x0971            ; üretici tarafından atanan benzersiz ID
Protocol_Ident    = 0
Station_Type      = 0                 ; 0=DP slave
FMS_supp          = 0
Hardware_Release  = "V5"
Software_Release  = "V5.2"

; Desteklenen baud rate'ler:
9.6_supp          = 1
19.2_supp         = 1
93.75_supp        = 1
187.5_supp        = 1
500_supp          = 1
1.5M_supp         = 1
3M_supp           = 1
6M_supp           = 1
12M_supp          = 1

Max_Diag_Data_Len = 58
Max_User_Prm_Data_Len = 128
Max_Input_Len     = 244              ; max giriş byte sayısı
Max_Output_Len    = 244              ; max çıkış byte sayısı
Max_Data_Len      = 488

; Modüller:
Module = "2DI"  0x11                 ; 2 dijital giriş modülü
EndModule

Module = "2DO"  0x21                 ; 2 dijital çıkış modülü
EndModule

Module = "2AI"  0x51 0x84 0x08 0x05  ; 2 analog giriş (16-bit)
EndModule

GSD dosyası kullanımı

Ident_NumberHer slave'in benzersiz PROFIBUS kimliği. Master yapılandırma sırasında slave'i bu numara ile tanır.
Max_Diag_Data_LenSlave'in gönderebileceği maksimum diagnostics verisi uzunluğu (byte).
Module tanımlarıModüler slave'lerde hangi modüllerin kullanılabileceğini ve I/O byte haritasını tanımlar.

Python ile GSD parse

Python — basit GSD parser
import re

def parse_gsd(filepath: str) -> dict:
    """Temel GSD anahtar-değer çiftlerini ayrıştır."""
    props = {}
    modules = []
    current_module = None

    with open(filepath, 'r', encoding='latin-1') as f:
        for line in f:
            line = line.strip()
            if line.startswith(';') or not line:
                continue
            if line.startswith('Module'):
                m = re.match(r'Module\s*=\s*"([^"]+)"\s+(.*)', line)
                if m:
                    current_module = {'name': m.group(1), 'cfg': m.group(2)}
            elif line == 'EndModule' and current_module:
                modules.append(current_module)
                current_module = None
            else:
                m = re.match(r'(\w+)\s*=\s*(.*)', line)
                if m:
                    props[m.group(1)] = m.group(2).strip('"')

    props['modules'] = modules
    return props

gsd = parse_gsd('ET200S.gsd')
print('Cihaz:',    gsd.get('Model_Name'))
print('Ident ID:', gsd.get('Ident_Number'))
print('Modüller:', [m['name'] for m in gsd['modules']])

05 Linux PROFIBUS stack

Linux üzerinde PROFIBUS DP master ve slave işlevselliği için açık kaynak yazılım araçları ve USB adaptörler.

linprofibus açık kaynak stack

bash — linprofibus kurulumu
# linprofibus kaynak kodu (eski ama referans değeri yüksek):
git clone https://github.com/mbuesch/linprofibus.git
cd linprofibus
pip install -e .

# Alternatif: pyprofibus (Python, daha aktif geliştirme):
pip install pyprofibus

pyprofibus ile DP master

Python — pyprofibus DP master
import pyprofibus
import pyprofibus.phy_serial as phy_serial

# GSD dosyasından slave yapılandırması:
gsd = pyprofibus.GsdInterp.fromFile("ET200S.gsd")
slaveDesc = pyprofibus.DpSlaveDesc(identNumber=gsd.getIdentNumber(),
                                    slaveAddr=5)

# Slave parametrelendirme verisi (GSD'den üret):
slaveDesc.setCfgDataElements(gsd.getCfgDataElements())
slaveDesc.setUserPrmData(gsd.getUserPrmData(enableBitInput=True,
                                            enableBitOutput=True))
slaveDesc.setWatchdog(timeoutMs=500)

# PHY: USB-RS485 adaptör üzerinden PROFIBUS
phy = phy_serial.CpPhy(port="/dev/ttyUSB0", debug=False)

# DP master oluştur (adres 0)
dp = pyprofibus.DPM1(phy=phy, masterAddr=0, debug=True)
dp.addSlave(slaveDesc)
dp.initialize()

try:
    while True:
        # Slave 5'e çıkış ver, girişini oku:
        outData = {5: bytes([0xFF, 0x00])}    # Tüm dijital çıkışlar HIGH
        inData  = dp.run(outData)

        if inData and 5 in inData:
            inputs = inData[5]
            print(f'Slave 5 girişleri: {inputs.hex()}')
except KeyboardInterrupt:
    dp.destroy()

PROFIBUS USB adaptörler

HMS NetBiter EC310Ethernet/PROFIBUS gateway, Linux üzerinden REST API ile erişim imkânı.
SIMATIC CP5711Siemens USB-MPI/PROFIBUS adaptör. Sadece Windows için resmi sürücü; Wine ile sınırlı Linux desteği.
USB-RS485 dönüştürücüStandart USB-RS485 adaptör + pyprofibus yeterlidir. 1.5 Mbps ve altı hızlarda iyi çalışır.
bash — pyprofibus test araçları
# Bus üzerindeki aktif node'ları tara:
python -m pyprofibus.tools.profiscan --port /dev/ttyUSB0 --baud 187500

# Slave diagnostics oku:
python -m pyprofibus.tools.profidiag --port /dev/ttyUSB0 --slave 5

06 SIMATIC S7 ile entegrasyon

Siemens SIMATIC S7 PLC sistemlerinde PROFIBUS DP yapılandırması — TIA Portal üzerinden DP master, slave ve I/O haritalama.

TIA Portal PROFIBUS yapılandırması

TIA Portal adımları
1. Yeni proje oluştur:
   File → New Project → İsim gir → Create

2. CPU ekle (örn. S7-315-2DP):
   Add new device → SIMATIC S7-300 → CPU 315-2 DP

3. DP master yapılandırması:
   Device view → CPU → MPI/DP interface → Properties
   Operating mode: DP master
   Baud rate: 187.5 kbps
   Bus address: 0

4. Slave ekle:
   Network view → sağ tık → Add device from GSD
   GSD dosyasını seç → DP Slave olarak ekle
   Slave adresini ata: 5

5. I/O adresleri:
   Device view → Slave → Giriş/çıkış adres aralıklarını ayarla
   Örn: Input:  IB100-IB101 (slave 5 dijital girişler)
        Output: QB100-QB101 (slave 5 dijital çıkışlar)

S7 PLC programında PROFIBUS I/O erişimi

SCL — PROFIBUS I/O erişimi
// TIA Portal SCL kodu — slave 5 I/O erişimi
PROGRAM PLC_PRG

VAR
    conveyor_run  : BOOL;
    sensor_active : BOOL;
    output_byte   : BYTE;
END_VAR

// PROFIBUS slave 5 girişini oku (IB100)
sensor_active := IB100.0;     // Bit 0: proximity sensor

// Konveyör mantığı
IF sensor_active THEN
    conveyor_run := FALSE;    // Sensör aktif → durduR
    output_byte  := 16#00;
ELSE
    conveyor_run := TRUE;
    output_byte  := 16#FF;    // Tüm çıkışlar HIGH
END_IF;

// Slave 5 çıkışına yaz (QB100)
QB100 := output_byte;

Diagnostics okuma

Python — SIMATIC S7 PROFIBUS diagnostics (snap7)
import snap7
from snap7.util import *

# snap7 ile S7 PLC'ye bağlan:
plc = snap7.client.Client()
plc.connect('192.168.1.10', 0, 1)   # IP, rack, slot

# DB50'den slave diagnostics verisi oku (önceden DB'ye yaz):
# (PLC programında: SFB54 "RALRM" ile alarm okunur)
diag_data = plc.db_read(50, 0, 20)

if get_bool(diag_data, 0, 0):
    print('Slave 5: Hata var!')
    print('Diagnostics:', diag_data.hex())

plc.disconnect()

07 PROFIBUS PA

PROFIBUS PA (Process Automation) — intrinsik güvenlik gerektiren patlayıcı ortamlar için proses enstrümantasyonu standardı. 31.25 kbps, MBP sinyal katmanı.

PROFIBUS PA fiziksel katmanı (MBP)

PA, RS-485 yerine MBP (Manchester Bus Powered) sinyal katmanını kullanır. MBP kablosu üzerinden hem veri iletilir hem de alan cihazlarına güç sağlanır. Bu özellik patlayıcı bölgelerde (Ex zone 0/1/2) kablo azaltma ve güvenlik avantajı sağlar.

ÖzellikPROFIBUS DPPROFIBUS PA
Sinyal katmanıRS-485MBP (IEC 61158-2)
Baud rate9.6k – 12M bps31.25 kbps (sabit)
Kablo gücüHayırEvet (9–32 VDC, 10–500 mA)
Intrinsic safetyHayır (sadece izolasyon)Evet (Ex ia/ib)
Max cihaz/segment32 (std UL)10 (Ex)/32 (non-Ex)
Max segment mesafeHıza bağlı1900 m

DP/PA segment coupler

PROFIBUS PA segmenti, yüksek hızlı PROFIBUS DP ağına bir segment coupler (bağlantı köprüsü) aracılığıyla bağlanır. Coupler, DP hızını (örn. 1.5 Mbps) PA hızına (31.25 kbps) dönüştürür ve PA cihazlarına güç sağlar.

  PROFIBUS DP (1.5 Mbps)
  S7-315 ──────────────── DP/PA Coupler ──────── PA Segment
                          (Pepperl+Fuchs          ├── Pressure TX
                           SK2 veya               ├── Flow TX
                           Siemens IM157)         ├── Temperature TX
                                                  └── Level TX
    

PA alan cihazları

Endress+Hauser CerabarPROFIBUS PA basınç transmitteri, 4-20mA + PA çift protokol, HART uyumlu model de mevcut.
Yokogawa EJA serisiDiferansiyel basınç transmitteri, PA + Foundation Fieldbus seçeneği.
ABB TB82PBSıcaklık transmitteri, Pt100/Pt1000, PROFIBUS PA, Ex ia sertifikalı.

08 Pratik: Linux DP master ile ET200S haberleşmesi

Linux gömülü sistem üzerinde pyprofibus ile Siemens ET200S distributed I/O slave haberleşmesi, konveyör belt sensör/aktüatör ağı kurulumu ve PROFINET göç notu.

Bağlantı şeması

bağlantı şeması
Linux PC / Embedded Board          ET200S (addr 5)
─────────────────────              ────────────────
/dev/ttyUSB0 (USB-RS485)
  │                                  ┌──────────────────┐
  └── A (pin 3, DB9) ──────────────► │ A (RxD/TxD-N)    │
      B (pin 8, DB9) ──────────────► │ B (RxD/TxD-P)    │
  [terminasyon kapalı]               │ [terminasyon açık]│
                                     └──────────────────┘
  [bus ucunda]:
  Bus sonu konnektörü → terminasyon switch ON
  Baud rate: 187.5 kbps

Konveyör belt I/O ağı

Python — conveyor_control.py
import pyprofibus
import pyprofibus.phy_serial as phy_serial
import time

# Konfigürasyon
SLAVE_ADDR   = 5
BAUD_RATE    = 187500
PORT         = "/dev/ttyUSB0"
GSD_FILE     = "ET200S.gsd"

# Kurulum
gsd      = pyprofibus.GsdInterp.fromFile(GSD_FILE)
slaveCfg = pyprofibus.DpSlaveDesc(identNumber=gsd.getIdentNumber(),
                                   slaveAddr=SLAVE_ADDR)
slaveCfg.setCfgDataElements(gsd.getCfgDataElements())
slaveCfg.setUserPrmData(gsd.getUserPrmData())
slaveCfg.setWatchdog(timeoutMs=500)

phy = phy_serial.CpPhy(port=PORT, debug=False)
dp  = pyprofibus.DPM1(phy=phy, masterAddr=0, debug=False)
dp.addSlave(slaveCfg)
dp.initialize()

print("PROFIBUS DP başlatıldı. Konveyör kontrol başlıyor...")

try:
    conveyor_on = True
    while True:
        # Çıkış: konveyör motoru bit0, alarm ışığı bit1
        out_byte = 0x01 if conveyor_on else 0x00
        out_byte |= 0x02 if not conveyor_on else 0x00

        in_data = dp.run({SLAVE_ADDR: bytes([out_byte, 0x00])})

        if in_data and SLAVE_ADDR in in_data:
            inputs = in_data[SLAVE_ADDR]
            stop_sensor   = bool(inputs[0] & 0x01)   # proximity
            e_stop        = bool(inputs[0] & 0x02)   # acil stop
            jam_sensor    = bool(inputs[0] & 0x04)   # sıkışma

            if e_stop or jam_sensor:
                conveyor_on = False
                print(f'DURDURULDU: acil={e_stop} sıkışma={jam_sensor}')
            elif not stop_sensor:
                conveyor_on = True

        time.sleep(0.01)   # 100 Hz kontrol döngüsü

except KeyboardInterrupt:
    dp.destroy()
    print("Durduruldu.")

PROFIBUS → PROFINET geçiş notu

AdımAksiyon
DonanımPROFIBUS DP slave modüllerini PROFINET uyumlu modüllerle değiştir (ET200SP/ET200MP). DP/PN coupler ile geçiş dönemi çözümü de mümkündür.
KablolamaStandart Cat5e/Cat6 Ethernet kablosu yeterlidir. Endüstriyel RJ45 konnektörler (IE FC) kullan.
PLCS7-300 → S7-1500 geçişi veya mevcut S7-300 üzerine CP 343-1 Ethernet modülü.
YazılımStep7 projesi TIA Portal'a SIMATIC Migration Tool ile aktarılır. PROFIBUS I/O adres atamaları korunur.
PerformansPROFINET IRT modu <1ms deterministik cycle süresi — yüksek hızlı motion control için PROFIBUS'tan üstün.