C# ta Seriporttan ACK gönderme.

Başlatan since1990, 01 Ağustos 2012, 23:45:48

since1990

iyi günler, köhler sayaç okuma girişimimde 2. aşamaya geçtim. :) köhlerin kendi kitapçığında
/?04005627![cr][lf] bilgisini gönderince karşılığında sayacın ailesi ile igili bilgi alacağım yazıyor ve evet alıyorum. 2. aşamada

[ACK]051 [cr][lf] gönderip
[ack] almam gerekiyor.

şimdi
yazi = "/?" + "16024008" + "!\r\n";
           seriport.Write(yazi);

şeklinde ilk kısmı gönderiyorum CR ve LF nin gönderiliş şekli sırası ile \r ve \n ama asci karşılıkları sırası ile 13 ve 10. bu sayıları "" kesme işaretlerinini dışına yazınca sayı olarak yazılıyor. yani
yazi = "/?" + "16024008" + "!"+13+10;
yapınca sayı gibi gidiyorlar.
ben bunları yazının içerisine asci karşılıkları ile nasıl yazabilirim. Çünkü ACK nın asci karşılığınıda buldum 6. Umarım anlatabilmişimdir. Şimdiden teşekkürler.

yazi = "/?" + "16024008" + "!";
            seriport.Write(new byte[] { 13 }, 0, 1);
            seriport.Write(new byte[] { 10 }, 0, 1);
böyle deneyincede olmuyor.
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

LukeSkywalker

Hocam direk şöyle neden yazmıyorsunuz kavrayamadım olayı:
yazi="/?16024008!\r\n";
Bu şekilde yazınca olmuyor mu?

since1990

Bunda problem yok hocam bunu gönderdim zaten. Problem ack göndermekte. yani şunu gönderemiyorum "[ACK]051 [cr][lf]"
onuda şöyle yapmayı deniyorum
seriport.Write(char.ConvertFromUtf32(6)+051+" \r\n");[\code]
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

LukeSkywalker

hocam ACK'nın kodu 6 değil mi?
Şöyle denesieniz o zaman:
seriport.Write(new byte[] { 6 }, 0, 1); 
seriport.Write("051"); 
seriport.Write(new byte[] { 13,10 }, 0, 2);


since1990

o kodun çalışıp çalışmayacağından emin olmadığım için önce çalıştığından emin olduğum bir diziyi yani
yazi = "/?" + "16024008" + "!\r\n";

bu kodları
yazi = "/?" + "16024008" + "!";
            seriport.Write(new byte[] { 13 }, 0, 1); 
            seriport.Write(new byte[] { 10 }, 0, 1);

bu şekilde gönderince çalışmadı o yüzden başka yolar arıyorum :D
ama şu şekildegönderince çalışıyor
yazi = "/?" + "16024008" + "!" + char.ConvertFromUtf32(13) + char.ConvertFromUtf32(10);

o yüzden,
seriport.Write(char.ConvertFromUtf32(6)+051+" \r\n");[\code]

bu şekilde ack gönderdiğimi düşünüyorum :D
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

since1990

Köhlerin kendi programını çalıştırdım. Serial port monitör ü yükledim. 2 kişi nasıl chatleşiyorsa aynı şekilde konuşuyorlar. hex olarak oradan alıyorum herşeyi. Gerçekten mükemmel. Herkese teşekkürler.
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

LukeSkywalker

nasılmış peki hocam sizin yazmak istediğiniz veri? merak ettim. ::)

since1990

#7
Hocam ACK dediğim gibi yazınca gidiyor. Adım adım ilerleyeceğim En sonunda sadeleştrime yapacağım :D Mönitorde ACK olarak görünüyor yazdığım şey ;)

mesaj birleştirme:: 02 Ağustos 2012, 01:41:37

