I. Önsöz:
Akıllı Ekran, ürünler piyasaya sürüldükten sonra medikal, endüstriyel kontrol ve otomotiv gibi çeşitli alanlarda yaygın olarak kullanılmaya başlandı. Basitçe söylemek gerekirse, karmaşık grafik yükleme, ayarlama, görüntüleme ve hatta girişi işleyebilen bir mikrodenetleyici ile birleştirilmiş bir ekrandır ve dış cihaz (yani ana bilgisayar) basit komutlarla etkileşimli işlemler gerçekleştirebilir, bu nedenle çeşitli ihtiyaçlar için oldukça uygundur. Görüntülenen veya kontrol edilen çeşitli uygulama türleri.
Akıllı Ekran, çeşitli iletişim arayüzlerini destekler. Şu anda en yaygın kullanılanlar CAN/CANopen, RS485/Modbus'tur ve gelecekte daha fazla seçenek sunulacaktır. Bunlar arasında RS485/Modbus, endüstride popüler bir iletişim arayüzüdür ve çeşitli RS485 cihazları makul fiyatlara piyasada kolayca bulunabilir. İki kablo (RS485_A/RS485_B) iletişim kurabildiği sürece hat yapısı basittir ve iletişim arayüzü genellikle bir işletim sisteminde "Seri Bağlantı Noktası" biçiminde sunulur ve her platformun karşılık gelen bir geliştirme işlevi kitaplığı vardır. Ayrıca Modbus protokolünün anlaşılması oldukça kolaydır, bu nedenle denemeler ve açıklamalar için aşağıdaki gibi örnek sunduk.
Bu makale, Smart Display'in basitten derine nasıl kontrol edileceğini tanıtacak, kontrol ilkesini anlatacak ve son olarak platformlar arası uygulamaların nasıl yapıldığını tanıtacaktır. İster bir endüstriyel ekipman uzmanı olun, ister bir DIY(Kendin Yap) oyuncusu olun, Smart Display dünyasına bizimle hoş geldiniz!
II. Gereksinimler:
■Akıllı Ekran_RS485
Bağlantı testi için RS485 arayüzünü destekleyen bir Akıllı Ekran gereklidir.
■RS485 Donanım Kilidi
PC/Raspberry Pi gibi bir ana bilgisayarın normalde RS485 bağlantı noktası olmadığından, gerekirse çeşitli USB'den RS485'e donanım kilidi kullanabiliriz.

Şekil 2-1 Types of USB to RS485 Dongle
■ANA Cihaz
Yukarıdaki gereksinimlere ulaşıldığında, Host olarak bir test yürütme ortamı seçebilirsiniz. Bir ana cihaz için tek koşul, işletim sistemi Windows, MacOS, çeşitli Linux (Raspberry Pi için Raspbian dahil) veya Tek kartlı bilgisayar mimari, Arduino vb. ana cihazın seri portunu ne olursa olsun okuyup yazabilmesidir.
Doğrudan aşağıdaki resimde olduğu gibi bir ana cihaz olarak kullanılabilen, kolaylık sağlaması için yerleşik RS485 Demo.set'e sahip tek kartlı bir bilgisayar oluşturuyoruz.

Model No. WUACLB120V0000N0NX01
III. Kontrol arayüzü için basit test:
■Kontrol kodunu al
Smart'ta bir ana bilgisayarla nasıl işbirliği yapılacağını anlamak için. İlk olarak kontrol kodunu almamız gerekiyor. En kolay yol, onu Smart Display GUI Builder'dan almaktır. GUI Builder/Oluşturucu, Smart Display için mükemmel bir destek yazılımıdır. Herhangi bir program yazmadan kullanıcı arayüzünü öğrenmemize, çalıştırmamıza, tasarlamamıza ve görüntülememize yardımcı olabilir. WYSIWYG özelliği ile butonları veya nesneleri sürükleyerek veya tıklayarak kullanıcı arayüz tasarımı yapılabilmektedir. Ayrıca, Smart Display ile kaynak kodunu paylaşan ve böylece fiziksel cihazla aynı görünüm ve davranışı sağlayan yerleşik bir simülatör vardır. Daha da iyisi, ücretsiz!
► Contact for Smart Display GUI Builder

