ERP'nin fiziksel dünyayla konuştuğu yer
CANIAS ERP genelde ekranlar ve raporlar üzerinden düşünülür, ama üretim hatlarında bir barkod okuyucu, bir terazi ya da bir PLC ile doğrudan konuşması gereken senaryolar da var. TROIA bu tür donanımlarla iki yoldan iletişim kurar: seri port (RS-232 tipi cihazlar için) ve TCP port (ağ üzerinden konuşan cihazlar/servisler için). İkisi de aynı üç komutu paylaşır: OPENPORT, READFROMPORT/SENDTOPORT, CLOSEPORT.
Seri port açma
OPENPORT {port} {portadi}
PARAMETERS
[BAUDRATE {baudrate}]
[DATABITS {databits}]
[STOPBITS {stopbits}]
[PARITY NONE|ODD|EVEN|MARK|SPACE]
[FLOWCONTROL ...]
[RTS {rts}] [DTR {dtr}]
[ENCODING {encoding}]
[DEBUG TRUE|FALSE];
Örneğin bir barkod okuyucuyu COM1 üzerinden 9600 baud, 8 data bit, 1 stop bit ve parity olmadan açmak:
OPENPORT 'COM1' 'BARKOD'
PARAMETERS
BAUDRATE 9600
DATABITS 8
STOPBITS 1
PARITY NONE;
TCP port açma
OPENPORT TCP {portadi} PORT {portnumarasi} [IPADDRESS {ipadresi}] [ENCODING {encoding}];
OPENPORT TCP 'TERAZI' PORT 4001 IPADDRESS '192.168.5.114' ENCODING 'ISO8859_9';
Veri okuma ve yazma
Her iki port tipi için de aynı komutlar kullanılır:
READFROMPORT {portadi} INTO {degisken};
SENDTOPORT {portadi} {icerik} [{beklemesuresi}];
CLOSEPORT {portadi};
Gerçek bir örnek: teraziden gelen ağırlığı okumak
/* TCP üzerinden bağlı bir teraziden ağırlık okur, hatalıysa kullanıcıyı uyarır. */
LOCAL:
STRING AGIRLIK;
OPENPORT TCP 'TERAZI' PORT 4001 IPADDRESS '192.168.5.114' ENCODING 'ISO8859_9';
IF SYS_STATUS = 1 THEN
MESSAGE 'Teraziye bağlanılamadı: ' + SYS_STATUSERROR TYPE ERROR;
RETURN;
ENDIF;
SENDTOPORT 'TERAZI' 'READ_WEIGHT' 2;
READFROMPORT 'TERAZI' INTO AGIRLIK;
IF AGIRLIK = '' THEN
MESSAGE 'Teraziden veri alınamadı, zaman aşımı.' TYPE WARNING;
ENDIF;
CLOSEPORT 'TERAZI';
Sık yapılan hatalar
- Cihaz protokolünü sorgulamadan komut göndermek —
SENDTOPORTile gönderilen komut string'i tamamen cihazın kendi protokolüne bağlıdır (yukarıdaki'READ_WEIGHT'örnek amaçlıdır); entegrasyona başlamadan önce cihazın kullanım kılavuzundaki komut setini/checksum kurallarını almak, deneme-yanılmayla saatler kaybetmenizi önler. READFROMPORT'un zaman aşımını göz ardı etmek — cihaz yanıt vermezse okuma işlemi sonsuza kadar beklemeyebilir ama boş/hatalı bir sonuç da dönebilir; production kodunda her zaman boş/eksik yanıt senaryosunu ele alın, aksi halde donanım bir an kesildiğinde dialog "asılı" kalmış gibi görünür.- Portu kapatmayı unutmak — özellikle seri portlarda, bir önceki oturumda düzgün kapatılmamış port bir sonraki
OPENPORTçağrısında "port meşgul" hatasına yol açar;CLOSEPORT'u hata durumlarında da mutlaka çalışacak şekilde kurgulayın. - Encoding uyuşmazlığı — cihazdan gelen veri Türkçe karakterler içeriyorsa (örneğin bir etiket yazıcısına gönderilen ürün adı),
ENCODINGparametresini cihazın beklediği kodlamayla eşleştirmemek, dosya G/Ç'de olduğu gibi burada da karakter bozulmalarına yol açar. - TCP ile bağlanırken firewall'u unutmak —
OPENPORT TCPuygulama sunucusundan hedef IP/porta doğrudan bir bağlantı açar; application server ile cihaz arasında bir firewall varsa, sorun genelde kodda değil ağ katmanındadır.
Sıradaki adım
Port iletişimini FTP üzerinden dosya transferiyle karşılaştırmak isterseniz, bir sonraki yazıda MAKEFTPCONNECTION/FTPDOWNLOAD komutlarını ele alacağım — ikisi de "harici bir sistemle konuşma" problemini çözüyor ama farklı senaryolar için tasarlanmışlar.
Yorumlar (0)
Yorum Yaz