2016年4月21日 星期四

FX2N-2AD 模組使用方式

FX2N-2AD 模組使用方式

原廠的資料:FX2N-2AD

FX2N-2AD是2 port的類比輸比模組

但我們要看的幾個重點:

1.硬體接線:(手冊第一頁)


如果是類比電壓輸入,只要接VIN 跟COM
但如果是類比電流輸入,就一端接COM,另一端接到VIN,再並到IIN。

其他電流輸入的接法,曾使用過的AD模組,幾乎都是要把VIN 跟IIN並接。






2.設定方式:


在模組記憶體#0 的低8位跟 跟#1 的低4位為,為類比轉換後的數值存放區。
簡單講,就是我們要讀的區域啦。

模組記憶體#17 是設定通道,及啟用(ON/OFF)的地方。

3.PLC範例:
手冊也有附範例如下:


先介紹:TO 指令
TO指令的編程格式: TO K1 K12 D0 K2
*K1:特殊模塊的地址編號,只能用數值,範圍:0---7
*K12:特殊模塊的緩衝存儲器起始地址編號,只能用數值,範圍:0---32767
*D0:源寄存器起始地址編號,可以用T,C,D數值和位元件組合如K4X0
*K2:傳送的點數,只能用數值。範圍:1---32767

再介紹 :FROM指令
讀出指令FROM的編程格式:FROM K1 K29 D0 K2 
*K1:特殊模塊的地址編號,只能用數值,範圍:0---7 
*K29:特殊模塊的緩衝存儲器起始地址編號,只能用數值,範圍:0---32767 
*D0:目標寄存器起始地址編號,可以用T,C,D和除X外的位元件組合如K4Y0 
*K2:傳送的點數,只能用數值。範圍:1---32767

黃框是設定通道1及把資料讀回D100的位置。
第一行就選定到通道1
第二行,是啟用通道1,開始轉換(類比轉數位)。
第三行是把數據寫入到M100~M115。
為什麼不直接搬到D值!?
因為數據是分別放在#0的低8位元,跟#1的低4位元,直接搬到D,還是要處理過。

而原廠提供的寫法:
K2M100 是指 M100~M107
K1M100 是指 M100~M103  (K1 代表4個位元)
如果是
FROM K0 K0 K2M100 K1
就是把#0的低8位元,放到M100~M107
 .
如果是
FROM K0 K0 K2M100 K2   <=K2代表搬2筆。
把#0的低8位元,放到M100~M107
把#1的低8位元,放到M108~M115
很巧妙的把高8位元濾掉,而且串在一起。

最終再把 M100~M115搬到D100,
就可以直接呈現我們需要的數值了。
(這邊K4M100個人覺得是K3M100就夠了,因為只有12個位元,有用)


4.調整:(偏移及增益調整)
在模塊上,有兩個旋鈕,可以調整偏移(OFFSET)跟增益GAIN)
當外部裝置輸出為0時,讀到的不是0,就應該調整偏移(OFFSET)。
出廠預設是0~10v時,D100會讀到4000。(12bit的解析度,4095為最大值)
但如果10v時,不是4000,就要調整增益(GAIN)。

如果我們的輸出只有0~5V,也可以在輸出5V時,利用增益,調整到4000的輸出。
此時的解析就提高了。


5.一些使用經驗:
A.如果是電流輸入,記得,要把VIN 跟 IIN 短路。
B.客戶一定會問,為什麼讀到的數值跟錶頭有誤差!?
是錶頭輸出的類比數值,本身的直線性,就是有一定的誤差。如下圖:

其中F.S,是的是全刻度額定範圍 full-scale,
如果你的錶是0-1M Pa(最大值),誤差是0.7%F.S,那誤差值=1M Pa x 0.7%=0.007M Pa=7k Pa






