ارتباط با باسکول از طریق RS232 - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

ارتباط با باسکول از طریق RS232

0 امتیاز
سلام.

قرار با باسکول ارتباط برقرار کنم و وزن را دریافت کنم تنها چیزی که گفتن که از طریق پورت RS232 می تونم با باسکول ارتباط برقرار کنم و دیتای وزن را بخونم کسی همچین کاری تو c++ انجام داده؟
سوال شده آبان 7, 1402  بوسیله ی Lori3 (امتیاز 857)   11 36 105

2 پاسخ

0 امتیاز

برای ارتباط با پورت سریال از همچین کدی می تونید استفاده کنید بپرسید ببینید باسکول منوال داره:

#include <QtSerialPort/QSerialPort>
#include <QTimer>

QSerialPort serial;
QTimer timer;

serial.setPortName("COM1");
serial.setBaudRate(QSerialPort::Baud2400);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);

if(!serial.open(QIODevice::ReadWrite)) {
  qDebug() << "Error opening serial port";
  return;
}

timer.start(100); // read every 100ms

connect(&timer, &QTimer::timeout, [&]() {

  if(!serial.canReadLine()) 
    return;
  
  QByteArray data = serial.readLine();
  
  if(data.startsWith("\xBB")) {
    int weight = (data[1].toLatin1() << 16) + 
                 (data[2].toLatin1() << 8) +
                  data[3].toLatin1();

    if(data[4] == "\xDD") {
      qDebug() << "Positive weight:" << weight; 
    }
    else if(data[4] == "\xE0") {
      qDebug() << "Negative weight:" << -weight;
    }
  }
  
});

 

پاسخ داده شده آبان 7, 1402 بوسیله ی عباس مولایی (امتیاز 2,754)   1 5 13
ویرایش شده آبان 7, 1402 بوسیله ی عباس مولایی
0 امتیاز

منوال باسکول به این صورت بود:

حالت عادی 

ارسال اطلاعات در این وضعیت با کد BB ( هگزا دسیمال ) آغاز می گردد ، پس از آن سه بایت ( BYTE ) اطلاعات مربوط به وزن به صورت دسیمال قرار خواهد داشت . ( به شکل الف دقت نمایید )


start code                                       weight data bytes                                       decimal point code  decimale point byte

 BYTE4 DD – Hex

 BYTE3 LSB

 BYTE2

 BYTE1 MSB

BB – Hex


شکل الف


مثال

وزن 22.150- به صورت BB  150   DD   03 ارسال می شود .

وزن 3198.0- به صورت BB   02   68   00   DD   01 ارسال می شود .


حالت منفی 

قالب کلی همانند حالت عادی می باشد با این تفاوت که بین اطلاعات اصلی مربوط به وزن و کد آغازین BB Hex از کد E0 ( هگزا دسیمال ) استفاده شده است . ( شکل ب )


start code                   negative sign code                        weight data bytes                    decimal point code  decimale point byte

 BYTE4

DD – Hex

 BYTE3 LSB

 BYTE2

 BYTE 1 MSB

 E0 -Hex

BB – Hex


شکل ب


مثال :

وزن 22.150- به صورت BB   E0   02   21   50   DD   03 ارسال می گردد .

وزن 3198.0- به صورت BB   03   19   80   DD   01 ارسال می گردد .


حالت سر ریز :

در این حالت اطلاعاتی مربوط به وزن وجود ندارد ، همچنین به جای کد میانی E0 که وضعیت معکوس را نشان می دهد ، F0 ( هگزا دسیمال ) ارسال می شود ( شکل ج )


start code                                          over fflow

F0 – Hex BB – Hex

شکل ج


هنگامی که نمایشگر پیغام over را نشان می دهد این حالت رخ خواهد داد .


یاد آوری:

جهت تنظیم پارامتر های مورد نیاز به منظور برقراری ارتباط سریال اطلاعات جدول زیر را مورد استفاده قرار دهید :

Val Parameter
 2400 Bps  Baud Rate
 9000 Bps ( 9000 w )  Data Bits
8 Bits  Data Bits
 1 Bit Stop Bits
NO Parity
 

 

پاسخ داده شده آبان 7, 1402 بوسیله ی عباس مولایی (امتیاز 2,754)   1 5 13
...