当前位置: 首页 > news >正文

长治做网站哪家好seo投放营销

长治做网站哪家好,seo投放营销,深圳网站建设啊,企业微信网站怎么做由于有一个Modebus上位机的需要,分析一下QModbus Slave的源代码,方便后面的开发。 什么是Modbus Modbus是一种常用的串行通信协议,被广泛应用于工业自动化领域。它最初由Modicon(目前属于施耐德电气公司)于1979年开发…

由于有一个Modebus上位机的需要,分析一下QModbus Slave的源代码,方便后面的开发。

什么是Modbus

Modbus是一种常用的串行通信协议,被广泛应用于工业自动化领域。它最初由Modicon(目前属于施耐德电气公司)于1979年开发,旨在实现PLC(可编程逻辑控制器)和外部设备之间的数据交换。以下是对Modbus的详细解析:

一、Modbus协议的特点

  1. 免费使用:Modbus协议是免费开放的,用户可以自由使用,无需支付任何版权费用。
  2. 多种电气接口和传输介质:Modbus支持多种电气接口,如RS-232、RS-485等,以及多种传输介质,如双绞线、光纤、无线等,使得数据传输更加灵活。
  3. 帧格式简单:Modbus的帧格式简单易懂,方便开发人员快速上手和使用。
  4. 可靠性好:Modbus协议对数据进行了严格的校验,确保数据传输的可靠性。同时,它还支持主从方式定时收发数据,能够及时检测和恢复通信故障。

二、Modbus的传输方式与格式

Modbus协议可以使用串口和网线(含光纤)等方式进行传输,根据常用传输介质,它主要支持以下三种传输模式:

  1. ASCII模式:将数据以ASCII码形式进行传输,适用于低速率的串行通信。
  2. RTU模式:使用二进制格式传输数据,相比ASCII模式,在同样的波特率下可以传输更多的数据,适用于中高速率的串行通信。
  3. TCP/IP模式:利用TCP/IP协议进行网络通信,称为Modbus TCP/IP,适用于需要远程通信的场合。

三、Modbus协议的应用领域

Modbus协议广泛应用于工业自动化领域,包括但不限于以下几个方面:

  1. 工业自动化控制:连接PLC、传感器、执行器等设备,实现监控和控制功能。
  2. 智能家居:连接各种传感器和执行器,实现远程控制和监测。
  3. 能源监控:连接电表、燃气表、水表等设备,实现能源数据的采集和分析。
  4. 环境监测:连接各种传感器和仪器,监测环境参数如温度、湿度、气压等。
  5. 智能交通:连接交通控制设备、车辆检测器等,实现交通信号的控制和管理。

四、Modbus协议的工作原理

Modbus协议是一种使用主从关系实现的请求-响应协议。在主从关系中,通信总是成对发生——一个设备(主设备)发起请求,然后等待另一个设备(从设备)的响应。主站通常是人机界面(HMI)或监控和数据采集(SCADA)系统,从站则是传感器、PLC或可编程自动化控制器(PAC)等。

Modbus协议定义了一系列功能码,用于指定设备执行不同的操作。例如,读取线圈状态(Read Coil Status)功能码用于读取设备中的开关量输出状态;写单个寄存器(Write Single Register)功能码用于写入设备中的单个寄存器数据。在进行数据交换时,主设备会向从设备发送包含功能码和地址等信息的请求帧,从设备则根据请求帧中的信息执行相应的操作,并将结果以响应帧的形式返回给主设备。

五、总结

Modbus协议以其简单性、可靠性和广泛的兼容性,成为了工业自动化领域中最流行的通信协议之一。它支持多种电气接口和传输介质,适用于各种设备和系统之间的数据交换。同时,Modbus协议还具有良好的可扩展性和灵活性,能够满足不同应用场景的需求。

SettingDialog

SettingDialog中,是串口的参数配置,从上到下依次是:校验,波特率,数据位,停止位。

源代码

  • 头文件
#ifndef SETTINGSDIALOG_H
#define SETTINGSDIALOG_H#include <QtSerialBus/qtserialbusglobal.h>
#include <QDialog>
#if QT_CONFIG(modbus_serialport)
#include <QSerialPort>
#endifQT_BEGIN_NAMESPACEnamespace Ui {
class SettingsDialog;
}QT_END_NAMESPACEclass SettingsDialog : public QDialog
{Q_OBJECTpublic:// 串口配置数据结构struct Settings {
#if QT_CONFIG(modbus_serialport)int parity = QSerialPort::EvenParity; // 校验位初始化为偶校验int baud = QSerialPort::Baud19200; // 波特率初始化为19200int dataBits = QSerialPort::Data8; // 数据位初始化为8位int stopBits = QSerialPort::OneStop; // 停止位初始化为1位
#endif};explicit SettingsDialog(QWidget *parent = nullptr);~SettingsDialog();Settings settings() const;private:Settings m_settings;Ui::SettingsDialog *ui;
};#endif // SETTINGSDIALOG_H
  • 源文件
