Pic den gelen veriyi Visual Basic 6 programı ile okumak

Başlatan Bloodofvol, 27 Mart 2013, 22:53:51

Bloodofvol

Meraba arkadaşlar.pic ile bilgisayar arasında rs232 iletişim kurmaya çalısıorum.Kurdugum kurulu devreden  " 85.00,85.00 " bilgisi geliyor.Bu bilgiyi hyper terminal ve  putty ile rs232 baglantısı kurarak denedim ve bilgisayara gönderebildim , yani iletişimde sorunum yok.
Ama visual basic 6 yı yeni ögreniorum ve  yazdıgım programla gelen veriyi okuyamıorum.

Program şöyle :

Private Sub al_Click()

    Dim deger As Integer
    MSComm1.CommPort = 4

    MSComm1.Settings = "9600,N,8,1"
   

    MSComm1.PortOpen = True
   

    deger = Asc(MSComm1.Input)
   

    Text1.Text = deger
   

    MSComm1.PortOpen = False


   
End Sub


calıstırdıgımda "invalid producure or argument"  diyor ve         deger = Asc(MSComm1.Input) satırını gösterior


Portların degerleri com4 oldugu için 4 e ayarlı.Çok acemi oldugum için biraz basit bir program ama tek istedigim text1 kutusunda picden gelen "85.00,85.00" degerini okuyabilmek.

Şimdiden çok teşekkürler.

muhittin_kaplan

Bloodofvol
Artık vb.60 kullanmamak gerek. Zira 15 yıl oldu.

microsoft visual basic express adında aratırsan vb.net in bedava sürümünü kulllanmak için gerekli olan linklere ulaşabilirsin.
vb.net adı seni ürkütmesin hepsi aynı otun kahverengisi.Hem daha fazla yardım örnek program bulabilirsin.

Ama senin yerinde olsam ve VB. hiç bilmiyorken VB hiç uğraşmam c# ile çalışırdım.
C# ında express edition u var buda bedava ve bir aramayla (c# express edition) ulaşabilirsin.

Gökhan BEKEN

visual basicden hiç haz etmem c# ile yapalım derseniz hallederiz.
Özel mesaj okumuyorum, lütfen göndermeyin.

Mujdat117

Merhaba hocam
kodu birde şu şekilde denermisiniz.

Private Sub al_Click()

    Dim deger As String
    MSComm1.CommPort = 4

    MSComm1.Settings = "9600,N,8,1"
   

    MSComm1.PortOpen = True
   

    deger = MSComm1.Input
   

    Text1.Text = deger
   

    MSComm1.PortOpen = False


   
End Sub

Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

influx

Mscomm componentinin ayarlarını yaptıktan sonra aşağıdaki örnek kodu incelersen dataları alırsın, benim program için yazdığım kısımları çıkardım...

Private Sub MSComm_OnComm()
Dim x As String * 1
Static GelenMesaj As String

Select Case MSComm.CommEvent

Case comEvReceive:
x= MSComm.Input
GelenMesaj = GelenMesaj & x
End Select

End Sub

not: port açma ve kapatma formun load ve unload olaylarında gerçekleşiyor.

Bloodofvol

#5
influx yazdıgın programı calıstırınca su mavi ekran sorunu cıkıor.



mesaj birleştirme:: 29 Mart 2013, 01:28:16

Arkadaşlar aynı programı visual 9 da yazınca şöyle bir sorun cıkıor



influx

mavi ekrana düşmesinin sebebi comport ayarlarınla ilgili olabilir, çakışma falan olabilir...

Bloodofvol

Çok teşekkürler arkadaşlar , c# a geçmeye karar verdim  :D, böyle olmuyor

Gökhan BEKEN

Çok güzel ettiniz. Kullandığım bir programdan seri portla ilgili kısımları kopyaladım işine yarar umarım.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace seri_port_uygulamasi
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public SerialPort sp = new SerialPort();
        MessageBox.Show("seri port clası açıldı");


        private void Form1_Load(object sender, EventArgs e)
        {
          
            string[] portlar = SerialPort.GetPortNames();  // portları dizi halinde aldık
            foreach (string port in portlar)
            {
                comboBox1.Items.Add(port.ToString()); // Portlarımızı combobox ın içine aldık.
            }
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {

        }

        void seri_port_baglan() //bağlantı fonksiyonu
        {
            if (sp.IsOpen) // Bağlantıyı açıyoruz.eğer önceden bağlan butonuna basmış isek yani bağlantıyı açmışsak aşağıdaki hata mesajını verecektir.
            {
                MessageBox.Show("Port Açık Bulunmaktadır..", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button3);
                return;
            }
            else
            {
                try
                {
                    sp.BaudRate = int.Parse("9600"); // Hız olarak 9600 verdik.
                    sp.DataBits = int.Parse("8"); // Veri bit ini de 8 bit olarak verdik
                    sp.StopBits = System.IO.Ports.StopBits.One; // Durma bitini tek sefer olarak verdik.
                    sp.Parity = Parity.None; // eşlik bit ini vermedik.
                    sp.PortName = comboBox1.Text; // Port adlarını comboboxtan alıyoruz. 
                    sp.Open(); // Bağlantıyı açıyoruz
                    MessageBox.Show("Bağlantı Başarılı");
                }
                catch (Exception) // Herhangi bir hata anında alttaki hata mesajını alacağız..
                {
                    MessageBox.Show("seri cihazınız bağlı değil...", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button3);
                }
            }
        }


        public string trDuzelt(string a) //türkçe karakter düzeltme fonksiyonumuz
        {
            a = a.Replace("İ", "I");
            a = a.Replace("Ü", "U");
            a = a.Replace("Ç", "C");
            a = a.Replace("Ş", "S");
            a = a.Replace("Ö", "O");
            a = a.Replace("Ğ", "G");
            a = a.Replace("ı", "I");
            a = a.Replace("ü", "U");
            a = a.Replace("ş", "S");
            a = a.Replace("ç", "C");
            a = a.Replace("ğ", "G");
            a = a.Replace("ö", "O");
            return a;
        }


        private void seri_port_data_gonder()
        {
            try
            {
                if (sp.IsOpen)
                {
                    
                    
                    //Thread.Sleep(1000); // Thread süresini 1000 olarak verdik
		    sp.Write(String.Format(richTextBox1.Text));     // data gönderme örneği
                    sp.Write(String.Format("deneme",(Char)13, textBox3.Text));     // göndereceğiniz verileri buna benzer bir şekilde de gönderebilirsiniz
                    MessageBox.Show("veri Gönderimi Başarıyla Sonuçlandı.."); //  Ve gönderdik
                  
                   
                    textBox4.Text = sp.ReadExisting(); //gelen veriyi okuduk

                    sp.DataReceived += sp_DataReceived;

                }
            }
            catch (Exception)
            {
                MessageBox.Show("veri Gönderme Başarısız !", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button3);
            }
        }

        void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //byte[] ReceiveBuffer = new byte[2048];
            int offset = 0;
            int toRead = sp.BytesToRead;
            //sp.Read(ReceiveBuffer, offset, toRead);
            offset += toRead;
        }



        private void button1_Click(object sender, EventArgs e)
        {
                seri_port_baglan();
                seri_port_data_gonder();
       
        }
    }
}
Özel mesaj okumuyorum, lütfen göndermeyin.