0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用協(xié)議棧實(shí)現(xiàn)Modbus RTU從站應(yīng)用

CHANBAEK ? 來源:木南創(chuàng)智 ? 作者:尹家軍 ? 2022-12-13 16:14 ? 次閱讀

自從開源了我們自己開發(fā)的Modbus協(xié)議棧之后,有很多朋友建議我針對(duì)性的做幾個(gè)示例。所以我們就基于平時(shí)我們的應(yīng)用整理了幾個(gè)簡(jiǎn)單但可以說明基本的應(yīng)用方法的示例,這一篇中我們將使用協(xié)議棧實(shí)現(xiàn)一個(gè)Modbus RTU從站應(yīng)用。

1 、何為RTU從站

Modbus協(xié)議是一個(gè)主從協(xié)議,那肯定就有主站和從站之分。所謂從站就是被動(dòng)動(dòng)響應(yīng)通訊的對(duì)象,所以從站總是響應(yīng)通訊的一方。

對(duì)于RTU從站來說,它是數(shù)據(jù)的數(shù)據(jù)的生產(chǎn)者,從站通過響應(yīng)主站數(shù)據(jù)請(qǐng)求的方式將數(shù)據(jù)發(fā)送給主站。這一過程如下圖所示:

從上圖我們不難看出,首先主站要主動(dòng)發(fā)起數(shù)據(jù)請(qǐng)求,這也是它為什么被稱之為主站的緣由。它首先告訴從站我需要哪些數(shù)據(jù)。然后從站按照主站的請(qǐng)求返回?cái)?shù)據(jù)。主站得到響應(yīng)后解析數(shù)據(jù),這樣就完成了主從站之間的一次數(shù)據(jù)通訊。所以主站就需要主動(dòng)發(fā)起每一次數(shù)據(jù)通訊的對(duì)象。

2 、如何實(shí)現(xiàn)RTU從站

我們已經(jīng)了解的從站總是響應(yīng)主站的數(shù)據(jù)請(qǐng)求來實(shí)現(xiàn)數(shù)據(jù)的傳送。下面我們來看看使用協(xié)議棧如何實(shí)現(xiàn)一個(gè)從站。

我們知道從站是數(shù)據(jù)的生產(chǎn)者,對(duì)于Modbus協(xié)議來說有四類數(shù)據(jù):線圈、狀態(tài)、輸入寄存器和保持寄存器。所以在從站中我們要為這四種數(shù)據(jù)定義相應(yīng)的地址,以便主站能夠?qū)?yīng)的訪問。所以設(shè)計(jì)一個(gè)從站我們先來設(shè)計(jì)它的數(shù)據(jù)地址,在我們的例子中我們規(guī)定如下:

我們規(guī)定了每類數(shù)據(jù)類型的數(shù)量為8,對(duì)于從站來說除了生成這些數(shù)據(jù)外,還需要根據(jù)主站的數(shù)據(jù)請(qǐng)求來返回相應(yīng)的數(shù)據(jù)響應(yīng)。在我們的協(xié)議棧中實(shí)現(xiàn)了0x01、0x02、0x03、0x04、0x05、0x06、0x0F以及0x10等功能碼。也就是說主站對(duì)象會(huì)生成面向這些功能碼的從站數(shù)據(jù)請(qǐng)求。從站收到請(qǐng)求后,解析請(qǐng)求并根據(jù)請(qǐng)求生成響應(yīng)的數(shù)據(jù)響應(yīng)。可以表示為下圖所示:

從上圖我們明白協(xié)議棧中已經(jīng)實(shí)現(xiàn)了對(duì)收到的主站數(shù)據(jù)請(qǐng)求進(jìn)行解析以及根據(jù)解析生成對(duì)應(yīng)的響應(yīng)的函數(shù)。我們使用協(xié)議棧時(shí),主要需要做兩個(gè)方面的事情:解析數(shù)據(jù)請(qǐng)求和生成數(shù)據(jù)響應(yīng)。

