PDA

View Full Version : سوال: کار با port و سخت افزار در C#



Abbas Naghdi
چهارشنبه 06 آذر 1392, 18:06 عصر
سلام بچه ها ...
یه مشکل دارم ... یه دستگاه دیجیتال مربوط به باسکول کردن ماشین ها هست که باید با استفاده از port وزنی که روی این دستگاه نشون میده رو به نرم افزارم بدم ... چطور این کار رو کنم ؟
درایور های خاصی دارن ؟

mortezasar
چهارشنبه 06 آذر 1392, 19:03 عصر
سلام بله بعضی ها درایور دارن و بعضی ها هم روی پورت ارسال میکنن و شما باید دریافت کنی
اگه از نوع اول باشه به همراه خود دستگاه توابع هستن و یا میتونید از سایت سازنده دانلود کنید
و اگه روی پورت ارسال کنه شما به راحتی میتونی اطلاعات رو با دستورات مربوط به دریافت اطلاعات از پورت بخونید

Abbas Naghdi
چهارشنبه 06 آذر 1392, 19:55 عصر
سلام بله بعضی ها درایور دارن و بعضی ها هم روی پورت ارسال میکنن و شما باید دریافت کنی
اگه از نوع اول باشه به همراه خود دستگاه توابع هستن و یا میتونید از سایت سازنده دانلود کنید
و اگه روی پورت ارسال کنه شما به راحتی میتونی اطلاعات رو با دستورات مربوط به دریافت اطلاعات از پورت بخونید


اینطور که شما میگین من فقط باید خروجی های دستگاه ها رو بگیرم درسته ... ؟
من باید با بیش از 10 دستگاه ارتباط بگیرم ... توابعی نیست که یکسان باشه ... ؟
مثلا برای همه ی دستگاه ها از یک کد استفاده کنم ؟
یا یه واسط قرار بدم ؟

matin.soft
پنج شنبه 07 آذر 1392, 10:20 صبح
کد خواندن از پورت سریال:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.IO;

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

String a = "";

private void button1_Click(object sender, EventArgs e)
{
serialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataRec eived);

if (serialPort1.IsOpen == false)
{
serialPort1.Open();
}
timer1.Start();
button1.Enabled = false;
button2.Enabled = true;
}

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
a = a + serialPort1.ReadExisting();
}

private void timer1_Tick(object sender, EventArgs e)
{
if (a.Length != 0)
{
textBox1.AppendText(a);
a = "";
}
}

private void button2_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen == true)
{
serialPort1.Close();
button2.Enabled = false;
button1.Enabled = true;
}
}

private void Form1_Load(object sender, EventArgs e)
{
if (serialPort1.IsOpen == true)
{
button1.Enabled = false;
button2.Enabled = true;
}
else
{
button1.Enabled = true;
button2.Enabled = false;
}
}
}
}

Abbas Naghdi
پنج شنبه 07 آذر 1392, 16:12 عصر
متین جان مطمعن هستی برای همه ی دستگاه ها جواب میده ؟

mortezasar
پنج شنبه 07 آذر 1392, 16:26 عصر
سلام کد دوستمون روی تمام دستگاه ها و یا بهتر بگم هر دستگاهی که اطلاعاتی رو پورت سریال بفرسته کار میکنه اما حواست باید باشه که به چه فرمتی اطلاعات ارسال میشن و شما با همون فرمت دریافت کنی

Abbas Naghdi
دوشنبه 09 دی 1392, 14:31 عصر
اگر دستگاه اطلاعات رو بر روی پورت ارسال نکنه چی ؟ ... میتونیم خودمون اطلاعات رو درخواست کنیم ؟
حالا اگر ویندوز پورت رو شناسایی نکنه چی ؟

Abbas Naghdi
جمعه 13 دی 1392, 14:20 عصر
اگر قرار باشه از دو دستگاه اطلاعات رو بگیرم چطور ؟
تغییر پورت و ... کافی هست ؟

کامبیز اسدزاده
جمعه 13 دی 1392, 17:38 عصر
دوست عزیز برای کار با سخت افزار C# مناسب نیست ! لاقل از C++ استفاده نمیکنی از C++ CLI استفاده کن بهتر و سریعتر میتونی با سخت افزار ارتباط داشته باشی.
اصلا درست نیست برای ارتباط با سخت افزار سیستم عامل رو درگیر قضیه کنی.

