Ana sayfa Çözümler SmartDisplay RS485 Giriş

SmartDisplay RS485 Giriş

Sep 10,2022

Açıklama

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.

Types of USB to RS485 Dongle

Ş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.

WUACLB120V0000N0NX01

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

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.

Create project

Şekil 3-2 Create project

 

Proje açıldığında, önce arayüzü seçin

Select interface

Şekil 3-3 Select interface

 

Set interface parameters

Ş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.

Com Port display of device administrator

Ş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:

To run Simulator

Ş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:

Change the content of the object and the control code

Ş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.

Control code

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.

RS485 wire connection

Ş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:

Serial port names for various operating systems

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:

Send Control Codes with Terminal Program

Ş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:

Table

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:

Table

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:

Control code example description

Ş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.

Modbus Function Codes

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

Smart Display Input Registers

Tablo 6-1 Smart Display Input Registers

 

■Holding Registers

Smart Display 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.

Set WidgetValue screen on Raspberry Pi

Şekil 7-1 Set WidgetValue screen on Raspberry Pi

 

Set WidgetValuet screen on Ubuntu

Ş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:

SmartDisplayConsole screen on Raspberry Pi

Ş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

İşletmenize yönelik ekran çözümleri hakkında sorularınız mı var? Bize Ulaşın!

Abone Ol

Winstar'dan haber güncellemeleri hakkında e-posta alın

Bize Ulaşın

Fiyat/Veri sayfası/Genel bilgi talebi

Teknik Destek

Her türlü teknik bilgi için bize ulaşın

go top
İletişim
close