# LANIO Pythonライブラリ

LANIO Pythonライブラリを使用することにより、LANIOをPythonアプリケーションから操作することができます。

- 本ソフトウェアの著作権は弊社が保有します。
- 本ソフトウェアの動作保証およびサポートは行っておりません。
- 本ソフトウェアによるお客様の損害、逸失利益、第三者のいかなる請求につきましても当社は一切その責任を負いかねます。
- 本ソフトウェアは事前に通知せず内容変更、配布中止をすることがあります。

## 対応環境

Python 3.6 以降に対応しております。

下記のモデルで、本ライブラリをご利用いただけます。

- LA-3R2P、LA-3R2P-P、LA-7P-A、LA-7P-P
- LA-5P-P、LA-5R、LA-5T2S、LA-5T2S-P、LA-3R3P-P、LA-2R3P-P、LA-232/485シリーズ
- LA-8R、LA-8T、LA-8P-P、LA-4T4S-P、LA-N2R2P/-P
- 無線LANIO
- アナログ対応モデル LA-2R3A(V2), LA-5AI, LA-2A3P-P, LA-3A2P-P, LA-2R3A-W, LA-3A3P-PW

## インストールについて

`dist` ディレクトリ下の whl ファイルを、下記コマンドでインストールしてください。

```
pip install ファイルへのパス 
```

※ 環境によっては `pip` の代わりに `pip3` を使用する場合があります。

ライブラリの一部を変更してご利用の場合は、本ディレクトリにて下記コマンドを実行してインストールしてください。

```
pip install .
```

## アンインストールについて

pip コマンドを用いてアンインストールしてください。

```
pip uninstall laniopy
```

## アプリケーションからライブラリを利用する時の手順

LANIOライブラリを使用するときは、大まかには以下のような手順を踏みます。

1. ライブラリを初期化する

- `laniopy.Lanio` クラス

※ 無線LANIOシリーズ(デジタル入力モデル)の場合は、devtype=laniopy.model.LanioDeviceType.WIFI を指定する必要があります。

2. LANIO に接続する

- `connect` メソッド

3. 発見した LANIO の情報を取得する

- `requestModelId` メソッド

4. LANIO の DO を設定・状態を確認する

- `Lanio` クラス `getDoNum` メソッド
- `outPio` メソッド
- `outPioAll` メソッド
- `getOut` メソッド
- `getOutAll` メソッド

5. LANIO の DI の状態を取得する

- `Lanio` クラス `getDiNum` メソッド
- `inPio` メソッド
- `inPioAll` メソッド

詳しくは、 example ディレクトリの `simple.py` をご参照ください。

## サンプルについて

example ディレクトリ下に、本ライブラリの活用例として、サンプルスクリプトを収録しています。

### simple.py

LANIO をコマンドラインから対話形式で操作するサンプルです。

```
python example/simple.py
```

※ 環境によっては `python` の代わりに `python3` を使用する場合があります。

### lanioPannel.py

LANIO を操作する GUI サンプルです。

DO の操作・状態取得、DI の状態取得が可能です。

DO は、インジケータ部分をクリックすることで変更が可能です。

```
python example/lanioPanel.py -a 接続先アドレス -p ポート番号
```

### out.py

lanioPannel.py を DO 操作のみに限定し、よりシンプルにしたサンプルです。

```
python example/out.py -a 接続先アドレス -p ポート番号
```

### analogSimple.py

アナログ入力／出力 LANIO をコマンドラインから対話形式で操作するサンプルです。

```
python example/analogSimple.py
```

### analogPlot.py

LANIO からアナログ入力値を取得し、プロットするサンプルです。

1 秒間隔で 1 分間データを取得し、リアルタイムにプロットします。

```
python example/analogPlot.py -a 接続先アドレス -p ポート番号
```

このサンプルをお試しいただく際は、`matplotlib` をインストールする必要があります。
お使いの環境によっては、 `matplotlib` のインストール前に `libjpeg-dev` パッケージをインストールする必要があります。

Ubuntu や Debian をお使いの場合、下記コマンドにて `libjpeg-dev` をインストールしてください。
```
sudo apt install libjpeg-dev
```

下記コマンドにて `matplotlib` をインストールしてください。
```
pip install matplotlib
```

## リファレンス

### `laniopy.LanioError` 例外