在協(xié)議棧中定義了一個(gè)解析函數(shù),該函數(shù)將收到的數(shù)據(jù)請(qǐng)求消息解析,并根據(jù)解析的結(jié)果生成返回的數(shù)據(jù)響應(yīng)。該函數(shù)的原型如下:

uint16_t ParsingMasterAccessCommand(uint8_t receivedMessage, uint8_trespondBytes, uint16_t rxLength, uint8_t StationAddress)

這個(gè)函數(shù)有四個(gè)參數(shù):uint8_t receivedMessage是收到的數(shù)據(jù)請(qǐng)求消息; uint8_trespondBytes是返回的數(shù)據(jù)響應(yīng)消息,也是函數(shù)需要生成的;uint16_t rxLength是接收到的數(shù)據(jù)請(qǐng)求消息的長(zhǎng)度;uint8_t StationAddress本站的地址。而函數(shù)的返回值則是生成的數(shù)據(jù)響應(yīng)詳細(xì)的長(zhǎng)度。

在解析的過程中,該函數(shù)判斷消息的完整性,并根據(jù)不同的功能碼調(diào)用不同的回調(diào)函數(shù)來實(shí)現(xiàn),包括設(shè)置本地?cái)?shù)據(jù)和獲取本地?cái)?shù)據(jù)的相關(guān)回調(diào)函數(shù),在后續(xù)將討論它們的實(shí)現(xiàn)。

3 、 RTU****從站編碼

我們已經(jīng)詳述了使用協(xié)議棧實(shí)現(xiàn)RTU從站的方法,接下來我們就來利用協(xié)議棧具體開發(fā)一個(gè)RTU從站的實(shí)例。

我們調(diào)用解析函數(shù)對(duì)接收到的數(shù)據(jù)請(qǐng)求進(jìn)行解析,具體調(diào)用方式如下所示:

respondLength=ParsingMasterAccessCommand(hgudRxBuffer,respondBytes,hgudRxLength,StationAddress);

返回值會(huì)有3種情況,返回值為0則表示接收到的數(shù)據(jù)請(qǐng)求消息是錯(cuò)誤的。返回值為65535則表示返回的消息尚未接收完整。返回的是一個(gè)合適的數(shù)值則表示解析成功,返回了數(shù)據(jù)響應(yīng)的長(zhǎng)度。

當(dāng)然我們需要實(shí)現(xiàn)8個(gè)回調(diào)函數(shù),分別是獲取線圈量、獲取狀態(tài)量、獲取輸入寄存器和獲取保持寄存器,以及預(yù)置單個(gè)線圈量、預(yù)置多個(gè)線圈量、預(yù)置單個(gè)保持寄存器和預(yù)置多個(gè)保持寄存器。函數(shù)原型定義如下:

/*獲取想要讀取的Coil量的值*/
__weak void GetCoilStatus(uint16_t startAddress,uint16_t quantity,bool*statusList)
{
  //如果需要Modbus TCP Server/RTU Slave應(yīng)用中實(shí)現(xiàn)具體內(nèi)容
}
 
/*獲取想要讀取的InputStatus量的值*/
__weak void GetInputStatus(uint16_t startAddress,uint16_t quantity,bool*statusValue)
{
  //如果需要Modbus TCP Server/RTU Slave應(yīng)用中實(shí)現(xiàn)具體內(nèi)容
}
 
/*獲取想要讀取的保持寄存器的值*/
__weak void GetHoldingRegister(uint16_t startAddress,uint16_tquantity,uint16_t *registerValue)
{
  //如果需要Modbus TCP Server/RTU Slave應(yīng)用中實(shí)現(xiàn)具體內(nèi)容
}
 
/*獲取想要讀取的輸入寄存器的值*/
__weak void GetInputRegister(uint16_t startAddress,uint16_tquantity,uint16_t *registerValue)
{
  //如果需要Modbus TCP Server/RTU Slave應(yīng)用中實(shí)現(xiàn)具體內(nèi)容
}
 
/*設(shè)置單個(gè)線圈的值*/
__weak void SetSingleCoil(uint16_t coilAddress,bool coilValue)
{
  //如果需要Modbus TCP Server/RTU Slave應(yīng)用中實(shí)現(xiàn)具體內(nèi)容
}
 