Şekil 3-1 Smart Display GUI Builder
Uygulamayı Windows işletim sisteminde çalıştırmak için GUI Builder'a çift tıklayın, bir proje açın. Burada 5" RS485 Akıllı Ekran WL0F00050000FGDAASA00'ı seçiyoruz ve aşağıdaki varsayılan geçerli durum Araç'tır. Proje adını girin, proje oluşturmak için Oluştur düğmesine basın. Daha önce oluşturulmuşsa, sağdaki menüden doğrudan projeyi de seçebilirsiniz.

Şekil 3-2 Create project
Proje açıldığında, önce arayüzü seçin

Şekil 3-3 Select interface

Şekil 3-4 Set interface parameters
Arayüz için RS485'i seçin ve ana bilgisayarın RS485 Portu, RS485 donanım kilidi için bağlı portun gerçek portu olarak ayarlanmalıdır. Herhangi bir şüpheniz varsa, cihaz yöneticisinde bağlantı noktası adını kontrol edebilirsiniz (defalarca fişini çekin ve kaybolduğunu veya hangi görüntüleri gösterdiğini görün). Baud(bilgi işleme hızı birimi) hızı varsayılan 115200 değerini koruyabilir.

Şekil 3-5 Com Port display of device administrator
Ancak henüz Smart Display RS485 cihazı yoksa farketmez, Arayüz RS485'i seçtiği sürece RS485 Portu şimdilik göz ardı edilebilir, çünkü artık sadece simülatörü kullanacağız ve Smart'a bağlanmayacağız. Cihazı pratik olarak görüntüleyin.
Çalıştırmak için GUI ile Simülatör/Simülatör'e tıklayın:

Şekil 3-6 To run Simulator
Yürütmeden sonra simülasyon ekranını, her nesnenin kontrol öğelerini görebilirsiniz; ve ekranın sağ tarafında iletişim veri kaydı. Komutun içeriğini uygun şekilde görmek için herhangi bir nesnenin değerini değiştirin:

Şekil 3-7 Change the content of the object and the control code
Her eylem iki komut TX/RX görecektir, çünkü görüntüleme cihazı (artık aslında bir öykünücü olsa bile) komutun alındığını belirtmek için komutu aldıktan sonra aynı komutu onay olarak geri gönderecektir.
Farklı nesneler için birkaç farklı değer kaydediyoruz ve bir sonraki adım, fiziksel cihazı kontrol etmek için kullanılabilir.

Table 3-1 Control code
■Kablo bağlantısı:
RS485, sinyalleri iletmek ve almak için diferansiyel çifti kullanır, bu iki kablo bağlanabildiği sürece topraklama kablosuna bile gerek yoktur. RS485'in sinyal hattının adı A/B'dir, onu takip edin (A’dan A’ya bağlantı, B’den B’ye bağlantı). Bir ana bilgisayar kontrol kodlarını kendisinden nasıl iletir? Bir seri porta yazabildiği sürece. Ancak, teste devam etmeden önce akılda tutulması gereken iki şey vardır.

Şekil 3-8 RS485 wire connection
How is a host to transmit control codes from itself? As long as it can write to a serial port. However, there are two things to keep in mind before go ahead for testing.
1. Farklı işletim sistemlerindeki Com Port adları farklı olduğu için lütfen test etmeden önce kontrol edip onaylayınız. Örnekler için aşağıdaki tablo:

