Qt 串列埠通訊之使用三菱PLC控制程式

2021-10-08 17:19:47 字數 1701 閱讀 8883

上位機與plc通訊有很多種方式,比如cpu程式設計口、網口、串列埠、匯流排連線等等。本章節記錄一下如何通過串列埠讓plc控制程式執行操作。博主之前寫過一章使用網口與plc通訊,具體請參考:qt使用 mx component 外掛程式與三菱plc通訊

所謂通訊協議是指通訊雙方的一種約定。約定包括對資料格式、同步方式、傳送速度、傳送步驟、檢糾錯方式以及控制字元定義等問題做出統一規定,通訊雙方必須共同遵守,屬於osi七層參考模型中的資料鏈路層。目前,採用的通訊協議有兩類:非同步協議和同步協議。

總的來說,通訊協議就是通訊雙方共同遵循的一套規則,定義協議的原則是盡可能的簡單以提高傳輸率,盡可能的具有安全性保證資料傳輸完整正確。基於這2點規則,我們乙個通訊協議應該是這樣的:

頭 + 資料長度 + 資料正文 + 校驗

需要在 pro 檔案中匯入串列埠模組:

qt += serialport

serialportcontrol.h

#ifndef serialportcontrol_h

#define serialportcontrol_h

#include #include #include class serialportcontrol : public qthread

;#endif // serialportcontrol_h

serialportcontrol.cpp

#include "serialportcontrol.h"

#include "globalfun.h"

serialportcontrol::serialportcontrol()

bool serialportcontrol::open(qstring portname)

// 設定資料位

switch (globalvalue::atm_dbt)

// 設定奇偶校驗

switch (globalvalue::atm_cbt)

// 設定停止位

switch (globalvalue::atm_sbt)

// 設定流控制

switch (globalvalue::atm_fcl)

// 開啟串列埠

isstarted = m_serialport.open(qiodevice::readwrite);

return isstarted;

}void serialportcontrol::close()

void serialportcontrol::writeresult(qstring ret)

}void serialportcontrol::run()

globalfun::bsleep(100);}}

mainwindow.cpp

void mainwindow::initserialport()

connect(m_spctl, &serialportcontrol::startwork, this, [&](), qt::queuedconnection);

}

void mainwindow::on_filldata()

}

三菱FX系列PLC的通訊協議

一 fx系列與計算機通訊所用到的命令碼 命令命令碼 目標裝置 元件讀取 cmd 0 x,y,m,s,t,c,d 元件寫入 cmd 1 x,y,m,s,t,c,d 強迫 on cmd 7 x,y,m,s,t,c 強迫 off cmd 8 x,y,m,s,t,c 所用字元 enq05h 來自計算機的請求...

三菱PLC之SLMP協議報文說明

slmp是三菱plc用於cpu模組或外部裝置 個人計算機或顯示器等 使用乙太網對plc裝置進行資料訪問的一種協議,slmp協議是基於tcp ip,因此會存在伺服器和客戶端的功能區分。伺服器功能是指cpu模組基於來自外部裝置的要求報文 命令 執行資料處理的收發。而客戶端功能是指可以使用專用命令向外部裝...

三菱FX系列PLC程式設計口通訊協議舉例

本文介紹的 pc 與三菱 fx 系列 plc 通訊,是通過 plc 的程式設計口與 pc 機的串列埠進行的,採用 sc 09 程式設計電纜作為計算機與 plc 通訊的連線。電纜的 9 芯 d 形插頭連線在計算機串列埠上,另一端連線 plc 的 rs 422 程式設計口。編寫 pc 的通訊程式可採用組...