目次 概要... 3 通信仕様... 3 MODBUS RTU プロトコル... 4 通信データフォーマット... 4 通信手順... 5 レジスタ一覧... 9 エラーコード CRC-16 の算出 CRC-16 計算サンプルプログラム RS232C 通信サンプル

Similar documents
アナログ・接点変換器

Microsoft Word - FCTT_CS_Mod( )Jver1.doc

PLCシリアル通信 MODBUS通信 データ送信/受信プログラム例

MODBUS ユーザーズマニュアル 페이지 1 / 23

目次 1 I2Cとは 13 結線写真 2 センサの多くがI2Cに対応 14 WHO_AM_I 3 マイコンでのI2C通信例 15 I2C読込みプログラム 4 とは 16 I2C読込みスクリプト概要① 5 タイミングパラメータ 17 I2C読込みスクリプト概要② 6 書込み 18 センサ読込みプログラ

3軸加速度センサーモジュール MM-2860 書込み済みマイコンプログラム通信コマンド概要

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ


sinfI2005_VBA.doc

Microsoft PowerPoint - フェリカ通信仕様書_

Singapore Contec Pte Ltd. Opening Ceremony

スライド 1

ファイル操作-バイナリファイル

CommCheckerManual_Ver.1.0_.doc

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

訂正 _ 第 1 回 1 Arduino Arduino を用意する 入力 アナログ Analog 入出力 任意の電圧を扱える 電源系 外部入力 7 12V デジタル digital 入出力 リセットボタン Low High いわゆる 01 が入出力される 通常は Low 0V GND High 5

形B5Z 画像型人感センサ(HVC-F) コマンド仕様書

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

ファイル操作

Microsoft Word - RZOCX取扱説明書.doc

PowerPoint プレゼンテーション

1. SMDLR2 SYSMACCCVM1 CVCQM1 PLC NestBus PLC PLC 2. PLC CPU PLC DCS PLC PLC SMDL PLC1 1 SMDL DiDo 512 AiAo 32 PLC PLC SMDLR2 K V AC L170

作成 承認 簡単取扱説明書 (S&DL 水位計 ) 応用計測サービス株式会社 (1.1)

WAGO / / Modbus/RTU対応 バスカプラ クイックスタートガイド

スライド 1

MODBUSⓇインタフェース編(旧)

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

ワゴ・新製品インフォメーション

<4D F736F F D2095CF88CA835A B F8EE682E888B582A290E096BE8F F6E F722D A5F

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される

UIOUSBCOM.DLLコマンドリファレンス

掲載している接続例をご覧いただく前に 1 プリンタと PLC との接続例は掲載したプリンタの機種との接続例です ご使用になるプリンタが異なる場合は 各プリンタの取扱説明書に記載されています接続例を参照願います 2 掲載しているラダープログラムは参考用です プログラム使用における障害についてはいかなる

R7G4HML3 6 LC2 取扱説明書 リモート I/O R7G4H シリーズ M E C H A T R O L I N K - Ⅲ 用 モニタ出力付 絶縁 2 点 ねじ端子台ロードセル入力ユニット 形式 R7G4HML3-6 - LC EU CE 許容電圧範囲 消費電流 直流

スライド 1

プロセス間通信

MW100 Modbusプロトコルによるデータ通信の設定について

SiTCP ユーティリティユーザガイド 2014 年 6 月 18 日 0.73 版 Bee Beans Technologies 1

VFD256 サンプルプログラム

AN-1077: ADXL345 Quick Start Guide