Tablo 3-2 Serial port names for various operating systems
2. Bazı işletim sistemlerinin Com Port izni varsayılan olarak açık değildir. Kullanmadan önce ayarlanmalıdır. Örnek olarak Linux/Ubuntu'yu ele alırsak, Com Port'un adı ttyUSB0 ise, onu terminalde çalıştırmanız yeterlidir:
sudo chmod 666 /dev/ttyUSB0
Aşağıda iki test yöntemi sağlanmıştır:
■Seri Port Terminal Kontrolü
Onaltılık girişi destekleyen seri bağlantı noktası terminal yazılımını kullanın ve bağlandıktan sonra doğrudan onaltılık kontrol kodunu girin:

Şekil 3-9 Send Control Codes with Terminal Program
Normal ise, cihaz üzerindeki nesnelerin farklı kontrol kodlarına göre hareket ettiğini görebilmeniz gerekir.
Ancak bu yöntem sadece bağlantının başarılı olup olmadığını test etmek için kullanılır ve pratik uygulamada pek uygun değildir. En iyi sonuçları elde etmek için, program aracılığıyla yapılmalıdır. Hangi dilde olduğuna gelince? Aslında yapabiliriz, önce popüler çapraz platform programlama dili python ile deneyelim.
■Python kullanımı
Aşağıdaki programlar python3 kullanılarak yürütülür. Program yapısı oldukça basittir, seri bağlantı noktasına her saniyede bir doğrudan üç set kontrol kodu yazmanız yeterlidir, böylece cihazdaki alet dönmeye devam eder.
import serial
from time import sleep
"""
The name of Com Port varies according to the operating system, For example:
Raspberry Pi: /dev/ttyUSBn (e.g. /dev/ttyUSB0)
Windows: COMn (e.g. COM22)
"""
# Raspberry Pi / Rasbian
# COM_PORT = '/dev/ttyUSB0'
COM_PORT = 'COM22'
v000 = bytes.fromhex('7B06000600006251')
v050 = bytes.fromhex('7B0600060032E384')
v100 = bytes.fromhex('7B060006006463BA')
ser = serial.Serial(COM_PORT, 115200)
while True:
ser.write(v000)
sleep(1.0)
ser.write(v050)
sleep(1.0)
ser.write(v100)
sleep(1.0)
ser.write(v050)
sleep(1.0)
|
Python kaynak kodu çeşitli platformlarda yürütülebilir, böylelikle seri bağlantı noktası doğru adlandırıldığı sürece, uygun bağlantı test tezgahıyla düzgün çalışması gerekir.
Ancak örnek olarak bu sabit kontrol kodları, pratik uygulamalarla uyumlu olmamalıdır, bu nedenle, onlara tam anlam verebilmek için bu talimatların içeriğini anlamamız gerekir.
IV. Kontrol kodu analizi
■Karşılaştırmalı analiz
Aynı nesne için farklı değerlere sahip komutları karşılaştırın:

Mavi kısmın belirlediğimiz nesnenin değeri olduğunu bulmak zor değildir.
Farklı nesneleri karşılaştırın, aynı değer komutu:

Mavi kısım, açıkça, nesnenin bir tür indeksini veya adresini ifade eder.
Son iki baytın verilerine gelince, kural yok gibi görünür. Yine de bu mesajların anlamı nedir? Aşağıda açıklayalım.
■Kontrol kodu analizi
Aslında bu 8 baytın içeriği sözde Modbus mesajıdır. Her alanın anlamını göstermek için bir resim kullanın:

