Tam Entegre Çözüm: ZMA + HMI + AWS Bulut ile Tartım Sistemleri
Giriş
Modern endüstriyel tesislerde, tartım sistemleri artık sadece "ağırlık göstergesi" olmaktan çıktı. Gerçek zamanlı izleme, bulut tabanlı raporlama, kestirimci bakım ve uzaktan erişim gibi özellikler, rekabet avantajı sağlayan temel gereksinimler haline geldi.
Bu yazımızda, Amazeng ürün portföyünü kullanarak end-to-end bir tartım çözümü inceliyoruz:
- ZMA Data Acquisition: 4 kanala kadar çoklu loadcell girişi, 24-bit ADC ile yüksek hassasiyet
- HMI Endüstriyel Ekran: Touchscreen operatör arayüzü
- AWS Bulut Platform: Veri saklama ve analitik
Not: GDT Dijital Transmitter maksimum 2 kanal + 3 DIO destekler. 4 loadcell'li uygulamalar için ZMA-4 tercih edilmelidir.
Senaryo: Süt İşleme Tesisi
Gereksinimler
Bir süt işleme tesisinde 5 adet 10.000 litrelik tank var:
- Tank 1-3: Ham süt depolama (her biri 4 loadcell)
- Tank 4-5: Pastörize süt (her biri 4 loadcell)
İstenen Özellikler:
- Her tankın anlık ağırlık gösterimi (±0.5kg hassasiyet)
- Operatör panelinde tüm tankların görselleştirilmesi
- Bulut tabanlı günlük raporlama
- Tankerleme sırasında otomatik kayıt
- SMS/email ile doluluk alarmları
- Geçmiş verilere web üzerinden erişim
Sistem Mimarisi
┌─────────────────────────────────────────────────────────────────────┐
│ Tesiste (On-Premise) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Tank 1 │ │ Tank 2 │ │ Tank 3 │ │
│ │ 4x Loadcell │ │ 4x Loadcell │ │ 4x Loadcell │ │
│ └───────┬──────┘ └───────┬──────┘ └───────┬──────┘ │
│ │ mV/V │ mV/V │ mV/V │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ ZMA-4-01 │ │ ZMA-4-02 │ │ ZMA-4-03 │ │
│ │ (Modbus) │ │ (Modbus) │ │ (Modbus) │ │
│ └───────┬──────┘ └───────┬──────┘ └───────┬──────┘ │
│ │ │ │ │
│ │ Modbus TCP │ Modbus TCP │ Modbus TCP │
│ │ 192.168.1.101 │ 192.168.1.102 │ 192.168.1.103 │
│ │ │ │ │
│ └─────────────────┴─────────────────┘ │
│ │ │
│ │ Ethernet Switch │
│ │ │
│ ┌─────────────┴─────────────┐ │
│ │ │ │
│ ┌────▼─────┐ ┌──────▼──────┐ │
│ │ HMI Panel│ │ IoT Gateway │ │
│ │ (10.1") │ │ (RPi/Linux) │ │
│ │ │ │ │ │
│ │ - Qt/QML │ │ - Modbus │ │
│ │ - Modbus │ │ Client │ │
│ │ Client │ │ - MQTT │ │
│ └──────────┘ │ Client │ │
│ └──────┬──────┘ │
└──────────────────────────────────────────┼────────────────────────┘
│
│ MQTT/TLS (8883)
│
┌──────────────────────────────────────────▼────────────────────────┐
│ AWS Cloud │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌────────────────┐ │
│ │ IoT Core │───►│ Timestream │◄───│ Grafana │ │
│ │ │ │ (Time-series│ │ (Dashboard) │ │
│ │ - MQTT │ │ Database) │ └────────────────┘ │
│ │ - Rules │ └──────────────┘ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ ┌──────────────┐ │
│ │ Lambda │───►│ SNS │───► Email/SMS Alarm │
│ │ (Alarms) │ │ (Notify) │ │
│ └─────────────┘ └──────────────┘ │
│ │
└───────────────────────────────────────────────────────────────────┘
Bileşen #1: ZMA Data Acquisition
Neden ZMA-4?
Çoklu loadcell uygulamaları için ZMA Data Acquisition ideal çözümdür:
Yüksek Kanal Sayısı
- GDT: Maksimum 2 kanal (2 loadcell)
- ZMA-4: 4 kanal (4 loadcell) - Tank uygulamaları için ideal
Tam Hassasiyet
- 24-bit ADC her kanalda bağımsız
- Modbus TCP/RTU ile dijital iletişim = Sıfır sinyal kaybı
- ±0.02% tipik doğruluk
Yüksek Örnekleme Hızı
- 1000 SPS'e kadar (samples per second)
- Dinamik tartım uygulamaları için kritik
Uzaktan Kalibrasyon
- Modbus üzerinden yazılımsal kalibrasyon
- Fiziksel müdahale gereksiz
ZMA-4 Konfigürasyonu
Her ZMA-4 cihazı 4 bağımsız analog girişe sahip (mV/V veya 4-20mA):
Tank 1 - ZMA-4-01:
Loadcell 1: Ön Sol → Kanal 1 (mV/V)
Loadcell 2: Ön Sağ → Kanal 2 (mV/V)
Loadcell 3: Arka Sol → Kanal 3 (mV/V)
Loadcell 4: Arka Sağ → Kanal 4 (mV/V)
Toplam Ağırlık = Kanal1 + Kanal2 + Kanal3 + Kanal4
ZMA-4 Modbus Register Map:
Input Registers (Read):
0-1: Kanal 1 Ham Değer (IEEE 754 float, mV/V)
2-3: Kanal 2 Ham Değer (IEEE 754 float, mV/V)
4-5: Kanal 3 Ham Değer (IEEE 754 float, mV/V)
6-7: Kanal 4 Ham Değer (IEEE 754 float, mV/V)
Holding Registers (Read/Write):
100-101: Kanal 1 Kalibrasyon Faktörü
102-103: Kanal 2 Kalibrasyon Faktörü
104-105: Kanal 3 Kalibrasyon Faktörü
106-107: Kanal 4 Kalibrasyon Faktörü
200-201: Toplam Net Ağırlık (kg, hesaplanmış)
202-203: Tare Değeri (kg)
Coils (Write):
0: Tare komutu
1: Zero komutu
Bileşen #2: HMI Endüstriyel Ekran
Neden Touchscreen HMI?
Operatörün tankerleme sırasında ihtiyaç duyduğu fonksiyonlar:
- Net ağırlık okuma
- Tare (dara alma)
- Start/Stop kayıt
- Alarm durumu
10.1 inch HMI Panelimiz, Qt/QML ile geliştirilmiş özel arayüz sunar:
HMI Ekran Tasarımı
Ana Ekran (Grid Layout - 5 Tank)
GridLayout {
columns: 3
rows: 2
// Tank 1
TankWidget {
tankId: 1
tankName: "Ham Süt - Tank 1"
modbusIp: "192.168.1.101"
maxCapacity: 10000
alarmThreshold: 9500
}
// Tank 2-5 benzer şekilde...
}
TankWidget.qml (Tek Tank Komponenti)
Rectangle {
property int tankId
property string tankName
property string modbusIp
property real maxCapacity
property real alarmThreshold
property real currentWeight: modbusClient.getWeight(modbusIp)
property real fillPercent: (currentWeight / maxCapacity) * 100
color: fillPercent > 95 ? "#E74C3C" : "#2ECC71"
border.color: "#34495E"
border.width: 2
radius: 10
ColumnLayout {
anchors.fill: parent
spacing: 10
// Tank adı
Text {
text: tankName
font.pixelSize: 24
font.bold: true
color: "white"
}
// Ağırlık göstergesi
Text {
text: currentWeight.toFixed(1) + " kg"
font.pixelSize: 48
color: "white"
}
// Doluluk yüzdesi
ProgressBar {
from: 0
to: maxCapacity
value: currentWeight
}
Text {
text: "%" + fillPercent.toFixed(1)
font.pixelSize: 20
color: "white"
}
// Tare butonu
Button {
text: "TARE"
onClicked: modbusClient.sendTare(modbusIp)
}
}
}
HMI'nın İki Rolü
- Operatör Arayüzü: Lokal kontrol ve görselleştirme
- IoT Gateway: Modbus verilerini MQTT ile AWS'ye gönderme
HMI paneli Embedded Linux tabanlı olduğu için, üzerinde Python gateway scripti de çalışabilir.
Bileşen #3: IoT Gateway (Raspberry Pi)
GDT cihazları Modbus TCP ile haberleşirken, AWS IoT Core MQTT protokolünü kullanır. Bu nedenle bir gateway gereklidir.
Gateway Yazılımı
gateway.py (Özet)
from pymodbus.client.sync import ModbusTcpClient
from awsiot import mqtt_connection_builder
# Modbus bağlantıları (ZMA-4 cihazları)
zma_clients = {
'tank1': ModbusTcpClient('192.168.1.101', 502),
'tank2': ModbusTcpClient('192.168.1.102', 502),
'tank3': ModbusTcpClient('192.168.1.103', 502),
}
# AWS IoT MQTT bağlantısı
mqtt_conn = mqtt_connection_builder.mtls_from_path(
endpoint="xxxxx.iot.eu-west-1.amazonaws.com",
port=8883,
cert_filepath="certs/gateway-cert.pem",
pri_key_filepath="certs/gateway-private.key",
ca_filepath="certs/AmazonRootCA1.pem",
client_id="amazeng-milk-factory"
)
mqtt_conn.connect()
# Her 1 saniyede bir veri topla ve gönder
while True:
for tank_name, client in zma_clients.items():
# ZMA'dan toplam ağırlık oku (Holding Register 200-201)
result = client.read_holding_registers(address=200, count=2, unit=1)
weight = struct.unpack('f', struct.pack('HH', *result.registers))[0]
# MQTT'ye publish et
payload = json.dumps({
'tank': tank_name,
'weight_kg': weight,
'timestamp': int(time.time() * 1000)
})
mqtt_conn.publish(
topic=f"amazeng/milk-factory/{tank_name}/weight",
payload=payload,
qos=1
)
time.sleep(1)
Not: HMI paneli de bu görevi yapabilir, ayrı bir Raspberry Pi zorunlu değil.
Bileşen #4: AWS Bulut Platformu
AWS IoT Core - Rule Engine
Kural 1: Timestream'e Veri Yazma
SELECT
tank as tank_id,
weight_kg,
timestamp
FROM 'amazeng/milk-factory/+/weight'
Action: Amazon Timestream → MilkFactory database → TankWeights table
Kural 2: Aşırı Doluluk Alarmı
SELECT
tank,
weight_kg
FROM 'amazeng/milk-factory/+/weight'
WHERE weight_kg > 9500
Action: Lambda function → SNS → Email/SMS
Lambda Function - Alarm Bildirimi
alarm_handler.py
import boto3
sns = boto3.client('sns')
def lambda_handler(event, context):
tank = event['tank']
weight = event['weight_kg']
message = f"""
⚠️ TANK KAPASĐTE ALARMI ⚠️
Tank: {tank.upper()}
Ağırlık: {weight:.1f} kg
Kapasite: %{(weight/10000)*100:.1f}
Acil boşaltma gerekebilir!
"""
# SMS gönder
sns.publish(
PhoneNumber='+905551234567',
Message=message
)
# Email gönder
sns.publish(
TopicArn='arn:aws:sns:eu-west-1:123456789:tank-alarms',
Subject='Tank Doluluk Alarmı',
Message=message
)
return {'statusCode': 200}
Amazon Timestream - Veri Depolama
Retention Policy:
- Memory Store: 7 gün (hızlı sorgu)
- Magnetic Store: 2 yıl (arşiv)
Örnek Sorgu (Son 24 Saat Ortalaması):
SELECT
tank_id,
BIN(time, 1h) as hour,
AVG(measure_value::double) as avg_weight
FROM "MilkFactory"."TankWeights"
WHERE time > ago(24h)
GROUP BY tank_id, BIN(time, 1h)
ORDER BY hour DESC
Grafana Dashboard
Grafana + Timestream plugin ile gerçek zamanlı dashboard:
Panel 1: Live Tank Status (Gauge)
- Her tank için doluluk yüzdesi
- Renk kodlaması: Yeşil (<80%), Sarı (80-95%), Kırmızı (>95%)
Panel 2: Trend Grafiği (Time Series)
- Son 7 günün ağırlık trendi
- 5 tank overlay
Panel 3: Günlük Rapor (Table)
- Her tankın min/max/avg ağırlığı
- Toplam süt miktarı (litre cinsine dönüştürülmüş)
Gerçek Dünya Faydaları
1. Üretim Optimizasyonu
Öncesi: Operatör her 2 saatte bir tankları fiziksel olarak kontrol eder.
Sonrası: Grafana'dan anlık görür, sadece doluluk alarmında müdahale eder.
Kazanç: Operatör başka işlere odaklanır, %30 verimlilik artışı.
2. Döküman İzlenebilirliği
Öncesi: El yazısı defter kayıtları, hata riski yüksek.
Sonrası: Timestream'de otomatik loglar, Excel export.
Kazanç: Gıda güvenliği denetimleri için hazır raporlar.
3. Kestirimci Bakım
Örnek: Tank 2'nin ağırlığı son 1 haftadır diğerlerine göre %2 düşük okuyor.
Analiz: Grafana anomaly detection → Loadcell arızası şüphesi
Aksiyon: Planlanmış bakım, üretim duruşu önlenir.
Genişletme Seçenekleri
1. AI/ML ile Tahmin
AWS SageMaker ile model eğitimi:
- Geçmiş verilerden günlük tüketim tahmini
- Stok yönetimi optimizasyonu
2. n8n ile Workflow Otomasyonu
Örnek: Tank 1 doluluk %95'i geçince → n8n → Tankerleme firmasına otomatik sipariş emaili
3. Mobile App
Flutter/React Native ile mobil uygulama:
- Yöneticiler telefonda tüm tankları görebilir
- Push notification ile anında alarmlar
Sonuç
Bu proje, Amazeng ürün ekosisteminin gücünü gösterir:
- ZMA Data Acquisition: 4 kanallı yüksek hassasiyetli veri toplama (24-bit ADC)
- HMI Endüstriyel Ekran: Modern operatör arayüzü
- IoT Gateway: Modbus → MQTT protokol dönüşümü
- AWS Bulut Platform: Sınırsız ölçeklenebilir veri analitiği
Not: 2 loadcell'li daha basit uygulamalar için GDT Dijital Transmitter (2 kanal + 3 DIO) tercih edilebilir.
Benzer bir çözümü kendi tesisınızde uygulamak için teknik ekibimizle iletişime geçin.
İlgili Kaynaklar
- ZMA Data Acquisition - 4 kanallı loadcell uygulamaları için
- GDT Dijital Transmitter - 2 kanal + DIO'lu basit uygulamalar için
- HMI Endüstriyel Ekran Çözümleri
- Cloud & IoT Veri Toplama
- AWS IoT Core ile Veri Toplama