PDA

View Full Version : سوال: کمک در مورد دریافت وزن از باسکول



esagraphic
یک شنبه 19 بهمن 1393, 13:24 عصر
سلام به همه اساتید محترم
من این سوالو تو بخش vb.net مطرح کردم مثلی که سر اساتید شلوغه خواستم از اینجا هم کمکی بگیرم اگر چه کدام تفاوتی میان vb.net و C#‎‎‎ نیست مهم مفهموه این سوالو از شما دارم تا اگه میتونید برام کمک کنید ممنون میشم
من قبلا با یک نمایشگری کار میکردم در مورد باسکول وزن ثابت بود و کاراکتر های اظافی هم که داشت حذف میکردم اما این مورد فرق میکنه زمانی که وزن را از باسکول میگیرم کلی پشت سر هم دریافت میشه و اصلاً ثابت نیست چیطوری میتونم ثابت نگهش دارم تصویر را درج کردم یاهم دقیق دریافت نمایم کاتالوگ هم در پائین درج شده که مال دستگاه است

128280

طبق که در تصویر مشاهده میکنید کلی وزن را فرستاده حالا وزن مورد نظر من تنها 000190 است اینو میخوام اگه ثابت میبود میشد حذفش کرد لطفا هرکی میدونه رهنمائی کنه و اگه شما راهی بلدین که بتونم تنها 10 بیت را از پورت سریال دریافت کنم شاید مشکل حل بشه
اینم از کد هام


Private Sub DisplayText(ByVal sender As Object, ByVal e As EventArgs)
textBox2.AppendText(StrRecieve)
End Sub

Private Sub serialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
StrRecieve = SerialPort1.ReadExisting
Me.Invoke(New EventHandler(AddressOf DisplayText))
End Sub



اینم از رهنمای خود نشاندهنده
128281

sajadsobh
یک شنبه 19 بهمن 1393, 23:11 عصر
الان این کنترل که شامل این ارقامه چی هست؟!

esagraphic
یک شنبه 19 بهمن 1393, 23:26 عصر
الان این کنترل که شامل این ارقامه چی هست؟!

این همه را میفرسته الان از اونها وزن مورد نظر من تنها
000190 نه اون علامت ها و بقیه

sajadsobh
یک شنبه 19 بهمن 1393, 23:59 عصر
بنده منظورم این بوده که این کنترلی که عکسش رو گذاشتید و الان این ارقام توش هست چیه؟! textboxe picturebox ؟

esagraphic
دوشنبه 20 بهمن 1393, 08:31 صبح
بنده منظورم این بوده که این کنترلی که عکسش رو گذاشتید و الان این ارقام توش هست چیه؟! textboxe picturebox ؟

textboxe است دوستم

sajadsobh
دوشنبه 20 بهمن 1393, 15:07 عصر
اگه این یه تکست باکسه و منظورتون از این رشته ی +000190013 فقط مقدار 000190 مد نظر هستش می تونید با دستور Substring اون مقداری که میخواین رو بدست بیارین. البته اگه همیشه همینجور مقدار میده. مثلآً الان که واسه 000190، +000190013 رو نشون میده برای 025400 هم اینو نشون بده +025400013
نمیدونم درست منظورم رو رسوندم یا نه؟!

esagraphic
دوشنبه 20 بهمن 1393, 19:18 عصر
اگه این یه تکست باکسه و منظورتون از این رشته ی +000190013 فقط مقدار 000190 مد نظر هستش می تونید با دستور Substring اون مقداری که میخواین رو بدست بیارین. البته اگه همیشه همینجور مقدار میده. مثلآً الان که واسه 000190، +000190013 رو نشون میده برای 025400 هم اینو نشون بده +025400013
نمیدونم درست منظورم رو رسوندم یا نه؟!
اگر همونجوری ثابت میبود خوب بود میشد با اون عملیه substring حذف کنم ولی مشکل اینه که ثابت نیست تعدادش زیاد شده و زیاد شده میره

