您的位置: 首页 - 站长

wordpress登陆按钮广告优化师怎么入行

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

wordpress登陆按钮,广告优化师怎么入行,免费可商用的素材网站,专业做网站建设 昆山由于有一个Modebus上位机的需要#xff0c;分析一下QModbus Slave的源代码#xff0c;方便后面的开发。 什么是Modbus Modbus是一种常用的串行通信协议#xff0c;被广泛应用于工业自动化领域。它最初由Modicon#xff08;目前属于施耐德电气公司#xff09;于1979年开发…由于有一个Modebus上位机的需要分析一下QModbus Slave的源代码方便后面的开发。 什么是Modbus Modbus是一种常用的串行通信协议被广泛应用于工业自动化领域。它最初由Modicon目前属于施耐德电气公司于1979年开发旨在实现PLC可编程逻辑控制器和外部设备之间的数据交换。以下是对Modbus的详细解析 一、Modbus协议的特点 免费使用Modbus协议是免费开放的用户可以自由使用无需支付任何版权费用。多种电气接口和传输介质Modbus支持多种电气接口如RS-232、RS-485等以及多种传输介质如双绞线、光纤、无线等使得数据传输更加灵活。帧格式简单Modbus的帧格式简单易懂方便开发人员快速上手和使用。可靠性好Modbus协议对数据进行了严格的校验确保数据传输的可靠性。同时它还支持主从方式定时收发数据能够及时检测和恢复通信故障。 二、Modbus的传输方式与格式 Modbus协议可以使用串口和网线含光纤等方式进行传输根据常用传输介质它主要支持以下三种传输模式 ASCII模式将数据以ASCII码形式进行传输适用于低速率的串行通信。RTU模式使用二进制格式传输数据相比ASCII模式在同样的波特率下可以传输更多的数据适用于中高速率的串行通信。TCP/IP模式利用TCP/IP协议进行网络通信称为Modbus TCP/IP适用于需要远程通信的场合。 三、Modbus协议的应用领域 Modbus协议广泛应用于工业自动化领域包括但不限于以下几个方面 工业自动化控制连接PLC、传感器、执行器等设备实现监控和控制功能。智能家居连接各种传感器和执行器实现远程控制和监测。能源监控连接电表、燃气表、水表等设备实现能源数据的采集和分析。环境监测连接各种传感器和仪器监测环境参数如温度、湿度、气压等。智能交通连接交通控制设备、车辆检测器等实现交通信号的控制和管理。 四、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.hSettingsDialog::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, QOverloadint::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_castModbusConnection(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);} }