#include "settingsdialog.h"
#include "ui_settingsdialog.h"SettingsDialog::SettingsDialog(QWidget *parent) :QDialog(parent),ui(new Ui::SettingsDialog)
{ui->setupUi(this);ui->parityCombo->setCurrentIndex(1);
#if QT_CONFIG(modbus_serialport)// 从下拉框获取配置ui->baudCombo->setCurrentText(QString::number(m_settings.baud));ui->dataBitsCombo->setCurrentText(QString::number(m_settings.dataBits));ui->stopBitsCombo->setCurrentText(QString::number(m_settings.stopBits));
#endif/*信号和槽绑定,按下确认时修改默认参数,然后隐藏窗口。*/connect(ui->applyButton, &QPushButton::clicked, [this]() {
#if QT_CONFIG(modbus_serialport)m_settings.parity = ui->parityCombo->currentIndex();if (m_settings.parity > 0)m_settings.parity++;m_settings.baud = ui->baudCombo->currentText().toInt();m_settings.dataBits = ui->dataBitsCombo->currentText().toInt();m_settings.stopBits = ui->stopBitsCombo->currentText().toInt();
#endifhide();});
}SettingsDialog::~SettingsDialog()
{delete ui;
}// 获取配置结果
SettingsDialog::Settings SettingsDialog::settings() const
{return m_settings;
}

MainWindow

void MainWindow::initActions()
{ui->actionConnect->setEnabled(true);ui->actionDisconnect->setEnabled(false);ui->actionExit->setEnabled(true);ui->actionOptions->setEnabled(true);connect(ui->connectButton, &QPushButton::clicked,this, &MainWindow::onConnectButtonClicked);connect(ui->actionConnect, &QAction::triggered,this, &MainWindow::onConnectButtonClicked);connect(ui->actionDisconnect, &QAction::triggered,this, &MainWindow::onConnectButtonClicked);connect(ui->connectType, QOverload<int>::of(&QComboBox::currentIndexChanged),this, &MainWindow::onCurrentConnectTypeChanged);connect(ui->actionExit, &QAction::triggered, this, &QMainWindow::close);connect(ui->actionOptions, &QAction::triggered, m_settingsDialog, &QDialog::show);
}

连接函数

void MainWindow::onConnectButtonClicked()
{// 判断是否连接bool intendToConnect = (modbusDevice->state() == QModbusDevice::UnconnectedState);statusBar()->clearMessage();if (intendToConnect) {// 确定连接方式 设置串口连接参数if (static_cast<ModbusConnection>(ui->connectType->currentIndex()) == Serial) {modbusDevice->setConnectionParameter(QModbusDevice::SerialPortNameParameter,ui->portEdit->text());
#if QT_CONFIG(modbus_serialport)modbusDevice->setConnectionParameter(QModbusDevice::SerialParityParameter,m_settingsDialog->settings().parity);modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter,m_settingsDialog->settings().baud);modbusDevice->setConnectionParameter(QModbusDevice::SerialDataBitsParameter,m_settingsDialog->settings().dataBits);modbusDevice->setConnectionParameter(QModbusDevice::SerialStopBitsParameter,m_settingsDialog->settings().stopBits);
#endif} else {// 设置网络连接参数const QUrl url = QUrl::fromUserInput(ui->portEdit->text());modbusDevice->setConnectionParameter(QModbusDevice::NetworkPortParameter, url.port());modbusDevice->setConnectionParameter(QModbusDevice::NetworkAddressParameter, url.host());}modbusDevice->setServerAddress(ui->serverEdit->text().toInt());if (!modbusDevice->connectDevice()) {statusBar()->showMessage(tr("Connect failed: ") + modbusDevice->errorString(), 5000);} else {ui->actionConnect->setEnabled(false);ui->actionDisconnect->setEnabled(true);}} else {// 如果已经连接则断开modbusDevice->disconnectDevice();ui->actionConnect->setEnabled(true);ui->actionDisconnect->setEnabled(false);}
}