Şekil 4-1 Control code example description
Kimlik
Her Modbus cihazının bir tanımlama kodu olmalıdır. Akıllı Ekranın tanımlama kodu 0x7B = 123'tür
İşlev Kodu
Bu mesajın amacını belirten işlev kodu, örneğin, burada 06, belirtilen yere bir değer de yazan Tekil Yazma Kaydıdır.
Kayıt Adresi
Yazılacak hedef olan kayıt adresi (yani, nesnenin adresi).
Veri
Ne yazmalı (yani, nesnenin değeri)
CRC (Döngüsel Hata Denetimi)
İlk 6 bayttaki CRC (Döngüsel Artıklık Denetimi) sonucu, iletim işlemi sırasında verilerde bir hata olup olmadığını kontrol etmek için kullanılır.
Bazı kavramlarınız mı var? Daha fazla bilgi almak istiyorsanız, Modbus'un ne olduğuna bakmalısınız.
V. Modbus'a Giriş
■Modbus Protokolü
Modbus protokolü aslında bir veri biçimidir. Temel olarak bir birincil-ikincil mimarisinin iletişim içeriğini tanımlar. Yalnızca veri yapısının tanımı olduğundan, RS232, RS422, RS485 ve hatta ağ gibi çeşitli fiziksel arayüzler aracılığıyla iletişim kurabilir.
İnternette zaten birçok öğretici ve açıklayıcı belge bulunduğundan, Modbus burada ayrıntılı olarak açıklanmayacaktır. Aslında bazı kavramları bildiğiniz sürece Modbus'u özgürce kullanabilirsiniz.
■Kavramsal model
Modbus, veri iletimini "Kayıt" erişimi olarak kabul eder. Her cihaz, harici referans için kendi kayıt tipini ve adresini tanımlamalıdır. Verilerin cihaza sözde iletimi, belirtilen kayda yazılmasıdır ve verilerin okunması, basit ve anlaşılır olan, belirtilen kaydın okunmasıdır. Ek olarak, her bir adres kaydında saklanan değer 16 bittir.
■İşlev kodu
Verilerin özelliklerine göre, Modbus, mesajdaki işlev koduyla belirtilen çeşitli okuma ve yazma yöntemleri tanımlar.

Tablo 5-1 Modbus Function Codes
Akıllı Ekran kontrol programları için en sık kullanılanlar 06'dır: Tekil kaydı yazma (16 bitlik bir değer yazma) ve Tutma kayıtları okuma (çoklu kayıtların değerini okuma).
■CRC (Döngüsel Hata Denetimi)
Son 2 bayt en gizemli kısım gibi görünür ama aslında zor değildir. İletişim verilerini güvence altına almak için sadece bir CRC’dir (Döngüsel Artıklık Denetimi). Nasıl kullanılacağını anladığımız sürece, prensibini derinlemesine incelemek zorunda değiliz (ama aslında bu sadece bir tablo araması ve bit işlemidir ve sonunda 16 bitlik bir kontrol kodu elde edilir).
VI. Akıllı Ekran nesnelerinin denetimi
Daha önce belirtildiği gibi, her Modbus'un kaydın türünü ve adresini tanımlaması gerekir ve şimdi bu konuyu ele alacağız.
■Rayıt sınıflandırması
Akıllı Ekran kayıtları kabaca üç kategoriye ayrılabilir:
1.)Cihaz bilgileri (örn. sürüm, cihaz adı vb.)
04 kullanımı: Okumak için Giriş Kayıtlarını okuyun. Bu veriler, yalnızca cihaz özellikleri parametrelerini elde etmek için üretici yazılımı güncellendiğinde, genellikle yeni bağlandığında değiştirilecektir.
2.)Nesne özellikleri (örn. tür, konum vb.)
03 kullanımı: Tutma Kayıtlarını Okuyun/16: Okuma ve yazma için Çoklu Kayıt Yazma. Bu veriler nesnelerin görünümünü etkiler ve genellikle tasarım aşaması dışında değişmez. İçeriği değiştirmek için, Akıllı Ekranın güncellenmek üzere geçici olarak kapatılması gerekir.
3.)Nesne Değerleri (devir, açık veya kapalı, yüzde vb. gibi nesnenin temsil ettiği değerler nesneden nesneye değişir)
Bu, kullanımdaki ana değişiklik maddesidir. Her öğe 16 bitlik bir değer kullanır, bu nedenle 06 ile ayarlanır: Tekil Yazma Belleği
Aşağıdakiler, bu kayıtların düzenli bir listesidir:
■Input Registers

