整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          寄存器PLC地址與寄存器modbus協(xié)議地址

          寄存器PLC地址與寄存器modbus協(xié)議地址

          存器PLC地址指存放于控制器中的地址,這些控制器可以是PLC,也可以是觸摸屏,或是文本顯示器。PLC地址一般采用10進制描述,共有5位,其中第一位代碼寄存器類型。第一位數(shù)字和寄存器類型的對應(yīng)關(guān)系如表1所示。PLC地址例如40001、30002等。

          寄存器modbus協(xié)議地址指通信時使用的寄存器地址,在實際編程中,由于寄存器PLC地址前綴的區(qū)分作用,所以只需說明后4位數(shù),而且需轉(zhuǎn)換為4位十六進制地址。例如PLC地址40001對應(yīng)尋址地址0x0000,40002對應(yīng)尋址地址0x0001,寄存器尋址地址一般使用16進制描述。再如,PLC寄存器地址40003對應(yīng)協(xié)議地址0002,PLC寄存器地址30003對應(yīng)協(xié)議地址0002。在實際編程中,由于前綴的區(qū)分作用,所以只需說明后4位數(shù),而且需轉(zhuǎn)換為4位十六進制地址。

          支持 Modbus 協(xié)議的設(shè)備或軟件,使用時用戶直接設(shè)置或看到的應(yīng) 當是 Modbus 數(shù)據(jù)地址。Modbus 地址所訪問的數(shù)據(jù),是通過各種 “功能”讀寫而來。 功能碼是 Modbus 地址的底層。 如果 Modbus 通 信的一方提供的所謂 Modbus 協(xié)議只有功能碼,則需要注意了解此 功能號與 Modbus 地址間的對應(yīng)關(guān)系。

          使用 modbus 地址時應(yīng)注意下述問題:

          1)40001~4xxxx 是美國 modicon 公司和 ge 公司 plc 使用的 modbus 地址,它是基于1的地址,即同類元件的首地址為1。西門子 plc 的 modbus 地址是基于0的地址。

          2)美國的 modbus 地址左起第2位用來表示元件的類型,例如 i0.0的 modbus 地址為010001。 因為數(shù)據(jù)類型已經(jīng)包含在功能碼中了, 西門子的 i0.0的 modbus 地址實際上為000000, i2.0的 modbus 地址為 000016(或十六進制數(shù)16#0010) ,而不是010017。

          3)、無論V寄存器還是M寄存器,里面的不同數(shù)據(jù)類型(VB、VW、VD、MB、MW、MD)都是基于寄存器內(nèi)存總字節(jié)地址為偏移地址。

          4)、在數(shù)據(jù)報文中,所有的modbus地址都是從0開始的。也就是首次出現(xiàn)的數(shù)據(jù)項在報文中的地址為0。比如:(All data addresses in Modbus messages are referenced to zero. The first occurrence of a data item is addressed as item number zero.)

          5)、Modbus地址實際上分為兩種情況。

          第一種情況:PLC作Modbus主站,Modbus地址和PLC手冊里的地址一致,例如作主站的S7-200的MBUS_MSG指令用于向Modbus從站發(fā)送請求消息,和處理從站返回的響應(yīng)消息。要讀取從站(另一臺S7-200)的I0.0開始的地址區(qū)時,它的輸入?yún)?shù)Addr(Modbus地址)為10001。S7-200從站保持寄存器的V區(qū)起始地址為VB200時,要讀取從站VW200開始的V存儲區(qū)時,保持寄存器的地址是40001。

          第二種情況:PLC作從站,PLC不用管什么Modbus地址,等著主站來讀寫它的地址區(qū)就是了。

          主站的計算機軟件(例如DCS或組態(tài)軟件)的編程人員需要編寫實現(xiàn)Modbus通信的程序,首先需要確定Modbus RTU的報文結(jié)構(gòu)。他們一般不熟悉PLC,因此PLC的編程人員往往需要和上位機軟件的編程人員一起來討論Modbus的報文結(jié)構(gòu)。

          最容易出問題的就是報文里Modbus地址與PLC存儲區(qū)地址的對應(yīng)關(guān)系。

          S7 PLC手冊給出的Modbus地址與Modicon公司和GE公司PLC使用的地址相同,是基于1的地址,即同類元件的首地址為1。而西門子PLC采用的是基于0的地址,即同類元件的首地址為0。Modbus報文中西門子PLC的Modbus地址也采用基于0的地址。

          PLC系統(tǒng)手冊中的Modbus地址的最高位用來表示地址區(qū)的類型,例如I0.0的Modbus地址為10001。因為地址區(qū)類型的信息已經(jīng)包含在報文的功能碼中了,報文中S7-200的I0.0的Modbus地址不是10001,而是0。報文中其他地址區(qū)的Modbus地址也應(yīng)按相同的原則處理。例如當S7-200從站保持寄存器的V區(qū)起始地址為VB200時,VW200對應(yīng)的保持寄存器在報文中的Modbus地址為0,而不是40001。

          施耐德plc modbus地址對照表

          000001至000XXX是實際輸出,對應(yīng)%QX0.0-%QXX.X

          010001至010XXX是實際輸入,對應(yīng)%IX0.0-%IXX.X

          030001至030032是模擬量寄存器,對應(yīng)%AIW0,16位一路依次類推

          040001至040XXX是保持寄存器,對應(yīng)%MX0.0-%MXX.X,1對1,要是%MW就對應(yīng)16位,依次類推。施耐德PLC中 W表示字 16位,D表示雙字 32位。比如:%MW10和%MD10。B表示字節(jié) 8位,X表示位。比如:%MB0和%MX0.0~%MX0.7

          %MW10.4

          %MW10是指一個字,一個字分為2個字節(jié),一個字節(jié)8個位,也就是說%MW10中有16個位,從%MW10.0~%MW10.15。

          %QW0.5.1.0.10

          Q是輸出 ,0是機架,5是0號機架的第五個模塊,1是第五號模塊的第一個通道,0是第一個通道的第0個字,10是第0個字的第10個位。

          無論MX、MB、MW、MD都是基于內(nèi)存總字節(jié)地址為偏移地址,也就是以%MB之后的地址為偏移地址。

          施耐德plc寄存器地址對應(yīng)的modubs地址

          寄存器地址 modubs 說明 公式

          %QX1.0 000001.0 開關(guān)量輸出 %QXx.y=000001+x.y

          %IX1.0 010001.0 開關(guān)量輸入 %IXx.y=010001+x.y

          %AIW0 030001 模擬量輸入 %AIWx=030001+x

          %MD40 0400801 保持寄存器 %MDx.y=040001+x*2.y

          %MW50.0 040051.0 保持寄存器 %MWx.y=040001+x.y

          %MX100.0 040051.0 保持寄存器 %MXx.y=040001+x/2.y

          注意:

          1、%MX100.0表示某個字節(jié)地址,因為%MW50這個地址中包含了%MB100、%MB101,%MX100.0其實是%MW50的第0位即40051.0

          2、%MD40表示雙字,%MD40對應(yīng)的首地址是%MW*2,也就是%MW80,%MD40對應(yīng)的modbus地址為0400801


          西門子s7系列plc modbus地址對照表

          例如:地址:40040;對應(yīng)S7200地址:VW78;對應(yīng)S7300地址:DB1.DBW78;

          三菱FX系列PLC modbus地址對照表

          OMRON PLC地址轉(zhuǎn)MODBUS協(xié)議對照表

          將OMRON PLC接入支持MODBUS協(xié)議的上位DCS系統(tǒng)中,通過ASC模塊可滿足用戶的這一需求。具體地址對照關(guān)系參考下面鏈接。

          https://wenku.baidu.com/view/3ff1d16da5e9856a5712601d.html

          臺達PLC寄存器地址與Modbus寄存器地址對照表

          具體地址對照關(guān)系參考下面鏈接。

          https://wenku.baidu.com/view/f884db6d102de2bd97058836.html

          永宏P(guān)LC寄存器Modbus地址表

          具體地址對照關(guān)系參考下面鏈接。

          https://wenku.baidu.com/view/4843e77c30126edb6f1aff00bed5b9f3f90f72c8.html

          信捷PLC寄存器Modbus地址表

          文本標記語言(HTML)是用于在 Internet 上顯示 Web 頁面的主要標記語言。換句話說,網(wǎng)頁由 HTML 組成,用于通過 Web 瀏覽器顯示文本,圖像或其他資源

          使用標記來描述文檔結(jié)構(gòu)和表現(xiàn)形式并通過瀏覽器進行解析,然后把結(jié)果顯示在網(wǎng)頁上. 它是網(wǎng)頁構(gòu)成的基礎(chǔ),你見到的所有網(wǎng)頁都離不開HTML,所以學(xué)習(xí)HTML是基礎(chǔ)中的基礎(chǔ)。


          什么是HTML


          HTML是用來制作網(wǎng)頁的標記語言

          HTML是Hypertext MarkupLanguage的英文縮寫, 即超文本標記語言

          HTML語言是一種標記語言,不需要編譯,直接由瀏 HTML語言是一種標記語言,不需要編譯,直接由瀏覽器執(zhí)行

          HTML文件是一個文本文件,包含了一些HTML元素, HTML文件是一個文本文件,包含了一些HTML元素,標簽等.

          HTML文件必須使用html或htm為文件名后綴

          HTML是大小寫不敏感的,HTML與html是一樣的


          HtmlCSS的關(guān)系


          學(xué)習(xí)web前端開發(fā)基礎(chǔ)技術(shù)需要掌握:HTML、CSS、JavaScript語言。下面我們就來了解下這三門技術(shù)都是用來實現(xiàn)什么的:


          1. HTML是網(wǎng)頁內(nèi)容的載體。內(nèi)容就是網(wǎng)頁制作者放在頁面上想要讓用戶瀏覽的信息,可以包含文字、圖片、視頻等。

          2. CSS樣式是表現(xiàn)(外觀控制)。就像網(wǎng)頁的外衣。比如,標題字體、顏色變化,或為標題加入背景圖片、邊框等。所有這些用來改變內(nèi)容外觀的東西稱之為表現(xiàn)。

          3. JavaScript是用來實現(xiàn)網(wǎng)頁上的特效效果。如:鼠標滑過彈出下拉菜單。或鼠標滑過表格的背景顏色改變。還有焦點新聞(新聞圖片)的輪換。可以這么理解,有動畫的,有交互的一般都是用JavaScript來實現(xiàn)的。

          HTML形象案例理解


          為了簡化對復(fù)雜Internet的理解,暫時把復(fù)雜的Internet抽象成:向女生宿舍發(fā)送信號。

          為了能夠在斷網(wǎng)后繼續(xù)聯(lián)絡(luò)女神,我們買來了電池和開關(guān),然后拉了普通電線線到女神的寢室。女神把小燈泡接在了電線的兩端。

          這時只需要開閉開關(guān),就可以控制女神屋里的燈泡了。

          發(fā)送信號

          關(guān)閉著小燈泡1秒鐘,代表發(fā)送一個0。

          打開了小燈泡1秒鐘,代表發(fā)送一個1。

          此時可以向女神發(fā)送任意二進制內(nèi)容了。

          發(fā)送文本

          我們只希望發(fā)送一個“Good Night”。所以必須想辦法對“Good Night”進行編碼。

          'G','o','o','d'的ASCII編碼是:071,111,111,100,轉(zhuǎn)換成二進制就是:0100 0001 0110 1111 0110 1111 0110 0100

          使用發(fā)送二進制信號的方法發(fā)過去,女神需要自己解碼來閱讀出“Good”。


          發(fā)送富文本

          有一天,我們希望發(fā)送“I miss you”。

          為了表達心意,你希望加粗“you”,并使用紅色的字體發(fā)送“miss”,而這一根簡陋的電線似乎很難理解“加粗”和“紅色”

          于是機智的我們發(fā)送了:I <red>miss</red> <b>you</b>

          同樣機智的女神理解了這件事情。


          你發(fā)明了一種語言

          我們很喜歡這種編碼格式,這是一種標記語言,于是我們稱其為:TGML (To Girl Markup Language)

          平時你使用TGML來和你的女神通信,TGML可以非常好的解決富文本的傳輸問題。

          表白

          終于決定表白了,我們繪制了很美麗的心形圖片,還有兩個按鈕:接受、拒絕。

          兩個按鈕分別會鏈接到 "接受.tgml"和"拒絕.tgml"

          為了描述圖片,我們使用了<img src="pic">

          為了描述按鈕,我們使用了<a href="接受.tgml">

          現(xiàn)在發(fā)送給女神的內(nèi)容,已經(jīng)不只是帶格式的富文本,而是帶鏈接的富文本。

          于是在這個世界上,擁有了一種能夠描述超文本的語言,叫做TGML

          超文本

          描述超文本的方式有很多,例如:HTML,TGML,還有markdown。HTML的誕生是為了描述超文本。

          超文本的用途也很多,例如:描述一個網(wǎng)頁,或者描述一個Word文檔。HTML文件是超文本文件。但是超文本未必是HTML。

          Microsoft Word

          Microsoft Word是Office的一個組件。它同樣代表一個超文本資源。

          如果你解壓一個docx文件并仔細翻一翻,你能找到你剛才寫的作業(yè),是以HTML方式記載著。

          當然,描述超文本還有markdown。所以你可以使用一些工具,比如pandoc,把markdown轉(zhuǎn)換成word。


          故事的結(jié)局

          女神的名字叫瀏覽器,我們的名字叫Web服務(wù)器,女神和我們中間的那根線叫HTTP。

          eb爬取是從Web上收集和解析數(shù)據(jù)的過程。Python社區(qū)已經(jīng)開發(fā)出一些非常強大的web爬取工具。其中,Pandas read_html()是從html表中爬取數(shù)據(jù)的一種快速方便的方法。

          在本文中,你將學(xué)習(xí)Pandas read_html()來處理以下常見問題,并幫助你進行web爬取。

          1.從字符串讀取表

          2.從URL讀取表

          3.從文件讀取表

          4.使用parse_dates分析日期列

          5.使用converters顯式轉(zhuǎn)換類型

          6.多索引、標題和索引列

          7.用match匹配表

          8.使用屬性篩選表

          9.使用缺失值

          請檢查Notebook的源代碼(https://github.com/BindiChen/machine-learning/blob/master/data-analysis/024-pandas-read_html/pandas-read_html.ipynb)。


          1.從字符串中讀取表

          在第一個示例中,我們將從字符串中讀取HTML表。

          html_string="""
          <table>
           <thead>
           <tr>
           <th>date</th>
           <th>name</th>
           <th>year</th>
           <th>cost</th>
           <th>region</th>
           </tr>
           </thead>
           <tbody>
           <tr>
           <td>2020-01-01</td>
           <td>Jenny</td>
           <td>1998</td>
           <td>0.2</td>
           <td>South</td>
           </tr>
           <tr>
           <td>2020-01-02</td>
           <td>Alice</td>
           <td>1992</td>
           <td>-1.34</td>
           <td>East</td>
           </tr>
           <tr>
           <td>2020-01-03</td>
           <td>Tomas</td>
           <td>1982</td>
           <td>1.00023</td>
           <td>South</td>
           </tr>
           </tbody>
          </table>
          """

          要從字符串中讀取表,請執(zhí)行以下操作:

          dfs=pd.read_html(html_string)

          現(xiàn)在,我們得到的結(jié)果不是Pandas數(shù)據(jù)幀而是Python列表。如果使用type()函數(shù),可以看到:

          >>> type(dfs)
          list

          如果要獲取表,可以使用索引訪問它:

          dfs[0]

          結(jié)果看起來很棒。讓我們看看dfs[0].info()的數(shù)據(jù)類型。默認情況下,數(shù)值列被轉(zhuǎn)換為數(shù)值類型,例如,year和cost列分別被轉(zhuǎn)換為int64和float64。

          >>> df[0].info()
          
          RangeIndex: 3 entries, 0 to 2
          Data columns (total 5 columns):
           # Column Non-Null Count Dtype 
          --- ------ -------------- ----- 
           0 date 3 non-null object 
           1 name 3 non-null object 
           2 year 3 non-null int64 
           3 cost 3 non-null float64
           4 region 3 non-null object 
          dtypes: float64(1), int64(1), object(3)
          memory usage: 248.0+ bytes

          2.從URL讀取表

          Pandas read_html()接受URL。讓我們通過一個例子來看看這是如何工作的。

          URL='https://en.wikipedia.org/wiki/London'
          
          dfs=pd.read_html(URL)

          與從字符串讀取相同,它返回一個數(shù)據(jù)幀列表。如果我們運行l(wèi)en(dfs),我們可以從給定的URL得到31個表。

          >>> print(f'Total tables: {len(dfs)}')
          31

          下面是dfs[6]的一個例子:


          3.從文件讀取表

          Pandas read_html()接受一個文件。讓我們通過一個例子來看看這是如何工作的。

          file_path='html_string.txt'
          with open(file_path, 'r') as f:
           dfs=pd.read_html(f.read())
          
          dfs[0]

          注意:以下教程將從字符串中讀取數(shù)據(jù),因為隨著時間的推移,網(wǎng)頁內(nèi)容可能變更。


          4.使用parse_dates分析日期列

          日期列作為對象數(shù)據(jù)類型讀取。要正確讀取日期列,可以使用參數(shù)parse_dates指定日期列的列表。

          >>> dfs=pd.read_html(html_string, parse_dates=['date'])
          >>> dfs[0].info()
          
          RangeIndex: 3 entries, 0 to 2
          Data columns (total 5 columns):
           # Column Non-Null Count Dtype 
          --- ------ -------------- ----- 
           0 date 3 non-null datetime64[ns]
           1 name 3 non-null object 
           2 year 3 non-null int64 
           3 cost 3 non-null float64 
           4 region 3 non-null object 
          dtypes: datetime64[ns](1), float64(1), int64(1), object(2)
          memory usage: 248.0+ bytes

          5.使用converters顯式轉(zhuǎn)換類型

          默認情況下,數(shù)值列被轉(zhuǎn)換為數(shù)值類型,例如,我們看到的year和cost列。但并非所有的數(shù)字文本數(shù)據(jù)都必須是數(shù)字類型,例如,所有值都以零開頭的ID列。

          ID=0001

          此外,有時可能需要顯式地進行類型轉(zhuǎn)換以確保數(shù)據(jù)類型的完整性。對于這些要求,我們可以使用參數(shù)轉(zhuǎn)換器顯式地進行類型轉(zhuǎn)換:

          dfs=pd.read_html(html_string, converters={
           'ID': str,
           'year': int,
           'cost': float,
          })

          6.多索引、標題和索引列

          默認情況下,位于<thead>中的<th>或<td>元素用于形成列索引,如果<thead>中包含多行,則創(chuàng)建一個多索引。

          下面是一個在<thead>中包含多行的HTML表的示例。

          html_string="""
          <table>
           <thead>
           <tr>
           <th colspan="5">Year 2020</th>
           </tr>
           <tr>
           <th>date</th>
           <th>name</th>
           <th>year</th>
           <th>cost</th>
           <th>region</th>
           </tr>
           </thead>
           <tbody>
           <tr>
           <td>2020-01-01</td>
           <td>Jenny</td>
           <td>1998</td>
           <td>1.2</td>
           <td>South</td>
           </tr>
           <tr>
           <td>2020-01-02</td>
           <td>Alice</td>
           <td>1992</td>
           <td>-1.34</td>
           <td>East</td>
           </tr>
           </tbody>
          </table>
          """

          它創(chuàng)建多重索引,因為<thead>中有多行。

          dfs=pd.read_html(html_string)
          dfs[0]

          指定標題行:

          dfs=pd.read_html(html_string, header=1)
          dfs[0]

          指定索引列:

          dfs=pd.read_html(html_string, header=1, index_col=0)
          dfs[0]

          7.用match匹配表

          參數(shù)匹配采用字符串或正則表達式。該值默認為.+(匹配任何非空字符串),并將返回所有表。

          我們通過一個例子來看看這是如何工作的。

          html_string="""
          <table id="report">
           <caption>2020 report</caption>
           <thead>
           <tr>
           <th>date</th>
           <th>name</th>
           </tr>
           </thead>
           <tbody>
           <tr>
           <td>2020-01-01</td>
           <td>Jenny</td>
           </tr>
           <tr>
           <td>2020-01-02</td>
           <td>Alice</td>
           </tr>
           </tbody>
          </table>
          
          <table>
           <caption>Average income</caption>
           <thead>
           <tr>
           <th>name</th>
           <th>income</th>
           </tr>
           </thead>
           <tbody>
           <tr>
           <td>Tom</td>
           <td>200</td>
           </tr>
           <tr>
           <td>James</td>
           <td>300</td>
           </tr>
           </tbody>
          </table>
          """

          要讀取包含特定文本的表:

          # 標題中的文本
          dfs=pd.read_html(html_string, match='2020 report')
          
          # 表格單元格中的文本
          dfs=pd.read_html(html_string, match='James')

          8.使用屬性篩選表

          參數(shù)attrs接受任何有效的HTML標記屬性的字典來篩選表。例如:

          dfs=pd.read_html(html_string, attrs={'id': 'report'})

          id是有效的HTML標記屬性。


          9.使用缺失值

          默認情況下,所有空字符串都被視為缺失值,并作為NaN讀取。

          下面是一個HTML表格的示例,其中的< td >單元格中有一些空字符串。

          html_string="""
          <table>
           <tr>
           <th>date</th>
           <th>name</th>
           <th>year</th>
           <th>cost</th>
           <th>region</th>
           </tr>
           <tr>
           <td>2020-01-01</td>
           <td>Jenny</td>
           <td>1998</td>
           <td>1.2</td>
           <td>South</td>
           </tr>
           <tr>
           <td>2020-01-02</td>
           <td>Alice</td>
           <td>1992</td>
           <td></td>
           <td>East</td>
           </tr>
           <tr>
           <td>2020-01-03</td>
           <td>Tomas</td>
           <td>1982</td>
           <td></td>
           <td>South</td>
           </tr>
          </table>
          """

          以默認設(shè)置讀取。

          dfs=pd.read_html(html_string)
          dfs[0]

          為了保留這些空字符串,我們可以將參數(shù)keep_default_na設(shè)置為False。

          dfs=pd.read_html(html_string, keep_default_na=False)

          有時,對于缺少的值,你可能有其他字符表示法。如果我們知道什么類型的字符用作表中的缺失值,我們可以使用na_values參數(shù)處理它們:

          dfs=pd.read_html(html_string, na_values=['?', '&'])

          當數(shù)據(jù)幀已經(jīng)創(chuàng)建好后,我們可以使用pandas replace()函數(shù)來處理這些值:

          df_clean=dfs[0].replace({ "?": np.nan, "&": np.nan })

          結(jié)論

          Pandas read_html()函數(shù)是一種快速方便地從html表中獲取數(shù)據(jù)的方法。

          我希望本文能幫助你節(jié)省從HTML表中刪除數(shù)據(jù)的時間。建議你查看read_html()API的文檔,并了解可以做的其他事情。

          謝謝你的閱讀。請查看Notebook的源代碼,如果你對機器學(xué)習(xí)的實際方面感興趣,請繼續(xù)關(guān)注:https://github.com/BindiChen/machine-learning/blob/master/data-analysis/024-pandas-read_html/pandas-read_html.ipynb。


          主站蜘蛛池模板: 亚洲AV成人一区二区三区在线看| 麻豆AV无码精品一区二区 | 国产一区二区三区播放| 亚洲乱码日产一区三区 | 日本激情一区二区三区| 2021国产精品视频一区| 亚洲一区二区三区播放在线| 国产成人综合精品一区| 一区免费在线观看| 曰韩人妻无码一区二区三区综合部| 鲁丝片一区二区三区免费| 久久无码AV一区二区三区| 香蕉久久AⅤ一区二区三区| 在线观看精品视频一区二区三区| 97精品国产一区二区三区| 午夜视频在线观看一区二区| 精品久久久久久中文字幕一区| 日韩伦理一区二区| 精品女同一区二区三区在线 | 精品国产一区AV天美传媒| 色婷婷综合久久久久中文一区二区| 亚洲V无码一区二区三区四区观看| 一区二区视频在线| 乱子伦一区二区三区| 冲田杏梨AV一区二区三区| 国产一区美女视频| 韩国福利一区二区三区高清视频| 无码精品人妻一区二区三区中 | 亚洲色无码一区二区三区| 91video国产一区| 日韩AV无码久久一区二区| 精品人伦一区二区三区潘金莲| 国产精品一级香蕉一区| 国产AⅤ精品一区二区三区久久| 99精品久久精品一区二区| 夜精品a一区二区三区| 久久精品一区二区三区日韩| 国产精品亚洲专区一区| 亚洲永久无码3D动漫一区| 国产一区美女视频| 无码播放一区二区三区|