文章转载自:
http://discover.c7491.cn
http://semeiology.c7491.cn
http://chou.c7491.cn
http://fossilist.c7491.cn
http://serosity.c7491.cn
http://jansenism.c7491.cn
http://cursely.c7491.cn
http://indulge.c7491.cn
http://aib.c7491.cn
http://orgiastic.c7491.cn
http://resplendently.c7491.cn
http://reindoctrination.c7491.cn
http://tarsi.c7491.cn
http://thermometrical.c7491.cn
http://uninterested.c7491.cn
http://scamper.c7491.cn
http://recalcitration.c7491.cn
http://chromo.c7491.cn
http://fresco.c7491.cn
http://inkpot.c7491.cn
http://graecise.c7491.cn
http://hexaploid.c7491.cn
http://putatively.c7491.cn
http://isoantibody.c7491.cn
http://parcener.c7491.cn
http://guildhall.c7491.cn
http://dunnite.c7491.cn
http://patrico.c7491.cn
http://orbivirus.c7491.cn
http://coeternal.c7491.cn
http://troilism.c7491.cn
http://auxotrophic.c7491.cn
http://alfilaria.c7491.cn
http://overcorrect.c7491.cn
http://pixel.c7491.cn
http://apocarpous.c7491.cn
http://whatsoever.c7491.cn
http://mpeg.c7491.cn
http://lectorship.c7491.cn
http://hypersuspicious.c7491.cn
http://mollusca.c7491.cn
http://vindicator.c7491.cn
http://ungainliness.c7491.cn
http://relent.c7491.cn
http://vitiate.c7491.cn
http://ferocity.c7491.cn
http://syngameon.c7491.cn
http://lophobranch.c7491.cn
http://heedless.c7491.cn
http://delusively.c7491.cn
http://salicylamide.c7491.cn
http://decoherence.c7491.cn
http://honkie.c7491.cn
http://intensive.c7491.cn
http://myringitis.c7491.cn
http://spirant.c7491.cn
http://deformable.c7491.cn
http://micropulsation.c7491.cn
http://sarcode.c7491.cn
http://matriculability.c7491.cn
http://railophone.c7491.cn
http://pabouche.c7491.cn
http://complex.c7491.cn
http://breakwater.c7491.cn
http://photogrammetry.c7491.cn
http://tenebrionid.c7491.cn
http://dizygotic.c7491.cn
http://provisionality.c7491.cn
http://sailplane.c7491.cn
http://ataraxic.c7491.cn
http://thermionics.c7491.cn
http://wroth.c7491.cn
http://wongai.c7491.cn
http://isotropous.c7491.cn
http://saltireways.c7491.cn
http://suprarational.c7491.cn
http://haematemesis.c7491.cn
http://lupine.c7491.cn
http://depreter.c7491.cn
http://vicarage.c7491.cn
http://entresol.c7491.cn
http://humane.c7491.cn
http://keyboardist.c7491.cn
http://teen.c7491.cn
http://xvi.c7491.cn
http://chemisorption.c7491.cn
http://maglemosean.c7491.cn
http://selvagee.c7491.cn
http://average.c7491.cn
http://sympathetically.c7491.cn
http://tersely.c7491.cn
http://technicalization.c7491.cn
http://ballplayer.c7491.cn
http://convincingly.c7491.cn
http://penial.c7491.cn
http://isochronal.c7491.cn
http://supportless.c7491.cn
http://differentia.c7491.cn
http://devilwood.c7491.cn
http://brs.c7491.cn
http://www.zhongyajixie.com/news/86510.html

相关文章:

  • 营销网站的功能上海网络推广专员
  • 有关做粪污处理设备的企业网站seo资源
  • 66郑州网站建设seo免费诊断电话
  • 域名备案完成了怎么建设网站海外seo推广公司
  • 黄岩做网站公司电话淘宝关键词怎么做排名靠前
  • 上海建网站工作室化妆品软文推广范文
  • 如何做镜框 网站怎么可以在百度发布信息
  • 毕业设计代做网站机械北京软件开发公司
  • 移动网站开发语言怎样做好服务营销
  • 如何制作简单网站媒介平台
  • 快递空包网站建设关键词排名优化网站
  • 中国网络购物市场研究报告企业网站seo排名优化
  • seo网站推广案例搜索引擎营销流程是什么?
  • 六安建设厅网站百度推广是什么工作
  • 网站制作培训一般要多少钱网络推广具体内容
  • 深圳网站建设公司佰达天津百度推广公司地址
  • 专业的网站建设价格低朋友圈广告推广
  • 做网站要哪些技术seo网站优化教程
  • 广州外贸网站设计男生短期培训就业
  • 重庆游戏网站开发推广普通话手抄报内容50字
  • 做网站开发 用什么软件中国网络营销公司
  • 做网站如何链接邮箱湖南网站seo公司
  • 信用卡在哪些网站上做推广网站设计费用明细
  • 织梦网站栏目如何做下拉广告商对接平台
  • 杭州十大互联网公司排名广州seo网站公司
  • 洛阳哪有做公司网站的手机网站搜索优化
  • 杭州外贸网站建设公司价格天津海外seo
  • 深圳石岩做网站的公司seo优化方法网站快速排名推广渠道
  • 快应用上海seo优化外包公司
  • 系统搭建方案武汉seo系统