46 則留言:

  1. 如果PLC是FX3U,用RD3A指令就可以直接讀AD的數值

    範例
    LD M8000
    RD3A K0 K21 D100

    範例說明
    K0是右側的第一顆外掛模組
    K21是CH1 (如果接CH2就改成K22)
    D100是AD數值的暫存器

    回覆刪除
    回覆
    1. 作者已經移除這則留言。

      刪除
    2. 所以請問fx2n-2ad可以連接fx3u嗎?
      那如果可以,使用fx3u-4ad會比使用fx2n-2ad還方便嗎?

      刪除
    3. 可以連FX3U,在模組資訊中有適用的PLC。但fx2n-2ad好像停產了

      刪除
  2. 第三行是把數據寫入到M100~M114。
    [from k0 k0 k2m100 k2],此程序不是代表將fx-2ad轉換為數位位元的低8位元與高4位元分別傳送到plc的M100~M107與M108~M115,合起來剛好是一個M100~M115組合字元件(16bit),作者所敘的M100~M114似乎???????
    為什麼不直接搬到D值!?
    所處理的為bit的資料,不傳送到M100~M115組合字元件,而傳送到d資料儲存器,那就需要使用兩個d資料儲存器儲存,兩筆資料原本就該是一體的,那終究還是要轉換回組合字元件,那不就把原本簡單的事複雜化????
    小弟個人淺見,歡迎指教!

    回覆刪除
    回覆
    1. 1.應該是我寫錯了,8+4 是12沒錯。謝謝指正。

      2.你的意思應該是直接傳到兩個D吧!?
      因為原本的AD模組就拆開了,放在兩個D的低8位元,
      可能要問原廠為什這麼設計?

      為什麼放在BIT,而不是兩個D,
      你可以看看要怎麼把兩個D的低8位組在一起?
      會比現在的方法簡單嗎?

      我印象有有特殊指令可以合成一起,
      不然就是要X256再相加

      PLC寫法沒有固定,自已能理解的就是好方法。

      刪除
    2. 雖然只用到12個位元,但程式是用到M100-M115,
      我還是改成程式的原義。

      刪除
  3. 陳老師您好,我在網上看到一試題如下,答案為 (3),請問為甚麼?

    使用A/D模組,若實際之信號為5~19mA,則參數中之GAIN需調整為(1) 38000 (2)9500 (3)19000 (4)5000。

    ============================
    補充:我由台達 04AD-H2 的規格書中看到的是:
    類比輸入範圍 ±10V ±20mA
    數位轉換範圍 ±8,000 ±4,000
    參照網路說法,如果0V不對應0時,調整Offset;如果10V沒對應10時,則調整GAIN。使諸一致)

    請問是否因為要將 0~19mA 調到對應的 0~19,所以算出來增益為 19000 ???
    好像又不太對咧~~~


    回覆刪除
    回覆
    1. 這個A/D、D/A 類比模組 各家的調法不太一樣,很難回答。
      如果依台達的調法,是錯的~也許其他家裝置是對的。

      但調到最後,會發現還不是很線性,因為外部裝置的線性度很差。

      刪除
    2. 了解了,增益係依據各家的轉換特性曲線來進行調整。。。
      然而,請問陳老師,在實務上是否有方法與是否有必要要解決外部裝置的非線性問題呢?
      非常謝謝陳老師您的指導與分享!!!

      刪除
    3. 通訊型~可解非線性問題
      例:MODBUS通訊,可以選的裝置就很多

      要不要解,是看客戶在乎的程度。

      一般不貴的機台沒差,貴的機台,客戶會在乎。

      如果一般錶頭都是在固定的範圍的話,可以透過GAIN來微調,使該範圍會比較準,
      但其他範圍會跑掉一點,因為不用常,跑掉多一點也看不到。

      刪除
    4. 觀念我已清楚,非常感謝陳老師的熱心指導。
      我會循此邏輯去找些資料進行研讀~~~

      刪除
  4. 請問2DA和2AD,假設D100為扭力設定D102為速度設定,如何寫

    回覆刪除
    回覆
    1. 2DA 跟 2AD 是什麼功能先搞清楚吧!

      2AD是 Analog to Digital 是輸入模組,將類比電壓/電流,轉成 數值 給PLC讀取。
      2DA是 Digital to Analog 將PLC數值,轉成 類比電壓/電流 給外部信號

      以上都跟扭力 速度無關。

      是需要配合 外部的馬達設定才能達到,你的要求。

      刪除
  5. 請問老師,因為不懂DA/AD.模組的寫法(To k0 k0 H1100 K1)(FROM k0 k5 D100 k4)這寫法是甚麼意思假設我D100值為20000,2DA如何讓它輸出電壓

    回覆刪除
    回覆
    1. 1.請先看FX2N-2DA的手冊:才能讓我們說一致:
      2DA手冊如下:http://eleceng.dit.ie/jmcgrory/FXPLC/FX2n_PLC_Manual%202DA.pdf
      (或提供你看的資料)

      其中:「6. Allocation of buffer memory (BFM)」
      TO/FROM指令,就是在對這個區塊做讀寫。
      就是指令介紹中的「特殊模塊的緩衝存儲器起始地址編號」

      =====
      TO指令的編程格式: TO K1 K12 D0 K2
      *K1:特殊模塊的地址編號,只能用數值,範圍:0---7
      *K12:特殊模塊的緩衝存儲器起始地址編號,只能用數值,範圍:0---32767
      *D0:源寄存器起始地址編號,可以用T,C,D數值和位元件組合如K4X0
      *K2:傳送的點數,只能用數值。範圍:1---32767
      =====================

      #16是輸出的數值,只有低8位元有效
      #17是輸出的開關:

      BFM#17:
      b0•••The D/A conversion of CH2 begins by changing of 1→0.
      b1•••The D/A conversion of CH1 begins by changing of 1→0.
      b2•••The subordinate position eight bit data for the D/A conversion is held by changing of 1→0.
      =====================

      簡單來說:
      1.使用TO指令對 BFM#16 寫入資料(注意只有低8位元,超過再處理)
      2.使用TO指令對 BFM#17 再寫入2(CH2) 或 4(CH1) 就會輸出。

      其他程式都在處理流程及數值。

      刪除
    2. 老師依照這個問題,照著手冊提供的程式下去跑,我人機D100是要指定轉速,讓客人在D100輸入值2000,那程式跑出來丟給伺服它就會跑轉速2000嗎??還是需要PLC側做數值轉換呢?

      刪除
    3. 照這個範例,是可以把D100的值內容輸出。
      1.D100的值,最大好像是4096,輸出10V,所以2000是5V左右。

      2.如果伺服收到5V,會轉2000,那就成立

      不然就是需要轉換。

      刪除
    4. 感謝,那我瞭解了

      刪除
    5. 請教老師,上面完成後馬達是正轉,假如要反轉不設定伺服控制器的話,要如何讓值變成負值呢?

      刪除
    6. d/a輸出馬達會正轉,如果要反轉就是輸出反向電壓。
      簡單來說就是把D的值反向。
      但要注意輸出電壓是不是有反向。

      如果沒有反向,可能是設定到輸出只能0-10V,
      沒有正負。要改一下是±10V

      伺服驅動器一般都可接受±10V,去查一下手冊

      刪除
    7. 作者已經移除這則留言。

      刪除
    8. 我剛看了手冊,這2DA不能輸出負值,所以要改驅動器的旋轉方向。
      或是利用output來切換正反轉,D/A控制轉速

      如果D值輸入負的,還是可以正常轉換,
      因為1個D是16位元,加上D原本就可正負,所以最高位元是正負符號。

      刪除
  6. 請問可否舉一個 WR3A 使用範例

    回覆刪除
    回覆
    1. FX1N, FX2N (V3.00 or later), FX2NC (V3.00 or later), FX3G, FX3GC, FX3U or FX3UC series PLC

      註:以上版本的PLC才支援這個指令。

      WR3A K0 K1 D20
      K0:2AD模塊版號
      K1:通道選擇 Ch1、Ch2
      D20:寫入的數值

      基本上這個指令就取代,手冊裡的範例程式了。
      手冊

      http://dl.mitsubishielectric.com/dl/fa/document/manual/plc_fx/jy992d74901/jy992d74901g.pdf

      刪除
    2. 請教老師,我自己使用上面程式來測試,D20這個值一樣是使用0~4000來讓模組自行換算,還是得自己換算成要要丟入的值呢?

      刪除
    3. 抓到問題了,值可以一樣是丟0~4000,但是通道部分參考上面的RD3A把通道改成K21跟K22就完成了

      刪除
    4. 1. 16位运算(RD3A)
      m1· : 特殊模块编号
      FX3G·FX3GC·FX3U·FX3UC(D、DS、DSS)系列: K0~K7
      FX3UC-32MT-LT(-2): K1~K7(K0为内置CC-Link/LT主站。)
      m2· : 模拟量输入通道编号
      FX0N-3A*1 : K1(通道1),K2(通道2)
      FX2N-2AD : K21(通道1),K22(通道2)
      : 读出数据
      保存从模拟量模块中读出的数值。
      FX0N-3A*1 : 0~255(8位)
      FX2N-2AD : 0~4095(12位)
      *1. FX0N-3A仅支持FX3U·FX3UC可编程控制器。

      刪除
  7. 陳老師 可否幫忙寫一下
    台達DOPEX2 類比輸入 4到20ma的
    程式

    回覆刪除
    回覆
    1. 我沒寫過,但看這個影片,應該是設定D1115為4-20ma
      從D1110~D1114可以讀取到A/D值

      切換時,不確認是否要關閉通道。(D1114)
      還有相關的裝置:M1180 立即讀取 AD 數值(僅適用於 EX2/SX2 機種)應該不是必要的

      https://www.youtube.com/watch?v=ovVJk7PBAjU&t=386s
      可以參考這影片



      手冊:第2-68頁:
      http://www.deltaww.com/filecenter/Products/download/06/060301/Manual/DELTA_IA-PLC_DVP-ES2-EX2-SS2-SA2-SX2-SE-TP_PM_TC_20140829.pdf


      D1115裝置編號 功 能 說 明
      20EX2/SX2 機種類比輸入輸出模式設定 (預設為 H’0)
      bit0~bit5 代表電壓/電流功能選擇, 0 為電壓, 1 為電流 (預設為電壓)
      bit0~bit3 代表類比輸入 AD0~AD3
      bit4, bit5 代表類比輸出 DA0, DA1
      bit8~ bit 13 為電流模式選擇
      bit8~ bit11 代表 AD0~AD3,0 為-20mA~20mA, 1 為 4~20mA
      bit12, bit13 分別表示 DA0, DA1,0 為 0~20mA, 1 為 4~20

      刪除
  8. 為什麼fx2ad選擇電流輸入接法,plc按照標準寫法,暫存器讀到415~2020,而不是0~4000

    回覆刪除
  9. 引前頁若選擇電壓輸入接法,暫存器獨到的值為0~4000

    回覆刪除
  10. 再次請問,若FX2AD出廠值預設是輸入電壓0~10V,改變成電流,程式需要設定嗎

    回覆刪除
    回覆
    1. 請仔細請一下 D1115的說明:
      bit0-5是選擇電壓或電流,預設為電壓
      bit8~ bit11 代表 AD0~AD3,0 為-20mA~20mA, 1 為 4~20mA

      D1115裝置編號 功 能 說 明
      20EX2/SX2 機種類比輸入輸出模式設定 (預設為 H’0)
      bit0~bit5 代表電壓/電流功能選擇, 0 為電壓, 1 為電流 (預設為電壓)
      bit0~bit3 代表類比輸入 AD0~AD3
      bit4, bit5 代表類比輸出 DA0, DA1
      bit8~ bit 13 為電流模式選擇
      bit8~ bit11 代表 AD0~AD3,0 為-20mA~20mA, 1 為 4~20mA
      bit12, bit13 分別表示 DA0, DA1,0 為 0~20mA, 1 為 4~20

      刪除
    2. FX2AD出廠值預設是輸入電壓0~10V,改變成電流,程式需要設定嗎

      FX2AD是沒有參數可以切換的,所以需要靠OFFSET & GAIN來把電流調成4-20ma,或0-5v
      而且兩組Channel 是共用的,代表只能是0-10v、或0-5v,4-20ma其中之一。

      刪除
  11. 三菱fx2n-2ad有d1115特殊設定嗎,謝謝

    回覆刪除
    回覆
    1. 我回錯人了 ,D1115是台達的

      刪除
    2. 老師 還是看不懂 可以寫1個4到20ma輸入嗎

      刪除
    3. 我也看不懂你問的是什麼? 有人問台達的有人問三菱?
      什麼產品?

      刪除
  12. 陳老師,可否請問您

    1.FX5U-8AD 這款的類比模組要怎麼做才能使PLC讀到類比訊號呢
    看了5U的手冊真的是一頭霧水…
    配線 V+ 接正極,COM接-級了
    程式上不太懂要KEY哪些指令才能使我指定的D100出現電壓訊號(我是用電池去送外部接點1.5V)
    但我的D100永遠只顯示0
    2.TO K0 K17 H0 K1
    這段意思是 指定我的AD模組#1,並將16進制0000的第1格數字0,傳送到BFM#17裡嗎??
    3.上面寫的教學FX5U是否能用呢??






    回覆刪除
    回覆
    1. 因為我不知道你卡在那個步驟:
      請提供你看的手冊。再說到那個步驟。

      ==============
      不然依我看的資料。
      http://www.meltrade.hu/dokumentumok/1._Programozhat%C3%B3_logikai_vez%C3%A9rl%C5%91k_(PLC)/1.3._Kompakt_PLC_-_MELSEC_FX5/1.3.a._Programoz%C3%B3i_le%C3%ADr%C3%A1sok/FX5_-_User's_Manual_(Analog_Control_-_Intelligent_function_module)_081802ENG-A_(04.17).pdf



      MELSEC iQ-F
      FX5 User's Manual
      (Analog Control - Intelligent function module)

      1. 7.2章節,要先設定模組資料 ,(第8章有範例。預設是off,要設定輸入範圍後,才會啟動enable)

      2.第94頁,有程式範例,用的是mov u0\g400 d100 將模組資料寫到d100
      當然前面的一條件都要成立。
      例:ready U1\G69, b0
      CH1 COMPLETE FLAG U1\G42, b0
      Conversion completed flag U1\G69, b0
      Operating condition setting completed flag U1\G69, b9

      要說一下,那些條件沒成立,才好找問題

      刪除
  13. 老師您好:

    想請教一下
    2AD可以同時讀取兩個通道的值嗎?
    範例程式的寫法,他是透過X0跟X1去做ch的切換
    那如果今天把他整合成一個
    就是把X0跟X1替換成2個M8000這樣可行嗎?

    回覆刪除