本ライブラリでの操作でエラーが発生した場合に送出されます。

### `laniopy.LanioErrorType` クラス

`laniopy.LanioError` で送出されるエラーコードです。

| コード名             | 意味                             |
| :------------------- | :------------------------------- |
| `NOLANIO`            | 接続先が LANIO ではありません。  |
| `NOCONNECTED`        | LANIOと接続していません。        |
| `ALREADYCONNECTED`   | すでに接続しています。           |
| `INVALIDOPERATION`   | 指定された操作は実行できません。 |
| `INVALIDRETURNVALUE` | 不正な戻り値が返りました。       |
| `TIMEOUT`            | 送受信がタイムアウトしました。   |

### `laniopy.model.LanioDeviceType`

LANIO のタイプを示す列挙型クラスです。

| 列挙子名  | 意味                                                                    |
| :-------- | :---------------------------------------------------------------------- |
| `NONE`    | 指定なし を示します。                                                   |
| `DIGITAL` | 「デジタル入出力モデルの制御コマンド」を利用する LANIO を示します。     |
| `WIFI`    | 「デジタル入出力モデルの制御コマンド」を利用する無線 LANIO を示します。 |
| `N_8P`    | 「新しい体系の制御コマンド」を利用する LANIO を示します。               |
| `ANALOG`  | 「新しい体系の制御コマンド」を利用するアナログ LANIO を示します。       |

### `laniopy.LanioAiRange`

LANIO のアナログ入力チャンネルの入力レンジを示す列挙型クラスです。

| 列挙子名            | 意味                         |
| :------------------ | :--------------------------- |
| `RANGE_100MV`       | -100 mV ~ +100 mV            |
| `RANGE_1V`          | -1 V ~ 1 V                   |
| `RANGE_10V`         | -10 V ~ 10 V                 |
| `RANGE_20MA_250OHM` | 0 ~ 20 mA ( 外付け 250 ohm ) |
| `RANGE_20MA_50OHM`  | 0 ~ 20 mA ( 外付け 50 ohm )  |
| `RANGE_TC`          | 熱電対                       |

### `laniopy.LanioAiTcType`

LANIO のアナログ入力チャンネルの熱電対のタイプを示す列挙型クラスです。

| 列挙子名 | 意味           |
| :------- | :------------- |
| `K`      | K タイプ熱電対 |
| `J`      | J タイプ熱電対 |
| `T`      | T タイプ熱電対 |
| `E`      | E タイプ熱電対 |
| `N`      | N タイプ熱電対 |
| `R`      | R タイプ熱電対 |
| `S`      | S タイプ熱電対 |
| `B`      | B タイプ熱電対 |

### `laniopy.LanioAiAdcSps`

LANIO のアナログ入力チャンネルの AD コンバータの変換速度を示す列挙型クラスです。

| 列挙子名       | 意味      |
| :------------- | :-------- |
| `ADCSPS_10`    | 10 sps    |
| `ADCSPS_16_6`  | 16.6 sps  |
| `ADCSPS_50`    | 50 sps    |
| `ADCSPS_60`    | 60 sps    |
| `ADCSPS_400`   | 400 sps   |
| `ADCSPS_1200`  | 1200 sps  |
| `ADCSPS_3600`  | 3600 sps  |
| `ADCSPS_14400` | 14400 sps |

### `laniopy.LanioAoRange`

LANIO のアナログ出力チャンネルの出力レンジを示す列挙型クラスです。

| 列挙子名     | 意味         |
| :----------- | :----------- |
| `RANGE_10V`  | -10 V ~ 10 V |
| `RANGE_20MA` | 0 ~ 20 mA    |

### `laniopy.Lanio` クラス

LANIO を操作・状態取得するクラスです。

#### 例外について

各メソッドで `LanioError` 例外が送出される可能性があります。
含まれるエラーコードは上記 `laniopy.LanioErrorType` をご参照ください。

#### `__init__` (コンストラクタ)

クラスを初期化します。

| 引数の名前 | 引数の型                        | 説明                                                                                 |
| :--------- | :------------------------------ | :----------------------------------------------------------------------------------- |
| `devtype`  | `laniopy.model.LanioDeviceType` | 接続する LANIO のタイプを指定します。無線 LANIO 使用時はこの引数での指定が必要です。 |

#### `connect`

LANIO に接続するメソッドです。