/*設(shè)置單個(gè)寄存器的值*/
__weak void SetSingleRegister(uint16_t registerAddress,uint16_tregisterValue)
{
  //如果需要Modbus TCP Server/RTU Slave應(yīng)用中實(shí)現(xiàn)具體內(nèi)容
}
 
/*設(shè)置多個(gè)線圈的值*/
__weak void SetMultipleCoil(uint16_t startAddress,uint16_t quantity,bool*statusValue)
{
  //如果需要Modbus TCP Server/RTU Slave應(yīng)用中實(shí)現(xiàn)具體內(nèi)容
}
 
/*設(shè)置多個(gè)寄存器的值*/
__weak void SetMultipleRegister(uint16_t startAddress,uint16_tquantity,uint16_t *registerValue)
{
  //如果需要Modbus TCP Server/RTU Slave應(yīng)用中實(shí)現(xiàn)具體內(nèi)容
}

我們需要做的工作就是根據(jù)我們具體實(shí)例中4類數(shù)據(jù)量的地址分配來實(shí)現(xiàn)這8個(gè)回調(diào)函數(shù)。當(dāng)然,如果從站沒有某一類數(shù)據(jù)量操作,回調(diào)函數(shù)則不需要編寫。在我們的實(shí)例中我們將這幾個(gè)函數(shù)實(shí)現(xiàn)如下:

