䟋ずしおModbusプロトコルを䜿甚したロヌド可胜なZabbixモゞュヌルの䜜成

Zabbix 2.2のバヌゞョンでも、システムの機胜を新しいレベルで拡匵できるロヌド可胜なモゞュヌルが远加されたした。 「なぜこれが必芁なのですか」ず、Zabbixからい぀でも倖郚のスクリプトずプログラムを実行できるので、あなたは尋ねたす。 もちろん、これは䞻に速床です。Zabbix自䜓のようなモゞュヌルはCで蚘述されおおり、各調査で実行する必芁がある倖郚プログラムずは異なり、できるだけ速く正しく動䜜したす。 倚くの人はコヌドを曞く必芁性に恐れるかもしれたせんが、今日はすべおがそれほど耇雑ではないこずをお芋せしたいず思いたす。

たずえば、Zabbixが広く䜿甚されおいる産業オヌトメヌションプロトコルであるModbusで動䜜するデバむスから情報を収集し、枩床センサヌの読み取り倀を取埗し、Mercury 230メヌタヌから電気パラメヌタヌを取埗できるようにするモゞュヌルを䜜成したす。 share.zabbix.comポヌタル。ナヌザヌはZabbixでの経隓を共有できたす。



Modbusに぀いお䞀蚀


Modbusは、産業オヌトメヌションネットワヌク工堎、ワヌクショップ、その他の産業斜蚭、さたざたな゚ンゞニアリングシステム-Modbusで぀たずくこずができるあらゆる堎所で䜿甚される非垞に䞀般的なプロトコルです。 このプロトコルは1979幎にModiconによっお開発され、その埌数十幎にわたっお、その利点のおかげでModbusは膚倧な数の異なるデバむスに実装されたした。

シンプルさ
Modbusは非垞にシンプルです。 これにより、最も簡単で安䟡な鉄片で実行および実装できたす。 たた、開発者が゜リュヌションで䜿甚するこずを劚げたせん。

むヌサネットサポヌト
Modbusは、産業斜蚭を含むむヌサネットネットワヌクの普及に間に合うように準備され、珟圚ではシリアルラむンRS-232、RS-485Modbus RTU / ASCIIだけでなく、TCP / IPModbus TCPでも動䜜したす。 。

開攟性
プロトコルのすべおの仕様はオヌプンであり、誰に察しおもロむダリティを支払うこずなく、意思決定に䜿甚したいすべおの人がアクセスできたす。

次に、Modbusがどのように機胜するかに぀いお簡単に説明したす。 デバむスのメモリ内のデヌタぞのアクセスは、特別な論理テヌブル ディスクリヌト入力、コむル、入力レゞスタ、保持レゞスタを介しお実行されたす。 最初の2぀のデヌタはシングルビットの圢匏で、最埌の2぀のデヌタは16ビットワヌドの圢匏で衚瀺されたす。
テヌブルデヌタ型アクセス
離散入力1ビット読み取り専甚
コむル1ビット読み曞き
入力レゞスタ16ビット読み取り専甚
保持レゞスタ16ビット読み曞き

最初の2぀の衚は、単玔な離散倀を扱うために䜿甚できたす「オヌプンクロヌズ」、「事故ではなく事故」など。 たた、 入力および保持レゞスタは他のすべおに䜿甚できたす。 さらに、デヌタが16ビットに収たらない堎合の問題は、2぀の隣接するレゞスタを䜿甚するこずで簡単に解決できたす。 したがっお、32ビットのfloatたたはlongで䜜業できたす。
Modbusデヌタ芁玠は、すべおのテヌブルで0〜65535の゚ンドツヌ゚ンドアドレッシングを通じおアクセスできたす。

デヌタぞのアクセスは重耇しない堎合があり、各テヌブルは個別のメモリブロックに぀ながりたす。



したがっお、耇数のテヌブルを䜿甚しお同じデヌタにアクセスできたす。



たずえば、16個のドラむ接点を持぀コントロヌラヌがあり、珟圚どのように開いおいるか閉じおいるかを知りたい堎合、 次に、 入力レゞスタテヌブルを䜿甚しお16個すべおの連絡先の倀を䞀床に取埗するか、 入力ディスクリヌトテヌブルを䜿甚しおすべおの連絡先を順番に読み取りたす。

ModbusデバむスがシリアルラむンRS-485䞊にある堎合、Modbusの各デバむスには固有のアドレススレヌブID、1〜247があり、問い合わせデバむスは垞に1であり、マスタヌず呌ばれたす。 Modbus TCPデバむスの堎合、IPアドレスで十分です。

ここで将来のモゞュヌルでZabbixをホストしたすか

コンバヌタヌを介しおコントロヌラヌでRS-485ネットワヌクに接続するか、Modbus TCPを盎接サポヌトするデバむスを操䜜するこずにより、Modbusマスタヌずしお配眮できたす。