| 引数の名前 | 引数の型 | 説明                                                                                                      |
| :--------- | :------- | :-------------------------------------------------------------------------------------------------------- |
| `address`  | `str`    | 接続する LANIO のアドレスを指定します。ホスト名での指定も可能です。                                       |
| `port`     | `int`    | 接続する LANIO のポート番号を指定します。                                                                 |
| `timeout`  | `float`  | 操作時のタイムアウト値を秒単位で指定します。 例えば、 `0.1` と指定した場合は 0.1 秒でタイムアウトします。 |
| `pioPort`  | `int`    | XPort 搭載 LANIO の追加ポートを指定するキーワード引数です。 デフォルトで `30704` が指定されています。     |

戻り値は `bool` で、接続に成功したかを示します。

#### `disconnect`

LANIO との通信を切断します。

戻り値はありません。

#### `getId`

接続している LANIO の ID を取得します。

戻り値は `int` で、LANIO の ID を示します。

#### `getModel`

接続している LANIO のモデルを取得します。

戻り値は `laniopy.LanioModel` で、 LANIO のモデルを示します。

#### `getDoNum`

接続している LANIO の DO の数を取得します。

戻り値は `int` で、 DO の数を示します。

#### `getDiNum`

接続している LANIO の DI の数を取得します。

戻り値は `int` で、 DI の数を示します。

アナログ入力モデルの場合は、 AI の数を示します。

#### `getAoNum`

接続している LANIO の AO の数を取得します。

戻り値は `int` で、 AO の数を示します。

#### `getAiNum`

接続している LANIO の AI の数を取得します。

戻り値は `int` で、 AI の数を示します。

#### `requestIdModel`

接続している LANIO のタイプ、 ID 、モデルを取得します。

戻り値は `tuple[laniopy.model.LanioDeviceType, int, laniopy.LanioModel]` で、
 LANIO のタイプ、 ID 、モデルを示します。

#### `outPio`

LANIO の DO を操作します。

| 引数の名前 | 引数の型 | 説明                       |
| :--------- | :------- | :------------------------- |
| `doNum`    | `int`    | 設定する DO を指定します。 |
| `state`    | `bool`   | 設定する論理を指定します。 |

戻り値は `bool` で、成功したかを示します。

#### `outPioAll`

LANIO の DO をまとめて操作します。

| 引数の名前 | 引数の型     | 説明                                       |
| :--------- | :----------- | :----------------------------------------- |
| `doState`  | `list[bool]` | 各 DO に設定する論理をリストで指定します。 |

戻り値は `bool` で、成功したかを示します。

#### `inPio`

LANIO の DI の状態を取得します。

| 引数の名前 | 引数の型 | 説明                       |
| :--------- | :------- | :------------------------- |
| `diNum`    | `int`    | 取得する DI を指定します。 |

戻り値は `bool` で、 DI の論理を示します。

#### `inPioAll`

LANIO の DI の状態をまとめて取得します。

戻り値は `list[bool]` で、 各 DI の論理を示します。

#### `getOut`

LANIO の DO の状態を取得します。

| 引数の名前 | 引数の型 | 説明                       |
| :--------- | :------- | :------------------------- |
| `diNum`    | `int`    | 取得する DO を指定します。 |

戻り値は `bool` で、 DO の論理を示します。

#### `getOutAll`

LANIO の DO の状態をまとめて取得します。

戻り値は `list[bool]` で、 各 DO の論理を示します。

#### `getAnalogInput`

LANIO のアナログ入力の現在値を ADC 値で取得します。

| 引数の名前 | 引数の型 | 説明                       |
| :--------- | :------- | :------------------------- |
| `aiNum`    | `int`    | 取得する AI を指定します。 |

戻り値は `int` で、 AI の ADC 値を示します。

#### `getAnalogInputAll`

LANIO のすべてのアナログ入力の現在値を ADC 値で取得します。

戻り値は `list[int]` で、すべての AI の ADC 値を示します。

#### `getAnalogInputByValue`

LANIO のアナログ入力の現在値を入力レンジ設定とともに実値で取得します。

| 引数の名前 | 引数の型 | 説明                       |
| :--------- | :------- | :------------------------- |
| `aiNum`    | `int`    | 取得する AI を指定します。 |

戻り値は `tuple[laniopy.LanioAiRange, float]` で、 AI の入力レンジ設定、測定値を示します。