sajadsobh
دوشنبه 20 بهمن 1393, 20:59 عصر
یعنی فقط تعدادش زیاد میشه؟! خب اون دستور AppendText رو یه شرط واسش بذارید اگه تعداد کاراکترها به یه مقدار خاص رسید دیگه اضافه نکنه!
برای مثال:

while (textBox2.TextLength <= 20)
textBox2.AppendText(StrRecieve);

با این دستور فقط تا زمانی که تعدا کاراکترهای تکست باکس به 20 رسید عملیات الحاق انجام میشه.

esagraphic
دوشنبه 20 بهمن 1393, 21:52 عصر
یعنی فقط تعدادش زیاد میشه؟! خب اون دستور AppendText رو یه شرط واسش بذارید اگه تعداد کاراکترها به یه مقدار خاص رسید دیگه اضافه نکنه!
برای مثال:

while (textBox2.TextLength <= 20)
textBox2.AppendText(StrRecieve);

با این دستور فقط تا زمانی که تعدا کاراکترهای تکست باکس به 20 رسید عملیات الحاق انجام میشه.


سلام دوستم ممنون از رهنمای تان
یعنی بگم اگه تعداد کاراکتر های تکس باکس از 10 بیشتر شد دگه دریافت نکن بعد با عملیه substring سمت راست و چپ را تنظیم کنم اره
باشه من اینو فردا امتحان میکنم الان دستگاه نزدم نیست باز شما را زحمت میدم
تشکر

sajadsobh
دوشنبه 20 بهمن 1393, 22:09 عصر
آره ببینید با این دستور چه مقداری رو برمیگردونه بعد بیاین با Substring اون چیزی که میخواین رو ازش بدست بیارین. البته با وزن های مختلف هم اینکار رو انجام بدید ببینید رشته ارسالی به یک فرمت ارسال میشه یا نه!

esagraphic
سه شنبه 21 بهمن 1393, 10:45 صبح
آره ببینید با این دستور چه مقداری رو برمیگردونه بعد بیاین با Substring اون چیزی که میخواین رو ازش بدست بیارین. البته با وزن های مختلف هم اینکار رو انجام بدید ببینید رشته ارسالی به یک فرمت ارسال میشه یا نه!

در اون حالت هم هر کاری کردم جواب نگرفتم من یک تکه کد از نرم افزار که اون برنامه بهش وصل بود بیرون کردم این شکلی کار گرفته من سر در نیاوردم میشه شما بفهمید اینجا میزارم که چیکار کرده


