tbowling Oluşturuldu: 25 Aralık, 2018 Share Oluşturuldu: 25 Aralık, 2018 iyi çalışmalar gmt yi delphi ve c# arayüz programlarımla kullanıyorum mevcut durumda delphi7 ile rs485 modbus ile haberleşiyorum bir taraftanda yeni suit programına alışmaya çalışıyorum . sitenizde verdiğiniz örneği denemek istediğimde resimdeki hatayı alıyorum sorun ne olabilir acaba. birde benzer şekilde c# ile rs485 modbus için örnek yapabilirmisiniz. saygılarımla Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
tbowling 25 Aralık, 2018 gönderildi Yazar Share 25 Aralık, 2018 gönderildi HATAYA nedn olan satırları iptal edip programı çalıştırdım resimlere göre mb0-mb1 ve mb2 ye kumanda edebildim . fakat deneme amaçlı mw0 registerini eklediğimde kontrol yapamadım. sanırım mw0 modbus adresi 4 olarak oluştu programa bu 4 ü bir şekilde göstermek gerekmiyor mu saygılarımla Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
DEMİR 26 Aralık, 2018 gönderildi Share 26 Aralık, 2018 gönderildi GMTSuite programında Bit, Word, DoubleWord, İnteger ve Real olmak üzere 5 çeşit veri tipi kullanılmaktadır. Sizin Bit tipi olan MB0,MB1 ve MB2 operandlarınız C# programınız ile uyumlu olmasından dolayı doğru çalışmaktadır. Fakat MW0 tipi operandınızın tipi Suit'e Bit olarak değil de word olarak tanımlamış olsaydınız uygun olacaktı. C# programınızda da word için aşağıdaki gibi bir dönüşüm yapmak durumundasınız. int gir_adres = Convert.ToInt32(numericUpDown9.Value); // numericUpDown9 değerini int32 tipine dönüştürür ve gir_adres içine yükler... int[] okunan = tcpclient.ReadHoldingRegisters(gir_adres - 40001, 2); // gir_adres değerinden 40001 çıkarır ve sonuçta çıkan adresden değer okur bunu da okunan dizisine yükler... int donusen = ModbusClient.ConvertRegistersToInt(okunan); // okunan dizi değerini ModbusClient yapısına uygun olarak int değerine dönüştürür... textBox17.Text = Convert.ToString(donusen); // sonucu string olarak ltextBox7'de gösterir. GMT Suite izin verdiği adres aralığı: 40001 ≥ Modbus Adresi ≥ 41025 olabilir. Gönderilen Değer Aralığı: 0 ≥ Girilen Değer ≥ 65535 Faydalı olması dileğiyle, Kolay Gelsin.... Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
tbowling 26 Aralık, 2018 gönderildi Yazar Share 26 Aralık, 2018 gönderildi iyi çalışmalar dediğiniz gibi MW0 registerini word yaptım pc den 18 gönderdiğimde role çalıştı artık registere pc den data göndererek istediğim değeri yazabileceğim şimdi MW1 registerine 289 değerini kaydedip pc den bu değeri almaya çalışacağım inşallah sorun yaşamam çok teşekkürler saygılar //mw yazma butonu ModbusClient tcpclient = new ModbusClient(Convert.ToString(textBox1.Text), 502); tcpclient.Connect(); //int bb = Convert.ToInt32(textBox11.Text); int bb = Convert.ToInt32("0"); //mw0 registeri tcpclient.WriteSingleRegister(0 + bb, Convert.ToInt32(textBox7.Text)); //tcpclient.WriteSingleRegister(0 + bb, Convert.ToInt32("18")); Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
DEMİR 26 Aralık, 2018 gönderildi Share 26 Aralık, 2018 gönderildi Aşağıdaki kodlar yardımcı olur... Kolay Gelsin... int mw_adres = Convert.ToInt32(numericUpDown1.Value); // NumericUpDown1 değerini int32 türüne dönüştürür ve mw_adres' e atar... int mw_deger = Convert.ToInt32(textBox1.Text); // textBox1 text değerini int 32 türüne çevirir ve mw_deger 'e atar... tcpclient.WriteSingleRegister(mw_adres - 40001, mw_deger); // mw-adres değerinden 40001 çıkartır ve sonuçta çıkan adrese mw_degerini gönderir. Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
tbowling 26 Aralık, 2018 gönderildi Yazar Share 26 Aralık, 2018 gönderildi okuma ve yazma örnekleri çalıştı her şey gayet güzel ve süper kolaymış aslında kurcaladıkça daha iyi anlıyor insan .... fakat benim bir türlü çözemediğim bir sorunum merakım var plc den tek taraflı haberleşme hakkında; örnek olarak anlatmak gerekirse... : bir sıcaklık sensörünü plc ye bağladık sürekli sıcaklık değerini okuyacak ve başka bir cihaza gönderecek plc ile kimse iletişim kurmayacak o sadece okuyup gönderecek bu işlemin bir yöntemi var mı tcp haberleşmede başka bir cihazın veya sistemin plc ye bağlanıp değer okumasını istemiyorum isteğim plc diğer cihazlara data göndersin.. saygılarımla Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
DEMİR 26 Aralık, 2018 gönderildi Share 26 Aralık, 2018 gönderildi plc ile kimse iletişim kurmayacak o sadece okuyup gönderecek bu işlemin bir yöntemi var mı tcp haberleşmede (Bu ifadenizde plc iletişim kurmadan bilgi gönderemez. Başka bir cihazdan kastınız MODBUS/TCP haberleşme yapabilen IP adresine sahip diğer cihaz HMI ise ekteki dosya yardımcı olur. Değilse cihaz özelliğine göre haberleşme yöntemi değişir.) başka bir cihazın veya sistemin plc ye bağlanıp değer okumasını istemiyorum isteğim plc diğer cihazlara data göndersin.. (Bu cümlenizde ki ifade de ise; eğer sıcaklık durumuna bağlı bir invertör kullanacaksanız RS485 protolü ile bilgi gönderebilrisiniz.) Umarım faydalı olur. Yeni Microsoft Word Belgesi.docx Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
tbowling 5 Ocak, 2019 gönderildi Yazar Share 5 Ocak, 2019 gönderildi ilğilendiğiniz için teşekkürler. c# örneğini programa uygulamaya çalıştığımda bir sorunla karşılaştım MB1-MB3-MB5-MB7 diye bit registerler atadım ve modbas adreslerini elimle 1-3 -5-7 diye değiştirdim. programda değişti görükse bile ilk oluşturma sırasında ne adres verdiyse onu kabul ediyor sonradan verdiğim modbus adresini kabul etmiyor. aşagıdaki örnekde çalışmıyor ama adresi 0 yaptığımda çalışıyor bu konuda bir öneriniz var mı yoksa program ne adres verirse onu kullanmak zorundamıyız saygılarımla private void button7_Click_1(object sender, EventArgs e) { //mb yazma butonu ModbusClient tcpclient = new ModbusClient(Convert.ToString("169.254.241.153"), 502); tcpclient.Connect(); tcpclient.WriteSingleCoil(1, true); } private void button8_Click(object sender, EventArgs e) { //mb yazma butonu ModbusClient tcpclient = new ModbusClient(Convert.ToString("169.254.241.153"), 502); tcpclient.Connect(); tcpclient.WriteSingleCoil(1, false); } Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
DEMİR 5 Ocak, 2019 gönderildi Share 5 Ocak, 2019 gönderildi tcpclient.WriteSingleCoil(1, true); Suite pogramınız tarafından verilen otomatik adresler doğrudur. Siz programınızda bu adreslere veri gönderirken yada çekerken bir eksik adres olarak tanımlayın. Örneğin yukarıdaki 1 nolu adrese true bilgisini gönderirken "tcpclient.WriteSingleCoil(0, true); " olarak yazın .Böylelikle c# 0. adrese bilgi gönderirken suite 'in 1. adresine bilgi gidecektir. Diğer tüm adreslerinizi c# da bu şekilde 1 eksik olacak şekilde revize edin. Kolay Gelsin... Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
tbowling 5 Ocak, 2019 gönderildi Yazar Share 5 Ocak, 2019 gönderildi EVET O ŞEKİLDE DEĞİŞTİRİNCE SORUN YOK teşekkürler saygılar Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
malikenes 5 Ocak, 2019 gönderildi Share 5 Ocak, 2019 gönderildi Bu arkadaşlar bir başka alemdeler. Bu yazılanların GMTSoft ya da GMTSuite bir alakası yok sanırım. Hangi dil bu? Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
tbowling 5 Ocak, 2019 gönderildi Yazar Share 5 Ocak, 2019 gönderildi C# masaüstü yazılımla plc yi kontrol etme üzerine plc kodlama da gmt suit ile saygılar Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
cengiz 13 Haziran, 2020 gönderildi Share 13 Haziran, 2020 gönderildi c# aynı uygulama ve easy modbus da dword yazıp okumada sorun yaşıyorum elinde dword adresleriyle (çift word )adreslerine yazdırma ve okutma yapmış olan biri varsa yardım edebilir mi ? Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
zcaner 2 Şubat, 2021 gönderildi Share 2 Şubat, 2021 gönderildi Merhaba, C#] üzerinde bir uygulama yapıyorum anacak plc ye real ve double veri okumak ve yazmak konusunda sorun yaşıyorum. yardımcı olabilir misiniz. PLC de real ve double verilerin modbus adresleri 42000 şeklinde başlıyor ve bunu C# üzerinden hiçbir şekilde okuyamadım veya yazamadım. Aynı zamanda ek bilgi olarak yukarıdaki örnek dosyayı bende indirdim ancak kodlar çalışmıyor. Sanırım EasyModbus kütüphanesinde bir güncelleme olmuş olabilir. Örneğin. sizin örneğinizde int[] mi = tcpclient.ReadHoldingRegisters(1000 + c, 2); int[] mf = tcpclient.ReadHoldingRegisters(4000 + d, 2); bu kodlar da çalışmıyor. Bunlar yerine int[] mi = tcpclient.ReadHoldingRegisters(0 + c, 2); int[] mf = tcpclient.ReadHoldingRegisters(0 + d, 2); şeklinde kullanınca sorunsuz çalışıyor. Ancak başta belirttiğim gibi real ve double tipi değişkenler için otomatik oluşan ve 42000 le başlayan modbus adresine hiçbir şekilde ulaşamıyorum. Şimdiden desteğiniz için teşekkürler. Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
malikenes 2 Şubat, 2021 gönderildi Share 2 Şubat, 2021 gönderildi PLC' yi hangi yazılım ile programlıyorsunuz? GMTSuite ile programlıyor iseniz örnek program; GMTSoft ile programlıyorsanız örnek program; Bazı farklılıklar var demek ki. Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...
zcaner 2 Şubat, 2021 gönderildi Share 2 Şubat, 2021 gönderildi malikenes, 10 saat önce yazdı: PLC' yi hangi yazılım ile programlıyorsunuz? GMTSuite ile programlıyor iseniz örnek program; GMTSoft ile programlıyorsanız örnek program; Bazı farklılıklar var demek ki. GMTSuit kullanıyorum. http://gmtcontrol.com/tr/yuklemeler/ornek-uygulamalar.html bu linkteki örnek uygulamayı denedim tek örnek vardı ve forumda da baktım ama fark etmemişim. Teşekkür ederim.. Alıntı Yorum bağlantısı Sitelerde Paylaş More sharing options...