精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

上位機下位機串口通信設計詳解

sharepcb ? 來源:直觀學PLC ? 2023-02-21 09:55 ? 次閱讀

串行接口是一種可以將接受來自CPU的并行數據字符轉換為連續的串行數據流發送出去,同時可將接受的串行數據流轉換為并行的數據字符供給CPU的器件。一般完成這種功能的電路,我們稱為串行接口電路。

串口通信結構

串口通信是指外設和計算機間,通過數據信號線 、地線、控制線等,按位進行傳輸數據的一種通訊方式。這種通信方式使用的數據線少,在遠距離通信中可以節約通信成本,但其傳輸速度比并行傳輸低。

串口是計算機上一種非常通用的設備通信協議。大多數計算機(不包括筆記本電腦)包含兩個基于RS-232的串口。串口同時也是儀器儀表設備通用的通信協議;很多GPIB兼容的設備也帶有RS-232口。同時,串口通信協議也可以用于獲取遠程采集設備的數據。

RS-232(ANSI/EIA-232標準)是IBM-PC及其兼容機上的串行連接標準。可用于許多用途,比如連接鼠標、打印機或者Modem,同時也可以接工業儀器儀表。用于驅動和連線的改進,實際應用中RS-232的傳輸長度或者速度常常超過標準的值。RS-232只限于PC串口和設備間點對點的通信。RS-232串口通信最遠距離是50英尺。

串口通信

串口通信是在工程應用中很常見。在上位機與下位機通訊過程中常通過有線的串口進行通信,在低速傳輸模式下串口通信得到廣泛使用。在說個之前先來簡單解釋一下上位機與下位機的概念。

上位機與下位機設計

通常上位機指的是PC,下位機指的是單片機或者帶微處理器的系統。下位機一般是將模擬信號經過AD采集將模擬量轉換為數字量,下位機再經過數字信號處理以后將數字信號通過串口發送到上位機,相反上位機可以給下位機發送一些指令或者信息。常見的通信串口包括RS232RS485RS422等。這些串口只是在電平特性有所不同,在上位機與下位機進行數據通信時可以不考慮電平特性,而且現在在硬件上有各種轉接接口,使用起來也很方便。

當然在通常做簡單的串口UART實驗時我們可以使用各種各樣的串口助手小軟件,但是這些串口小工具有時候并不能很好滿足需求,那就嘗試著自己寫一套屬于自己的串口助手?接下來說說如何使用java實現上位機與下位機之間的RS485串口通信。

step 1:下載支持java串口通信的jar包,這里給出下載地址:

http://files.cnblogs.com/files/Dreamer-1/mfz-rxtx-2.2-20081207-win-x86.zip(32bit 下載地址)

http://files.cnblogs.com/files/Dreamer-1/mfz-rxtx-2.2-20081207-win-x64.zip (64位下載地址)

對以上的版本解釋一下,因為本人在這里踩了一個坑,32位或者64位是與ecplise/myecplise一致,要是版本弄錯了會報錯。

step 2:下載了那個jar包解壓后會出現以下內容:

8e8e58cc-b122-11ed-bfe3-dac502259ad0.png

這個文件夾里面需要注意兩點:jar包RXTXcomm需要導入到java工程里面去。另外就是需要將rxtxParallel.dll與rxtxSerial.dll復制在安裝JDK的bin文件下和jre的bin文件夾下面,這樣才能保證能夠正常使用這個jar包。以下是將兩個dll文件復制的位置:

C:Program Files (x86)Javajdk1.8.0_25in

C:Program Files (x86)Javajdk1.8.0_25jrein12

怎么講jar包導入java工程里面就是比較簡單的操作,可以參考:http://jingyan.baidu.com/arTIcle/ca41422fc76c4a1eae99ed9f.html

step 3:RXTXComm Api如何使用

接下來就是使用該導入jar包進行編碼實現串口通信的功能了。在編碼之前先來理一理串口通信的主要環節,本人總結主要分為以下幾點:

1)計算機首先需要進行硬件check,查找是否有可用的COM端口,并對該對端口進行簡要判斷,包括這些端口是否是串口,是否正在使用。以下是部分主要代碼:

