Visual Basic ile Elektronik Sayaç Okuma

ufukes

Üye
Katılım
12 Eki 2010
Mesajlar
17
Puanları
1
Yaş
43
Merhaba arkadaşlar, com port üzerinden Elektronik sayaç okuma programı yapmak istiyorum. İnternette bayağa bir araştırma yaptım ve sayaçların 300,e,7,1 hızında /?! komutu ile okuma başlattığını öğrendim. Sonrasında okuma işleminin devam ettirilebilmesi için sayaçtan flag kodunun gelmesi gerekiyormuş ama mscom dinlediğimde flag kodu gelmiyor ve sayaç ekranında hata yazıyor. Diğer araştırmalarımda da /?! komutundan sonra bağlantı hızının 4800,e,7,1 e değiştirilmesi gerekiyormuş. Sayacı başka derlenmiş bir program ile denediğimde bilgileri alabiliyorum. Bu programı yazmamda bana yardımcı olabilecek arkadaş var ise çok memnun olurum.
 
Anladığım kadrı ile pc to sayac seri haberleşme yapacaksın seri haberleşme uygulamalrına bak istersen gelişmelerİ merak ediyorum paylaşırsan güzel olur, iyi çalışmalar.
 
Seri haberleşme uygulamalarından neredeyse bakmadığım kalmadı.
 
c dilinde yazılmış bir program buldum. Program /?!<0D><0A> komutu ile sayacı okuma moduna sokuyor ve sayaç /MSY5<1>M310.2218 cevabını veriyor. Bu bilgideki MYS ' den sonraki 5 sayacın maksimum bağlantı hızını söylüyor. 0 gelirse 300bps, 1 gelirse 600 bps, 2 gelirse 1200, 3 2400, 4 4800, 5 9600, 6 19200 bps ile haberleşme yapılabileceğini anlatıyor. Önündeki MSY zaten sayacın flag kodu. MSY makel, Lun Luna, KHL veya AEL Köhler, ELM elektromed vs...

takıldığım bölüm söz ettiğim program sayaç cevap verdikten sonra <06>050<0D><0A> komutunu gönderiyor. buradaki <06> sanırım ACK komutu, 050 ne olduğunu bilmiyorum, <0D><0A> ise Cr Lf komutu. <06>050<0D><0A> kodunu bir kerede mscomm1 ile sayaca visual basic dilinde nasıl gönderebilirim.

C dilinde derlenmiş programın haberleşmesi tam olarak aşağıda. Yanında da açıklamalarını yazdım. 3. satırı göndersem iş bitecek sanırım.

==> /?!<0D><0A> Bunu vb de /?! vbCrLf ile gönderiyorum.
<== /MSY5<1>M310.2218 Bu satır geliyor ve TextBox' a yazdırıyorum.
==> <06>050<0D><0A> Bu satırı nasıl gönderebilirim.
<== -- STX --
<== 0.0.0(14655158)
<== 0.8.0(15*min)
<== 0.9.1(10:35:40)
<== 0.9.2(15-05-05)
<== 0.9.5(2)
<== 1.8.0(00000.000*kWh)
<== 1.8.1(00000.000*kWh)
<== 1.8.2(00000.000*kWh)
<== 1.8.3(00000.000*kWh)
<== 1.8.4(00000.000*kWh)
<== 1.6.0(000.000*kW)(00-00-00,00:00)
<== 96.1.3(14-11-04)
<== 96.2.2(14-11-04,06:16)
<== 96.2.5(14-11-04)
<== 96.6.1(1)
<== 96.50(0600170022009999999999999999)
<== 96.51(0600170022009999999999999999)
<== 96.52(0600170022009999999999999999)
<== 96.60(31230000)
<== 96.61(31230000)
<== 96.62(31230000)
<== 96.70(00-00-00,00:00)
<== 96.71(00-00-00,00:00)(00)
<== !
<== -- ETX --
<== -- BCC --
 
Projeyi bitirmek üzereyim. Tüm Elektrik sayaçlarını okuyabilen bir program geliştirdim. Mantığı da şöyle:

Sayacın markası Makel...

Mscom ayarları program ilk açılışında "300,e,7,1" olacak.

1. Önce sayaca "/?! vbcrlf" gönderilecek.

2. Ardından sayaç "/MSY5<1>M310.2218" cevabını gönderecek. Bu bilgi içinde "MSY" sayacın flag kodu, "5" sayacın maksimum bağlantı hızı, diğerleri fasa fiso

1 gelirse sayaç 300 bps ile, 2 gelirse 600 bps, 3 gelirse 2400 bps, 4 gelirse 4800 bps, 5 gelirse 9600 bps, 6 gelirse 19200 bps olarak haberleşme devam ettirilecek.

3. Ardından Chr$(6) & "050" & vbCrLf gönderelecek ve bu gönderiden sonra mscom ayarları 2. aşamadaki hıza çıkartılacak. Makel de 5 geldiği için "9600,e,7,1" olacak.

4. Sayaçtan bilgiler dökülmeye başlayacak ve gelen bilgiler textboxa yazdırılacak.

Şu an buraya kadar herşey başarılı. Ancak takıldığım bölüm sayaçtan aldğım bilgiler;

0.0.0(14655158)
0.8.0(15*min)
0.9.1(10:41:24)
0.9.2(15-05-11)
0.9.5(1)
1.8.0(00000.000*kWh)
1.8.1(00000.000*kWh)
1.8.2(00000.000*kWh)
1.8.3(00000.000*kWh)
1.8.4(00000.000*kWh)

şeklinde devam ediyor. Benim istediğim bu bilgileri her satır için ayrı ayrı oluşturduğum textboxlara yazdırması. Mesela ilk satırı parantez dışındakiler ile parantez içindekileri ayrı olarak textboxlara yazdırmak. 0.0.0 ayrı bir textboxa, 14655158 ayrı bir textboxa... Bu konda yardımcı olabilecek varsa çok memnun olurum.

Yaptığım çalışmanın kaynak kodlarını forum içinden isteyenler ile paylaşabilirim.
 
Sorun ile ilgili yardım lütfen.
 
Keşke bilsem biseyler derim ama bilmiyorum picproje ve etepic e yaz oradan cevap gelir belki
 
Işte benim bildiğim visual basic kodu böyle değil. Bilsem ederdim.
 
@mehmetaliu benim 3. mesajda yazdığım kodlar c ile yazılmış başka bir program kodlarıdır. Visual basic de bu kodlar yok. Sanırım yanlış anlaşılma olmuş. Yapmak istediğim tam olarak textboxa aldığım içinde parantez ile bölünmüş bilgileri ayrıştırmak... Program ile bir textboxa aşağıdaki gibi bilgi alıyorum. Aldığım bilgilerin parantez içinde kalan yerlerini mesela flexgride aktarmak istiyorum.
 

Ekli dosyalar

  • ham_veri.png
    7 KB · Görüntüleme: 159
  • istediğim.png
    48.6 KB · Görüntüleme: 150
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…