C# WPF上位機開發(通訊協議的編寫)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】

? ? ? ? 作為上位機,它很重要的一個部分就是需要和外面的設備進行數據溝通的。很多時候,也就是在這個溝通的過程當中,上位機軟件才有了自己的價值。如果上位機可以通過收集數據,進一步構建自己的算法,那么上位機自身的價值就更大了。之前說的usb、can、232這些都是溝通的媒介,本質上最重要的還是通訊的協議。

? ? ? ? 所謂通訊的協議,其實就是溝通的方式和報文的格式。溝通的方式,一般代表誰先主動發起溝通,誰被動應答溝通;報文的格式,則代表每次溝通的數據有多少個,每個數據代表著什么樣的含義。這就是通訊的全部內容。

1、通訊溝通的方式

? ? ? ? 大部分上位機在溝通的時候都是作為主動的一方存在的,被溝通的設備一般都是被動響應報文的。比如說一個卷簾門設備、一個充電設備、一個機器人設備等等,基本上都是上位機要求它做什么,它就會去做什么。在作業的過程中,上位機會不停輪詢當前的工作狀態。

2、哪里可以看到數據協議

? ? ? ? 這種協議還是很多的。如果是網站服務器類的協議,這種一般都是私有協議,只需要和對應網站的開發人員搞好對接就可以了;如果是設備類的協議,那么我們通過線上或者線下的方式拿到設備之后,就可以通過它們的售后人員拿到對應設備的開發協議。當然,現在很多設備供應商也會提前在自己的官網或者是github上發布對應的通訊協議,這都是可能的。

3、常見的協議有哪幾種

? ? ? ? 對于工控領域來說,最常見的協議就是modbus協議,它的通訊格式非常簡單,就是簡單的應答模式。上位機發送一個請求,設備回復一個請求。主要的請求也只有讀寫兩種模式,讀寫的報文也很短,一般就十幾個字節,這也是因為本身modbus設備功能比較單一,十幾個字節加上對應的bit位,其實很容易把大部分功能就說清楚了。

4、某設備232通信協議分析

4.1 讀設備協議

? ? ? ? 這就是一個讀設備協議,整個數據是16進制形式,數據內容是0x0101006400087c13。整個數據有8個字節。第一個01代表設備地址,第二個01代表功能,這里是讀。第三、四個字節是0064,轉成10進制就是100,代表寄存器地址是100。第五、六個字節是0008,代表需要讀8個寄存器。第七、八兩個字節7c13,這個是校驗碼,一般通過crc算法計算得到。

4.2 讀設備返回協議

? ? ? ? 如果我們按照4.1的形式發送數據之后,那么沒什么問題的話,上位機就會從設備讀到返回的數據。假設這個數據是0x0101010f118c。這個時候和4.1一樣,我們只需要按照官方給出的example去一個一個字節解析就可以了。從長度上看,返回的數據只有6個字節。第一個字節01代表設備地址。第二個字節01代表功能碼01,即讀。第三個字節代表數據長度01,即1個字節。第四個字節0F代表返回的數據0F。第五、六個字節0x118c代表檢驗碼,用戶可以根據校驗碼判斷一下下發的數據是否有錯誤。

? ? ? ? 這里可以思考下,假設返回的數據是4個,那么格式應該是什么樣的?比如說還是這里,那么返回的數據可能是這樣的,01+01+04+0000000f+校驗碼2個字節,這樣所有的數據長度加起來就是9個字節。

4.3 寫設備協議

? ? ? ? 和讀設備協議相比較,讀設備協議稍微復雜了一點。這里寫設備的命令是0x010f00640008010fcf59。其中有兩個個地方需要注意一下,第一,功能嗎從01變成了0f。第二,和讀設備相比較,這里多了一個010f,其中01代表要寫的數據長度,0f代表要寫的數據內容。其他部分和讀設備協議差別不大。

4.4 寫設備返回協議

? ? ? ? 和寫設備協議相比較,寫設備返回則簡單很多。基本上,把寫的數據長度、寫數據內容拿走,剩下來就是寫設備返回的內容。當然,對應的校驗碼肯定也發生了改變。

5、數據內容代表什么