/*類方法 不可改變 不接受繼承

* 掃描獲取可用的串口

* 將可用串口添加至list并保存至list

*/

public staTIc final ArrayList《String》 uartPortUseAblefind()

{

//獲取當前所有可用串口

//由CommPorTIdenTIfier類提供方法

Enumeration《CommPortIdentifier》 portList=CommPortIdentifier.getPortIdentifiers();

ArrayList《String》 portNameList=new ArrayList();

//添加并返回ArrayList

while(portList.hasMoreElements())

{

String portName=portList.nextElement().getName();

portNameList.add(portName);

}

return portNameList;

}123456789101112131415161718

以下是測試類的測試實例:

ArrayList《String》 arraylist=UARTParameterSetup.uartPortUseAblefind();

int useAbleLen=arraylist.size();

if(useAbleLen==0)

{

System.out.println(“沒有找到可用的串口端口,請check設備!”);

}

else

{

System.out.println(“已查詢到該計算機上有以下端口可以使用:”);

for(int index=0;index《arraylist.size();index++)

{

System.out.println(“該COM端口名稱:”+arraylist.get(index));

//測試串口配置的相關方法

}

} 123456789101112131415

2)通過計算機對串口的自檢后,可以對串口參數進行簡單的配置。常見的配置可以從常見的串口助手中得到啟發。以下是一個串口助手的人機交換界面:

8eb51570-b122-11ed-bfe3-dac502259ad0.png

以下是對串口設置主要代碼:

/*

* 串口常見設置

* 1)打開串口

* 2)設置波特率 根據單板機的需求可以設置為57600 。。。

* 3)判斷端口設備是否為串口設備

* 4)端口是否占用

* 5)對以上條件進行check以后返回一個串口設置對象new UARTParameterSetup()

* 6)return:返回一個SerialPort一個實例對象,若判定該com口是串口則進行參數配置

* 若不是則返回SerialPort對象為null

*/

public static final SerialPort portParameterOpen(String portName,int baudrate)

{

SerialPort serialPort=null;

try

{ //通過端口名識別串口

CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);

//打開端口并設置端口名字 serialPort和超時時間 2000ms

CommPort commPort=portIdentifier.open(portName,1000);

//進一步判斷comm端口是否是串口 instanceof

if(commPort instanceof SerialPort)

{

System.out.println(“該COM端口是串口!”);

//進一步強制類型轉換

serialPort=(SerialPort)commPort;

//設置baudrate 此處需要注意:波特率只能允許是int型 對于57600足夠

//8位數據位

//1位停止位

//無奇偶校驗

serialPort.setSerialPortParams(baudrate, SerialPort.DATABITS_8,SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

//串口配制完成 log

System.out.println(“串口參數設置已完成,波特率為”+baudrate+“,數據位8bits,停止位1位,無奇偶校驗”);

}

//不是串口

else

{

System.out.println(“該com端口不是串口,請檢查設備!”);

//將com端口設置為null 默認是null不需要操作

}

}

catch (NoSuchPortException e)

{

e.printStackTrace();

}

catch (PortInUseException e)

{

e.printStackTrace();

}

catch (UnsupportedCommOperationException e)

{

e.printStackTrace();

}

return serialPort;

}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455

以上代碼就是返回一個對象,同時也返回了對象屬性,因為對象在java里面是屬于傳值引用。對以上需要說明的是:在實驗時需要連接串口才能讓計算機檢測到才能讓程序工作,這里使用的是RS485轉接線:

8edf9b24-b122-11ed-bfe3-dac502259ad0.png

3)通過以上兩個步驟后基本對串口的設置也完成了,對于串口類型的確認例如:RS232/RS485/RS422等,可以作為進一步確認的條件。RS485可以在gnu.io中找到。

8f15a85e-b122-11ed-bfe3-dac502259ad0.png

接下來就是上位機與下位機之間的雙向通信的功能實現了。該部分主要是利用java的輸入輸出流來實現。以下是主要代碼:

/*

* 串口數據發送以及數據傳輸作為一個類

* 該類做主要實現對數據包的傳輸至下單板機

*/

class DataTransimit

