melsec_mc 0.4.0

A small Rust library to talk to Mitsubishi PLCs via MC Protocol (Ethernet) - transport layer and helpers
Documentation
# melsec_mc

三菱電機 PLC と MC プロトコル(Ethernet)用の軽量な Rust ライブラリです。

提供内容(概要)
- 非同期 TCP トランスポート(Tokio ベース)と簡易クライアント
- エラー型とレスポンス/リクエストの最低限の構造
- 生のフレーム送受信を行うサンプルとユーティリティ

注: 高レベルなバッチ読み書き API は一部実装済みですが、今後拡張予定です。

## 目次


# melsec_mc

軽量な Rust ライブラリで、三菱電機 PLC の MC プロトコル(Ethernet / MC4E に相当)への送受信と簡易クライアントを提供します。

バージョン: 0.4.0

主な特徴
- Tokio ベースの非同期トランスポート
- 生の MC フレーム送受信とパーサ
- 高レベルのワンショットヘルパーと再利用可能な `McClient`
- 型付き読み書きサポート(`FromWords` / `ToWords`- `error_codes` レジストリのマージ登録とその他レジストリ改善

重要な変更点(このリリース)
- 公開 API の堅牢化(panic/unwrap/expect/eprintln! の削除)。エラーは `Result<..., MelsecError>` で返却します。
- `McResponse::try_new` に移行し、呼び出し側を更新しました。
- `FromWords` / `ToWords``McClient::read_words_as` / `write_words_as` を追加しました(`count` は要素数として扱います)。

目次
- クイックスタート
- インストール
- 使い方(簡単な例)
- 高度な利用(Typed API、McClient)
- リリースと公開
- 貢献方法、ライセンス

## クイックスタート

1. クローンとビルド:

```powershell
git clone https://github.com/tyaro/melsec_com.git
cd melsec_com
cargo build
```

2. サンプル実行(`examples` を参照して PLC アドレスを設定してください):

```powershell
cargo run --example simple
```

## インストール

crates.io に公開済みであれば `Cargo.toml` に追加できます(例):

```toml
[dependencies]
melsec_mc = "0.4.0"
```

開発中に git から参照する場合:

```toml
[dependencies]
melsec_mc = { git = "https://github.com/tyaro/melsec_com", branch = "main" }
```

## 使い方(簡単な例)

非同期 Tokio 環境での利用例:

```rust
use melsec_mc::{McClient, ConnectionTarget};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
	// 接続先を指定してクライアントを作成します
	let target = ConnectionTarget::direct("192.168.1.40", 4020);
	// McClient::new().with_target(...) でターゲットを組み込んだクライアントを生成します
	let client = McClient::new().with_target(target);

	// ビット読み出し(メソッド名は `read_bits` です)
	let bits = client.read_bits("M", 10, 3).await?;
	println!("bits: {:?}", bits);

	// ワード読み出し(メソッド名は `read_words` です)
	let words = client.read_words("D", 100, 2).await?;
	println!("words: {:?}", words);

	Ok(())
}
```

## 型付き読み書き(Typed API)

このリリースでは `FromWords` / `ToWords` トレイトにより、`f32` や `u32`、`[bool;16]` のような複数ワードにまたがる型を直接読み書きできます。例:

```rust
// 読み取り(要素数 = 2 の f32 を 2 要素取得すると内部的に 4 ワード要求します)
let floats: Vec<f32> = client.read_words_as::<f32>("D1000", 2).await?;

// 書き込み
client.write_words_as("D1010", &vec![1.23f32, 4.56f32]).await?;
```

型付き読み出しは要素単位で解析を行い、解析に失敗した要素は警告ログを出してスキップし、成功した要素は返却されます(部分的な受信に対して寛容に動作します)。

## リリースと公開

- このリポジトリは GitHub Release を利用しています(https://github.com/tyaro/melsec_com/releases)。
- crates.io に公開する場合は `cargo publish` を使用してください(公開には 2FA とクレデンシャルが必要です)。

パッケージ作成の検証:

```powershell
cargo publish --dry-run
```

## 貢献と連絡

- プルリクエスト歓迎です。大きな API 変更は事前に Issue で相談してください。
- バグ報告や機能要望は GitHub Issue を利用してください。

## ライセンス

MIT

---
日本語版 README(`README.md`)を更新しました。英語版は `README.en.md` を参照してください。
### 備考