Beijer Seri Port üzerinden byte gönderme

Operatör Panelleri Paylaşım Platformu
Cevapla
CodSys
Mesajlar: 5
Kayıt: 24 Ağu 2022, 22:44

Beijer Seri Port üzerinden byte gönderme

Mesaj gönderen CodSys » 24 Ağu 2022, 22:51

Merhabalar;

Beijer x2 base 10v2 ekranda şöyle bir sıkıntım var yardımcı olursanız çok sevinirim...

ekrana serialden istediğim gibi data gönderiyorum 32byte alıp ekranda işliyorum sıkıntı yok ama ekrandan dışarı data gönderirken sıkıntı yaşıyorum.
Mesela 1 byte yolladığımda örnek bu 127 olsun 1 byte olarak değil de 3 byte olarak çıkıyor 1-2-7 gibi bununla ilgili bana yardımcı olabilecek biri var mı varsa çok sevinirim...

Yaklaşık 100 byte veri çıkışı yapmam lazım ekrandan bu sıkıntıdan dolayı sağlıklı veri transferi yapamıyorum.

Kullandığım script:

Kod: [Linkleri görüntülemek için forumumuza üye olmalısınız]

namespace Neo.ApplicationFramework.Generated
{
	using System.Windows.Forms;
	using System;
	using System.Drawing;
	using Neo.ApplicationFramework.Tools;
	using Neo.ApplicationFramework.Common.Graphics.Logic;
	using Neo.ApplicationFramework.Controls;
	using Neo.ApplicationFramework.smile;
	using System.IO.Ports;   
	

	public partial class SerialComScript
	{
		public static SerialCom serialCom = null;
		
		static SerialComScript() 
		{
			serialCom = new SerialCom();
		} 
		
		public void Send(string data)
		{
			serialCom.SendData(data);
		}
	}
	
	public class SerialCom
	{ 
		public SerialPort sPort = null;
		private Timer myTimer = new Timer();
		
		public SerialCom()
		{
			sPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
			sPort.Open();
			
			myTimer.Tick += new EventHandler(TimerEventProcessor);
			myTimer.Interval = 100;
			myTimer.Enabled = true;
		}
		
		public void SendData(string outData) 
		{
			sPort.Write(outData);
		}

		private void TimerEventProcessor(Object myObject, EventArgs myEventArgs) 
		{
			Globals.SerialComScript.Send("@");

			try
			{
				byte x=0;	
				int BytesReceived;
				byte[] BusMsg;
				int devir_new ;

				BytesReceived = sPort.BytesToRead;
				if (BytesReceived == 0) return;
            
				BusMsg = new byte[BytesReceived];
				sPort.Read(BusMsg, 0, BytesReceived);
				Globals.Tags.Tag1.Value = BusMsg[1] * 1;
			
			}	

			catch(Exception){return;}		
		}		
	}
}

Teknik3
Beijer Türkiye
Beijer Türkiye
Mesajlar: 858
Kayıt: 08 Eki 2013, 15:02

Re: Beijer Seri Port üzerinden byte gönderme

Mesaj gönderen Teknik3 » 25 Ağu 2022, 10:49

merhabalar.

Veri gönderirken 1 byte yerine 3 bayte gitmesinin nedeni veriyi sayı olarak değil String "yazı" olarak göndermeniz.
çünkü göndermiş olduğunzu script içerisinde sadece String ile gönderme yapan bir fonksiyon tanımı var.

Kod: [Linkleri görüntülemek için forumumuza üye olmalısınız]

public void SendData(string outData) 
		{
			sPort.Write(outData);
		}
SendData("123") şeklinde gönderdiğiniz veri String olarak gönderdiğiniz için 1 byte değil 3 byte oluyor.
Seri porttan byte göndermek için aşağıdaki fonksiyon tanımını String gönderen fonksiyon tanımının atına ekleyin.

Kod: [Linkleri görüntülemek için forumumuza üye olmalısınız]

public void SendByte(byte outData) 
		{
			sPort.Write(outData);
		}
böylece SendByte((byte)127) diyerek veri gönderebilirsiniz.

CodSys
Mesajlar: 5
Kayıt: 24 Ağu 2022, 22:44

Re: Beijer Seri Port üzerinden byte gönderme

Mesaj gönderen CodSys » 01 Eyl 2022, 19:17

Merhaba;
Vermiş olduğunuz bilgilerden dolayı teşekkür ederim.

Lakin şu şekilde sorun ile karşılaşmaktayım,

Kod: [Linkleri görüntülemek için forumumuza üye olmalısınız]

public void SendByte (byte[] buffer)
		{
			sPort.Write(buffer, 0, buffer.Length);
			//sPort.Write(byte[] buffer, 0, buffer.Length);
			//sPort.Write((byte) buffer);
		}
		
		byte[] ss;
		ss[0] = Globals.Tags.test.Value * 1;
		SendByte(ss);
Düzenlememi yaptım ama hala hata alıyorum

Kod: [Linkleri görüntülemek için forumumuza üye olmalısınız]

neo.applicationFramework.smile.VariantValue' türü örtülü olarak 'byte' türüne dönüştürülemez.
bu aşamayı bir türlü geçemedim.
Amacım global Tags'ları byte olarak serialden göndermek
SendByte((byte)127);
Vermiş olduğunuz örnegide denedim yine byte türüne dönüştürülemez demektedir seriport'tan nasıl 1 byte veri göndereceğim bilemedim...

Teknik3
Beijer Türkiye
Beijer Türkiye
Mesajlar: 858
Kayıt: 08 Eki 2013, 15:02

Re: Beijer Seri Port üzerinden byte gönderme

Mesaj gönderen Teknik3 » 02 Eyl 2022, 14:53

Bu örneği inceler misiniz.
Project8.zip
Bu mesaja eklenen dosyaları görüntülemek için gerekli izinlere sahip değilsiniz.

CodSys
Mesajlar: 5
Kayıt: 24 Ağu 2022, 22:44

Re: Beijer Seri Port üzerinden byte gönderme

Mesaj gönderen CodSys » 02 Eyl 2022, 23:46

[Linkleri görüntülemek için forumumuza üye olmalısınız] yazdı: [Linkleri görüntülemek için forumumuza üye olmalısınız]
02 Eyl 2022, 14:53
Bu örneği inceler misiniz.
Project8.zip
Vermiş olduğunuz örnek proje ile sorunum çözüldü çok teşekkür ederim...
İyi çalışmalar dilerim...

Cevapla