{

/*

* 上位機往單板機通過串口發送數據

* 串口對象 seriesPort

* 數據幀:dataPackage

* 發送的標志:數據未發送成功拋出一個異常

*/

public static void uartSendDatatoSerialPort(SerialPort serialPort,byte[] dataPackage)

{

OutputStream out=null;

try

{

out=serialPort.getOutputStream();

out.write(dataPackage);

out.flush();

} catch (IOException e)

{

e.printStackTrace();

}finally

{

//關閉輸出流

if(out!=null)

{

try

{

out.close();

out=null;

System.out.println(“數據已發送完畢!”);

} catch (IOException e)

{

e.printStackTrace();

}

}

}

}

/*

* 上位機接收數據

* 串口對象seriesPort

* 接收數據buffer

* 返回一個byte數組

*/

public static byte[] uartReceiveDatafromSingleChipMachine(SerialPort serialPort)

{

byte[] receiveDataPackage=null;

InputStream in=null;

try

{

in=serialPort.getInputStream();

//獲取data buffer數據長度

int bufferLength=in.available();

while(bufferLength!=0)

{

receiveDataPackage=new byte[bufferLength];

in.read(receiveDataPackage);

bufferLength=in.available();

}

}

catch (IOException e)

{

e.printStackTrace();

}

return receiveDataPackage;

} 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

通過以上關于Uart兩個基本類實現對底層Uart的功能封裝,其中一個類主要負責Uart串口自檢和基本設置,另外一個類主要has數據傳輸的兩個方法。接下來以一個實例說一說通過RS485串口通信將系統當前時間發送至單板機系統。

step 4:實現實時系統時間的數據包傳輸至下位機

這一步可以分為以下兩個步驟:首先實現獲取系統時間,將時間進行封裝成幀;另外就是通過RS485串口將時間數據包發送至單板機系統進行解析。

1) 系統時間的獲取

根據java面對對象設計思想,這里將有關系統時間的方法歸為一類。

以下是獲取當前系統時間代碼:

public static String getCurrentDateTime()

{

//單例模式

Calendar calendar=Calendar.getInstance();

int year = calendar.get(Calendar.YEAR);//獲取年份

int month=calendar.get(Calendar.MONTH);//獲取月份

int day=calendar.get(Calendar.DATE);//獲取日期

int minute=calendar.get(Calendar.MINUTE);//分

int hour=calendar.get(Calendar.HOUR);//小時

int second=calendar.get(Calendar.SECOND);//秒

String curerentDateTime = year + “ ” + (month + 1 )+ “ ” + day + “ ”+ (hour+12) + “ ” + minute + “ ” + second + “ ”;

timeCheckSum=year+(month+1)+day+(hour+12)+minute+second;

return curerentDateTime;

}1234567891011121314

java 提供了calender類,該類提供了一些與時間有關方法。至于Calendar.getInstance()使用單例模式獲取一個Calendar實例對象,單例模式就是一個類在任何時候只允許有一個實例化對象。獲取系統時間除了使用Calendar還可以使用Date類,通過創建對象也可以實現系統當前時間的獲取。timeCheckSum作為時間數據的校驗和發送至單板機作為自定義協議的一部分。

由于發送的數據包通常是以字節(byte)為單位進行發送和傳輸的,因此需要將int型的時間轉換為byte使用byte[]進行存儲,作為一個數據包發送。

/*

* 將以上時間字符串進行隔開用byte[]保存

*/

public static byte[] dateTimeBytesGet(String currenDateTime)

{

//對當前時間參數進行格式判斷

//對格式進行判斷

int rawDataSize=6;

byte[] dateTimeBytes=new byte[rawDataSize+1];

String[] currentDateTimeSplit=currenDateTime.split(“ ”);

if(currentDateTimeSplit.length==rawDataSize)

{

//時間數據格式正確

//eg 2016 12 23 22 18 26

//使用byte[]進行存儲時需要 -128~+127

//對于年份使用兩個byte存儲

for(int dataIndex=0;dataIndex《rawDataSize;dataIndex++)

{

int dateTemp=Integer.parseInt(currentDateTimeSplit[dataIndex]);

if(dataIndex==0)

{

byte H8bits=(byte)((dateTemp)》》8);

byte L8bits=(byte)((dateTemp)&0xff);

dateTimeBytes[dataIndex]= H8bits;

dateTimeBytes[dataIndex+1]= L8bits;

}

dateTimeBytes[dataIndex+1]=(byte)dateTemp;

}

}else

{

System.out.println(“當前時間獲取出現異常數據”);

System.exit(-1);

dateTimeBytes=null;

}

return dateTimeBytes;

}123456789101112131415161718192021222324252627282930313233343536