#### `setAnalogInputRange`

LANIO のアナログ入力のレンジを設定します。

| 引数の名前 | 引数の型               | 説明                             |
| :--------- | :--------------------- | :------------------------------- |
| `aiNum`    | `int`                  | 設定する AI を指定します。       |
| `aiRange`  | `laniopy.LanioAiRange` | 設定する入力レンジを指定します。 |

戻り値は `bool` で、成功したかを示します。

#### `getAnalogInputRange`

LANIO のアナログ入力のレンジ設定を取得します。

| 引数の名前 | 引数の型 | 説明                       |
| :--------- | :------- | :------------------------- |
| `aiNum`    | `int`    | 取得する AI を指定します。 |

戻り値は `laniopy.LanioAiRange` で、 AI の入力レンジ設定を示します。

#### `setAnalogInputAdcSps`

LANIO のアナログ入力の AD コンバータ変換速度を設定します。

| 引数の名前 | 引数の型                | 説明                                         |
| :--------- | :---------------------- | :------------------------------------------- |
| `sps`      | `laniopy.LanioAiAdcSps` | 設定する AD コンバータ変換速度を指定します。 |

戻り値は `bool` で、成功したかを示します。

#### `setAnalogThresholds`

LANIO のアナログ入出力のアナログ閾値を設定します。

| 引数の名前      | 引数の型 | 説明                                                                   |
| :-------------- | :------- | :--------------------------------------------------------------------- |
| `ioNum`         | `int`    | 設定する AI / AO を指定します。                                        |
| `outBlink`      | `bool`   | LED 点灯方向を指定します。 `True` を指定した場合、範囲外で点灯します。 |
| `thresholdLow`  | `int`    | 下限閾値を指定します。 ( DAC 内部値又は ADC 内部値の上位 16 bit )      |
| `thresholdHigh` | `int`    | 上限閾値を指定します。 ( DAC 内部値又は ADC 内部値の上位 16 bit )      |

戻り値は `bool` で、成功したかを示します。

#### `getAnalogThresholds`

LANIO のアナログ入出力のアナログ閾値を取得します。

| 引数の名前 | 引数の型 | 説明                            |
| :--------- | :------- | :------------------------------ |
| `ioNum`    | `int`    | 取得する AI / AO を指定します。 |

戻り値は `tuple[bool, int, int]` で、 LED 点灯方向、下限閾値、上限閾値を示します。

#### `setTcConfig`

LANIO のアナログ入力の熱電対のタイプを設定します。

| 引数の名前         | 引数の型                | 説明                                                                         |
| :----------------- | :---------------------- | :--------------------------------------------------------------------------- |
| `aiNum`            | `int`                   | 設定する AI を指定します。                                                   |
| `tcType`           | `laniopy.LanioAiTcType` | 設定する熱電対のタイプを指定します。                                         |
| `coldJunctionComp` | `bool`                  | 冷接点補償を有効にするかを指定します。                                       |
| `burnOutDetect`    | `bool`                  | 断線検知機能を有効にするかを指定します。                                     |
| `burnOutValue`     | `bool`                  | 断線検出時の値を設定します。 `True` で最大値、`False` で最小値を指定します。 |

戻り値は `bool` で、成功したかを示します。

#### `getTcConfig`

LANIO のアナログ入力の熱電対のタイプを取得します。

| 引数の名前 | 引数の型 | 説明                       |
| :--------- | :------- | :------------------------- |
| `aiNum`    | `int`    | 取得する AI を指定します。 |

戻り値は `tuple[laniopy.LanioAiTcType, bool, bool, int]` で、
熱電対のタイプ、冷接点補償機能の有効・無効、断線検出機能の有効・無効、断線検出時の値設定を示します。

#### `setTcType`

LANIO のアナログ入力の熱電対のタイプを指定します。

通常変更する必要のない、冷接点補償機能の有効・無効、断線検出機能の有効・無効、断線検出時の値設設定 は、
デフォルト値で上書きされます。

| 引数の名前 | 引数の型                | 説明                                 |
| :--------- | :---------------------- | :----------------------------------- |
| `aiNum`    | `int`                   | 設定する AI を指定します。           |
| `tcType`   | `laniopy.LanioAiTcType` | 設定する熱電対のタイプを指定します。 |