/*獲取想要讀取的Coil量的值*/
void GetCoilStatus(uint16_t startAddress,uint16_tquantity,bool *statusList)
{
  uint16_tstart;
  uint16_tcount;
  /*先判斷地址是否處于合法范圍*/
 start=(startAddress>CoilStartAddress)?((startAddress<=CoilEndAddress)?startAddress:CoilEndAddress):CoilStartAddress;
 count=((start+quantity-1)<=CoilEndAddress)?quantity:(CoilEndAddress-start);
 
  for(inti=0;i/*獲取想要讀取的保持寄存器的值*/
void GetHoldingRegister(uint16_tstartAddress,uint16_t quantity,uint16_t *registerValue)
{
  uint16_tstart;
  uint16_tcount;
  /*先判斷地址是否處于合法范圍*/
 start=(startAddress>HoldingResterStartAddress)?((startAddress<=HoldingResterEndAddress)?startAddress:HoldingResterEndAddress):HoldingResterStartAddress;
 count=((start+quantity-1)<=HoldingResterEndAddress)?quantity:(HoldingResterEndAddress-start);
 
  for(inti=0;i/*設(shè)置單個(gè)線圈的值*/
void SetSingleCoil(uint16_t coilAddress,boolcoilValue)
{
  /*先判斷地址是否處于合法范圍*/
 if((4<=coilAddress)&&(coilAddress<=CoilEndAddress))
  {
   dPara.coil[coilAddress]=coilValue;
  }
 
 PresetSlaveCoilControll(coilAddress,coilAddress);
}
 
/*設(shè)置多個(gè)線圈的值*/
void SetMultipleCoil(uint16_tstartAddress,uint16_t quantity,bool *statusValue)
{
  uint16_tendAddress=startAddress+quantity-1;
 if((4<=startAddress)&&(startAddress<=CoilEndAddress)&&(4<=endAddress)&&(endAddress<=CoilEndAddress))
  {
    for(inti=0;iPresetSlaveCoilControll(startAddress,endAddress);
}
 
/*設(shè)置單個(gè)寄存器的值*/
void SetSingleRegister(uint16_tregisterAddress,uint16_t registerValue)
{
  boolnoError=(bool)(((41<=registerAddress)&&(registerAddress<=42))
                     ||((44<=registerAddress)&&(registerAddress<=45))
                     ||((50<=registerAddress)&&(registerAddress<=51))
                     ||((54<=registerAddress)&&(registerAddress<=55))
                     ||((58<=registerAddress)&&(registerAddress<=59)));
 if(noError)
  {
   aPara.holdingRegister[registerAddress]=registerValue;
  }
 
 WriteSlaveRegisterControll(registerAddress,registerAddress);
}
 
/*設(shè)置多個(gè)寄存器的值*/
void SetMultipleRegister(uint16_tstartAddress,uint16_t quantity,uint16_t *registerValue)
{
  uint16_tendAddress=startAddress+quantity-1;
 
  boolnoError=(bool)(((8<=startAddress)&&(startAddress<=15)&&(8<=endAddress)&&(endAddress<=15))
                     ||((41<=startAddress)&&(startAddress<=42)&&(41<=endAddress)&&(endAddress<=42))
                     ||((44<=startAddress)&&(startAddress<=47)&&(44<=endAddress)&&(endAddress<=47))
                     ||((50<=startAddress)&&(startAddress<=51)&&(50<=endAddress)&&(endAddress<=51))
                     ||((54<=startAddress)&&(startAddress<=55)&&(54<=endAddress)&&(endAddress<=55))
                     ||((58<=startAddress)&&(startAddress<=59)&&(58<=endAddress)&&(endAddress<=59))
                     ||((62<=startAddress)&&(startAddress<=67)&&(62<=endAddress)&&(endAddress<=67))
                     ||((72<=startAddress)&&(startAddress<=77)&&(72<=endAddress)&&(endAddress<=77))
                     ||((82<=startAddress)&&(startAddress<=87)&&(82<=endAddress)&&(endAddress<=87))
                     ||((92<=startAddress)&&(startAddress<=97)&&(92<=endAddress)&&(endAddress<=97))
                     ||((100<=startAddress)&&(startAddress<=115)&&(100<=endAddress)&&(endAddress<=115)));
 if(noError)
  {
    for(inti=0;iWriteSlaveRegisterControll(startAddress,endAddress);
}

到這里對(duì)從站的開發(fā)實(shí)際已經(jīng)完成。對(duì)于這些回調(diào)函數(shù)并不是全部需要編寫,而是要根據(jù)我們自己定義的從站各類參數(shù)的地址分配來實(shí)現(xiàn)。

4 、 RTU****從站小結(jié)

我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的RTU從站實(shí)例,我們可以通過一些RTU主站軟件來測(cè)試它。這樣的軟件有很多,常見的如Modscan、Modbus Poll等。這里我們使用Modbus Poll來測(cè)試一下,如下圖所示:

RTU從站的實(shí)現(xiàn)相對(duì)較簡(jiǎn)單,因?yàn)樵谕慌_(tái)設(shè)備上只需實(shí)現(xiàn)一個(gè)從站,哪怕是通過不同的端口來訪問。這一點(diǎn)與主站是不一樣的,原因是從站的數(shù)據(jù)是自己產(chǎn)生,而且只需被動(dòng)響應(yīng)主站請(qǐng)求,而且理論上同一條總線只會(huì)有一個(gè)主站。

接下來我們來總結(jié)一下使用協(xié)議棧實(shí)現(xiàn)RTU從站的工作流程,或者說實(shí)現(xiàn)的步驟。首先從站要解析從主站送來的數(shù)據(jù)請(qǐng)求。在協(xié)議棧中已經(jīng)封裝了數(shù)據(jù)請(qǐng)求的解析函數(shù)、所以我們實(shí)現(xiàn)從站時(shí)首先就是調(diào)用這一函數(shù)來解析接收到的數(shù)據(jù)請(qǐng)求消息。

然后將解析函數(shù)返回的數(shù)據(jù)響應(yīng)消息發(fā)送到主站就可以了。也就是說使用協(xié)議棧,只需要調(diào)用一下這個(gè)函數(shù)從站功能就實(shí)現(xiàn)了。這是因?yàn)檫@個(gè)函數(shù)實(shí)現(xiàn)了整個(gè)從站的響應(yīng)過程,大致分三個(gè)步驟:第一步,解析收到的主站數(shù)據(jù)請(qǐng)求消息;第二步,根據(jù)解析的結(jié)果預(yù)置數(shù)據(jù)或者獲取數(shù)據(jù),預(yù)置和獲取數(shù)據(jù)由8個(gè)回調(diào)函數(shù)實(shí)現(xiàn);第三步,生成從站數(shù)據(jù)響應(yīng)消息。說到這里我們已經(jīng)清楚,RTU從站必須實(shí)現(xiàn)這些回調(diào)函數(shù),其它工作則全由協(xié)議棧完成。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • MODBUS
    +關(guān)注

    關(guān)注

    28

    文章

    1718

    瀏覽量

    76414
  • RTU
    RTU
    +關(guān)注

    關(guān)注

    0

    文章

    384

    瀏覽量

    28547
  • 協(xié)議棧
    +關(guān)注

    關(guān)注

    2

    文章

    137

    瀏覽量

    33571
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Modbus RTU的設(shè)計(jì)與實(shí)現(xiàn)

    前面我們已經(jīng)詳細(xì)講解過Modbus協(xié)議的開發(fā)過程,并且利用協(xié)議封裝了Modbus RTU
    的頭像 發(fā)表于 12-13 15:27 ?1822次閱讀
    <b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>的設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    使用協(xié)議實(shí)現(xiàn)Modbus RTU應(yīng)用

    自從開源了我們自己開發(fā)的Modbus協(xié)議之后,有很多朋友建議我針對(duì)性的做幾個(gè)示例。所以我們就基于平時(shí)我們的應(yīng)用整理了幾個(gè)簡(jiǎn)單但可以說明基本的應(yīng)用方法的示例,在這一篇中我們先來使用協(xié)議
    的頭像 發(fā)表于 12-13 16:10 ?1488次閱讀
    使用<b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>主<b class='flag-5'>站</b>應(yīng)用

    使用協(xié)議實(shí)現(xiàn)Modbus ASCII應(yīng)用

    自從開源了我們自己開發(fā)的Modbus協(xié)議之后,有很多朋友建議我針對(duì)性的做幾個(gè)示例。所以我們就基于平時(shí)我們的應(yīng)用整理了幾個(gè)簡(jiǎn)單但可以說明基本的應(yīng)用方法的示例,這一篇中我們來使用協(xié)議
    的頭像 發(fā)表于 12-13 17:12 ?1142次閱讀
    使用<b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>Modbus</b> ASCII<b class='flag-5'>從</b><b class='flag-5'>站</b>應(yīng)用

    EtherCAT轉(zhuǎn)modbus RTU協(xié)議轉(zhuǎn)換網(wǎng)關(guān)用modbus slave測(cè)試的方法

    使用,也可以連接到Modbus-RTU總線中作為主使用。這款通訊網(wǎng)關(guān)還支持多種不同的通訊協(xié)議,可以在不同的網(wǎng)絡(luò)中進(jìn)行自由切換,極大的
    的頭像 發(fā)表于 10-24 19:22 ?1194次閱讀
    EtherCAT<b class='flag-5'>從</b><b class='flag-5'>站</b>轉(zhuǎn)<b class='flag-5'>modbus</b> <b class='flag-5'>RTU</b><b class='flag-5'>協(xié)議</b>轉(zhuǎn)換網(wǎng)關(guān)用<b class='flag-5'>modbus</b> slave測(cè)試的方法

    如何快速實(shí)現(xiàn)Modbus RTUModbus TCP協(xié)議轉(zhuǎn)換?

    整合起來監(jiān)控管理,目前上位機(jī)大部分用的Modbus TCP協(xié)議,而現(xiàn)場(chǎng)設(shè)備有大批量使用的是Modbus RTU協(xié)議,要
    發(fā)表于 08-18 18:36

    基于RT-Thread實(shí)現(xiàn)的Agile Modbus協(xié)議

    基于 RT-Thread 實(shí)現(xiàn)的支持 Modbus 固件升級(jí)的 Bootloader:HPM6750_Boot  特性  支持 rtu 及 tcp 協(xié)議,使用純 C 開發(fā),不涉及任何硬
    發(fā)表于 10-08 15:04

    基于Modbus RTU協(xié)議實(shí)現(xiàn)的1主多自組網(wǎng)無(wú)線通信形式

      本方案是基于Modbus RTU協(xié)議實(shí)現(xiàn)的1主多自組網(wǎng)無(wú)線通信形式,主為S7-1200
    發(fā)表于 03-10 14:54

    上位機(jī)MODBUS RTU通訊的VB程序

    上位機(jī)MODBUS RTU通訊的VB程序,實(shí)現(xiàn)上位機(jī)與下位機(jī)之間的數(shù)據(jù)傳輸。
    發(fā)表于 10-12 16:05 ?77次下載

    S7200 Modbus通訊協(xié)議遠(yuǎn)程終端設(shè)備RTU示例

    本文檔的主要內(nèi)容詳細(xì)介紹的是S7200 Modbus通訊協(xié)議遠(yuǎn)程終端設(shè)備RTU示例。
    發(fā)表于 10-25 08:00 ?32次下載
    S7200 <b class='flag-5'>Modbus</b>通訊<b class='flag-5'>協(xié)議</b>遠(yuǎn)程終端設(shè)備<b class='flag-5'>RTU</b>主<b class='flag-5'>站</b>和<b class='flag-5'>從</b><b class='flag-5'>站</b>示例

    如何在S7-200 CPU上實(shí)現(xiàn)Modbus RTU通信協(xié)議

    S7-200 CPU上的通信口Port0可以支持Modbus RTU協(xié)議,成為Modbus RTU
    發(fā)表于 03-18 08:00 ?3次下載

    modbus rtu協(xié)議的主從源程序

    modbus rtu協(xié)議的主從源程序,移植到自己的串口即可用
    發(fā)表于 03-24 14:52 ?21次下載

    使用協(xié)議實(shí)現(xiàn)Modbus ASCII主應(yīng)用

    自從開源了我們自己開發(fā)的Modbus協(xié)議之后,有很多朋友建議我針對(duì)性的做幾個(gè)示例。所以我們就基于平時(shí)我們的應(yīng)用整理了幾個(gè)簡(jiǎn)單但可以說明基本的應(yīng)用方法的示例,這一篇中我們來使用協(xié)議
    的頭像 發(fā)表于 12-13 17:09 ?837次閱讀
    使用<b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>Modbus</b> ASCII主<b class='flag-5'>站</b>應(yīng)用

    Profibus-DP轉(zhuǎn)modbus RTU網(wǎng)關(guān)modbus rtu協(xié)議

    捷米JM-DPM-RTU網(wǎng)關(guān)在Profibus總線側(cè)實(shí)現(xiàn)功能,在Modbus串口側(cè)實(shí)現(xiàn)
    的頭像 發(fā)表于 08-10 09:41 ?807次閱讀
    Profibus-DP轉(zhuǎn)<b class='flag-5'>modbus</b> <b class='flag-5'>RTU</b>網(wǎng)關(guān)<b class='flag-5'>modbus</b> <b class='flag-5'>rtu</b><b class='flag-5'>協(xié)議</b>

    Modbus RTU轉(zhuǎn)CC-Link協(xié)議網(wǎng)關(guān)(CC-Link轉(zhuǎn)Modbus RTU

    遠(yuǎn)創(chuàng)智控YC-CCLK-RTU型網(wǎng)關(guān)實(shí)現(xiàn)了CC-LinkModbus RTU
    的頭像 發(fā)表于 09-07 14:59 ?204次閱讀
    <b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>轉(zhuǎn)CC-Link<b class='flag-5'>協(xié)議</b>網(wǎng)關(guān)(CC-Link轉(zhuǎn)<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>)

    Modbus RTU轉(zhuǎn)CC-link協(xié)議網(wǎng)關(guān)(Modbus RTU轉(zhuǎn)CC-link)

    一,設(shè)備主要功能 捷米特JM-CCLK-RTU網(wǎng)關(guān)實(shí)現(xiàn)CC-LinkModbus RTU
    的頭像 發(fā)表于 09-10 10:28 ?179次閱讀
    <b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>轉(zhuǎn)CC-link<b class='flag-5'>協(xié)議</b>網(wǎng)關(guān)(<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>轉(zhuǎn)CC-link)