以上數據可以使用7個byte對時間數據進行存儲,因為年份需要使用兩個字節來存儲,格式為高字節在前,低字節在后,之后依次存放。

將時間數據存放在byte[]數組以后接下來就是添加自己的協議部分了。該部分具有較大的隨意性,因為該協議可以根據不同的風格有不同的形式。為了簡單起見,只需要在時間數據byte[]之前添加head、CMD、時間數據長度length這三個字節進行補充,時間數據byte[]后面依次添加校驗和高低字節以及tail指令即可。以上基本實現了一個簡單的時間數據package。以下是本模塊的代碼:

/*

* 將數組封裝成幀

* 每一個數據幀由以下幾個部分組成

* 1)數據包頭部 head 0X2F

* 2)數據包命令 CMD 0X5A

* 3)數據個數 length of data 7

* 4)校驗和 H8/L8 byte of check sum(高字節在前 低字節在后)

* 5)數據結尾標志 tail OX30

* 6)可采用線程進行獲取當前時間

*/

public static byte[] makeCurrentDateTimefromStringtoFramePackage(byte[] dateTimeBytes)

{

//在時間byte[]前后添加一些package校驗信息

int dataLength=13;

byte[] terimalTimePackage=new byte[dataLength];

//裝填信息

//時間數據包之前的信息

terimalTimePackage[0]=0x2F;

terimalTimePackage[1]=0X5A;

terimalTimePackage[2]=7;

//計算校驗和

//轉化為無符號進行校驗

for(int dataIndex=0;dataIndex《dateTimeBytes.length;dataIndex++)

{

terimalTimePackage[dataIndex+3]=dateTimeBytes[dataIndex];

}

//將校驗和分為高低字節

byte sumH8bits=(byte)((timeCheckSum)》》8);

byte sumL8bits=(byte)((timeCheckSum)&0xff);

terimalTimePackage[10]=sumH8bits;//高字節在前

terimalTimePackage[11]=sumL8bits;//低字節在后

//數據包結尾

terimalTimePackage[12]=0X30;

return terimalTimePackage;

}1234567891011121314151617181920212223242526272829303132333435

下面給出了將時間數據byte數組進行解析的debug代碼,一方面是確定上位機本部分模塊的程序可靠性,另外也可以直接移植到下位機對數據包的解析之中。在下位機解析過程中需要注意一點:因為在java中8大基本類型都是帶符號,年份時間和時間校驗和拆分為高低字節時,低字節是二進制無符號的,但是計算機卻是按照有符號數(補碼方式)進行讀取,例如在2016年轉換為二進制數為:11111100000,那么高字節為00000111,低字節為11100000。計算機讀取為:高字節為7,低字節為-32。其實由兩個byte真實還原的過程應為:7《《8+(低字節二進制數字)=7*256+224=2016,因此在debug解析時間數據包時需要將有符號數字轉換為無符號數字。

/*

* 對時間格式進行解析并還原原來的時間格式

* 對數據進行還原

* 僅限于debug使用

*/

public static String dateTimeBytesfromTostring(byte[] currentDateTime)

{

String string=“”;

if(currentDateTime.length==7)

{

string=((currentDateTime[0]《《8)+bytetoUnsigendInt(currentDateTime[1]))+“ ”+currentDateTime[2]+“ ”+

currentDateTime[3]+“ ”+currentDateTime[4]+“ ”+currentDateTime[5]+“ ”+

currentDateTime[6];

}

return string;

}

/*

* 將byte轉化為字符串

* 將有符號byte轉化為無符號數字

* debug使用

*/

public static int bytetoUnsigendInt(byte aByte)

