精华内容
下载资源
问答
  • 为了研究煤矿井下巷道火灾封闭区内的燃烧状态,通过建立相似模拟实验台,模拟封闭火区的燃烧,了解火区封闭时期的燃烧状态,监测封闭区内各气体的成分、气体浓度变化情况,同时对区域内的气体、煤(岩)壁的温度变化趋势...
  • SF6气体组分分析(可在设备带电状态下进行)是诊断SF6气体绝缘设备内部运行情况的一个强有力的手段,据此可判断设备是否故障,并确定故障的具体部位,近年来已有不少成功案例。  本文主要探讨了GIS 中典型放电性...
  • 可燃气体燃爆过程通常伴随多种气体浓度的变化,因此其燃爆状态的判断较为复杂,文中使用DBN多传感器数据融合模型结合CAN/Zigbee混合网络,建立了一种可燃气体燃爆状态监测系统。DBN由RBM和BP神经网络构成,RBM通过非...
  • 为分析矿井火区内混合气体爆炸危险性及其变化趋势,介绍混合气体爆炸...研究结果表明:使用爆炸四方图不仅可以有效对多种可燃气体与多种惰气的混合气体进行爆炸危险性判断,还可以清晰地分析矿井火区爆炸危险性的变化趋势.
  • 得到了该煤层指标气体为CO、C2H4、C3H8、C2H2等,根据此次实验得到的指标性气体变化规律及其之间的比值关系,可以判断该煤层自燃所处的状态和发展趋势。基于这次实验研究表明了在井下发现该煤层指标气体时,则该煤层已...
  • 通过理论分析、相似模拟实验和数值分析相结合的方法,运用自行研制的CSC-1200型自然发火实验平台,针对长城煤矿不同地点采取的煤样进行自然...研究逸出气体与自燃温度之间的变化规律,为判断采空区自燃状态提供了依据。
  • 本项目对设备的监控有四种视图模式,可以任意切换,数据监控、地图监控、设备监控、曲线监控,其中数据监控是最常用的,所以在主界面导航中也排在第一位,综合观察分析了很多气体安全或者组态监控软件,大部分用户...

    一、前言

    本项目对设备的监控有四种视图模式,可以任意切换,数据监控、地图监控、设备监控、曲线监控,其中数据监控是最常用的,所以在主界面导航中也排在第一位,综合观察分析了很多气体安全或者组态监控软件,大部分用户习惯都是有个表格一行行显示对应设备的实时数据和状态等,加上一些特殊的颜色标识,这样显得更直观,有时候还会分门别类展示。

    Qt提供了表格控件QTableWidget,可以直接以行列的形式展示数据,使用接口和方法也是非常友好,直接new一个QTableWidgetItem然后指定行列位置setItem即可。一般在系统初始化的时候通过读取数据库中的设备列表实例化item然后加载,难点在于如何动态更新这些数据,并根据收到的值以不同的颜色显示,为此还专门写了一个方法setColor来对传进来的数据进行过滤,比如报警的值红色加粗显示,这些颜色还特意做了自定义,可以在系统设置中分别设置低报、高报、离线、正常等各种颜色。

    在协议解析的类中,并不是收到数据就立马发送到数据表格中,那样刷新频率太大,没有意义也没有必要,因为绝大部分时间的数据其实是不变的,所以在协议解析的类中,有一个队列专门存储的每个设备对应的值,只有当值发生了变化,才需要重新发送到界面进行展示,设备上线下线也是同样的处理,只有当设备首次上线或者离线的时候,才需要去更新状态。

    皮肤开源:https://gitee.com/feiyangqingyun/QWidgetDemo https://github.com/feiyangqingyun/QWidgetDemo
    文件名称:styledemo

    体验地址:https://gitee.com/feiyangqingyun/QWidgetExe https://github.com/feiyangqingyun/QWidgetExe
    文件名称:bin_sams.zip

    二、功能特点

    1. 采集数据端口,支持串口端口+网络端口,串口支持自由设置串口号+波特率,网络支持自由设置IP地址+通讯端口,每个端口支持采集周期,默认1秒钟一个地址,支持设置通讯超时次数,默认3次,支持最大重连时间,用于重新读取离线的设备。
    2. 控制器信息,能够添加控制器名称,选择控制器地址+控制器型号,设置该控制器下面的探测器数量。
    3. 探测器信息,能够添加位号,可自由选择探测器型号,气体种类,气体符号,高报值,低报值,缓冲值,清零值,是否启用,报警声音,背景地图,存储周期,数值换算小数点位数,报警延时时间,报警的类型(HH,LL,HL)等。
    4. 控制器型号+探测器型号+气体种类+气体符号,均可自由配置。
    5. 地图支持导入和删除,所有的探测器对应地图位置可自由拖动保存。
    6. 端口信息+控制器信息+探测器信息,支持导入导出+导出到excel+打印。
    7. 运行记录+报警记录+用户记录,支持多条件组合查询,比如时间段+控制器+探测器等,所有记录支持导出到excel+打印。
    8. 导出到excel的记录支持所有excel+wps等表格文件版本,不依赖excel等软件。
    9. 可删除指定时间范围内的数据,支持自动清理早期数据,设置最大保存记录数。
    10. 支持报警短信转发,支持多个接收手机号码,可设定发送间隔,比如即时发送或者6个小时发送一次所有的报警信息,短信内容过长,自动拆分多条短信。
    11. 支持报警邮件转发,支持多个接收邮箱,可设定发送间隔,比如即时发送或者6个小时发送一次所有的报警信息,支持附件发送。
    12. 高报颜色+低报颜色+正常颜色+0值颜色+曲线背景+曲线颜色等,都可以自由选择。
    13. 软件的中文标题+英文标题+logo路径+版权所有都可以自由设置。
    14. 提供开关设置开机运行+报警声音+自动登录+记住密码等。
    15. 报警声音可设置播放次数,界面提供17种皮肤文件选择。
    16. 支持云端数据同步,可设置云端数据库的信息,比如数据库名称,用户名+密码等。
    17. 支持网络转发和网络接收,网络接收开启后,软件从udp接收数据进行解析。网络转发支持多个目标IP,这样就实现了本地采集的软件,自由将数据转到客户端,随时查看探测器数据。
    18. 自动记住用户最后停留的界面+其他信息,重启后自动应用。
    19. 报警自动切换到对应的地图,探测器按钮闪烁。
    20. 双击探测器图标,可以进行回控。
    21. 支持用户权限管理,管理员+操作员两大类,用户登录+用户退出,可以记住密码和自动登录,超过三次报错提示并关闭程序。
    22. 支持四种监控模式,设备面板监控+地图监控+表格数据监控+曲线数据监控,可自由切换,四种同步应用。
    23. 支持报警继电器联动,一个位号可以跨串口联动多个模块和继电器号,支持多对多。
    24. 本地数据存储支持sqlite+mysql,支持远程数据同步到云端数据库。自动重连。
    25. 本地设备采集到的数据实时上传到云端,以便手机APP或者web等其他方式提取。
    26. 支持两种数据源,一种是串口和网络通过协议采集设备数据,一种是数据库采集。数据库采集模式可以作为通用的系统使用。
    27. 自带设备模拟工具,支持16个设备数据模拟,同时还带数据库数据模拟,以便在没有设备的时候测试数据。
    28. 默认通信协议采用modbus协议,后期增加mqtt等物联网协议的支持,做成通用系统。
    29. 支持所有windows操作系统+linux操作系统和其他操作系统。

    三、效果图

    在这里插入图片描述

    四、核心代码

    void DeviceHelper::deviceValue(const QString &positionID, float value)
    {
        //下面的不会被频繁执行,只有数据变动了才会执行,已经在解析的地方做了过滤
    
        //处理设备面板
        if (App::PanelMode == 0) {
            foreach (frmDeviceNode *device, devices) {
                if (device->getPositionID() == positionID) {
                    device->setValue(value);
                    break;
                }
            }
        } else if (App::PanelMode == 1) {
            foreach (frmDeviceNode2 *device, devices2) {
                if (device->getPositionID() == positionID) {
                    device->setValue(value);
                    break;
                }
            }
        }
    
        //处理设备按钮
        bool alarm = false;
        foreach (ButtonDefence *btn, btns) {
            if (btn->property("positionID").toString() == positionID) {
                alarm = (btn->getButtonStatus() == ButtonDefence::ButtonStatus_Alarm);
                btn->setProperty("value", value);
    
                //有两个传感器 是开关量 数值是 1、2  显示时 用正常 和异常代替
                QString nodeType = btn->property("nodeType").toString();
                if (nodeType == "SJ-0001" || nodeType == "JG-0001") {
                    btn->setText(value == 1 ? "正常" : "异常");
                } else {
                    btn->setText(QString("%1 %2").arg(value).arg(btn->property("nodeSign").toString()));
                }
    
                break;
            }
        }
    
        //处理设备表格
        int count = deviceData->rowCount();
        for (int i = 0; i < count; i++) {
            QString id = deviceData->item(i, 1)->text();
            if (id == positionID) {
                deviceData->item(i, 7)->setText(QString::number(value));
                break;
            }
        }    
    }
    
    void DeviceHelper::deviceAlarm(const QString &positionID, quint8 alarmType)
    {
        //0-浓度上限报警 2-浓度下限报警 5-其他报警
        bool alarm = (alarmType == 0 || alarmType == 2 || alarmType == 5);
    
        //处理设备面板
        if (App::PanelMode == 0) {
            foreach (frmDeviceNode *device, devices) {
                if (device->getPositionID() == positionID) {
                    device->setAlarm(alarm);
                    break;
                }
            }
        } else if (App::PanelMode == 1) {
            foreach (frmDeviceNode2 *device, devices2) {
                if (device->getPositionID() == positionID) {
                    device->setAlarm(alarm);
                    break;
                }
            }
        }
    
        //处理设备按钮
        foreach (ButtonDefence *btn, btns) {
            if (btn->property("positionID").toString() == positionID) {
                btn->setButtonStatus(alarm ? ButtonDefence::ButtonStatus_Alarm : ButtonDefence::ButtonStatus_Arming);
                //切换到当前地图
                initDeviceMapCurrent(btn->property("nodeImage").toString());
                break;
            }
        }
    
        //处理设备表格
        int count = deviceData->rowCount();
        for (int i = 0; i < count; i++) {
            QString id = deviceData->item(i, 1)->text();
            if (id == positionID) {
                setColor(deviceData->item(i, 7), deviceData->item(i, 9), alarmType);
                break;
            }
        }
    
        //云端数据同步
        if (App::UseNetDB) {
            int nodeStatus = 1;
            if (alarmType == 0) {
                nodeStatus = 3;
            } else if (alarmType == 2) {
                nodeStatus = 2;
            } else if (alarmType == 5) {
                nodeStatus = 5;
            }
    
            QString sql = QString("update NodeData set NodeStatus='%1' where PositionID='%2'").arg(nodeStatus).arg(positionID);
            DbTcpClientThread::Instance()->append(sql);
        }
    }
    
    void DeviceHelper::setColor(QTableWidgetItem *itemValue, QTableWidgetItem *itemStatus, quint8 alarmType)
    {
        //0-低报 1-低报恢复 2-高报 3-高报恢复 5-其他报警 6-其他报警恢复
        if (alarmType == 0) {
            itemValue->setForeground(QColor(App::ColorLimit));
            itemStatus->setForeground(QColor(App::ColorLimit));
            itemStatus->setText("低报");
        } else if (alarmType == 2) {
            itemValue->setForeground(QColor(App::ColorUpper));
            itemStatus->setForeground(QColor(App::ColorUpper));
            itemStatus->setText("高报");
        } else if (alarmType == 1 || alarmType == 3 || alarmType == 6) {
            itemValue->setForeground(QColor(App::ColorNormal));
            itemStatus->setForeground(QColor(App::ColorNormal));
            itemStatus->setText("正常");
        } else if (alarmType == 4) {
            itemValue->setForeground(QColor(App::ColorZero));
            itemStatus->setForeground(QColor(App::ColorZero));
            itemStatus->setText("离线");
            itemValue->setText("0");
        } else if (alarmType == 5) {
            itemValue->setForeground(QColor(App::ColorOther));
            itemStatus->setForeground(QColor(App::ColorOther));
            itemStatus->setText("失效");
        }
    }
    
    void DeviceHelper::setColor(QTableWidgetItem *itemValue, QTableWidgetItem *itemStatus,
                                float value, float max, float min, const QString &alarmType)
    {
        //这里还有个未处理的,是否需要对初始值进行判断报警
        if (value == 0) {
            itemValue->setForeground(QColor(App::ColorZero));
            itemStatus->setForeground(QColor(App::ColorZero));
        } else if (value > max) {
            itemValue->setForeground(QColor(App::ColorUpper));
            itemStatus->setForeground(QColor(App::ColorUpper));
        } else if (value < min) {
            itemValue->setForeground(QColor(App::ColorLimit));
            itemStatus->setForeground(QColor(App::ColorLimit));
        } else {
            itemValue->setForeground(QColor(App::ColorNormal));
            itemStatus->setForeground(QColor(App::ColorNormal));
        }
    
        itemValue->setText(QString::number(value));
    }
    
    
    展开全文
  • 对煤炭自然发火指标气体特性参数进行研究...通过实验,研究了口孜东矿13-1煤层自燃特性,以及自燃过程中生成的气体随温升的变化规律。结果表明,指标气体的比值能更好地表征煤温的大小,也更能准确地判断井下煤自燃的状态。
  • 煤自燃火灾严重威胁煤炭工业的安全,煤自燃火灾指标气体的早期预测预报可以判断采空区煤层自然发火情况。通过采集内蒙古扎赉诺尔煤业有限责任公司灵泉等煤矿的8个煤样,煤种都是褐煤,在自然发火气体产物模拟实验装置上...
  • 当变压器内部发生故障如局部放电或匝间短路时,油中溶解气体含量则会发生剧烈变化。这是由于变绝缘油或有机固体绝缘材料被放电部位产生的电弧分解而产生大量气体,当产生的气体无法完全溶解于油中时成游离
  • 通过煤样自然发火标志气体测试试验及热重分析试验,应用所得的TG曲线反映了煤氧复合的物理吸附、化学吸附和化学...实际的监测数据表明,通过监测电厂存煤自然发火标志气体浓度的变化情况可以有效判断存储煤堆的自燃情况。
  • 1预测煤体自燃情况的气体分析法煤的自燃过程可分为缓慢氧化、加速氧化和剧烈氧化三个阶段,在各阶段产生的CO、CO2、CH4、C2H4、C2H6、C3H8、C2H2等气体的种类和浓度会发生变化气体分析法根据煤矿井下某些气体的浓度...
  • //控制器型号委托,关联控制器型号,下拉变化右侧值改动 d_cbox_deviceType = new DbDelegate(this); connect(d_cbox_deviceType, SIGNAL(valueChanged(QString)), this, SLOT(typeValueChanged(QString))); d_...

    一、前言

    控制器管理,主要就是对控制器进行添加删除和修改,其中包括编号、端口名称、控制器名称、控制器地址、控制器型号、探测器数量这几个字段,端口名称表示当前控制器所属哪个端口,一个系统中可以有好多个端口,一个端口可以对应多个控制器,一个控制器可以接多个探测器。探测器数量这个参数主要是方便下发数据的时候,提前知道要取多少个探测器的数据,组成对应的数据包下发下去,可以规避一下无效的数据,比如下面是16个探测器,就没有必要去取255个探测器的数据,取到了也没有意义,毕竟其余的全部是0,而且还增加了总线通信的负担,垃圾数据占用总线通道。

    通信端口和控制器信息,是没有存储间隔的,要在最末端的节点探测器才需要有存储间隔,每个探测器节点都可以根据需要设定不一样的存储间隔,这个系统通信交互都是和通信端口下的控制器在通信,一旦控制器掉线了,则该控制器下面的所有探测器都掉线,一旦端口不通了,则该端口下的所有控制器都掉线,层层级联。

    皮肤开源:https://gitee.com/feiyangqingyun/QWidgetDemo https://github.com/feiyangqingyun/QWidgetDemo
    文件名称:styledemo

    体验地址:https://gitee.com/feiyangqingyun/QWidgetExe https://github.com/feiyangqingyun/QWidgetExe
    文件名称:bin_sams.zip

    二、功能特点

    1. 采集数据端口,支持串口端口+网络端口,串口支持自由设置串口号+波特率,网络支持自由设置IP地址+通讯端口,每个端口支持采集周期,默认1秒钟一个地址,支持设置通讯超时次数,默认3次,支持最大重连时间,用于重新读取离线的设备。
    2. 控制器信息,能够添加控制器名称,选择控制器地址+控制器型号,设置该控制器下面的探测器数量。
    3. 探测器信息,能够添加位号,可自由选择探测器型号,气体种类,气体符号,高报值,低报值,缓冲值,清零值,是否启用,报警声音,背景地图,存储周期,数值换算小数点位数,报警延时时间,报警的类型(HH,LL,HL)等。
    4. 控制器型号+探测器型号+气体种类+气体符号,均可自由配置。
    5. 地图支持导入和删除,所有的探测器对应地图位置可自由拖动保存。
    6. 端口信息+控制器信息+探测器信息,支持导入导出+导出到excel+打印。
    7. 运行记录+报警记录+用户记录,支持多条件组合查询,比如时间段+控制器+探测器等,所有记录支持导出到excel+打印。
    8. 导出到excel的记录支持所有excel+wps等表格文件版本,不依赖excel等软件。
    9. 可删除指定时间范围内的数据,支持自动清理早期数据,设置最大保存记录数。
    10. 支持报警短信转发,支持多个接收手机号码,可设定发送间隔,比如即时发送或者6个小时发送一次所有的报警信息,短信内容过长,自动拆分多条短信。
    11. 支持报警邮件转发,支持多个接收邮箱,可设定发送间隔,比如即时发送或者6个小时发送一次所有的报警信息,支持附件发送。
    12. 高报颜色+低报颜色+正常颜色+0值颜色+曲线背景+曲线颜色等,都可以自由选择。
    13. 软件的中文标题+英文标题+logo路径+版权所有都可以自由设置。
    14. 提供开关设置开机运行+报警声音+自动登录+记住密码等。
    15. 报警声音可设置播放次数,界面提供17种皮肤文件选择。
    16. 支持云端数据同步,可设置云端数据库的信息,比如数据库名称,用户名+密码等。
    17. 支持网络转发和网络接收,网络接收开启后,软件从udp接收数据进行解析。网络转发支持多个目标IP,这样就实现了本地采集的软件,自由将数据转到客户端,随时查看探测器数据。
    18. 自动记住用户最后停留的界面+其他信息,重启后自动应用。
    19. 报警自动切换到对应的地图,探测器按钮闪烁。
    20. 双击探测器图标,可以进行回控。
    21. 支持用户权限管理,管理员+操作员两大类,用户登录+用户退出,可以记住密码和自动登录,超过三次报错提示并关闭程序。
    22. 支持四种监控模式,设备面板监控+地图监控+表格数据监控+曲线数据监控,可自由切换,四种同步应用。
    23. 支持报警继电器联动,一个位号可以跨串口联动多个模块和继电器号,支持多对多。
    24. 本地数据存储支持sqlite+mysql,支持远程数据同步到云端数据库。自动重连。
    25. 本地设备采集到的数据实时上传到云端,以便手机APP或者web等其他方式提取。
    26. 支持两种数据源,一种是串口和网络通过协议采集设备数据,一种是数据库采集。数据库采集模式可以作为通用的系统使用。
    27. 自带设备模拟工具,支持16个设备数据模拟,同时还带数据库数据模拟,以便在没有设备的时候测试数据。
    28. 默认通信协议采用modbus协议,后期增加mqtt等物联网协议的支持,做成通用系统。
    29. 支持所有windows操作系统+linux操作系统和其他操作系统。

    三、效果图

    在这里插入图片描述

    四、核心代码

    #include "frmconfigdevice.h"
    #include "ui_frmconfigdevice.h"
    #include "quiwidget.h"
    #include "dbhelper.h"
    #include "dbdelegate.h"
    #include "excelapi.h"
    #include "printapi.h"
    #include "api.h"
    
    frmConfigDevice::frmConfigDevice(QWidget *parent) : QWidget(parent), ui(new Ui::frmConfigDevice)
    {
        ui->setupUi(this);
        this->initForm();
        this->initData();
        this->changeStyle();
    }
    
    frmConfigDevice::~frmConfigDevice()
    {
        delete ui;
    }
    
    void frmConfigDevice::showEvent(QShowEvent *)
    {
        model->select();
    }
    
    void frmConfigDevice::initForm()
    {
        API::initTableView(ui->tableView);
        ui->widgetTop->setProperty("flag", "navbtn");
        if (QUIHelper::deskWidth() < 1440) {
            ui->labTip->setText("提示 → 改动后需重启应用");
        } else {
            ui->labTip->setText("提示 → 必须和现场控制器信息一致,改动后需重启应用");
        }    
    }
    
    void frmConfigDevice::initData()
    {
        model = new QSqlTableModel(this);
        model->setTable("DeviceInfo");
        model->setSort(0, Qt::AscendingOrder);
        model->setEditStrategy(QSqlTableModel::OnManualSubmit);
        model->select();
    
        ui->tableView->setModel(model);
        ui->tableView->setProperty("model", true);
    
        columnNames.clear();
        columnNames << "编号" << "端口名称" << "控制器名称" << "控制器地址" << "控制器型号" << "探测器数量";
    
        columnWidths.clear();
        columnWidths << 80 << 120 << 170 << 80 << 170 << 80;
    
        for (int i = 0; i < columnNames.count(); i++) {
            model->setHeaderData(i, Qt::Horizontal, columnNames.at(i));
            ui->tableView->setColumnWidth(i, columnWidths.at(i));
        }
    
        //编号委托
        QStringList deviceID;
        for (int i = 1; i <= 255; i++) {
            deviceID.append(QString::number(i));
        }
    
        DbDelegate *d_cbox_deviceID = new DbDelegate(this);
        d_cbox_deviceID->setDelegateType("QComboBox");
        d_cbox_deviceID->setDelegateValue(deviceID);
        //ui->tableView->setItemDelegateForColumn(0, d_cbox_deviceID);
    
        //通信端口委托
        d_cbox_portName = new DbDelegate(this);
        d_cbox_portName->setDelegateType("QComboBox");
        ui->tableView->setItemDelegateForColumn(1, d_cbox_portName);
        portNameChanged();
    
        //设备地址委托
        QStringList deviceAddr;
        for (int i = 1; i <= 255; i++) {
            deviceAddr.append(QString::number(i));
        }
    
        DbDelegate *d_cbox_deviceAddr = new DbDelegate(this);
        d_cbox_deviceAddr->setDelegateType("QComboBox");
        d_cbox_deviceAddr->setDelegateValue(deviceAddr);
        ui->tableView->setItemDelegateForColumn(3, d_cbox_deviceAddr);
    
        //控制器型号委托,关联控制器型号,下拉变化右侧值改动
        d_cbox_deviceType = new DbDelegate(this);
        connect(d_cbox_deviceType, SIGNAL(valueChanged(QString)), this, SLOT(typeValueChanged(QString)));
        d_cbox_deviceType->setDelegateType("QComboBox");
        ui->tableView->setItemDelegateForColumn(4, d_cbox_deviceType);
        deviceTypeChanged();
    
        //探测器数量委托
        DbDelegate *d_txt_nodeNumber = new DbDelegate(this);
        d_txt_nodeNumber->setDelegateType("QLineEdit");
        if (App::WorkMode == 0) {
            d_txt_nodeNumber->setDelegateEnable(false);
        } else {
            connect(d_txt_nodeNumber, SIGNAL(valueChanged(QString)), this, SLOT(numberValueChanged(QString)));
        }
        //connect(d_txt_nodeNumber, SIGNAL(valueChanged(QString)), this, SLOT(numberValueChanged(QString)));
        ui->tableView->setItemDelegateForColumn(5, d_txt_nodeNumber);
    
        //用来切换样式自动改变颜色
        delegates << d_cbox_deviceID;
        delegates << d_cbox_portName;
        delegates << d_cbox_deviceAddr;
        delegates << d_cbox_deviceType;
        delegates << d_txt_nodeNumber;
    }
    
    void frmConfigDevice::changeStyle()
    {
        foreach (DbDelegate *delegate, delegates) {
            delegate->setTextColor(QUIConfig::TextColor);
            delegate->setSelectBgColor(QUIConfig::NormalColorStart);
        }
    }
    
    void frmConfigDevice::deviceTypeChanged()
    {
        d_cbox_deviceType->setDelegateValue(DBData::TypeInfo_DeviceType);    
    }
    
    void frmConfigDevice::portNameChanged()
    {
        d_cbox_portName->setDelegateValue(DBData::PortInfo_PortName);
    }
    
    void frmConfigDevice::typeValueChanged(const QString &value)
    {
        //自动设置最大探测器数量
        int nodeNumber = 8;
        int index = DBData::TypeInfo_DeviceType.indexOf(value);
        if (index >= 0) {
            nodeNumber = DBData::TypeInfo_NodeNumber.at(index);
        }
    
        int row = ui->tableView->currentIndex().row();
        model->setData(model->index(row, 5), nodeNumber);
    }
    
    void frmConfigDevice::numberValueChanged(const QString &value)
    {
        //判断填写的最大值是否超过
        int row = ui->tableView->currentIndex().row();
        QString deviceType = model->index(row, 4).data().toString();
        int index = DBData::TypeInfo_DeviceType.indexOf(deviceType);
        if (index >= 0) {
            int nodeNumber = DBData::TypeInfo_NodeNumber.at(index);
            if (value.toInt() > nodeNumber) {
                model->setData(model->index(row, 5), nodeNumber);
                QUIHelper::showMessageBoxError(QString("当前控制器最大探测器数量为 %1 !\n请重新输入!").arg(nodeNumber));
            }
        }
    }
    
    void frmConfigDevice::on_btnAdd_clicked()
    {
        int count = model->rowCount();
        model->insertRow(count);
    
        int deviceID = model->index(count - 1, 0).data().toInt() + 1;
        QString portName = model->index(count - 1, 1).data().toString();
        QString deviceName = model->index(count - 1, 2).data().toString();
        int deviceAddr = model->index(count - 1, 3).data().toInt() + 1;
        QString deviceType = model->index(count - 1, 4).data().toString();
        int nodeNumber = model->index(count - 1, 5).data().toInt();
    
        if (deviceName.endsWith("#调度室控制器")) {
            deviceName = QString("%1#调度室控制器").arg(deviceAddr);
        }
    
        //设置第一条数据,在没有上一条参考数据时
        if (count == 0) {
            deviceID = 1;
            portName = DBData::PortInfo_Count > 0 ? DBData::PortInfo_PortName.first() : "通信端口-1";
            deviceName = "1#调度室控制器";
            deviceAddr = 1;
            deviceType = "FC-1003-8";
            nodeNumber = 8;
    
            if (App::WorkMode == 2) {
                deviceName = "默认控制器";
                deviceType = "WF-1000";
                nodeNumber = 16;
            }
        }
    
        //设置新增加的行默认值
        model->setData(model->index(count, 0), deviceID);
        model->setData(model->index(count, 1), portName);
        model->setData(model->index(count, 2), deviceName);
        model->setData(model->index(count, 3), deviceAddr);
        model->setData(model->index(count, 4), deviceType);
        model->setData(model->index(count, 5), nodeNumber);
        ui->tableView->setCurrentIndex(model->index(count, 0));
    }
    
    void frmConfigDevice::on_btnSave_clicked()
    {
        model->database().transaction();
        if (model->submitAll()) {
            model->database().commit();
            DBHelper::loadDeviceInfo();
    
            //先同步探测器表的控制器名称
            emit deviceNameChanged();
        } else {
            model->database().rollback();
            QUIHelper::showMessageBoxError("保存信息失败,信息不能为空,请重新填写!");
        }
    }
    
    void frmConfigDevice::on_btnDelete_clicked()
    {
        if (ui->tableView->currentIndex().row() < 0) {
            QUIHelper::showMessageBoxError("请选择要删除的控制器!");
            return;
        }
    
        if (QUIHelper::showMessageBoxQuestion("确定要删除该控制器吗? 控制器对应的所有探测器都会被删除!") == QMessageBox::Yes) {
            int row = ui->tableView->currentIndex().row();
            QString deviceName = model->index(row, 2).data().toString();
            DBHelper::deleteNodeInfo(deviceName);
    
            model->removeRow(row);
            model->submitAll();
    
            int count = model->rowCount();
            ui->tableView->setCurrentIndex(model->index(count - 1, 0));
        }
    }
    
    void frmConfigDevice::on_btnReturn_clicked()
    {
        model->revertAll();
    }
    
    void frmConfigDevice::on_btnClear_clicked()
    {
        int count = model->rowCount();
        if (count <= 0) {
            return;
        }
    
        if (QUIHelper::showMessageBoxQuestion("确定要清空所有控制器信息吗?") == QMessageBox::Yes) {
            DBHelper::clearDeviceInfo();
            model->select();
        }
    }
    
    void frmConfigDevice::on_btnExcel_clicked()
    {
        QString name = "控制器信息";
        QString fileName = QString("%1_%2").arg(name).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss"));
        QString file = API::getSaveFileNames(fileName, "Excel(*.xls)");
        if (file.isEmpty()) {
            return;
        }
    
        QString columns = "DeviceID,PortName,DeviceName,DeviceAddr,DeviceType,NodeNumber";
        QString where = "order by DeviceID asc";
        QStringList content = DBHelper::getContent("DeviceInfo", columns, where, "", ";");
    
        int rowCount = content.count();
        if (rowCount == 0) {
            QUIHelper::showMessageBoxError("没有要处理的数据!");
            return;
        }
    
        ExcelAPI::Instance()->saveExcel(file, name, name, "", columnNames, columnWidths, content);
        QString msg = QString("导出%1到Excel").arg(name);
        DBHelper::addUserLog("用户操作", msg);
    
        if (QUIHelper::showMessageBoxQuestion(msg + "成功!确定现在就打开吗?") == QMessageBox::Yes) {
            QString url = QString("file:///%1").arg(file);
            QDesktopServices::openUrl(QUrl(url, QUrl::TolerantMode));
        }
    }
    
    void frmConfigDevice::on_btnPrint_clicked()
    {
        QString name = "控制器信息";
        QString columns = "DeviceID,PortName,DeviceName,DeviceAddr,DeviceType,NodeNumber";
        QString where = "order by DeviceID asc";
        QStringList content = DBHelper::getContent("DeviceInfo", columns, where, "", ";");
    
        int rowCount = content.count();
        if (rowCount == 0) {
            QUIHelper::showMessageBoxError("没有要处理的数据!");
            return;
        }
    
        PrintAPI::Instance()->print(name, "", columnNames, columnWidths, content);
        QString msg = QString("打印%1").arg(name);
        DBHelper::addUserLog("用户操作", msg);
    }
    
    void frmConfigDevice::on_btnInput_clicked()
    {
        QString fileName;
        bool ok = DBHelper::inputData(columnNames.count(), App::FileFilter, "DeviceInfo", fileName, QUIHelper::appPath() + "/db", true);
        if (!fileName.isEmpty()) {
            DBHelper::addUserLog("用户操作", "导入控制器信息");
            if (ok) {
                QUIHelper::showMessageBoxInfo("导入控制器信息成功!", 3);
                model->select();
            } else {
                QUIHelper::showMessageBoxError("导入控制器信息失败!", 3);
            }
        }
    }
    
    void frmConfigDevice::on_btnOutput_clicked()
    {
        QString columns = "*";
        QString where = "order by DeviceID asc";
        QString title = columnNames.join(App::FileSpliter);
        QStringList content = DBHelper::getContent("DeviceInfo", columns, where, title);
    
        QString fileName;
        bool ok = DBHelper::outputData("控制器信息", App::FileFilter, content, fileName, QUIHelper::appPath() + "/db");
        if (!fileName.isEmpty()) {
            DBHelper::addUserLog("用户操作", "导出控制器信息");
            if (ok) {
                QUIHelper::showMessageBoxInfo("导出控制器信息成功!", 3);
            } else {
                QUIHelper::showMessageBoxError("导出控制器信息失败!", 3);
            }
        }
    }
    
    
    展开全文
  •   可燃气体报警自动启停抽排风装置,是通过实时检测油气生产和处理装置现场安装的可燃气体报警探头或火焰探头的输出信号,判断各点的天然气浓度是否达到报警状态。一旦现场某一点或多点的可燃气体浓度达到报警状态...

    文末下载完整资料

                        设计要求
      可燃气体报警自动启停抽排风装置,是通过实时检测油气生产和处理装置现场安装的可燃气体报警探头或火焰探头的输出信号,判断各点的天然气浓度是否达到报警状态。一旦现场某一点或多点的可燃气体浓度达到报警状态,现场报警器输出报警信号,该装置一方面自动启动安装在现场的风机抽排风,一方面自动向上一级自控系统发出区域报警信号,一旦现场所有点的可燃气体浓度低于报警临界状态,则该装置停止现场的风机工作,恢复完好待用状态。同时,风机的启停也可通过现场的开关的控制随时启停。
      无线可燃气体泄漏报警器适用于各种可燃气体(液化气、天然气、城市煤气)泄漏探测报警,即可独立工作,也可方便地配合小区防盗现场报警器与企业无线防盗报警组网使用。
      近年来,随着改革开放的深入发展,人民的生活水平有了很大提高。各种高档家电产品和贵重物品为许多家庭所拥有,并且人们手中特别是城市居民的积蓄也十分可观。因此,越来越多的居民家庭对财产安全问题十分关心。目前,许多家庭使用了较为安全的防盗门,如果再设计和生产一种价廉、性能灵敏可靠的防盗报警器用于居民家中,必将在防盗和保证财产安全方面发挥更加有效的作用。为此,提出“无线防盗报警器”的设计任务。
      该报警器适用于家庭防盗、也适用于中小企事业单位。其特点是灵敏、可靠,一经触发,可以立即报警;也可以延时1~35s(秒)再报警,以增加报警的突然性与隐蔽性。

    3方案论证及说明
    3.1 方案一:防盗报警器的论证
    3.1.1 红外线报警器的论证
      红外线具有隐蔽性,在露天防护的地方设计一束红外线可以方便地检测到是否有人出入。此类装置设计的要点:其一是能有效判断是否有人员进入;其二是尽可能大地增加防护范围。当然,系统工作的稳定性和可靠性也是追求的重要指标。至于报警可采用声光信号。
      此类报警器的要点在于红外线信号的发射与接收部分,由于目在市场上常用的红外线发射器件和接收器件都具有频率选择性,因此要想得到较好的传输距离和稳定的性能,必须将驱动红外线发射管工作的振荡电路频率调整在红外发射器件的工作频率附近,现大部分产品的频率为38KHz,我们在设计该电路时,也是让其555电路组成的振荡器工作在38KHz附近。至于接收电路,作为报警工作的话,没有像红外线通讯那样要精确地还原出发射端发射的每一个数据,因此相对来说,要求可以放宽一些,设计时可以通过低通滤波,加倍压整流等措施,将发射的红外线信号转变成用于控制的直流控制电压,可以理解为:当有红外线信号收到时输出一个高电平信号,如果有人阻断了红外线信号,输出一个低电平信号,后续电路通过这个低电平信号启动报警。
      从实际的效果来看,报警信号必带有锁存功能,即当有人进入设防区域后报警信号就被锁住即使人离开,报警也将继续,直到人为的按动复位键才停止报警。
    存在的问题
      1.安装时要求严格,精度要求高,有角度限制。
      2.对安装场所及位置要求高,有时需要多组发射与接收对管。
      3.发射与接收易受到干扰,手机,各种红外遥控器的干扰,误报率高。
      4.使用寿命短,监控时电源不可间断,对红外发射与接收对管的寿命影响很大。
    3.1.2 被动式热释电红外报警器的论证
      BISS0001是一款高性能的被动式热释电红外线传感信号处理器.它配以热释电红外传感器和少量外接元器件构成被动式的热释电红外开关,这里介绍BISS0001原理和结构以及利用BISS0001设计一种红外线感应报警装置.
      热释电传感器是一种近十几年发展起来的新型红外传感器,在红外检测领域中占有越来越重要的地位,已广泛应用于红外测温、红外报警、工业过程自动监控、激光测量、光谱分析、气体分析、红外摄像和空间技术等诸多方面。与其它红外传感器相比,突出的优点之一是可在室温条件下工作,无需致冷。尽管如此,对于它的温度稳定性仍有必要研究。这是因为这种传感器的应用场合不同,环境温度可能差别很大。
      BISS0001是一款高性能的被动式热释电红外线传感信号处理器.它配以热释电红外传感器和少量外接元器件构成被动式的热释电红外开关,BISSO001采用高性能CMOS工艺制造,功耗很低;工作电压是3~6V,推荐使用5V;当工作电压为5V时,输出的驱动电流对应为10 mA;工作温度为-20—70℃ ;贮存温度-40—125℃。
      热释电红外线传感器能克服红外传感器的缺点,所以采用方案二。
    3.2 方案二:危险气体报警器的论证
    3.2.1 催化燃烧式可燃气体报警器的论证
      催化燃烧式可燃气体报警器探测器由一对催化燃烧式检测元件组成,其中一个元件对可燃气体非常敏感(该元件上涂有多层催化剂),另一个元件不敏感,不敏感元件用于补偿环境变化。这一对催化燃烧式检测元件与电路板上一对电阻构成惠斯通电桥,当周围环境存在可燃气体时,在催化剂的作用下敏感元件上发生催化燃烧(这种燃烧是阴燃,不会引爆外界可燃气体),使其温度升高(可高达500℃),从而使其电阻增大,这样,电桥失去平衡,探测器产生与气体浓度成正比的电信号,经电路部分放大后,由控制器报警。
      缺点是成本高,不容易扩展,安装调试复杂,受外界影响较大,所以不采用。
    3.2.2利用集成运放完成的气体报警器的论证
      利用集成运放和少量外围元件便可完成对气体传感器采集到的信号,放大,处理,控制,便可完成报警功能,工作简单,方便,容易实现,能进行电路扩展,可以单独使用,也可以在小区内组网使用,所以可燃气体报警器探测器选用此方案,工作过程如下:
      a、电源指示:绿灯,通电后亮起,报警时熄灭。
      b、报警指示:红灯,报警时闪亮。
      c、接通电源,绿灯亮或闪烁3分钟后,报警器开始正常工作。当所检测可 燃气体泄漏达到预警浓度,报警器开始报警,绿灯熄灭,红灯闪亮,发出“滴-滴-滴”的持续报警声音,同时发出高频无线报警信号。当所检测气体的浓度下降到预警浓度以下,报警器停止报警。
      d、报警器内的电路板上已预留继电器控制电路,用户可方便加装,报警时可由继电器控制排风扇即时排出可燃气体,也可同时控制气源电磁阀即时关闭气源。

    3.3 方案三:无线发射与接收的论证
    3.3.1 VD5026/VD5027无线发射与接收电路的论证
      VD5026、VD5027是CMOS大规模集成电路。前者通过发射系统发射数字编码。二者结合在一起构成一个数字遥控发射接收系统。
      VD5027需与VD5026配合使用,管脚排列图与VD5026相似,也是DIP18脚双列直插芯片。其1~8脚是8位地址编码输入端,使用时其状态与VD5026的1~8脚地址状态完全对应,否则VD5027不能译码。14脚是信息码输入端。10~13脚及17脚是译码输出端。15、16脚是内置振荡器电阻输入端,使用时必须与VD5026的15、16脚的电阻保持一致 。
      当VD5027译码到的地址(VD5O26的地址编码)与自己的地址编码对应时,接收到的VD5026的l0~l3脚的输入状态就被锁存到VD5027的10~13脚,直到VD5026的10~13脚的输入状态再次改变并被VD5027接收到。同时当VD5027译码到的地址与自己的地址编码对应时,17脚就输出高电平,但不保持,一旦VD5027接收不到该信息,17脚就返回到低电平。根据这一特点,设计者可以根据自己的逻辑需要选择合适的控制端。
      根据以上介绍可知, 同一个由VD5026组成的遥控发射器,通过选择不同的地址编码,可以控制6561个由VD5027组成的遥控接收器,进而可以控制多达6561个对象,应用非常方便。

    3.3.1 PT2262/PT2272无线发射与接收电路的论证
      PT226/PT2272是台湾普城公司生产的一种CMOS工艺制造的低功耗、低价位、通用编解码电路,PT2262/2272最多可有12位{AO—A11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供531441地址码,PT2262最多可有6位(DO—D5)数据端管脚,设定的地址码和数据码从6脚串行输出,可用于无线遥控发射电路。
      PT2262/2272芯片的地址编码设定和修改:
      在通常使用中,我们一般采用8位地址码和4位数据码,这时编码电路PT2262和解码PT2272的第1—8脚为地址设定脚,有三种状态可供选择:悬空、接正电源、接地三种状态。3的8次方为6561,所以地址编码不重复度为6561组,只有发射端PT2262和接收端PT2272的地址编码完全相同才能配对使用。当两者地址编码完全一致时,接收机对应的DO~D5端输出约4V互锁高电平控制信号,同时VT端也输出解码有效高电平信号。用户可将这些信号加一级放大,便可驱动继电器、功率三极管等进行负载遥控开关操纵。
      此两种方案都比较方便,容易实现,这里选用PT2262/PT2272。

    3.4 方案四:单片机的论证
      8051是MCS-51系列单片机的典型产品。8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。
      此单片机价格低,功能多,实现方便,外围电路少,所以选用此单片机。

    4 危险气体泄露报警器设计
    4.1 可燃性爆炸气体的形成
      可燃性爆炸气体是指由两种或两种以上成分组成的爆炸性物质。其成分之一是可燃物(还原剂),二是助燃剂(氧化剂)。这类爆炸主要是可燃性气体与空气或氧气的混合物所发生的爆炸。如果可燃气体与空气或氧气混合后,一旦达到它的爆炸极限,遇火源即发生爆炸。一般来说不同的可燃气体有不同的爆炸极限。爆炸极限浓度通常用可燃性气体的体积百分浓度表示,如甲烷的爆炸下限为5%。它又分为爆炸上限及爆炸下限,爆炸下限用“LEL”表示(Lower Explosive Limit),爆炸上限用“UEL”表示(Upper Explosive Limit)。可燃性气体在空气(或氧)中的含量低于下限或高于上限都不会发生爆炸。如果可燃性气体浓度小于爆炸下限即为过稀的混合物,它无爆炸危险,引燃时过稀的混合物很快地燃烧掉。相反如果可燃性气体浓度高于爆炸上限,即混合物的浓度过大,空气(或氧)的含量不足,也不能形成爆炸。如:空气中甲烷的爆炸下限为5%,爆炸上限为15%也就是说空气中甲烷浓度在5%.15%是最危险的,一旦遇火源即会引起爆炸。
    4.2 可燃气体报警器的分类
    4.2.1 按使用方法分类
      (1) 便携式可燃气体报警器仪器将传感器,测量电路,显示器,报警器,充电池,抽气泵等组装在一个壳体内,成为一体式仪器,小巧轻便,易携带,泵吸式采样,可随时检测。
      (2) 固定一体式可燃气体报警器与便携式一样,不同的是安装在现场,220V交流供电,连续自动检测报警,大多为扩散式采样。
      (3) 固定分体式可燃气体报警器传感器和信号变送电路组装在一个防爆壳体内,俗称探头,安装在现场。二次仪表也称控制器包括数据处理,显示器,报警控制和电源,安装在控制室(安全场所):探头扩散式采样,二次仪表显示报警。
    4.2.2 按传感器原理分类
      (1) 催化燃烧式可燃气体报警器检测各种可燃气体或蒸汽。由两只固定电阻构成惠斯登检测桥路。测量时要在参比和测量电桥上施加电压,使之加热而发生催化反应。正常情况下,电桥是平衡的,V1=V2,输出为零,如有可燃性气体存在,它的氧化过程会使测量桥被加热,温度增加,而此时参比桥温度不变,电路会测出它们之间的电阻变化+V2>V1,电桥输出一个变化的电压信号,这个电压信号的大小与可燃气体的浓度成正比。它具有选择性好、反应准确、稳定性好、定量检测、控制可靠、不易产生误报。目前绝大部分可燃气体检测采用该类型传感器。
      (2) 红外式可燃气体报警器(根据滤光技术而定):红外式传感器利用各种元素对某个特定波长的吸收原理,具有抗中毒性好,反应灵敏,对大多数碳氢化合物都有反应:但结构复杂,成本高。
      (3)半导体式可燃气体报警器半导体式传感器利用被测气体的吸附作用,改变半导体的电导率,通过电流变化的比较,激发报警电路。由于半导体式传感器测量时受环境影响较大,输出线形不稳定。因其反应十分灵敏,故目前广泛用于测量气体的微漏现象。
      (4) 热导式可燃气体报警器的工作原理是利用各种气体不同的热导系数,即具有不同的热传导速率来进行测量的。当被测气体以恒定的流速流人仪器时,热导池内的铂热电阻丝的阻值会因被测气体的浓度变化而变化,运用惠斯顿电桥将阻值信号转换成电信号,通过电路处理将信号放大、温度补偿、线性化,使其成为测量值。氢气浓度的测量一般采用热导式气体分析仪器,由于氢气的热导系数较高,一般测量氢气浓度的分析仪器都采用热导原理。

    4.3 主要技术指标
    4.3.1 技术参数
      a、工作电压:交流220V
      b、静态功耗:<2W
      c、报警浓度:液化气 0.1%—0.5%;天然气 0.1%—1%;城市煤气(H2) 0.1%—0.5%;一氧化碳 0.1%—0.4%
      d、燃气响应恢复时间:≤30s;一氧化碳响应恢复时间:≤200s
      e、报警音量:≥70dB
      f、工作环境:湿度≤97%RH;温度-15℃—+50℃

    4.3.2 主要特性
    a稳定性
      稳定性是指传感器在整个工作时间内基本响应的稳定性,取决于零点漂移和区间漂移。零点漂移是指在没有目标气体时,整个工作时间内传感器输出响应的变化。区间漂移是指传感器连续置于目标气体中的输出响应变化,表现为传感器输出信号在工作时间内的降低。理想情况下,一个传感器在连续工作条件下,每年零点漂移小于10%。
    b 灵敏度
      灵敏度是指传感器输出变化量与被测输人变化量之比,主要依赖于传感器结构所使用的技术。大多数气体传感器的设计原理都采用生物化学、电化学、物理和光学。首先要考虑的是选择一种敏感技术,它对目标气体的阀限制(TLV-thresh -old limit value )或最低爆炸限(LEL -lower explosive limit )的百分比的检测要有足够的灵敏性
    c 选择性
      选择性也被称为交叉灵敏度。可以通过测量由某一种浓度的干扰气体所产生的传感器响应来确定。这个响应等价于一定浓度的目标气体所产生的传感器响应。这种特性在追踪多种气体的应用中是非常重要的,因为交叉灵敏度会降低测量的重复性和可靠性,理想传感器应具有高灵敏度和高选择性。
    d 抗腐蚀性
      抗腐蚀性是指传感器暴露于高体积分数目标气体中的能力。在气体大量泄漏时,探头应能够承受期望气体体积分10-20倍。在返回正常工作条件下,传感器漂移和零点校正值应尽可能小。
      气体传感器的基本特征,即灵敏度、选择性以及稳定性等,主要通过材料的选择来确定。选择适当的材料和开发新材料,使气体传感器的敏感特性达到最优。
    4.3.3 器件选择
    a.MR513热线型半导体气敏元件
      MR513型气敏元件通过气体吸附在金属氧化物半导体表面而产生热传导变化及电传导变化的原理,由白金线圈电阻值变化测定气体浓度。MR513由检测元件和补偿元件配对组成电桥的两个臂,遇可燃性气体时检测元件电阻减小,桥路输出电压变化,该电压变化随气体浓度增大而成比例增大,补偿元件起温度补偿作用。该器件适合民用,工业现场的便携式酒精探测器和汽车点火控制系统。
    b.MQ—303A酒精传感器
      MQ—303A是一种二氧化锡半导体型酒精气体传感器,对酒精具有高灵敏度和快速的响应性,适合于便携式酒精探测器和汽车点火控制系统。
    c.M007可燃性气体传感器
      M007可燃性气体传感器用于家庭及工业对丙烷,丁烷,氢气及其他可燃性气体的检测(天然气,液化石油气等)。
    4.4 工作原理
    危险气体泄露报警器电路如图1—1
      工作过程是:在待机状态下,传感器始终在检测室内可燃性气体的浓度,当室内可燃性气体的浓度超过5%时,传感器产生的电压将超过门限电压,此时振荡器开始工作,输出脉冲去控制蜂鸣器发出报警,同时经三极管控制继电器,将拍风扇打开,使可燃性气体的浓度降低,避免因可燃性气体的浓度过高引起爆炸或使人员发生中毒,同时控制无线发射电路工作,发出无线报警信号,使远程监控人员及时发现,避免重大事故的发生。
    在这里插入图片描述


    全套资料免费下载:
    关注v-x-公-众-号:【嵌入式基地
    后-台-回-复:【毕业设计】 即可获资料
    回复【编程】即可获取
    包括有:C、C++、C#、JAVA、Python、JavaScript、PHP、数据库、微信小程序、人工智能、嵌入式、Linux、Unix、QT、物联网、算法导论、大数据等资料
    在这里插入图片描述

    展开全文
  • 并将分析结果与爆炸四方图、爆炸三角形(美国)的分析结果进行对比,结果表明:使用混合气体爆炸危险性连续分析图,不仅可以有效地对多种可燃气体与多种惰气的混合气体进行爆炸危险性判断,还可以清晰地显示矿井火区爆炸...
  • 为分析矿井火区内混合气体爆炸危险性及其变化趋势,介绍混合气体爆炸分析新方法――爆炸四方图.基于Ellicott爆炸四方图思想,重新设计爆炸四方图算法,对第二象限与第三象限进行重新划分,将不同时间下的火区气体...
  • 在总结7种典型火灾气体指标的基础上,采用修正后的氧消耗浓度计算方法,分析了某矿因自然发火封闭的火区内火灾气体指标的特点和随封闭时间变化的曲线。研究发现:综合应用几种典型火灾气体指标能够较为准确的判断隐蔽火...
  • 当变压器内部发生故障如局部放电或匝间短路时,油中溶解气体含量则会发生剧烈变化。这是由于变绝缘油或有机固体绝缘材料被放电部位产生的电弧分解而产生大量气体,当产生的气体无法完全溶解于油中时成游离
  • 低压气体直流击穿特性

    千次阅读 2018-09-26 19:18:49
    气体放电分为自持放电和非自持放电。非自持放电是指存在外电离原因的条件下才能维持的放电现象。自持放电是指没有外电离因素,放电现象能够在导电电场的支持下自主维持下去的放电过程。气体从非自持放电到自持放电的...

    摘要:

    气体放电分为自持放电和非自持放电。非自持放电是指存在外电离原因的条件下才能维持的放电现象。自持放电是指没有外电离因素,放电现象能够在导电电场的支持下自主维持下去的放电过程。气体从非自持放电到自持放电的过度现象,成为气体的击穿。气体发生这种放电方式转化的电场强度称为击穿场强,相应的放电电压称为击穿电压。

    实验中通过在不同气压,调节电压观察和记录发生击穿时刻的击穿电压,并通过以观察电压乘电极板距离为横坐标轴,击穿电压为纵坐标轴的XY散点图,验证汤森放电理论和帕邢定律。得出两个放电电极间的电压增加时,放电电流随之增加,当电压增至一定值时,放电电流突然增加,放电转变为自持放电,气体发生击穿,并且所需电压先减小后增大,存在击穿电压为最小值的最佳击穿条件。

    正文

    一 实验目的与原理 :
    1目的:
    研究低压气体的实验和维持方法,了解气压的测量原理。

    了解电子碰撞引起的雪崩电离的原理,掌握和识别微观现象的实验方法;认识低压气体直流击穿现象,了解雪崩电离与击穿的联系。

    学习从实验现象的理性分析得到理论普遍性规律的一般认识过程。

    2原理:
    帕邢曲线:帕邢曲线是根据帕邢定律的函数表达式所绘制的曲线,表达的物理意义为:击穿电压U(千伏)是电极距离d(厘米)和气压P(托)乘积的函数。帕邢定律是表征均匀电场气体间隙击穿电压、间隙距离和气压间关系的定律.1889年由F.帕邢根据平行平板电极的间隙击穿试验结果得出。

    帕邢定律的公式为:U=BPd/ln[APd/ln(1+1/γ)]

    如前所述,两个放电电极间的电压增加时,放电电流随之增加,当电压增至一定值时,放电电流突然增加,放电转变为自持放电,气体发生击穿.气体发生击穿的临界电压称为气体击穿电压。

    1889 年Paschen 研究了低气压放电的击穿现象,发现低气压气体在平行板电极条件下,其击穿电压Vs 是气压和电极间隙之积Pd 的函数,并找到了击穿电压的最小值,这一击穿电压与间距和气压乘积的函数关系称为帕邢律。实验发现:击穿电压与Pd 的函数在一定区间内是线性关系,但在另外一些区间是非线性的;并且在特定的Pd 值时,击穿电压有极小值;对于所有的气体,在低气压范围内,其击穿电压与Pd 值的函数曲线具有相似性。

    二 实验内容与方法:

    1实验观测内容

    实验条件:间隙保持不变 。
    测量内容:①从10Pa递增至100Pa范围内,每个5Pa测一次间隙击穿电压; ②再直接把气压调回10Pa,从10Pa递减至4Pa,每隔2Pa测一次间隙击穿电压; 要求:每个击穿电压值反复测3次,取平均值。

    2物理量测量方法和要求:
    方法为观察数字表读数,在发生跳变的时候记录跳变前的电压值。要求第一个测量气压10Pa以上, 不要低于10Pa。接近击穿时, 电压调节要缓慢.调节气压。每次测量前,要等待气压稳定。每次测量读数结束, 立刻将电压降低至50V以下,防止持续放电导致过热。不要触摸电极和放电管。接近最佳击穿条件时, 气压改变值要变小。

    三实验步骤与数据

    步骤:
    (1)测量两电极之间间距.
    (2)检查放电管与电源电极之间的连接是否可靠;电源调压旋扭是否最小位置;气体流量调节旋扭是否最小位置.
    (3)打开电源开关;开启循环水泵,检查循环水是否正常 (4)打开真空计开关.
    (5)开启机械泵,抽真空至2-3Pa,大约需要15 分钟. (6)调节减压阀,使得流量计前气压在0-1 大气压之间. (7)调节流量计的通气流量,至放电管内气压为20Pa. (8)试验仪的功能选择开关调至《击穿电压》测量档
    (9)调节电源的电压输出,可以快速调至250V,然后在缓慢调节电压,直至气体发生击穿现象.读取击穿时的电压.记录气压和电压的数值.把电压降至100V. 注意:增加电压的过程中,时刻观察电压表和指示二极管管压降的指示.每个气压条件下, 至少要重复3 次测量,直到测得比较稳定的击穿电压。不同测量回合得到的击穿电压变化小于5%为宜。
    (10)增加气体流量,使气压升高至30Pa, 重复(9)的测量
    (11)依次增加气体流量,每次增加10Pa,重复(9).直至气压达到120 帕. (12)减小气压至18Pa,重复(8).
    (13)依次减小气压,每隔2 帕,重复测量,直至5 帕。
    (14)实验完毕后,调节气体流量控制旋钮至最小位置,调节电压至最小值,依次关闭电压、机械泵、冷却水,电源开关.

    数据:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    由数据绘制氦气帕邢曲线:
    在这里插入图片描述

    四实验结论与讨论

    1结论:
    该图大致符合帕邢曲线。由图得,最小击穿电压在282V左右,临界气压为20Pa。 当极板间隙一定时,气压在某个值的左右击穿电压是呈现先减小后增大的趋势,所以存在最适合的最低击穿电压。理论上左边是曲线,右边基本上是线性关系,但由于本实验的误差等关系,结果是如图的击穿特性,除了两点外基本符合理论帕邢曲线。

    2讨论
    简述判断击穿的方法:观察二极管量测电压值,在到达击穿电压时会发生突变,突变前的电压值就是击穿电压.

    提高精确的方法:实验中发现,当调节电压过快时,最小击穿电压会变化很大,所以建议要先大致找一遍位置,第二次到达击穿电压前面时应该慢点调;另外实验过程中,调节气压之后会有些许变化,可以在稳定一段时间后再进行实验。

    3体会
    首先这个实验需要很大的耐心和严谨,开关都是有顺序的,然后调节气压的时候,灵敏度很高,需要耐心的慢慢来,记录击穿电压的时候也是,得细心的看好跳变的时刻,才能记录下正确的结果。
    老师讲解十分细致,耐心,从生活的灯管和霓虹灯插入话题,带起了我的兴趣,对实验原理很是好奇,在做实验的时候看到自己的试验管亮起来的时候也感觉很漂亮。此次实验虽然是重复的调节与测量,但是也有好多需要注意的细节,比方实验数据所取值应为下降前的电压值,每次测量后要调低电压,防止温度过高烧坏器件。
    总而言之,在学得知识的同时,也培养了严谨耐心的精神。

    展开全文
  • 针对目前气体钻井过程中地层出水预测方法不够完善,往往导致预测结果滞后,尤其是在刚钻遇水层或地层微量出水时难以准确判断井下出水状况,提出了一种基于微波技术的随钻监测气体钻井地层出水的新方法,依据微波谐振...
  • 比如,弹拨琴弦,振动了空气,空气的压强、密度等参数发生了微弱的变化,这种状态变化在空气中形成了一种不平衡的扰动,扰动又以波的形式迅速的外传,其传播速度就是声速。 声速特征 声速的大小与扰动过程中压力的...
  • 平衡移动方向怎么判断2020-07-22 11:38:03文/王君婷化学平衡移动方向判断有三个方法:(1)勒夏特列原理法。这种方法,仅应用于改变反应的一个条件,化学平衡移动方向的判断。(2)等效平衡法(3)浓度商值法,若同时改变...
  • 气体传感器主要用于针对某种特定气体进行检测,测量该气体在... 气体传感器从检测气体种类上,常分为可燃气体传感器(常采用催化燃烧式、红外、热导、半导体式)、有毒气体传感器(一般采用电化学、金属半导 体、...
  • 微型真空气体采样泵属于薄膜气体采样泵,它的原理是电机带动薄膜往复运动,使泵腔容积周期性变化从而吸入、排出流体。真空气体采样泵避免了活塞式采样泵活塞磨损、污染输送介质的缺点,运动机构与输送介质完全隔离、...
  • 由于当今空气质量堪忧、社会环境状况不断及生活方式与节奏的变化,患有咽炎的人逐年增加,研究发现,慢性咽炎的发病率占咽部疾病的10%~20%。咽炎的病因复杂,邻近器官的慢性炎症、口呼吸造成的咽部黏膜干燥、长期...
  • 第十二章:气体动理论 大学物理第十二章:气体动理论一级目录二级目录三级目录一、分子运动的基本概念1.气体的状态参量(1)压强P(2)体积V(3)温度T2.平衡态和平衡过程(1)平衡态(2)平衡过程3.理想气体的状态...
  • 文章目录第五章 气体的高速流动05-01 一元流动基本方程1、一元流动的质量方程一元流动的定义:质量方程(宏观形式与微分形式):适用范围:2、一元流动的能量方程3、一元流动的其他方程(1)状态方程(2)过程方程(3...
  • 肺与外界气体交换原理的内容比较抽象,教材先让学生仔细体验自己在吸气和呼气时胸廓的变化,使学生感觉到呼吸的存在。这只是一个粗略地认识。通过对胸围差的测量和计算进入科学的认识。学生通过切实的测量和计算,...
  • Proteus传感器+气体浓度检测的报警方式控制仿真

    千次阅读 热门讨论 2020-05-09 17:08:03
    Proteus传感器+气体浓度检测的报警方式控制仿真 文章目录Proteus传感器+气体浓度检测的报警方式控制仿真1 实验意义理解2 主要实验器件3 实验参考电路4 实验中的问题思考4.1 实现转动的风扇4.2 控制部分5 实验参考...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,147
精华内容 2,058
关键字:

判断气体变化