? ? ? ? 前面我們討論了設備協議,但是大家有沒有注意,我們沒有討論讀寫數據里面的內容。這主要是因為,具體數據的含義其實和設備本身是相關的,它可能是一個門、一個燈、一個開關、一個電機、一個顯示屏幕,凡此種種,我們使用的時候再分別分析具體的bit位、具體的數據含義就可以了。這次要學習的主要就是怎么分析這個通信協議的邏輯。

6、其他要注意的地方

? ? ? ? 編寫協議的時候,還是需要非常小心的,通常來說有這么幾點要注意;

? ? ? ? 1)注意字節序;

? ? ? ? 2)注意每個bit的含義;

? ? ? ? 3)一收一發,不斷檢驗執行的返回結果;

? ? ? ? 4)嚴格根據設備的要求,保證輸入參數的合法性;

? ? ? ? 5)大膽懷疑,小心假設;

? ? ? ? 6)出問題的時候,大部分是參數沒設置好、環境發生了變化,設備出問題概率不大。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212878.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212878.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212878.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyQt下使用OpenCV實現人臉檢測與識別

背景: 一 數字圖像處理與識別警務應用模型 基于前期所學知識,與公安實踐相結合,綜合設計數字圖像處理與識別警務應用模型,從下列4個研究課題中選擇2個進行實驗實現:圖像增強與復原、人臉檢測與識別、虹膜內外圓檢測與分割、車牌…

Html轉PDF,前端JS實現Html頁面導出PDF(html2canvas+jspdf)

Html轉PDF,前端JS實現Html頁面導出PDF(html2canvasjspdf) 文章目錄 Html轉PDF,前端JS實現Html頁面導出PDF(html2canvasjspdf)一、背景介紹二、疑問三、所使用技術html2canvasjspdf 四、展示開始1、效果展示…

C語言----文件操作(一)

一:C語言中文件的概念 對于文件想必大家都很熟悉,無論在windows上還是Linux中,我們用文件去存儲資料,記錄筆記,常見的如txt文件,word文檔,log文件等。那么,在C語言中文件是什么樣的存…

threadpool github線程池學習

參考項目 https://github.com/progschj/ThreadPool 源碼分析 // 常規頭文件保護宏, 避免重復 include #ifndef THREAD_POOL_H #define THREAD_POOL_H// 線程池, 存儲線程對象; #include <vector>// 任務隊列, 雙向都可操作隊列, queue 不能刪除首個元素 #include <…

微信小程序制作-背單詞的小程序制作

微信小程序–背單詞的 好久沒有發過文章了&#xff0c;但是不代表著我不去學習了嘍&#xff0c;以下是我最近做的東西&#xff0c;前端的UI由朋友設計的&#xff0c;目前這個是前端使用的是微信小程序后端是Python的一個輕量型框架&#xff0c;FastApi&#xff0c;嗯&#xff…

MyBatis 四大核心組件之 Executor 源碼解析

&#x1f680; 作者主頁&#xff1a; 有來技術 &#x1f525; 開源項目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 倉庫主頁&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 歡迎點贊…

List 接口

1 List 接口 java.util 中的集合類包含 Java 中某些最常用的類。最常用的集合類是 List 和 Map。 List是一種常用的集合類型&#xff0c;它可以存儲任意類型的對象&#xff0c;也可以結合泛型來存儲具體的類型對象&#xff0c;本質上就是一個容器。 1.1 List 類型介紹 有序性…

06-React組件 Redux React-Redux

React組件化&#xff08;以Ant-Design為例&#xff09; 組件化編程&#xff0c;只需要去安裝好對應的組件&#xff0c;然后通過各式各樣的組件引入&#xff0c;實現快速開發 我們這里學習的是 Ant-design &#xff08;應該是這樣&#xff09;&#xff0c;它有很多的組件供我們…

計算機網絡測試題第二部分

前言:如果沒有做在線測試請自主獨立完成&#xff0c;本篇文章只作為學習計算機網絡的參考&#xff0c;題庫中的題存在一定錯誤和不完整&#xff0c;請學習時&#xff0c;查找多方書籍論證&#xff0c;獨立思考&#xff0c;如果存在疑慮可以評論區討論。查看時&#xff0c;請分清…

pytorch debug 常用工具

