GPSトラッカーがロガーになった方法、またはリモートオブジェクトの物理パラメーターの監視を整理する簡単で安価な方法

挑戦する



多くの場合、タスクは利用可能なツールの標準機能に適合しません。 それで、今回は起こりました。 次に、問題の概要を説明します。



電化された広大な国(ウクライナ)にはいくつかの遠隔施設がありますが、インターネットに接続するための簡単な技術的能力はありません。 通常、オブジェクトは配置されるため、3GやWiMaxについてst音を立てる必要はありません。 GPRSのみが利用可能です。 これらのオブジェクトのいくつかの部屋の温度を監視できる必要があります。 さらに、リアルタイムでない場合、最小の遅延であることが望ましい。 オブジェクトは、不動産であるという事実によって複雑になりますが、動いている状況があるかもしれません。 そのため、設備の設置の主要な方法はなくなります。



つまり、新しい場所に簡単に移動でき、電源コンセントに差し込み、センサーを掛けてそれを忘れることができるような複合体があればいいのです。 私はこの時間に市場が適切なソリューションでいっぱいであることをよく知っていますが、いつものように軟膏にハエがあります-これはこの場合の価格です。 さらに、多くの場合、これらのソリューションには独自のソフトウェアが付属しています。 そして、神が禁じている場合、その中の何かを変更する必要がある場合、私はあなたに伝えません、多くはおそらくサポートサービスと同様のトピックで伝えました。









装備品



偶然 、別のプロジェクトに関連して、私の机にGPSトラッカーがありました-habrahabr.ru/post/100747彼らの特徴は、イタリアの会社Telitのモジュールを使用して実装されていることです。 この会社は、GPS-GSMとGSMモジュールの両方を生産しています。 これらのモジュールの特徴は、Pythonの内部にあることです。 つまり、スクリプトを実行できます。 そして当然、すべてのデバイスとモジュールリソースにはPythonからアクセスできます。 それが何であるかを理解していますか?)



多くのトラッカーには、センサーを直接接続する機能がありますが、最初はかなりの距離にセンサーを設置できません。2番目のトラッカーでは、センサーの数が2つまたは4つに制限されています。 これで私は反対に行きました。 幸いなことに、トラッカーにはCOMポートもあります。 しかし、その助けを借りて、定置型SCADAシステムのほぼすべての機器に問い合わせることがすでに可能です。



TelitモジュールにはほとんどすべてにPythonが搭載されており、最小限の変更で1つのモジュール用に記述されたスクリプトが別のモジュールで機能するため、注目に値します。 モジュールにたとえばGPSがない場合は、スクリプトで使用しようとせずに、驚くべき工夫を示す必要があります。



トラッカーでスクリプトを作成してテストした後、Telit GL868-Dualモジュールのgprs-modem.ru/product/gsm-modem-teleofis-rx108-r-rs485-s-opciej-kreplenie-na-din-rejkuモデムがすでに購入されていますそれは文字通りすぐに機能しました!



また、近くには、 OVEN社のMVA-8 www.owen.ru/catalog/95286354のアナログ入力モジュールがあります。







これは、8つのセンサーにアナログ信号を入力するためのシンプルなモジュールです。 Modbus(ASCII、RTU)、DCON、ARIESプロトコルをサポートします。 これは単なるトラッカーであり、Pythonはそのようなプロトコルについては知りません。 訓練する必要があります。



デバイス間の通信はRS485を介して行われるため、互いにかなりの距離を空けて配置できます。 さらに、センサー自体はMBA-8からかなり離れた場所に配置できます。



実装



Telitモジュールの使用は非常に簡単です。 記述されたスクリプトはモジュールにロードされ、実行用にマークされます。 ATコマンドとPython関数に関するドキュメントは、 www.telit.com / en / products / gsm- gprs.php? p_id = 12& p_ac = show& p = 47 GL865-DUALにあります-モジュールはSMT形式で、モジュールプラットフォームはGE865-QUADに似ています。 それは私たちの国のためにほんの少しだけです。







自宅で問題なくはんだ付けできることがわかります。 結束は最小限です。



ドキュメントをダウンロードするときは、モジュールの特定のファームウェアバージョンに適していることを必ず確認してください。 これは深刻なレーキです。 バグを長期間検索するのは面倒ですが、機能だけがサポートされていないことがわかります。 サポートされているファームウェアのバージョンは、手順の最初から見つけることができます。



ドックに書かれていることをすべて語り直すつもりはありません。 すべてが利用可能です。 つまり、MDM、MDM2、SER、SER2、MOD、GPS(ある場合)など、いくつかのデバイスが搭載されています。 私はあなたが何であるかを名前で推測したと思います。 そして最終的には、SERを介してMBA8に問い合わせてMDM(モデム)を介してサーバーに送信しようとします。それが機能しない場合は、より良い時間までデータを履歴ファイルに入れます。



MDMとMDM2は2つのモデムではなく、同じモデムの2つのインターフェイスにすぎません。 何のために? 同様の何かを実装するかどうかを確認します。