81 /******************************************************************************/ 82 /* スレーブアドレスの設定 */ 83 /*****************************************

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

Taro-82ADAカ.jtd

<リスト1> AD コンバータへのデータの出力例 NEC PC98 用 mov al,22h // CLK -> 1, CS -> 0, DI -> 0 out 32h,al // シリアル ポートにデータ出力 PC/AT 互換機用 mov al,00h // CLK -> 1 mov dx,3fb

USB_IR_Remote_Controller_Advance_Library 取扱説明書 2015/8/21 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controller Ad

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

USB_IR_Remote_Controller_Advance_Library 取扱説明書 2016/06/23 R03 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controll

IrDA型赤外線タグ仕様

Microsoft Word - VBA基礎(3).docx

Microsoft Word - 実験4_FPGA実験2_2015

電子13-06 エネメータ専用ソフト SAVER CAST for EneMeter Ver3.00設定方法.ppt

<4D F736F F D D182F12D504C4390DA91B B D834F F F2E646F63>

Studuinoプログラミング環境

データアダプタ概要

MS-ExcelVBA 基礎 (Visual Basic for Application)

プロバイダ ユーザーズガイド

標準仕様書 品名非接触式 FeliCa/MIFARE 対応カードリーダー 型式 WML-60 S

C++ ++ Wago_io.dll DLLDynamicLinkLibrary Microsoft VisualBasic Visual C Wago_io.dll Wago_io.dll Wago_io.dll WAGO_OpenCommPort WAGO_CloseCommPort WAGO_

WAGO PROFIBUS バスカプラ/コントローラと、QJ71PB92Dとのコンフィグレーションマニュアル

バスケットボール

Ethernet 開発支援ツール ACCEL ti2k (LastUpdate Mar 1, 2019) 概要ターミナルツール (1) TcpTermS.exe ターミナルツール (2) TcpTermM.exe ターミナルツール (3) UdpTermS.exe ターミナルツール (

1. 概要 CD-500/CD-500B( 以下 " 被制御機器 " とする ) に装備の REMOTE(SERIAL) 端子を使用して コンピュータなどの外部機器より被制御機器を制御することが可能です また 外部より制御を行う機器は制御機器となります 2 仕様 2-1. 電気的仕様準拠規格 :JI

Android プログラム ガイド

PowerPoint プレゼンテーション

            

GR-SAKURA-SAのサンプルソフト説明

1) 書込 読出機器構成 KEYENCE KV-7500~MPC 接続 KV-7500 の PLC リンクモードを用いて MPC と通信します KV STUDIO Ver9 KV-7500 KV-XL202 Ref No:ti2K Last Modify バス接続ユニット

CONTEC DIOプロバイダ ユーザーズガイド

ルーレットプログラム

Singapore Contec Pte Ltd. Opening Ceremony

データ収集用 NIM/CAMAC モジュールマニュアル 2006/5/23 目次 クレート コントローラ CC/ NIM ADC 1821 (Seiko EG&G)...3 ADC インターフェイス U デッドタイム

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

パーツリスト 組み立て前にすべてのパーツがそろっているかご確認ください 種類 品番 数 種類 品番 数 基板 I2C LCD 1 コンデンサ 0.1uF (104) 積層セラミック 1 IC ATtiny コンデンサ 10uF 電解 1 半固定抵抗 10~50kΩ 1 コネクタ IC ソ

ソフトウェア基礎技術研修

回路 7 レジスタ ( 同期イネーブル及び非同期リセット付 ) 入力データを保持するのに用いる記憶素子 使用用途として, マイクロプロセッサ内部で演算や実行状態の保持に用いられる Fig4-2 のレジスタは, クロック信号の立ち上がり時かつ 信号が 1 のときに外部からの 1 ビットデータ R をレ

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

Transcription:

通信仕様書 放射温度計 (TMHX FTKX 各シリーズ用 ) サーモスポットセンサー RS2 32C センサヘッド / 温度変換器ソフト Ver4.24 以降 ジャパンセンサー株式会社 2013 年 10 月 28 日版

目次 概要... 3 通信仕様... 3 MODBUS RTU プロトコル... 4 通信データフォーマット... 4 通信手順... 5 レジスタ一覧... 9 エラーコード... 12 CRC-16 の算出... 13 CRC-16 計算サンプルプログラム... 14 RS232C 通信サンプルコード VB.NET... 15 2

概要 TMHX FTKX シリーズは RS232C インターフェースによる通信機能を備えており 弊社の表示設定器 パラメーター設定セット等との通信が可能です 通信プロトコルはバイナリデータ通信による MODBUS RTU プロトコルを使用しております 通信仕様 通信方式 接続方式 通信方式 R S23 2C 準拠 ホ イントトゥホ イント 3 線式半二重 通信距離 5 0m( max ) 出力スイング幅 ±4V 信号内容 T XD( 送信データ ) および RXD ( 受信データ ) 最大接続数 1 同期方式 調歩同期式 通信速度 (BPS) 48 00, 960 0 192 00, 384 00,57 600, 1 152 00 データ長パリティーストップビット長通信符号プロトコル通信デ -タ 8bi t 偶数 奇数 パリティーなし 1bi tまたは 2b it バイナリ MODBUS RTU 温度測定値 アラ -ム出力状態 パラメ- タ設定値 工場出荷時設定通信速度 (BPS) パリティービットストップビットデータ長 9600BPS なし 2bit 8bit 3

MODBUS RTU プロトコル MODBUS RTU プロトコルの通信方式はシングルマスター / マルチスレーブ方式です マスター ( 表示設定器等 ) だけがスレーブ ( 温度計 ) に命令を送信できます スレーブはマスターからの命令に従って指定された機能を実行し 応答メッセージをマスターに返します TMHX FTKX の通信媒体は RS232C なので マスターとスレーブで 1 対 1 通信を行います マスターからの命令 スレーブアドレス ファンクション マスター 命令データ CRC スレーブアドレス ファンクション 応答データ スレーブ CRC スレーブからの応答 通信データフォーマット メッセージの構成 Start Slave Address Function Data CRC End 1 8bit 8bit N*8bit 16bit 1 1 Start と End は3.5 文字分の無通信時間 Slave Address スレーブアドレスを指定します TMHX FTKX は 1 対 1 通信なので アドレスは常に 01 (HEX) です Function Funcion はスレーブに対する動作の種類を指示するコードです TMHX FTKX では以下の2つを使用します Function コード (HEX) 詳細 03 スレーブの設定値 情報の読み取り 06 スレーブの書き込み Data Function コードに関するデータを送信する場合に使用します レジスタアドレス 設定値 受信データ エラーコード等 CRC ModBus RTU のエラーチェックは CRC( 周期冗長検査 ) と言われる計算 方法で計算されます 計算された 16bit のデータは 2 つの 8bit データで 表します CRC の算出方法は 13 ページ CRC-16 の算出 を参照下さい 4

通信手順 リードコマンドは単一のレジスタあるいは連続する複数のレジスタを一度に読み込むことができます セットコマンドは単一のレジスタを書き込みます 複数のレジスタ書き込みには対応していません 単一レジスタのリードコマンド / レスポンス 例 ) レジスタアドレス 0100 H( 測定温度 ) をリードする例です リードコマンド データ番号 フィールド名 説明 データ例 (HEX) 0 Slave Address スレーブアドレス 01 (1 対 1 通信なので常に 01H) 1 Function Function コード 03 ( 読込 03 H) 2 Starting Register Address Hi 先頭レジスタアドレス上位 01 3 Starting Register Address Lo 先頭レジスタアドレス下位 00 4 No. of Registers Hi 読込レジスタ数上位 00 5 No. of Registers Lo 読込レジスタ数下位 01 6 CRC16 Lo 0~5 のデータから計算した 85 CRC 下位 7 CRC16 Hi 0~5 のデータから計算した CRC 上位 F6 温度計の応答 : 測定温度 23.5 (00EB H) レスポンス データ番号 フィールド名 説明 データ例 (HEX) 0 Slave Address スレーブアドレス 01 (1 対 1 通信なので常に 01 H) 1 Function Function コード 03 ( 読込 03 H) 2 Byte Count 応答データ数 ( データ番号 3~4 迄 ) 02 3 測定温度 Hi 0100H に対する応答上位 00 4 測定温度 Lo 0100H に対する応答下位 EB 5 CRC16 Lo 0~8 のデータから計算した F8 CRC 下位 6 CRC16 Hi 0~8 のデータから計算した CRC 上位 0B 数字末尾の H は 16 進数を表しています 5

複数レジスタのリードコマンド / レスポンス 例 ) レジスタアドレス 0100 H から 3 レジスタをリードする例です リードコマンド データ番号 フィールド名 説明 データ例 (HEX) 0 Slave Address スレーブアドレス 01 (1 対 1 通信なので常に 01H) 1 Function Function コード 03 ( 読込 03 H) 2 Starting Register Address Hi 先頭レジスタアドレス上位 01 3 Starting Register Address Lo 先頭レジスタアドレス下位 00 4 No. of Registers Hi 読込レジスタ数上位 00 5 No. of Registers Lo 読込レジスタ数下位 03 6 CRC16 Lo 0~5 のデータから計算した 04 CRC 下位 7 CRC16 Hi 0~5 のデータから計算した CRC 上位 37 温度計の応答 : 測定温度 23.5 (00EB H) ステータス 0000 H 測定温度ホールド値 23.5 (00EB H) レスポンス データ番号 フィールド名 説明 データ例 (HEX) 0 Slave Address スレーブアドレス 01 (1 対 1 通信なので常に 01 H) 1 Function Function コード 03 ( 読込 03 H) 2 Byte Count 応答データ数 ( データ番号 3~8 迄 ) 06 3 測定温度 Hi 0100H に対する応答上位 00 4 測定温度 Lo 0100H に対する応答下位 EB 5 ステータス Hi 0101H に対する応答上位 00 6 ステータス Lo 0101H に対する応答下位 00 7 測定温度ホールド値 Hi 0102H に対する応答上位 00 8 測定温度ホールド値 Lo 0102H に対する応答下位 EB 9 CRC16 Lo 0~8 のデータから計算した 45 CRC 下位 10 CRC16 Hi 0~8 のデータから計算した CRC 上位 2D 数字末尾の H は 16 進数を表しています 6

単一レジスタのセットコマンド / レスポンス 例 ) レジスタアドレス 0300 H( 放射率設定 ) に 0.950(03B6 H) をセットする例です リードコマンド データ番号 フィールド名 説明 データ例 (HEX) 0 Slave Address スレーブアドレス 01 (1 対 1 通信なので常に 01 H) 1 Function Function コード 06 ( 書込 06 H) 2 Register Address Hi 書込するレジスタアドレス上位 03 3 Register Address Lo 書込するレジスタアドレス下位 00 4 Set Value Hi 設定する値上位 03 5 Set Value Lo 設定する値下位 B6 6 CRC16 Lo 0~5 のデータから計算した 08 CRC 下位 7 CRC16 Hi 0~5 のデータから計算した CRC 上位 C8 正常レスポンスはセットコマンドと同一電文になります レスポンス データ番号 フィールド名 説明 データ例 (HEX) 0 Slave Address スレーブアドレス 01 (1 対 1 通信なので常に 01 H) 1 Function Function コード 06 ( 書込 06 H) 2 Register Address Hi 書込するレジスタアドレス上位 03 3 Register Address Lo 書込するレジスタアドレス下位 00 4 Set Value Hi 設定する値上位 03 5 Set Value Lo 設定する値下位 B6 6 CRC16 Lo 0~5 のデータから計算した 08 CRC 下位 7 CRC16 Hi 0~5 のデータから計算した CRC 上位 C8 数字末尾の H は 16 進数を表しています 7

リードコマンド / セットコマンドに対する異常レスポンス 例 ) リードコマンドに対して Illegal register address エラーが発生した例です 異常レスポンス データ番号フィールド名説明データ例 (HEX) 0 Slave Address スレーブアドレス (1 対 1 通信なので常に 01 H) 1 Function 80H Function コードに 80 H を 加算します 2 Error Code エラーの種類 12 ページを参照下さい 3 CRC16 Lo 0~5 のデータから計算した CRC 下位 4 CRC16 Hi 0~5 のデータから計算した CRC 上位 数字末尾の H は 16 進数を表しています 01 83 (03 80) 02 C0 F1 8

レジスタ一覧 データの表現 測定値など温度データはすべてオフセットバイナリ(10 倍データ ) の でやり取りします 例 )30000 カウント 30000 10=3000.0 16 進数表現 0000 H=0.0 7FFF H=3276.7 8000 H= 3276.8 FFFF H= 0.1 レジスタ 対応 機能 データ範囲 アドレス Function 0040 H 03 H 温度計 F/W バージョン 0100 H 03 H 測定温度 最高表示温度 ~ 最低表示温度 最高表示温度以上の場合 7FFFH を返信 最低表示温度以下の場合 8000H を返信 0101 H 03 H ステータス ステータス割り付け表 (12 ページ ) 参照 0102 H 03 H 測定温度ホールドされた値 最高表示温度 ~ 最低表示温度 最高表示温度以上の場合 7FFFH を返信 最低表示温度以下の場合 8000H を返信 0103 H 03 H 放射率設定 50 (0.050) ~ 1000 (1.000) 0120 H 03 H / 06 H アラーム H 設定値 最高表示温度 ~アラーム L 設定値 0121 H 03 H / 06 H アラーム L 設定値 アラーム H 設定値 ~ 最低表示温度 0122 H 03 H / 06 H ピークホールド ON/OFF 0 (OFF) 1 (ON) 0123 H 03 H / 06 H サンプルホールド ON/OFF 0 (OFF) 1 (ON) 0124 H 03 H / 06 H スムージング時間 0 (0.0001sec) 1 (0.0002) 2 (0.0005) 3 (0.001) 4 (0.002) 5 (0.005) 6 (0.01) 7 (0.02) 8 (0.05) 9 (0.1) 10 (0.2) 11 (0.5) 12 (1) 13 (2) 14 (5) 0125 H 03 H / 06 H 照準ランプ ON/OFF 0 (OFF) 1 (ON) 9

数字末尾の H は 16 進数を表しています レジスタ 対応 機能 データ範囲 アドレス Function 0201 H 03 H / 06 H 外部制御ピン 0 ( アラーム出力 ) 1 ( 外部照準制御 ) 0202 H 03 H / 06 H 照準ランプ制御 0 ( 常時 OFF) 1 (ON/OFF) 2 ( 常時 ON) 0208 H 03 H / 06 H 室温反射補正有無 0 (OFF) 1 (ON) 0209 H 03 H / 06 H アラームヒステリシス幅 0 (0.0) ~ 999 (99.9) 020A H 03 H / 06 H アラームモード 0 ( アラームモード 1) 1 ( アラームモード 2) 2 ( アラームモード 3) 3 ( アラームモード 4) 4 ( アラームモード 5) 5 ( アラームモード 6) 6 ( アラームモード 7) 7 ( アラームモード 8) 020C H 03 H / 06 H アラーム判定切換 0 ( リアル ) 1 ( ホールド ) 020D H 03 H / 06 H ピークホルードリセット方式 0 ( 時間 ) 1 ( 外部 ) 2 ( 放電 ) 020E H 03 H / 06 H ピークホールドリセット時間 1 (0.01 秒 ) ~ 1000(10.00 秒 ) または放電時間 020F H 03 H / 06 H ピークホールド放電レベル 20 (0.20) ~ 100(1.00) 0210 H 03 H / 06 H ピークホールド出力 0 ( 表示のみ ) 1 ( 表示 +アナログ出力 ) 2 ( 全部 ) 3 ( アナログ出力のみ ) 0211 H 03 H / 06 H ピークホールド 0 (+) 外部タイミング入力の極性 1 (-) 0212 H 03 H / 06 H サンプルホールド出力 0 ( 表示のみ ) 1 ( 表示 +アナログ出力 ) 2 ( 全部 ) 3 ( アナログ出力のみ ) 0213 H 03 H / 06 H サンプルホールド 0 (+) 外部タイミング入力の極性 1 (-) 数字末尾の H は 16 進数を表しています 10

レジスタ 対応 機能 データ範囲 アドレス Function 0214 H 03 H / 06 H アナログ出力出力タイプ 0 (4~20mA) 1 (0~20mA) 2 (0~1V) 3 (mv/ ) 4 ( なし ) 0215 H 03 H / 06 H アナログ出力上限温度 3276.7 ~アナログ出力下限温度 0216 H 03 H / 06 H アナログ出力下限温度 アナログ出力上限温度 ~-200 0217 H 03 H / 06 H エラー時アナログ出力極性 0 ( 無処理 ) 1 (High) 2 (Low) 021B H 03 H / 06 H センサー補正スパン 500 (0.500) ~ 2000 (2.000) 021C H 03 H / 06 H センサー補正オフセット -500 (-50.0) ~ 500 (50.0) 021E H 03 H / 06 H 通信速度 0 (1200bps) 1 (2400bps) 2 (4800bps) 3 (9600bps) 4 (19200bps) 5 (38400bps) 6 (57600bps) 7 (115200bps) 021F H 03 H / 06 H パリティービット 0 ( なし ) 1 ( 偶数 ) 2 ( 奇数 ) 0220 H 03 H / 06 H ストップビット 0 (1bit) 1 (2bit) 0300 H 03 H / 06 H 放射率設定 50 (0.050) ~ 1000 (1.000) ( コマンド毎にメモリに保存 ) 0301 H 03 H / 06 H 放射率設定 50 (0.050) ~ 1000 (1.000) ( メモリに保存しない ) 0302 H 06 H 自動放射率設定 最高表示温度 ~ 最低表示温度 ( 最低表示温度が50 以下の場合は50 迄 ) 0303 H 03 H / 06 H 放射率反射補正値 -1999 ~ 9999 ( コマンド毎にメモリに保存 ) 0304 H 03 H / 06 H 放射率反射補正値 -1999 ~ 9999 ( メモリに保存しない ) 0305 H 06 H 自動放射率反射補正値 最高表示温度 ~ 最低表示温度 0306 H 06 H イニシャライズ 1( イニシャライズ実行 ) 数字末尾の H は 16 進数を表しています 11

ステータス割り付け表 MSB LSB 8 4 2 1 8 4 2 1 8 4 2 1 8 4 2 1 ピークホールド状態 サンプルホールド状態 アラーム状態 ±OVER の有無 4bit づつ割り付け ピークホールド状態 (0: なし 1: 表示ホールド発生中 2: アナログ出力ホールド発生中 3:1+2 発生中 ) サンプルホールド状態 (0: なし 1: サンプルホールド発生中 ) アラーム状態 (0: なし 1: アラーム発生中 ) ±OVER の有無 (0: なし 1: 温度が最高表示温度以上 2: 温度が最低表示温度以下 ) 例 ) 0000 0000 0001 0010(0012 H) ピークホールドなし サンプルホールドなし アラーム発生中 OVER 発生中 エラーコード 通信エラー時の応答 エラーコード 名称 内容 01 H Illegal function Function コードが未定義 02 H Illegal register address レジスタ番号が未定義 03 H Illegal data value 設定値が設定範囲外 80 H 自動設定エラー 目標温度に設定できなかった 温度計エラー時の応答 エラーコード 名称 内容 13 H 内部電圧異常 温度計内部の電圧低下 数字末尾の H は 16 進数を表しています 12

CRC-16 の算出 エラーチェックは スレーブアドレスからデータの最後までの CRC 16 を計算し 算出した 16 ビットデータを下位上位の順にデータの後ろにセットします CRC 16 の計算方法 CRC のデータを X とします 1)X に FFFFH を代入します 2)1つ目のデータと X の排他的論理和 (XOR) を取り X に代入します 3)X の右端のビットが1の場合 X を右に1ビットシフトした後 A001H で XOR を取り X に代入します X の右端のビットが0の場合 X を右に1ビットシフトして 4) に進みます 4)8 回シフトするまで3) を繰り返します 5) 次のデータと X の XOR をとり X に代入します 6) 最後のデータまで3)~5) を繰り返します 7)X を CRC 16 としてデータの後ろに下位上位の順でセットします 13

CRC-16 計算サンプルプログラム RxData[] には受信データが格納されているものとします uint8_t RxData[]; uint16_t crc16; uint8_t *cptr1 uint16_t NoOfByte = 6; int16_t carry; int16_t i; int16_t j; cptr1 = RxData; crc16 = 0xffff; for(i=0;i<noofbyte;i++){ crc16=crc16^(uint8_t)(*(cptr1+i)); for(j=0;j<8;j++){ if(crc16 & 0x0001){ carry=1; }else{ carry=0; } crc16 = crc16>>1; if(carry){ crc16=crc16^0xa001; } } } 14

RS232C 通信サンプルコード VB.NET '******************************************************************************************* '* * '* TMHX RS232C 通信サンプルコード VB.NET * '* * '******************************************************************************************* Imports System.IO.Ports 'serial port で使う Public Class Form1 Private port As New SerialPort("COM4", 9600, 0, 8, 2) ' シリアルポート宣言 '/***************************************************************************************** '/ 測定温度データ読込 Private Sub TempRead() ' 送信処理 Dim CRC As Long Dim SendByte() As Byte = New Byte(7) {} SendByte(0) = &H1 ' スレーブアドレス SendByte(1) = &H3 'Functionコード読込 SendByte(2) = &H1 ' 先頭レジスタアドレス測定温度上位 SendByte(3) = &H0 ' 先頭レジスタアドレス測定温度下位 SendByte(4) = &H0 ' 読込レジスタ数上位 SendByte(5) = &H1 ' 読込レジスタ数下位 CRC = CrcY(SendByte, 6) ' 送信データのCRCを計算 SendByte(6) = CByte(CRC And &HFF) 'CRC Highバイト SendByte(7) = CByte(CRC >> 8) 'CRC Lowバイト Try port.open() ' 通信ポートを開く port.discardoutbuffer() ' 送信バッファのクリア port.discardinbuffer() ' 受信バッファのクリア port.write(sendbyte, 0, 8) ' 送信する Debug.WriteLine(BitConverter.ToString(SendByte)) ' イミディエイトウィンドウに送信データを表示する Catch ex As Exception MessageBox.Show(ex.Message) Exit Sub End Try ' 受信処理 Dim length As Integer = 7 ' 受信バイト数 Dim ReceivedByte() As Byte = New Byte(length - 1) {} ' 受信データ用変数 Dim ct As Integer ' タイムアウト用カウンタ Do System.Threading.Thread.Sleep(10) '10mSタイマ ct += 1 If ct > 10 Then Exit Do '100mS 以上ならタイムアウト length = port.bytestoread ' 受信バイト数を確認 Loop Until length >= 7 ' 受信バイト数が 7 になるまで待つ Try System.Threading.Thread.Sleep(10) '10mSタイマ length = port.read(receivedbyte, 0, length) ' 受信データのReceivedByteへの読込 If length <= 0 Then port.close() ' 通信ポートを閉じる ' エラー処理省略 Exit Sub ' イミディエイトウィンドウに送信データを表示する Debug.WriteLine(BitConverter.ToString(ReceivedByte)) Catch ex As Exception MessageBox.Show(ex.Message) End Try port.close() ' 通信ポートを閉じる 15

' 受信データ処理 CRC = CrcY(ReceivedByte, length - 2) ' 受信データの CRC を計算 If CByte(CRC >> 8) <> ReceivedByte(length - 1) Or CByte(CRC And &HFF) <> ReceivedByte(length - 2) Then 'CRC エラー処理省略 Exit Sub ' コンピューターのアーキテクチャが リトルエンディアンかビッグエンディアンかにより ' 上位バイトと下位バイトの並び順を変える Dim Temp As Byte() = New Byte(1) {} If BitConverter.IsLittleEndian Then Temp(0) = ReceivedByte(4) Temp(1) = ReceivedByte(3) Else Temp(0) = ReceivedByte(3) Temp(1) = ReceivedByte(4) Dim readvalue As Short = BitConverter.ToInt16(Temp, 0) ' 受信された測定温度を整数 小数変換し イミディエイトウィンドウに表示 Debug.WriteLine(readValue / 10) If readvalue = 32767 Then ' 最高表示温度以上 (&H7FFF) のエラー処理省略 Exit Sub If readvalue = -32768 Then ' 最低表示温度 (&H8000) 以下のエラー処理省略 Exit Sub If ReceivedByte(1) >= &H80 Then ' ファンクションは エラーか? ' エラー処理省略 End Sub '/***************************************************************************************** '/ ' 放射率書込 Private Sub EmissWrite() ' 送信処理 Dim CRC As Long Dim SendByte() As Byte = New Byte(7) {} SendByte(0) = &H1 ' スレーブアドレス SendByte(1) = &H6 'Function コード書込み SendByte(2) = &H3 ' 書込するレジスタアドレス放射率上位 SendByte(3) = &H0 ' 書込するレジスタアドレス放射率下位 Dim Emiss As Single = 0.95 ' 書き込み値をセット放射率 0.95 Dim writevalue As Short = Emiss * 1000 ' 小数 整数変換 Dim writebyte As Byte() = BitConverter.GetBytes(writeValue) If BitConverter.IsLittleEndian Then SendByte(4) = writebyte(1) ' 上位 SendByte(5) = writebyte(0) ' 下位 Else SendByte(4) = writebyte(0) ' 上位 SendByte(5) = writebyte(1) ' 下位 CRC = CrcY(SendByte, 6) ' 送信データの CRC を計算 SendByte(6) = CByte(CRC And &HFF) 'CRC High バイト SendByte(7) = CByte(CRC >> 8) 'CRC Low バイト Try port.open() ' 通信ポートを開く port.discardoutbuffer() ' 送信バッファのクリア port.discardinbuffer() ' 受信バッファのクリア port.write(sendbyte, 0, 8) ' 送信する 16

' イミディエイトウィンドウに送信データを表示する Debug.WriteLine(BitConverter.ToString(SendByte)) Catch ex As Exception MessageBox.Show(ex.Message) Exit Sub End Try ' 受信処理 Dim length As Integer = 8 ' 受信バイト数 Dim ReceivedByte() As Byte = New Byte(length - 1) {} ' 受信データ用変数 Dim ct As Integer ' タイムアウト用カウンタ Do System.Threading.Thread.Sleep(10) '10mSタイマ ct += 1 If ct > 10 Then Exit Do '100mS 以上ならタイムアウト length = port.bytestoread ' 受信バイト数を確認 Loop Until length >= 8 ' 受信バイト数が 8 になるまで待つ Try System.Threading.Thread.Sleep(10) '10mSタイマ length = port.read(receivedbyte, 0, length) ' 受信データのReceivedByteへの読込 If length <= 0 Then port.close() ' 通信ポートを閉じる ' エラー処理省略 Exit Sub ' イミディエイトウィンドウに送信データを表示する Debug.WriteLine(BitConverter.ToString(ReceivedByte)) txtrecieve.text = BitConverter.ToString(ReceivedByte) txtinput.text = Mid(txtRecieve.Text, 13, 5) Catch ex As Exception MessageBox.Show(ex.Message) End Try port.close() ' 通信ポートを閉じる ' 送信データと受信データが同じでなければ エラー処理 If System.Linq.Enumerable.SequenceEqual(SendByte, ReceivedByte) = False Then ' エラー処理省略 End Sub Private Const CRC_POLYNOM As Long = &HA001& Private Const CRC_PRESET As Long = &HFFFF& 'CRC 多項式 = x16+x12+x5+1 'CRCプリセット '/***************************************************************************************** ' CRC16 計算 Public Function CrcY(ByRef dat() As Byte, No As Long) As Long Dim i As Long Dim j As Long CrcY = CRC_PRESET For i = 0 To No - 1 CrcY = CrcY Xor CLng(dat(i)) For j = 0 To 7 If (CrcY And &H1&) <> 0 Then CrcY = (CrcY 2) Xor CRC_POLYNOM Else CrcY = CrcY 2 Next j Next i End Function 17