public void (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Void) Yaohua_XK3190_D9 (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/Yaohua_XK3190_D9())()
{
try
{
int (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Int32) num;
if (port (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/port:System.IO.Ports.SerialPort).IsOpen (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://System:2.0.0.0:b77a5c561934e089/System.IO.Ports.SerialPort/property:IsOpen:Boolean))
{
goto Label_0191;
}
return;
Label_0014:
num = port (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/port:System.IO.Ports.SerialPort).ReadByte (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://System:2.0.0.0:b77a5c561934e089/System.IO.Ports.SerialPort/ReadByte():Int32)();
if (Closeflag (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/Closeflag:Boolean))
{
return;
}
if (num == 2)
{
motion1 (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/motion1:Boolean) = true;
int (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Int32) digits = 0;
string (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.String) str = "";
int (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Int32) num3 = 0;
foreach (char (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Char) ch in this.outdoor_str (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/outdoor_str:String))
{
switch (ch)
{
case '-':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if (num3 < 7)
{
str = str.Insert (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.String/Insert(Int32,String):String)(str.Length (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.String/property:Length:Int32), ch.ToString (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Char/ToString():String)());
}
if (ch == '-')
{
motion1 (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/motion1:Boolean) = false;
}
break;
}
num3++;
}
double (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Double) num4 = 0.0;
try
{
num4 = Math (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Math).Round (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Math/Round(Double,Int32):Double)(Convert (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Convert).ToDouble (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Convert/ToDouble(String):Double)(str), digits);
}
catch
{
motion1 (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/motion1:Boolean) = false;
this.outdoor_str (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/outdoor_str:String) = "";
return;
}
this.outdoor_str (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/outdoor_str:String) = "";
weightonline1 (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/weightonline1:Double) = num4;
bool (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Boolean) flag1 = this.Bascule1radioButton (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/Bascule1radioButton:System.Windows.Forms.RadioButt on).Checked (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://System.Windows.Forms:2.0.0.0:b77a5c561934e089/System.Windows.Forms.RadioButton/property:Checked:Boolean);
weightonline (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/weightonline:Double) = weightonline1 (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/weightonline1:Double);
this.SetText (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/SetText(String))(str);
WeightUpdatedFlag1 (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/WeightUpdatedFlag1:Boolean) = true;
this.outdoor_str (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/outdoor_str:String) = "";
bool (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Boolean) flag2 = this.Bascule1radioButton (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/Bascule1radioButton:System.Windows.Forms.RadioButt on).Checked (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://System.Windows.Forms:2.0.0.0:b77a5c561934e089/System.Windows.Forms.RadioButton/property:Checked:Boolean);
motion (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/motion:Boolean) = motion1 (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/motion1:Boolean);
}
else
{
this.outdoor_str (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/outdoor_str:String) = this.outdoor_str (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/outdoor_str:String).Insert (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.String/Insert(Int32,String):String)(this.outdoor_str (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/outdoor_str:String).Length (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.String/property:Length:Int32), Convert (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Convert).ToChar (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Convert/ToChar(Int32):Char)(num).ToString (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Char/ToString():String)());
}
Label_0191:
if (port (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/port:System.IO.Ports.SerialPort).BytesToRead (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://System:2.0.0.0:b77a5c561934e089/System.IO.Ports.SerialPort/property:BytesToRead:Int32) != 0)
{
goto Label_0014;
}
}
catch
{
motion1 (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/motion1:Boolean) = false;
this.outdoor_str (http://127.0.0.1/roeder/dotnet/Default.aspx?Target=code://WeighingMainForm:1.0.0.0/WeighingMainForm.WeighingForm/outdoor_str:String) = "";
}
}

esagraphic
چهارشنبه 22 بهمن 1393, 09:05 صبح
اون کد بالا مربوط یک نرم افزاری است که از همین دستگاه وزن را میخونه من سر در نیاوردم کسی است بفهمه چیکار کرده

sajadsobh
چهارشنبه 22 بهمن 1393, 11:09 صبح
حقیقتاً من تنها چیزی که فهمیدم این بود که میاد 7 تا کاراکتر از اون رو اگه عدد باشه توی یه متغیر رشته ای ذخیره میکنه. فکر کنم همین باشه. فقط چون من با پورت سریال کار نکردم از بقیه چیزاش چیزی نفهمیدم. یه چیزی رو من متوجه نمیشم. مگه وقتی که شما وزن رو از باسکول میگیرید یه مقدار بر نمیگردونه؟! یعنی نمیشه با Substing اون مقدار که میخواین رو واکشی کنین؟

esagraphic
جمعه 24 بهمن 1393, 22:18 عصر
حقیقتاً من تنها چیزی که فهمیدم این بود که میاد 7 تا کاراکتر از اون رو اگه عدد باشه توی یه متغیر رشته ای ذخیره میکنه. فکر کنم همین باشه. فقط چون من با پورت سریال کار نکردم از بقیه چیزاش چیزی نفهمیدم. یه چیزی رو من متوجه نمیشم. مگه وقتی که شما وزن رو از باسکول میگیرید یه مقدار بر نمیگردونه؟! یعنی نمیشه با Substing اون مقدار که میخواین رو واکشی کنین؟

سلام دوست عزیز یک دستگاه قبلا بود با SerialPort1.Readline وقتی یک مقدار را دریافت میکرد به هر میلی ثانیه یک لاین بود و میشد با substring درست کرد اما حالا در هر ملی ثاینه چندین کاراکتر را میفرسته مثلاً اول ده تا میشه بیست تا و 30 تا الی بیشتر چیطور معلوم کنم که چیقدر فرستاده اینجانش مشکله طبق کاتالوگ خود دستگاه هم ندونستم چیجوری اجرا کنم که Readbyte استفاده کنم

esagraphic
یک شنبه 24 اسفند 1393, 18:31 عصر
تنها محض بالا اوردن و فراموش نشدن این پست نظر دادم منتظرم کمک هستم هنوزم دوستانی که با باسکول کار کردن کمک کنن

esagraphic
دوشنبه 04 خرداد 1394, 18:49 عصر
این پست از یاد همه رفت و من هنوز تو این مشکل هستم یکی بیاد دگه که تجربه در کار باسکول داشته باشه یا کسی را معرفی کنه ممنون میشم ها

shahryari
دوشنبه 04 خرداد 1394, 20:11 عصر
در تاپیک زیر یه روشی به یکی از دوستان گفتم ببنید به کار شما میاد
http://barnamenevis.org/showthread.php?434522-%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D8%A7%D8%B2-%D8%A8%D8%A7%D8%B3%D9%83%D9%88%D9%84-%D9%88-%D8%AB%D8%A8%D8%AA-%D8%A2%D9%86-%D8%AF%D8%B1-%D9%87%D9%86%DA%AF%D8%A7%D9%85-%D8%AB%D8%A7%D8%A8%D8%AA-%D8%B4%D8%AF%D9%86-%D9%88%D8%B2%D9%86

esagraphic
سه شنبه 05 خرداد 1394, 12:00 عصر
در تاپیک زیر یه روشی به یکی از دوستان گفتم ببنید به کار شما میاد
http://barnamenevis.org/showthread.php?434522-%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D8%A7%D8%B2-%D8%A8%D8%A7%D8%B3%D9%83%D9%88%D9%84-%D9%88-%D8%AB%D8%A8%D8%AA-%D8%A2%D9%86-%D8%AF%D8%B1-%D9%87%D9%86%DA%AF%D8%A7%D9%85-%D8%AB%D8%A7%D8%A8%D8%AA-%D8%B4%D8%AF%D9%86-%D9%88%D8%B2%D9%86


ممنون دوست عزیز من قبلاً ها هم از این پست های شما استفاده کردم این تاپیک را هم خیلی وقت پیش دنبال کردم با یک دستگاه به همون روش استفاده کردم درست شد اما این بار یک دستگاه دگری است شما پست اول منو ببنید تو عکس اینجا هم ضمیمه میکنم از اون اعداد های که توی تکس باکس من است کاراکتر های مورد نیاز من تنها 00190 است بقیه همه اظافه است و تکس باکس را هم پر میکنه از replace استفاده میکنم اون مثبت ها و علامت را بر میدارم اما و با .trim به یک لاین تبدیل میکنم اما همش داره تغیر میخوره و ثابت نیست اینم از کد هام
یه فایل ضمیمه کردم از یکی از برنامه های باسکول سورسشو بیرو کردم اونم با همین دستگاه که من دارم تونسته وصل کنه ولی من هیچ سر از کد این در نیاوردم در پائین فایل را ضمیمه کردم اگه شما چیزی دونستید ممنون میشم
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
StrRecieve = serialPort1.ReadExisting();


StrRecieve = StrRecieve.Replace("", "");
StrRecieve = StrRecieve.Replace("E", "");
StrRecieve = StrRecieve.Replace("+", "");
StrRecieve = StrRecieve.Replace("", "");
StrRecieve = StrRecieve.Replace("", "");
StrRecieve = StrRecieve.Replace("", "");
this.Invoke(new EventHandler(DisplayText));

}


private void DisplayText(object sender, EventArgs e)
{

textBox2.Text = StrRecieve.Trim();
}

131676

کد مربوط به نرم افزاری که تونسته با همین روش وزن را دریافت کنه

public void Yaohua_XK3190_D9()
{
try
{
int num;
if (port.IsOpen)
{
goto Label_0191;
}
return;
Label_0014:
num = port.ReadByte();
if (Closeflag)
{
return;
}
if (num == 2)
{
motion1 = true;
int digits = 0;
string str = "";
int num3 = 0;
foreach (char ch in this.outdoor_str)
{
switch (ch)
{
case '-':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if (num3 < 7)
{
str = str.Insert(str.Length, ch.ToString());
}
if (ch == '-')
{
motion1 = false;
}
break;
}
num3++;
}
double num4 = 0.0;
try
{
num4 = Math.Round(Convert.ToDouble(str), digits);
}
catch
{
motion1 = false;
this.outdoor_str = "";
return;
}
this.outdoor_str = "";
weightonline1 = num4;
bool flag1 = this.Bascule1radioButton.Checked;
weightonline = weightonline1;
this.SetText(str);
WeightUpdatedFlag1 = true;
this.outdoor_str = "";
bool flag2 = this.Bascule1radioButton.Checked;
motion = motion1;
}
else
{
this.outdoor_str = this.outdoor_str.Insert(this.outdoor_str.Length, Convert.ToChar(num).ToString());
}
Label_0191:
if (port.BytesToRead != 0)
{
goto Label_0014;
}
}
catch
{
motion1 = false;
this.outdoor_str = "";
}
}

reza_ali202000
چهارشنبه 06 خرداد 1394, 00:17 صبح
یه serial port بزار رو برنامت با مشخصات
BaudRate 2400
DataBits 8
ReadBufferSize 2048


private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{


try
{
//lblvazn.Text = "0";
string s = serialPort1.ReadExisting();
int j = 0;
int k = 0;
for (int i = 0; i < s.Length; i++)
{
try
{
if (Convert.ToInt32(s.Substring(i, 1)) >= 0)
{
j = i;
i = s.Length;
}
}
catch { }
}
string s2=s.Substring(j);
string w = "";
for (int i = 0; i < s2.Length; i++)
{
try
{
if (Convert.ToInt32(s2.Substring(i, 1)) >= 0)
{
w += s2.Substring(i, 1);
}
}
catch
{
k = i;
i = s2.Length;
}
}
//string s2 = s.Substring(0, 10).Replace("P","").Replace("p","").Replace("+","").Replace("\r","").Replace("t","").Replace("T","").Replace("-","");
if (w.Length > 5)
lblvazn.Text = frm1._ss = w;//(Convert.ToDecimal(w)).ToString();//Convert.ToDecimal( s.Substring(j, k)).ToString("000000");//(Convert.ToDecimal( s.Substring(j,k))).ToString("00000");// Convert.ToDecimal(s).ToString("00000");

}
catch
{

}

}

lblvazn یه لیبل هس که مقدار رو توی اون نمایش میده.

mthreat.info
چهارشنبه 06 خرداد 1394, 00:57 صبح
دلسل افزایش متن AppendText هست شما از .Text= استفاده کن جواب میده :D
من تا اون جا که با پورت سریال کار کردم فهمیدم اگه بجز اینکه بدونید چقدر از اطلاعات دستگاه رو میخواهید ( بایت ) تا کامل شدن اون باید بخونید وگر نه اگه ندونید طول ورودی شما چقدر هست و با متد WriteLine خروجی رو ننوشته باشن ( \r\n ) نداشته باشه نمیتونی مطمئن باشی که ورودیتون همون خروجی دستگاه هست ( چون بنابر دلایلی اطلاعات میشکنه و تیکه تیکه میاد )

esagraphic
چهارشنبه 06 خرداد 1394, 14:04 عصر
دلسل افزایش متن AppendText هست شما از .Text= استفاده کن جواب میده :D
من تا اون جا که با پورت سریال کار کردم فهمیدم اگه بجز اینکه بدونید چقدر از اطلاعات دستگاه رو میخواهید ( بایت ) تا کامل شدن اون باید بخونید وگر نه اگه ندونید طول ورودی شما چقدر هست و با متد WriteLine خروجی رو ننوشته باشن ( \r\n ) نداشته باشه نمیتونی مطمئن باشی که ورودیتون همون خروجی دستگاه هست ( چون بنابر دلایلی اطلاعات میشکنه و تیکه تیکه میاد )

سلام دقیقا مشکل من هم همینه تو بعضی دستگاه ها اطلاعات به صورت کامل یه بار میاد اما تو این دستگاه یه اطلاعات میاد دنبالش یکی دگه ناقص میاد دقیقاً همین مشکلو دارم اتفاقا میدونم که کدوم بایت ها برای دیتا و کدوم برای استارت و Stop است الان دقیقاً مشکلم اینه نمیدونم چیطوری باید استفاده کنم ببینید این دفترچه توش کاملاً توضیع داده که چیجوری ( بایت ) ها میاد یه نظری به این عکس زیر بندازید کاملاً واضع گفته
131706

mthreat.info
چهارشنبه 06 خرداد 1394, 23:34 عصر
خوب شما با توجه به عکسی که گذاشتی 12 بیت رو بخون بعد بگیر رو پردازشش کار کن
شما این لینک ها رو نگاه بیانداز
http://pvbookmarks.readthedocs.org/en/latest/devel/communication/serial/csharp/tutorials/tutorial_1.html (آخرین مطلبش)
یا
https://www.pololu.com/docs/0j34
http://stackoverflow.com/questions/18377886/read-bytes-from-serial-port

esagraphic
پنج شنبه 07 خرداد 1394, 14:21 عصر
یه serial port بزار رو برنامت با مشخصات
BaudRate 2400
DataBits 8
ReadBufferSize 2048


private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{


try
{
//lblvazn.Text = "0";
string s = serialPort1.ReadExisting();
int j = 0;
int k = 0;
for (int i = 0; i < s.Length; i++)
{
try
{
if (Convert.ToInt32(s.Substring(i, 1)) >= 0)
{
j = i;
i = s.Length;
}
}
catch { }
}
string s2=s.Substring(j);
string w = "";
for (int i = 0; i < s2.Length; i++)
{
try
{
if (Convert.ToInt32(s2.Substring(i, 1)) >= 0)
{
w += s2.Substring(i, 1);
}
}
catch
{
k = i;
i = s2.Length;
}
}
//string s2 = s.Substring(0, 10).Replace("P","").Replace("p","").Replace("+","").Replace("\r","").Replace("t","").Replace("T","").Replace("-","");
if (w.Length > 5)
lblvazn.Text = frm1._ss = w;//(Convert.ToDecimal(w)).ToString();//Convert.ToDecimal( s.Substring(j, k)).ToString("000000");//(Convert.ToDecimal( s.Substring(j,k))).ToString("00000");// Convert.ToDecimal(s).ToString("00000");

}
catch
{

}

}

lblvazn یه لیبل هس که مقدار رو توی اون نمایش میده.


دوست عزیز اگه این کد تو یکم توظیع بدی ممنون میشم ببین من باید 12 (بایت ) دریافت کنم و 8 بایت دیتای اصلی من است

esagraphic
شنبه 09 خرداد 1394, 12:18 عصر
همه زا دیدم ولی چیزی نفهمیدم ازش چیزی که میخواستم توش نبود کار منو راه ننداخت متاسفانه