Tablo 6-1 Smart Display Input Registers
■Holding Registers

Tablo 6-2 Smart Display Holding Registers
Early Smart Display yalnızca 10 nesneyi destekler, dolayısıyla widgetID aralığı 0 ~ 9'dur (dahil). Ürün yazılımının yeni sürümü 64'e genişletildi, ancak adresleme yöntemi değiştirildi; ki burada ele alınmayacaktır.
Bu verilerle (tamamlanmamış olsa da şimdilik yeterli), kontrol talimatlarını paketleyebilir ve kontrol için Smart Display'e gönderebiliriz. CRC kodunun nasıl paketleneceği ve nasıl ekleneceği ise ilerleyen bölümlerde anlatılacaktır.
VII. Kullanıcı Arayüzü
Akıllı Ekranı pratik uygulamaya koymak için, etkinliğini en üst düzeye çıkarmak üzere halen uygun bir insan-makine arayüzüne (özellikle Grafik Kullanıcı Arayüzü, GUI) ihtiyaç vardır. Şu anda, platformlar arası GUI geliştirme platformu için birçok seçenek var ve biz Qt'yi burada uygulamak için kullanıyoruz.
Pek çok kişi Qt'nin yalnızca bir GUI kitaplığı olduğunu düşünür, ama aslında bu oldukça eksiksiz bir geliştirme çerçevesidir. Uygulama tamamen sınıf kitaplığı aracılığıyla uygulanırsa, proje çok az değişiklikle diğer platformlara (PC/Windows, Mac/MacOS, Raspberry Pi/Raspbian, Android, iOS, Embedded, vb.) kolayca taşınabilir. Program, öğrenmeye değer bir geliştirme aracı yazılımıdır.
Qt'nin daha yeni sürümü aslında Modbus sınıf kitaplığını zaten desteklemektedir. Ancak burada örneklemek ve herkesin diğer dillerde yeniden yazmasını kolaylaştırmak için, bu test programını halen en temel seri bağlantı noktası okuma ve yazma ile uyguluyoruz.
Önceki örnekte kullanılan seri bağlantı noktasını seçme ve kontrol kodunu iletme işlevini sağlamanın yanı sıra, bu örnek ayrıca, uygulama penceresinin kullanıcı arayüzünde belirtilen nesnenin değerini ayarlayabilen yatay bir ayar sağlar. Seri bağlantı noktası için COM'u seçerseniz, gerçek numarayı girmeyi unutmayın.
Aşağıdaki resim bu programın Raspberry Pi ve Ubuntu üzerindeki yürütme ekranını göstermektedir. Programın hiç bir şekilde değiştirilmesine gerek yoktur.

Şekil 7-1 Set WidgetValue screen on Raspberry Pi