Buradan köhler sayacı uzaktan rs-485 ile okumak isteyen arkadaşlara;
sonunda tx olan satırın altındaki gönderilen veri rx olan satırın altındaki alına veri porttaki değişimlerde var baud ratein değişimi falan.
<20120802014305.388 SYS>
COM is open
<20120802014305.388 SYS>
In/out queue size 2048/2048
<20120802014305.439 SYS>
Baud rate 300
<20120802014305.440 SYS>
RTS on
<20120802014305.441 SYS>
DTR on
<20120802014305.441 SYS>
Data bits=7, Stop bits=1, Parity=Even
<20120802014305.442 SYS>
Set chars: Eof=0xAC, Error=0x08, Break=0x08, Event=0x00, Xon=0x11, Xoff=0x13
<20120802014305.442 SYS>
Handflow: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL), XonLimit=512, XoffLimit=512
<20120802014305.442 SYS>
Set timeouts: ReadInterval=-1, ReadTotalTimeoutMultiplier=0, ReadTotalTimeoutConstant=0, WriteTotalTimeoutMultiplier=100, WriteTotalTimeoutConstant=1000
<20120802014305.540 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014305.540 TX>
/?16024008! [len=11]
<20120802014305.540 TX>
<LF>
<20120802014307.973 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014307.973 TX>
/?16024008! [len=11]
<20120802014307.973 TX>
<LF>
<20120802014308.472 RX>
/AEL4<1>AEL.MF.04 [len=26]
<20120802014309.131 RX>
<LF>
<20120802014309.161 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014309.161 TX>
<ACK>041 [len=4]
<20120802014309.161 TX>
<LF>
<20120802014309.395 RX>
<ACK>
<20120802014309.446 SYS>
Baud rate 4800
<20120802014309.446 SYS>
RTS on
<20120802014309.447 SYS>
DTR on
<20120802014309.447 SYS>
Data bits=7, Stop bits=1, Parity=Even
<20120802014309.448 SYS>
Set chars: Eof=0xFA, Error=0x08, Break=0x08, Event=0x00, Xon=0x11, Xoff=0x13
<20120802014309.448 SYS>
Handflow: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL), XonLimit=512, XoffLimit=512
<20120802014309.459 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014309.460 TX>
<SOH>R2<STX>0.0.0()<ETX>P
<20120802014309.526 RX>
<STX>0.0.0(16024008)<ETX>;
<20120802014309.565 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014309.566 TX>
<SOH>R2<STX>96.6.1()<ETX>h
<20120802014311.593 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014311.593 TX>
<SOH>R2<STX>96.6.1()<ETX>h
<20120802014311.628 RX>
<STX>96.6.1(1)<ETX>;
<20120802014311.654 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014311.655 TX>
<SOH>R2<STX>0.9.2()<ETX>[
<20120802014311.691 RX>
<STX>0.9.2(12-08-02)<ETX>0
<20120802014311.729 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014311.730 TX>
<SOH>R2<STX>0.9.1()<ETX>X
<20120802014313.761 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014313.761 TX>
<SOH>R2<STX>0.9.1()<ETX>X
<20120802014313.797 RX>
<STX>0.9.1(01:41:56)<ETX>=
<20120802014313.836 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014313.837 TX>
<SOH>R2<STX>0.9.5()<ETX>\
<20120802014315.867 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014315.867 TX>
<SOH>R2<STX>0.9.5()<ETX>\
<20120802014315.900 RX>
<STX>0.9.5(4)<ETX><LF>
<20120802014315.924 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014315.925 TX>
<SOH>R2<STX>96.70()<ETX>F
<20120802014315.997 RX>
<STX>96.70(00-00-00,00:00)<ETX>2
<20120802014316.050 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014316.051 TX>
<SOH>R2<STX>96.71()<ETX>G
<20120802014318.082 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014318.082 TX>
<SOH>R2<STX>96.71()<ETX>G
<20120802014318.162 RX>
<STX>96.71(12-08-02,00:26)(01)<ETX>>
<20120802014318.225 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014318.226 TX>
<SOH>R2<STX>1.8.0()<ETX>Y
<20120802014318.266 RX>
<STX>1.8.0(00000.005*kWh)<ETX>n
<20120802014318.317 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014318.318 TX>
<SOH>R2<STX>1.8.1()<ETX>X
<20120802014318.357 RX>
<STX>1.8.1(00000.005*kWh)<ETX>o
<20120802014318.408 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014318.409 TX>
<SOH>R2<STX>1.8.2()<ETX>[
<20120802014320.438 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014320.438 TX>
<SOH>R2<STX>1.8.2()<ETX>[
<20120802014320.478 RX>
<STX>1.8.2(00000.000*kWh)<ETX>i
<20120802014320.529 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014320.530 TX>
<SOH>R2<STX>1.8.3()<ETX>Z
<20120802014320.569 RX>
<STX>1.8.3(00000.000*kWh)<ETX>h
<20120802014320.621 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014320.622 TX>
<SOH>R2<STX>1.8.4()<ETX>]
<20120802014320.661 RX>
<STX>1.8.4(00000.000*kWh)<ETX>o
<20120802014320.713 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014320.714 TX>
<SOH>B0<ETX>q
<20120802014320.728 RX>
<ACK>
<20120802014320.728 SYS>
Purge the serial port: RXABORT, TXABORT
<20120802014320.728 SYS>
Purge the serial port: RXCLEAR, TXCLEAR
<20120802014321.053 SYS>
COM is closed


Umarım faydalı olur
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

fatih6761

Hocam string nesnesine hex veri eklemek için
string yazi = "123456" + (char)6;

C#, C den farklı olarak nesne dönüşümlerini otomatik yapıyor. Kaynak (byte,Int,double,float,object) -> Hedef String olunca direkt olarak (sınıf).ToString() kullanıyor. Eğer siz özel olarak (char) belirtirseniz direkt olarak o tür atılıyor...