環境蚭定


ZabbixでModbusモゞュヌルをテストするのに圹立぀小さなテストベンチを準備したす。 囜内メヌカヌAriesの機噚を䜿甚したす。Ariesの入出力デバむスにより、枩床、さたざたな個別のセンサヌ、および電源パラメヌタヌを制埡できたす。 ボヌナスずしお、DU-1M MAX-Logicコンバヌタヌを䜿甚しお䞀般的な䞉盞Mercury 230R電気メヌタヌから読み取り倀を取埗したす。これにより、組み蟌みMercuryプロトコルをModbusに倉換できたす。 これらすべおのデバむスはRS-485バスに接続されおおり、ZabbixはRS232 / RS485コンバヌタを介しおマスタヌずしおアクセスできたす。

Modbus操䜜甚のAriesモゞュヌルの構成に぀いおは、デバむスのドキュメントに蚘茉されおいたす。 䞀般的に、ここであなたがする必芁があるものです
Ariesコンフィギュレヌタヌを介しお、RS232 / RS485コンバヌタヌを介しおすべおのモゞュヌルに順番に接続したす。


DU-1M MAX-LogicMercury 230 の堎合、すべおがもう少し耇雑ですたず、DU-1Mの指瀺に泚意深く埓っお、Mercury 230カりンタヌに接続し、次にAriesのような居心地の良いグラフィカルコンフィギュレヌタヌの代わりに 、コン゜ヌルナヌティリティヌmodpollを䜿甚しお、コンフィギュレヌションレゞスタにコマンドを送信したすカりンタヌずペアリングしたすえっず。

結果は次のずおりです。



そしお、これがラむブの様子です



スタンドを組み立おたら 、 modpollを䜿甚しお操䜜性をテストしたす 。たずえば、枩床センサヌをMV110-2Aに接続し、デバむスのドキュメントに蚘茉されおいるように、レゞスタ10を介しお問い合わせたす。



たたは、T1料金で氎星カりンタヌの゚ネルギヌ消費を削陀したす。



ご芧のずおり、接続があり、デヌタが収集されおいたす。 このデヌタをZabbixに配信する時が来たした。

モゞュヌルの䜜成


Zabbix甚のモゞュヌルを曞く方法は

UserParameterを介しおスクリプトを実行する堎合のように、最初にZabbix自䜓のデヌタ芁玠キヌがどのように芋えるかを考える必芁がありたす。 これから始めたしょう、私たちの堎合、それはそのようなキヌになりたす

modbus_read_registers[ <connection>, <slave_id>, <reg_to_read>, <modbus_function>, [<datatype>],[<endiannes>],[<first_reg>] ] 

このキヌ内で、4぀の必須パラメヌタヌず3぀のオプションパラメヌタヌを枡したす。


それで、圌らは思い぀いたので、モゞュヌルに盎接行きたしょう。 実際、Modbusレゞスタからデヌタを収集するための関数を䜜成し、次の関数から特別なZabbixむンタヌフェヌスを远加する必芁がありたす。
2぀の必須機胜

 int zbx_module_api_version(void); int zbx_module_init(void); 

たた、3぀のオプション

 ZBX_METRIC *zbx_module_item_list(void); void zbx_module_item_timeout(int timeout); int zbx_module_uninit(void); 

しかし、 dummy.cの䟋から完党にコピヌしたす。これは、Zabbixのドキュメントに蚘茉されおいたす。 優れた、時間ず゚ネルギヌの節玄、前進したす。

そしお、問題は、コレクション関数自䜓をどのように曞くかです。 ちなみに、次のように呌び出したしょう。

 int zbx_modbus_read_registers(AGENT_REQUEST *request, AGENT_RESULT *result) 

そしお、ここでの䜜業は最小限に抑えられたす。これは、Modbusプロトコルの実装を損なわず、ホむヌルを再発明しないために、Cラむブラリを䜿甚するためです 。

libmodbusむンタヌフェヌスを䜿甚しお、Zabbixからの受信デヌタを怜蚌し、 libmodbusからポヌリング関数を実行し 、受信した倀をZabbixデヌタ型に倉換しお 返すだけです。 さお、たたぱラヌを返したす。

私が芋逃した詳现の残りの郚分は、 ここで芋぀けるこずができたす 。

もう䞀床、重芁な点をいく぀か匷調したす。

1関数が正垞に実行されるず、結果はマクロを介しお* resultに栌玍されたす。

䟋

 SET_DBL_RESULT(result, modbus_get_float(temp_arr)); 

たた、関数自䜓はSYSINFO_RET_OKを返す必芁がありたす。

2䜕か問題が発生した堎合は、 SYSINFO_RET_FAILを返す必芁があり、 *結果に、Zabbix Webむンタヌフェヌスで確認できる゚ラヌメッセヌゞを入力したす。

 SET_MSG_RESULT(result, strdup("Check datatype provided.")) 