{

String s=String.valueOf(aByte);

//System.out.println(s);

int bytetoUnsigendInt=0;

for(int i=0;i《s.length();i++)

{

if(s.charAt(i)!=‘0’)

{

bytetoUnsigendInt+=1《《(7-i);

}

}

return bytetoUnsigendInt;

}12345678910111213141516171819202122232425262728293031323334353637

2)將最后的時間數據包通過RS485串口發送至下位機

結合前面的串口程序就可以使用串口發送程序了。在程序debug的前期可以在程序的關鍵位置輸出日志就是打印log的方法可以提高程序調試的效率。以下是主類的測試代碼:

//取出第一個COM端口進行測試

SerialPort serialPort=UARTParameterSetup.portParameterOpen(arraylist.get(0), 57600);

//退出程序 后續不需要監測 因為transimit一直需要保證連接狀態

//System.exit(0);

DataTransimit.uartSendDatatoSerialPort(serialPort, dataFrame);

String currentDateTime=SystemDateTimeGet.getCurrentDateTime();

System.out.println(currentDateTime);

byte[] bytes=SystemDateTimeGet.dateTimeBytesGet(currentDateTime);

//System.out.println(Arrays.toString(bytes));

String str=SystemDateTimeGet.dateTimeBytesfromTostring(bytes);

System.out.println(str);

//System.out.println(SystemDateTimeGet.bytetoUnsigendInt((byte) -32));

byte[] terimalTimeByte=SystemDateTimeGet.makeCurrentDateTimefromStringtoFramePackage(bytes);

System.out.println(Arrays.toString(terimalTimeByte));

DataTransimit.uartSendDatatoSerialPort(serialPort, terimalTimeByte);123456789101112131415

以下是測試結果:

當沒有串口設備接入計算機時控制臺打印一條信息:

沒有找到可用的串口端口,請check設備!

12

當RS485設備接入計算機時,控制臺打印消息如下:

8f35a974-b122-11ed-bfe3-dac502259ad0.png

通過以上幾個步驟基本實現了上位機與下位機串口通信的功能,接下來還可以對程序進行改進:

1)添加界面,可以類比串口助手界面根據自身需要設計獨具風格的人機交互界面。

2) 在程序中添加線程,在以上程序中對于系統時間的獲取可以通過線程的方式進行獲取,這樣上位機就可以一直往下位機發送數據包,而不是僅僅發一次。

3)對于上位機數據接收,除了以上最基本的接收功能外,還可以使用JDBC與mysql等數據進行存儲,并繪畫數據曲線實現特性分析。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10696

    瀏覽量

    209310
  • uart
    +關注

    關注

    22

    文章

    1199

    瀏覽量

    100821
  • 串口通信
    +關注

    關注

    34

    文章

    1601

    瀏覽量

    55228
  • 上位機
    +關注

    關注

    27

    文章

    927

    瀏覽量

    54546
  • 下位機
    +關注

    關注

    0

    文章

    93

    瀏覽量

    18680

原文標題:上位機下位機串口通信設計詳解