Abbas Naghdi
شنبه 14 دی 1392, 00:48 صبح
دوست عزیز برای کار با سخت افزار C#‎ مناسب نیست ! لاقل از C++‎ استفاده نمیکنی از C++‎ CLI استفاده کن بهتر و سریعتر میتونی با سخت افزار ارتباط داشته باشی.
اصلا درست نیست برای ارتباط با سخت افزار سیستم عامل رو درگیر قضیه کنی.

دوست عزیز استفاده از C# برای من بهتره چون دارم نرم افزار رو با این زبان مینویسم ... در ضمن کار بزرگی با سخت افزار نمیخوام انجام بدم که ...اطلاعات ارسالی رو میخوام دریافت کنم ...
البته اگر شما کد یا dll ای از C++ دارید ممنون میشم به من بدین :)

Abbas Naghdi
شنبه 14 دی 1392, 16:03 عصر
با سلام ...
من الان به دستگاه دیجیتال Gamma 07 شرکت فراسو وصل شدم .. اما الان نمیتونم داده ای دریافت کنم ... هیچ بایت ارسالی نداره ...
من بهش 1 بایت ارسال میکنم اما هیچ چیزی دریافت نمیکنم ..
از Hiper terminal هم استفاده کردم اما اون هم چیزی نمایش نمیده .. مشکل از چیه ؟

pooria_googooli
شنبه 14 دی 1392, 17:13 عصر
ببین دوست عزیز من با c# به باسکول های زیادی وصل شدم . این کدی که دوست عزیزمون matin.soft (http://barnamenevis.org/member.php?243752-matin.soft) نوشتند دقیقا هر قطعه ای که از طریق پورت سریال وصل شده باشه به کامپیوتر و مقداری را ارسال کنه نمایش میده . تنها چیزی که می مونه اون فرمت رشته ارسالی هست که تنها راه فهمیدن این فرمت تماس با شرکت و یا پیدا کردن توی کاتالوگ محصوله . مثلا خروجی یه باسکول یه هگزا دسیماله که 4 رقم اولش برای وزنه و رقم های بعدی هرکدوم بیان کننده چیزی غیر از وزن هستند .

Abbas Naghdi
دوشنبه 16 دی 1392, 14:26 عصر
نمیشه کاری کرد که قبل از ارسال ما داده رو بخونیم .... مثلا همون 0
دستگاهم به لودسل وصل نیست ... فقط میخوام اطلاعات رو بخونم ... هر اطلاعاتی باشه ...
چون به لودسل وصل نست اطلاعاتی ارسال نمیکنه ... چطور اطلاعات رو خودم درخواست کنم ؟

Abbas Naghdi
سه شنبه 24 دی 1392, 11:50 صبح
سلام 8 بیت دریافت میکنم که از بایت 1 تا بایت 6 اطلاعات با ارزش هست . چطور این 6 بایت رو دریافت کنم و اون 2 بایت رو نه ؟
و اطلاعات دریافت میشه و به اطلاعات قبلی اضافه میشه !
چطور کاری کنم که بعد از دریافت 6 بایت و پر کردن تکس باکس دیگه چیزی به تکس باکس اضافه نشه ... یعنی 6 بایت جدید جایگزین بشه ؟

mortezasar
سه شنبه 24 دی 1392, 14:17 عصر
سلام یه ارایه تعریف کن و هر 8 بیت رو بخون و بریز تو آرایه بیت ها ت
بعد هر مقداری از اون بیت ها رو لازم داشتی از تو ارایه بخون و تو تکست باکس بریز

Abbas Naghdi
سه شنبه 24 دی 1392, 17:35 عصر
سلام یه ارایه تعریف کن و هر 8 بیت رو بخون و بریز تو آرایه بیت ها ت
بعد هر مقداری از اون بیت ها رو لازم داشتی از تو ارایه بخون و تو تکست باکس بریز

با تشکر دوست عزیز ... باور کن الگوریتمشو خودم بلدم ... نهوه ی این کار رو بلد نیستم !