3すべおの受信パラメヌタを怜蚌するこずを忘れないこずが非垞に重芁です。 そうしないず、モゞュヌルのクラッシュによりZabbixサヌバヌたたぱヌゞェントがクラッシュしたす。

4Zabbixは倚くのポヌリングプロセスを䞊行しお実行したす。 したがっお、同時アクセスを蚱容しないリ゜ヌスこの堎合はファむルたたはシリアルポヌトを䜿甚する堎合は、このアクセスを自分で制埡する必芁がありたす。 セマフォを䜿甚しおこれを行いたしたが、これはタスクを倚少耇雑にしたすが、幞いなこずにこれは必ずしも必芁ではありたせん。

5倖郚のlibmodbusラむブラリが䜿甚されるため、Zabbixモゞュヌルが䜿甚されるシステムにむンストヌルする必芁がありたす。

 wget http://libmodbus.org/releases/libmodbus-3.1.2.tar.gz tar zxvpf libmodbus-3.1.2.tar.gz cd libmodbus-3.1.2 ./configure make make install ldconfig 

その結果、モゞュヌル甚に次のコヌドが埗られたした。

それをコンパむルし、結果の.soファむルをZabbixサヌバヌたたはZabbix゚ヌゞェントに远加したす。 モゞュヌルはZabbix自䜓のいく぀かのヘッダヌに䟝存するこずを芚えおおくこずが重芁です。 したがっお、Zabbixずは別にすべおを収集する堎合は、Zabbix゜ヌスから少なくずもzbxtypes.h、module.h、sysinc.hを自分にコピヌしたす。 たあ、それだけです。

スタンドでのテスト


たずえば、コンパむルされたファむルlibzbxmodbus.soが Zabbixサヌバヌにアップロヌドされたす。これのために、Zabbix蚭定ファむルに远加したす。

 LoadModulePath = /usr/local/lib LoadModule = libzbxmodbus.so 

シリアルポヌトにアクセスするために、 zabbixナヌザヌをダむダルアりトグルヌプに远加したす

 usermod -a -G dialout zabbix 

...そしお、Zabbixを再起動したす。

 /etc/init.d/zabbix-server restart 

すべおが正垞に再起動したら、Zabbixに移動しおModbusデバむス甚のテンプレヌトを䜜成したす。

テンプレヌトを䜜成


たず、枩床センサヌを読み取るためにMB110-224.2A のデヌタ芁玠を䜜成したす 。



キヌはどこですか

 modbus_read_registers[{$MODBUS_PORT},{$MODBUS_SLAVE},10,3,f,1,0] 


ここでパラメヌタを遞択する方法の詳现。 さらに、以䞋を指定する必芁がありたす。

皮類
簡単なチェック -モゞュヌルがZabbixサヌバヌおよびZabbixプロキシにロヌドされおいる堎合、
Zabbix゚ヌゞェント -モゞュヌルがZabbix゚ヌゞェントにロヌドされおいる堎合

情報の皮類 
私たちの堎合、それはNumericfloatです。

ホスト䜜成


ホストを䜜成し、合意したずおりにマクロを定矩したす。



そしお、䜜成したテンプレヌトを添付したす。



デヌタ


[最近のデヌタ]セクションに移動し、センサヌから収集したデヌタの監芖を開始できたす。



そしお、残りのデバむスレゞスタのテンプレヌトを䜜成するこずにより、次の図を取埗したす。



それでは、 トリガヌ 、 グラフ 、 画面をテンプレヌトで自由に䜜成できたす。

おわりに


ダりンロヌド可胜なモゞュヌルを䜿甚しお、Zabbix開発者は、Zabbixで非垞に高速で統合された拡匵機胜を䜜成するためのむンタヌフェむスを提䟛しおくれたした。 はい、可胜性はこれたでのずころ新しいタむプのデヌタ芁玠を䜜成するこずによっお制限されおおり、たずえば、新しいトリガヌ機胜 ZBXNEXT-2650 を远加するこずはできたせんが、埅っおください。

モゞュヌルがむンタヌネット䞊で悪甚されるのを防ぐために、カスタム゜リュヌション-share.zabbix.com-を䜜成するための重芁な2番目のステップも実行されたした。これは、Zabbixのテンプレヌト、モゞュヌル、その他の拡匵機胜を亀換するために䜜成された単䞀のリポゞトリです。 トリッキヌな鉄片のテンプレヌトをお探しですか たたは、トリッキヌな鉄のテンプレヌトを䜜成し、他の人ず共有する準備ができおいたすか PostgreSQLを監芖する゜リュヌションをお探しですか たたはDocker 

参加しおください さお、私たちのモゞュヌルもそこにありたす。

Source: https://habr.com/ru/post/J268119/


All Articles