文章出處:【微信號:直觀學PLC,微信公眾號:直觀學PLC】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    實現基于Qt的上位下位進行串口通信

    :Qt5.96Mingw32-bit keil3項目目標1、實現下位基于STC單片控制LED燈模塊、獨立鍵盤模塊.2、實現基于Qt的上位
    發表于 12-08 07:26

    上位下位串口通信設計詳解

    串行接口是一種可以將接受來自CPU的并行數據字符轉換為連續的串行數據流發送出去,同時可將接受的串行數據流轉換為并行的數據字符供給CPU的器件。一般完成這種功能的電路,我們稱為串行接口電路。
    發表于 11-10 10:27 ?7.8w次閱讀
    <b class='flag-5'>上位</b><b class='flag-5'>機</b><b class='flag-5'>下位</b><b class='flag-5'>機</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>設計<b class='flag-5'>詳解</b>

    什么是上位,什么是下位

    上位發出的命令首先給下位下位再根據此命令解釋成相應時序信號直接控制相應設備。
    的頭像 發表于 03-23 10:11 ?1.9w次閱讀
    什么是<b class='flag-5'>上位</b><b class='flag-5'>機</b>,什么是<b class='flag-5'>下位</b><b class='flag-5'>機</b>?

    基于RS232串口實現PIC單片下位與QT上位通信

    基于RS232串口實現PIC單片下位與QT上位通信
    發表于 11-16 12:21 ?21次下載
    基于RS232<b class='flag-5'>串口</b>實現PIC單片<b class='flag-5'>機</b><b class='flag-5'>下位</b><b class='flag-5'>機</b>與QT<b class='flag-5'>上位</b><b class='flag-5'>機</b><b class='flag-5'>通信</b>

    打開單片世界的大門——上位控制下位實例詳解

    上位控制下位實例詳解一、基本概念上位
    發表于 11-20 11:06 ?27次下載
    打開單片<b class='flag-5'>機</b>世界的大門——<b class='flag-5'>上位</b><b class='flag-5'>機</b>控制<b class='flag-5'>下位</b><b class='flag-5'>機</b>實例<b class='flag-5'>詳解</b>

    什么是上位

    1.上位下位上位,與下位對應,用來給
    發表于 01-14 13:43 ?5次下載
    什么是<b class='flag-5'>上位</b><b class='flag-5'>機</b>

    上位下位的區別

    上位下位的區別 一、區別 1)上位:系統中起主控,主要作為系統的規劃控制,屬于決策層。
    發表于 04-26 14:32 ?3739次閱讀

    上位和MYSQL連接_上位下位串口通信設計詳解

    串行接口是一種可以將接受來自CPU的并行數據字符轉換為連續的串行數據流發送出去,同時可將接受的串行數據流轉換為并行的數據字符供給CPU 的器件。一般完成這種功能的電路,我們稱為串行接口電路。串口通信
    發表于 05-08 10:53 ?0次下載
    <b class='flag-5'>上位</b><b class='flag-5'>機</b>和MYSQL連接_<b class='flag-5'>上位</b><b class='flag-5'>機</b><b class='flag-5'>下位</b><b class='flag-5'>機</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>設計<b class='flag-5'>詳解</b>

    java實現上位下位串口通信

    串口通信是在工程應用中很常見。在上位下位通訊過程中常通過有線的
    發表于 05-08 09:51 ?1次下載
    java實現<b class='flag-5'>上位</b><b class='flag-5'>機</b>與<b class='flag-5'>下位</b><b class='flag-5'>機</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    上位下位通信

    。里程計提供ROS需要的速度信息,陀螺儀提供加速度方向等信息給 ROS,再加上連接到樹莓派上的激光雷達,ROS就可以進行SLAM制圖和導航了。下位接收到ROS下發的速度信息后,轉換成電機的PWM信號和舵機的PWM信號進行方向和速度控制。本篇就介紹
    發表于 05-09 11:44 ?0次下載
    <b class='flag-5'>上位</b><b class='flag-5'>機</b>與<b class='flag-5'>下位</b><b class='flag-5'>機</b><b class='flag-5'>通信</b>

    上位下位是什么意思

    上位下位是什么意思 上位的意思是指可以直接發出操控命令的計算機,一般是PC/host c
    發表于 06-05 11:09 ?4178次閱讀

    上位下位是什么意思 上位下位的區別

    上位下位是計算機控制系統中兩個重要的概念,它們在控制、通信和數據處理等方面發揮著關鍵作用。在本文中,我們將詳細探討
    的頭像 發表于 06-06 10:11 ?3647次閱讀

    上位下位串口通信的區別在哪

    上位下位串口通信的區別主要體現在以下幾個方面: 通信
    的頭像 發表于 06-06 10:34 ?627次閱讀

    上位下位通信協議的優化策略

    在現代工業自動化系統中,上位下位之間的通信是不可或缺的環節。上位
    的頭像 發表于 06-28 16:36 ?565次閱讀

    上位下位實時通信的實現

    在工業自動化、遠程控制、數據采集與處理等領域,上位下位之間的實時通信是實現高效、準確的數據交換和系統控制的基礎。本文旨在介紹實現
    的頭像 發表于 06-28 17:01 ?749次閱讀