Şekil 7-2 Set WidgetValuet screen on Ubuntu
■CRC operation
CRC işlemi aslında karmaşık değildir. Olasılıkla Qt ile aşağıdaki kodlarda olduğu gibidir:
QByteArray SetWidgetValue::calculateCRC(QByteArray data)
{
uint16_t crc = 0xFFFF;
for(int idx = 0; idx < data.length(); idx++)
{
uint8_t i = (uint8_t)crc ^ data[idx];
crc >>= 8;
crc ^= crcTable[i];
}
QByteArray ba;
ba.append(char(crc & 0xFF));
ba.append(char(crc >> 8));
return ba;
}
|
The contents of crcTable[] are:
const uint16_t crcTable[] =
{
0X0000, 0XC0C1, 0XC181, 0X0140, 0XC301, 0X03C0, 0X0280, 0XC241,
0XC601, 0X06C0, 0X0780, 0XC741, 0X0500, 0XC5C1, 0XC481, 0X0440,
0XCC01, 0X0CC0, 0X0D80, 0XCD41, 0X0F00, 0XCFC1, 0XCE81, 0X0E40,
0X0A00, 0XCAC1, 0XCB81, 0X0B40, 0XC901, 0X09C0, 0X0880, 0XC841,
. . .
0X8801, 0X48C0, 0X4980, 0X8941, 0X4B00, 0X8BC1, 0X8A81, 0X4A40,
0X4E00, 0X8EC1, 0X8F81, 0X4F40, 0X8D01, 0X4DC0, 0X4C80, 0X8C41,
0X4400, 0X84C1, 0X8581, 0X4540, 0X8701, 0X47C0, 0X4680, 0X8641,
0X8201, 0X42C0, 0X4380, 0X8341, 0X4100, 0X81C1, 0X8081, 0X4040
};
|
Her kod burada listelenmez. Github'da, programlamayla ilgilenen kullanıcıların kendi başlarına indirebilecekleri eksiksiz bilgiler var; bu makalede sadece veri biçimiyle nasıl çalışılacağını biliyoruz.
■Veri paketleme
Kontrol kodunu kullanıcı arayüzüne göre hesaplayan ve Akıllı Ekrana gönderen tuş işlevi aşağıdadır:
void SetWidgetValue::on_sbValue_valueChanged(int value)
{
int id = ui->edWidgetID->text().toInt();
sendWidgetValue(id, value);
ui->lbValue->setText(QString::number(value));
}
void SetWidgetValue::sendWidgetValue(int id, int value)
{
QByteArray msg;
uint16_t addr = (uint16_t)(id * 100 + 6);
msg.append(deviceID);
msg.append(writeSingleRegister);
msg.append((uint8_t)addr >> 8);
msg.append((uint8_t)addr & 0xFF);
msg.append((uint8_t)value >> 8);
msg.append((uint8_t)value & 0xFF);
QByteArray msgToSend = msg.append(calculateCRC(msg));
writeSerialPortData(msgToSend);
}
|
Qt'ye zaten aşina iseniz, yukarıdaki kodu anlamak zor olmayacaktır. Eğer aşina değilseniz, öğrenmek için bir dakikanızı ayırın. Bazı kavramları gerçekten oldukça iyi ve derinlemesine çalışmaya değer. Alıştıktan sonra, platformlar arası uygulamalar geliştirmek veya hızla bir sistem prototipi oluşturmak için iyi bir seçimdir.
VIII. Gelişmiş örnek
Önceki örnek yalnızca nesne değerinin ayarı içindir. İlgili okuyucuların hakkında daha fazla bilgi edinmesi için daha eksiksiz bir SmartDisplayConsole uygulama programı örneği vardır. Aşağıdaki resim, Raspberry Pi üzerindeki yürütme ekranıdır:

Şekil 8-1 SmartDisplayConsole screen on Raspberry Pi
Makalenin sonunda bir github URL'si var ve buna herkes başvurabilir ve birlikte öğrenebilir.
IX. Sonuç
Akıllı Ekranı kontrol etmenin her adımını açıkladık ve ayrıca çeşitli kontrol yöntemleri sağladık. Bu bilgi birikimi ve zengin hayal gücü ile kıvılcımların ateşlenebileceğine ve daha farklı ürünlerin üretilebileceğine inanıyorum. Akıllı Ekran ile beraberce daha iyi bir gelecek yaratalım!
X. Referanslar
Serial Terminal Basics
https://learn.sparkfun.com/tutorials/terminal-basics/command-line-windows-mac-linux
Modbus
https://www.modbustools.com/modbus.html
https://www.modbusdriver.com/doc/mbusmaster.net/modbus.htm
XI. Sample source code
GettingStartedWithSmartDisplay
https://github.com/Smart-Display-Series/GettingStartedWithSmartDisplay.git
SmartDisplayConsole
https://github.com/Smart-Display-Series/SmartDisplayConsole.git