戻り値は `bool` で、成功したかを示します。

#### `setAnalogOutput`

LANIO のアナログ出力の出力値を DAC 内部値で指定して出力します。

| 引数の名前 | 引数の型               | 説明                       |
| :--------- | :--------------------- | :------------------------- |
| `aoNum`    | `int`                  | 設定する AO を指定します。 |
| `aoRange`  | `laniopy.LanioAoRange` | 出力レンジを指定します。   |
| `val`      | `int`                  | DAC 内部値を指定します。   |

戻り値は `bool` で、成功したかを示します。

#### `setAnalogOutputMulti`

LANIO の複数のアナログ出力の出力値を DAC 内部値で指定して出力します。

| 引数の名前 | 引数の型                     | 説明                               |
| :--------- | :--------------------------- | :--------------------------------- |
| `aoNums`   | `list[int]`                  | 設定する AO をリストで指定します。 |
| `aoRanges` | `list[laniopy.LanioAoRange]` | 出力レンジをリストで指定します。   |
| `vals`     | `list[int]`                  | DAC 内部値をリストで指定します     |

戻り値は `bool` で、成功したかを示します。

#### `getAnalogOutput`

LANIO のアナログ出力の現在値を DAC 内部値で取得します。

| 引数の名前 | 引数の型       | 説明                       |
| :--------- | :------------- | :------------------------- |
| `aoNum`    | `int`          | 取得する AO を指定します。 |

戻り値は `tuple[laniopy.LanioAoRange, int]` で、 出力レンジ、 DAC 内部値を示します。

#### `setAnalogOutputVoltage`

LANIO のアナログ出力の出力値を電圧値で指定して出力します。

| 引数の名前 | 引数の型 | 説明                                         |
| :--------- | :------- | :------------------------------------------- |
| `aoNum`    | `int`    | 設定する AO を指定します。                   |
| `voltage`  | `float`  | 設定する電圧値を指定します。 (-10.0 V ~ 10.0 V) |

戻り値は `bool` で、成功したかを示します。

#### `setAnalogOutputCurrent`

LANIO のアナログ出力の出力値を電流値で指定して出力します。

| 引数の名前    | 引数の型 | 説明                                          |
| :------------ | :------- | :-------------------------------------------- |
| `aoNum`       | `int`    | 設定する AO を指定します。                    |
| `milliAmpere` | `float`  | 設定する電流値を指定します。 (0 mA ~ 20.0 mA) |

戻り値は `bool` で、成功したかを示します。

#### `getAnalogOutputByValue`

LANIO のアナログ出力の現在値を実値で取得します。

| 引数の名前 | 引数の型       | 説明                       |
| :--------- | :------------- | :------------------------- |
| `aoNum`    | `int`          | 取得する AO を指定します。 |

戻り値は `tuple[laniopy.LanioAoRange, float]` で、 出力レンジと出力設定値を示します。

#### `setInitialAnalogOutput`

LANIO のアナログ出力の起動時初期値を DAC 内部値で指定します。

| 引数の名前 | 引数の型               | 説明                       |
| :--------- | :--------------------- | :------------------------- |
| `aoNum`    | `int`                  | 設定する AO を指定します。 |
| `aoRange`  | `laniopy.LanioAoRange` | 出力レンジを指定します。   |
| `val`      | `int`                  | DAC 内部値を指定します。   |

戻り値は `bool` で、成功したかを示します。

#### `setInitialAnalogOutputVoltage`

LANIO のアナログ出力の起動時初期値を電圧値で指定します。

| 引数の名前 | 引数の型 | 説明                                        |
| :--------- | :------- | :------------------------------------------ |
| `aoNum`    | `int`    | 設定する AO を指定します。                  |
| `voltage`  | `float`  | 出力電圧値を指定します。 (-10.0 V ~ 10.0 V) |

戻り値は `bool` で、成功したかを示します。

#### `setInitialAnalogOutputCurrent`

LANIO のアナログ出力の起動時初期値を電流値で指定します。

| 引数の名前    | 引数の型 | 説明                                      |
| :------------ | :------- | :---------------------------------------- |
| `aoNum`       | `int`    | 設定する AO を指定します。                |
| `milliAmpere` | `float`  | 出力電流値を指定します。 (0 mA ~ 20.0 mA) |

戻り値は `bool` で、成功したかを示します。
