-
Notifications
You must be signed in to change notification settings - Fork 3
/
anapencere.cpp.autosave
executable file
·140 lines (117 loc) · 4.09 KB
/
anapencere.cpp.autosave
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include "anapencere.h"
#include "ui_anapencere.h"
#include "benimseriport.h"
#include <QSerialPortInfo>
#include <QSerialPort>
#include <QDebug>
#include <QMessageBox>
#include <QString>
AnaPencere::AnaPencere(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::AnaPencere)
{
ui->setupUi(this);
setWindowTitle("Modbus RTU QT C++");
ui->statusBar->showMessage("Durum: Bağlı Değil");
ui->comboBox_2->addItems({"9600","38400","115200"});
ui->comboBox_3->addItems({"8,O,1","8,E,1","8,N,2"});
//bu bölümde bilgisayardaki halihazırda bulunun seri portların combobox ta listelenmesi sağlanır.
//this section gives the available ports list in computer by combobox
foreach (const QSerialPortInfo ports, QSerialPortInfo::availablePorts()){
ui->comboBox->addItem(ports.portName());
}
serialPort=new QSerialPort(this);
//Seri porttan veri girişi olduğunda readData fonksiyonunu çağırır.
// calls readData function while data comes to serial port
connect(serialPort,&QSerialPort::readyRead,this,&AnaPencere::readData);
}
AnaPencere::~AnaPencere()
{
delete ui;
serialPort->close();
}
void AnaPencere::on_pushButton_2_clicked()
{
serialPort->setPortName(ui->comboBox->currentText().trimmed());
QString ayar=ui->comboBox_3->currentText();
QString a1=ayar.mid(0, 1);
QString a2=ayar.mid(2,1);
QString a3=ayar.mid(4,1);
if(a1=="8"){
serialPort->setDataBits(QSerialPort::Data8);
}
if(a2=="N"){
serialPort->setParity(QSerialPort::NoParity);
}else if (a2=="E") {
serialPort->setParity(QSerialPort::EvenParity);
}else if (a2=="O") {
serialPort->setParity(QSerialPort::OddParity);
}
if(a3=="1"){
serialPort->setStopBits(QSerialPort::OneStop);
}else if(a3=="2"){
serialPort->setStopBits(QSerialPort::TwoStop);
}
serialPort->setBaudRate(ui->comboBox_2->currentText().toInt());
if(serialPort->open(QIODevice::ReadWrite)){
serialPort->clear();
ui->pushButton_2->setDisabled(true);
ui->pushButton->setEnabled(true);
ui->pushButtonGonder->setEnabled(true);
ui->statusBar->showMessage("Durum: Bağlı"); //Shows wether connection established "Status : Online"
}else{
QMessageBox::critical(this, tr("Error"), serialPort->errorString());
}
}
void AnaPencere::on_pushButton_clicked()
{
serialPort->close();
ui->pushButton->setDisabled(true);
ui->pushButton_2->setEnabled(true);
ui->statusBar->showMessage("Durum: Bağlı Değil"); // Shows wether connection close has done "Status: Oflline"
ui->pushButtonGonder->setEnabled(false);
}
void AnaPencere::readData()
{
rData=serialPort->readAll();
// rData.append(serialPort->readAll());
ui->textEdit->append(rData.toHex().toUpper());
}
void AnaPencere::on_pushButtonGonder_clicked()
{
QString veri=ui->lineEdit->text()+ui->lineEdit_2->text()+ui->lineEdit_3->text();
// qDebug() << veri;
QByteArray veri2;
for(int i=0;i<veri.length();i+=2){
QString a1=veri.mid(i,2);
bool ok;
unsigned int den=a1.toUInt(&ok,16);
// qDebug() << a1 << ":" << den;
veri2.append(char(den));
}
unsigned char uzunluk=uchar(veri2.length());
unsigned int crc=crc_chk(reinterpret_cast<unsigned char*> (veri2.data()),uzunluk);
//unsigned int crc=crc_chk((unsigned char*)veri2.data(),uzunluk);
// LSbyte
veri2.append(char(crc&0x00FF));
//MSByte
veri2.append(char(crc>>8));
ui->lineEdit_4->setText( QString("%1").arg(crc , 0, 16));
serialPort->write(veri2);
}
unsigned int AnaPencere:: crc_chk(unsigned char* data, unsigned char length)
{
int j;
unsigned int reg_crc=0xFFFF;
while(length--){
reg_crc ^= *data++;
for(j=0;j<8;j++){
if(reg_crc & 0x01){ /* LSB(b0)=1 */
reg_crc=(reg_crc>>1) ^ 0xA001;
}else{
reg_crc=reg_crc >>1;
}
}
}
return reg_crc;
}