C++(QT)开发OMRON上位机fins通信协议 QT开发上位机例子 C++快速实现OMRON欧姆龙上位机开发 C++封装OMRON上位机fins协议通信 支持Windows、linux平台

自行封装Omron欧姆龙fins协议例子下载----->网盘下载

在工业自动化领域,上位机作为连接人机交互与底层控制设备的关键桥梁,其开发效率和性能至关重要。Qt框架以其跨平台能力、丰富的功能库和高效的运行性能,成为开发上位机的理想选择。

首先,Qt的跨平台特性允许开发者编写一次代码,即可在Windows、Linux和macOS等多个操作系统上运行,大大减少了平台间的重复开发工作。这对于需要在不同操作系统环境中部署上位机的企业来说,是一个巨大的优势。

其次,Qt提供了一套完整的工具集和库,包括但不限于网络通信、图形用户界面和多线程处理等,这些功能为上位机的开发提供了强大的支持。特别是对于需要与多种PLC设备进行通信的应用,Qt的网络通信库能够简化开发流程,提高开发效率。

再者,Qt的高效性体现在其运行性能上。Qt应用程序通常具有较小的内存占用和快速的响应时间,这对于实时性要求高的工业环境至关重要。

特别地,当涉及到与欧姆龙PLC设备的通信时,Qt的优势更加明显。欧姆龙FINS协议是专为欧姆龙PLC设计的通信协议。Qt没有内置对FINS协议的直接支持,自行封装,Qt可以方便地实现与FINS协议的对接。一旦封装完成,Qt的信号和槽机制、以及对网络通信的良好支持,使得使用Qt开发基于FINS协议的上位机变得非常高效。

最后,Qt的社区支持和文档资源也是其受欢迎的原因之一。开发者可以轻松找到解决问题的方法和最佳实践,加速开发过程。Qt以其跨平台性、丰富的功能库、高效的运行性能以及良好的社区支持,成为开发上位机,特别是需要与欧姆龙FINS协议通信的上位机的理想选择。

void OmronPlc::on_bt_readBool_clicked()
{
    try{
        if(!fins->isConnected()){
            return;
        }

        string key=ui->lineEdit_3->text().toStdString();
        int count=ui->lineEdit_4->text().toInt();

        //这是获取位的数据,一次性获取16位,支持D、W、C、H、E0、E1、E2
        vector<bool> listBit=fins->ReadBitToList(key,count);

        if(ui->listWidget->count()>19){
            delete  ui->listWidget->takeItem(0);
        }
        if(listBit.empty()){
            ui->listWidget->addItem(QString::fromUtf8(getCurrentTimeAsString().c_str())+
                                    " 读取"+ui->lineEdit_3->text()+"数据有误,请查看格式是否正常-->");
            return;
        }

        string temp="";
        for(size_t i=0;i<listBit.size();i++){
            qDebug()<<"result-->"<< QString::fromStdString(listBit[i]? "true" : "false");
            if(temp==""){
                temp=listBit[i] ? "true":"false";
            }else{
                temp=temp+","+(listBit[i] ? "true":"false");
            }
        }
        ui->listWidget->addItem(QString::fromUtf8(getCurrentTimeAsString().c_str())+
                                " 读取"+ui->lineEdit_3->text()+"的值-->"+QString::fromStdString(temp));


    }
    catch (const exception& e) {
        // 捕获 exception 或其子类的异常
        qDebug()<<"on_bt_read_clicked-->: " << e.what();
    }
}

void OmronPlc::on_bt_readInt_clicked()
{
    try{
        if(!fins->isConnected()){
            return;
        }

        string key=ui->lineEdit_3->text().toStdString();
        if(ui->lineEdit_4->text()==""){
            ui->listWidget->addItem("读数量为数字");
            return;
        }
        int count=ui->lineEdit_4->text().toInt();

        //连接读5个字的值,值自动转数字,支持D、E0、E1、E2
        vector<int> list=fins->ReadWordToListInt(key,count);
        if(ui->listWidget->count()>19){
            delete  ui->listWidget->takeItem(0);
        }

        if(list.empty()){
            ui->listWidget->addItem(QString::fromUtf8(getCurrentTimeAsString().c_str())+
                                    " 读取"+ui->lineEdit_3->text()+"数据有误,请查看格式是否正常-->");
            return;
        }
        string temp="";
        for(size_t i=0;i<list.size();i++){
            //ui->lineEdit_4->setText(QString::number(list2[i]));
            qDebug()<<"result-->"<< list[i];
            if(temp==""){
                temp=to_string(list[i]);
            }else{
                temp=temp+","+to_string(list[i]);
            }
        }
        ui->listWidget->addItem(QString::fromUtf8(getCurrentTimeAsString().c_str())+
                                " 读取"+ui->lineEdit_3->text()+"的值-->"+QString::fromStdString(temp));
    }
    catch (const exception& e) {
        // 捕获 exception 或其子类的异常
        qDebug()<<"on_bt_read_clicked-->: " << e.what();
    }
}

void OmronPlc::on_bt_write_3_clicked()
{
    try{
        if(!fins->isConnected()){
            return;
        }
        string key=ui->lineEdit_6->text().toStdString();
        vector<int> list;
        if(ui->lineEdit_5->text()!=""){
            list.push_back(ui->lineEdit_5->text().toInt());
        }
        bool check=fins->WritePlcFormListInt(key,list);
        qDebug()<<"check-->"<< QString::number(check);
        if(ui->listWidget->count()>19){
            delete  ui->listWidget->takeItem(0);
        }
        if(!check){
            ui->listWidget->addItem(QString::fromUtf8(getCurrentTimeAsString().c_str())+
                                    " 写入"+ui->lineEdit_6->text()+"出错-->"+ui->lineEdit_5->text());
            return;
        }
        ui->listWidget->addItem(QString::fromUtf8(getCurrentTimeAsString().c_str())+
                                " 写入"+ui->lineEdit_6->text()+"成功-->"+ui->lineEdit_5->text());
    }
    catch (const exception& e) {
        // 捕获 exception 或其子类的异常
        qDebug()<<"on_bt_write_3_clicked-->: " << e.what();
    }
}

void OmronPlc::on_bt_write_2_clicked()
{
    try{
        if(!fins->isConnected()){
            return;
        }
        string key=ui->lineEdit_6->text().toStdString();
        vector<int> list;
        if(!(ui->lineEdit_5->text()=="1" || ui->lineEdit_5->text()=="0")){
            ui->listWidget->addItem("请输入1或0");
            return;
        }
        list.push_back(ui->lineEdit_5->text().toInt());
        bool check=fins->WritePlcFormListBit(key,list);
        qDebug()<<"check-->"<< QString::number(check);
        if(ui->listWidget->count()>19){
            delete  ui->listWidget->takeItem(0);
        }
        if(!check){
            ui->listWidget->addItem(QString::fromUtf8(getCurrentTimeAsString().c_str())+
                                    " 写入"+ui->lineEdit_6->text()+"出错-->"+ui->lineEdit_5->text());
            return;
        }
        ui->listWidget->addItem(QString::fromUtf8(getCurrentTimeAsString().c_str())+
                                " 写入"+ui->lineEdit_6->text()+"成功-->"+ui->lineEdit_5->text());
    }
    catch (const exception& e) {
        // 捕获 exception 或其子类的异常
        qDebug()<<"on_bt_write_2_clicked-->: " << e.what();
    }
}

 

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weijia3624

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值