順番に。 モデムでの作業の整理方法は、トラッカーの例を挙げたリンクの上に表示されます。 MBA8の調査があります。 それをします。



私は古いMBA8を持っていて、独自のARIESプロトコルのみをサポートしていましたが、幸運ではありませんでした。 このプロトコルは私を非常に驚かせました。 なぜそれが私にとって非常に難しいのか不明のままですが、私はそれを調査することができました。 プロトコルに真剣に取り組む必要はありません。 既製のポーリングおよびチェックサム関数は次のとおりです。 キックしないでください、これは私がPythonで書いた最初のものです。 ちなみに、そこにあるPythonは、1.5.2ですが、非常に削除されています。 たとえば、現象として浮動小数点数が含まれていません。 したがって、必ずドックを読んでください。



チェックサムを計算する関数:



def Crc16Owen(buffer): CRC = 0x0000 for j in range(0,len(buffer)): byte = ord(buffer[j]) for i in range(0,8): if ((byte^(CRC>>8))&0x80): CRC = (CRC & 0x7FFF) << 1 CRC = CRC ^ 0x8F57 else : CRC= (CRC & 0x7FFF) << 1 byte = (byte&0x7F) << 1 return CRC
      
      







ARIES文字列を通常のビューに変換する機能:



 def OwenToHex(S): Sr='' for i in range(1,len(S)-1,2): a = ((ord(S[i])+0x09) << 4) & 0xF0 b = (ord(S[i+1])+0x09)&0x0F Sr = Sr + chr(a+b) return Sr
      
      







アドレス番号8のMBA8のポーリング機能:



 ToMva8Request = ['#GOHGONOKHTVU\r', '#GPHGONOKINGG\r', '#GQHGONOKMOGI\r', '#GRHGONOKLIVS\r', '#GSHGONOKVMGM\r', '#GTHGONOKSSVO\r', '#GUHGONOKOJVQ\r', '#GVHGONOKRPGK\r'] def GetMva8Data(): Mva8Data = '' SER.receive(5) #     for i in range(0,len(ToMva8Request)): ValCurSensor = FFFFFFh + chr(0xf1) #    SER.send(ToMva8Request[i]) MOD.sleep(20) SRcv = SER.receive(10) if len(SRcv)==0: ValCurSensor = FFFFFFh + chr(0xf3) #   MVA8 else: if len(SRcv) > 13: SRcv = OwenToHex(SRcv) if (ord(SRcv[-2])*0x100+ord(SRcv[-1])) == Crc16Owen(SRcv[:-2]): if (len(SRcv)==7): ValCurSensor = FFFFFFh + SRcv[4] if (len(SRcv)==12): ValCurSensor = SRcv[4:8] else: ValCurSensor = FFFFFFh + chr(0xf2) # CRC  OWEN Mva8Data = Mva8Data + ValCurSensor Mva8Data = ShortImei + Mva8Data Mva8Data = Ascii2Bin("%08x"%MOD.secCounter()) + Mva8Data Mva8Data = Mva8Data + Ascii2Bin("%04x"%Crc16Owen(Mva8Data)) return Mva8Data
      
      







良いわいせつな言語で私に怒鳴る前に、組み込みのpythonの複雑さを理解する必要があり、多くの問題があることをもう一度思い出したいと思います。



いくつかの制限があります。 たとえば、スクリプトやその他のファイルの場所はわずか2 MBです。 ただし、ストーリーファイルには十分です。 また、ファイルの操作は非常に遅く、そのようなロガーのコールドスタートは約1.5分続きます。 もちろん、30秒ごとに複数回調査を整理することもできますが、それを行う必要があります。 5分ごとに調査に満足しているため、この問題は私には関係ありません。 また、上書き回数が限られているメモリを使用することを忘れないでください。 ロガーが絶えず同じセル内のデータにヒットしている場合、2か月間十分なメモリがあり、その後エラーが発生します。 ただし、実装された異なるセルにレコードが常に保持されるように、履歴ファイルを実装することは可能です。 このモードでメモリを使用する推定時間は約500年でした。メモリメーカーのデータに依存している場合。



モデムにはマイナスが1つあります。電源がオフになるとクロックがリセットされるため、サーバーからの時間の受信を整理する必要がありました。



ところで、同じスマートシーメンスモデムが存在することは知っていますが、私はTelitのほうが好きです。 他にも理由がありますが、ここにはありません。



さて、今、主なものについて-価格。



モデム-2 950こする。

MVA8-4,189.00ルーブル。

センサーとワイヤーを自分で追加します。



私の意見では、かなり安くなった。 そして、これらすべてを簡単に転送して別の場所にインストールできることを忘れないでください。



PS主なアイデアは、モデムがモデムの機能だけでなく、ストレージの機器や機能を調べるウィザードの機能も実行するということです。 また、最小限のバッファーサーバーを使用する必要はありません。



All Articles