自動辨識圖像格式可視化 import numpy as np import matplotlib.pyplot as plt from PIL import Imagedef convert_to_numpy(image_input):"""自動檢測輸入圖像類型&#xff0c;并將其轉換為NumPy數組。"""if isinstance(image_input, np.ndarr…

7-3 Left-pad

根據新浪微博上的消息&#xff0c;有一位開發者不滿NPM&#xff08;Node Package Manager&#xff09;的做法&#xff0c;收回了自己的開源代碼&#xff0c;其中包括一個叫left-pad的模塊&#xff0c;就是這個模塊把javascript里面的React/Babel干癱瘓了。這是個什么樣的模塊&a…

物聯網IC

物聯網IC 電子元器件百科 文章目錄 物聯網IC前言一、物聯網IC是什么二、物聯網IC的類別三、物聯網IC的應用實例四、物聯網IC的作用原理總結前言 物聯網IC的功能和特性可以根據不同的物聯網應用需求來選擇和配置,以滿足物聯網設備在連接、通信、感知和控制方面的需求。 一、物…

猜數字游戲Ⅱ

你和朋友一起玩猜數字游戲&#xff0c;你寫出一個秘密數字&#xff0c;請朋友猜這個數字是多少。朋友每猜測一次&#xff0c;你就會給他一個包含下述信息的提示&#xff1a; 猜測數字中有多少位屬于數字和確切位置都猜對了&#xff08;稱為 "Bulls"&#xff0c;公牛&…

VOL-vue 框架 文件上傳控件關于大文件上傳等待的修改

我的項目在測試voltable列表組件中對阿里云OSS做附件上傳時&#xff0c;幾十M的文件可能就會需要一段時間來上傳&#xff0c;才能有OSS的狀態和鏈接返回。 但是控件VolUpload.vue并沒有去在這方面做任何交互體驗上的控制&#xff0c;而且VolUpload.vue本身寫的幾個上傳函數都是…

SpringBoo在項目停止(服務停止/關閉退出)之后執行的方法

SpringBoo在項目停止/服務停止/關閉退出之后執行的方法 1.實現DisposableBean接口2.使用PreDestroy注解 SpringApplication會向JVM注冊一個關閉鉤子(hook)&#xff0c;以確保ApplicationContext在退出時正常關閉。 可以使用所有標準的Spring生命周期回調&#xff08;例如Dispos…

內測分發是什么?十年的前端開發者帶你了解

內測分發是軟件開發過程中的一個階段&#xff0c;特別指軟件還未完全完成或準備對外廣泛發布前&#xff0c;向一定范圍的用戶群體提供該軟件版本的測試機會&#xff0c;以便收集反饋和修復潛在的問題。在講解內測分發之前&#xff0c;我們需要明確幾個相關概念&#xff1a; 軟件…

區塊鏈媒體宣發:揭示優勢與趨勢,引領信息傳播新時代

在數字化潮流中&#xff0c;區塊鏈技術正以驚人的速度改變著傳媒行業的格局。從區塊鏈媒體宣發中獲得的種種優勢和未來的趨勢&#xff0c;不僅為企業帶來了新的推廣途徑&#xff0c;也在信息傳播領域掀起了一場革命。本文將深入探討區塊鏈媒體宣發的優勢以及未來的發展趨勢。 1…

排序算法---選擇排序

1.實現流程&#xff1a; 1. 把第一個沒有排序過的元素設置為最小值&#xff1b; 2. 遍歷每個沒有排序過的元素&#xff1b; 3. 如果元素 < 現在的最小值&#xff1b; 4. 將此元素設置成為新的最小值&#xff1b; 5. 將最小值和第一個沒有排序過的位置交換 選擇排序執行流程…

初識Ceph --組件、存儲類型、存儲原理

目錄 ceph組件存儲類型塊存儲文件存儲對象存儲 存儲過程 ceph Ceph&#xff08;分布式存儲系統&#xff09;是一個開源的分布式存儲系統&#xff0c;設計用于提供高性能、高可靠性和可擴展性的存儲服務&#xff0c;可以避免單點故障&#xff0c;支持塊存儲、對象存儲以及文件系…

【小白專用】Apache2.4+PHP8.3+MYSQL的配置

1.下載PHP和Apache 1、PHP下載 PHP For Windows: Binaries and sources Releases 注意&#xff1a; 1.使用Apache作為服務器的話&#xff0c;一定要下載Thread Safe的&#xff0c;否則沒有php8apache2_4.dll這個文件&#xff0c; 如果使用IIS的請下載 NON Tread safe的 2.如果…