====================================================================================================
== Release Note ====================================================================================

■ V11.083 : 2011/08/27

  ・ 新規公開



■ V11.091 : 2011/09/08

  ・ TDSMDMssgXxxxx() 関数により、SML形式、TS300形式両方のメッセージ定義ファイルの使用を同一の関数
     で可能とした。



■ V11.101 : 2011/10/05
■ V11.102 : 2011/10/11

  ・ 内部管理上の問題に関する改修。機能での変更はない。
  


■ V11.110 : 2011/11/08

  ・ メッセージ定義ファイルを使用した場合の、不定個数リストに関する改訂。
    ・ 不定個数リストの定義個数に関する制限を撤廃。複数の不定個数リストを定義可能とした。
    ・ 複数レベルで複数の不定個数リストを設定可能とした。
    ・ 不定個数リストの個数が =0 の場合に、メッセージ構築が正しく行えない問題を改訂。

  ・ メッセージ定義ファイルにおける改訂。
    ・ 複数行に渡る /* */ を可能とする。
    ・ 有効行の中で /* */ の部分のみをコメント化が可能。
    ・ テキスト項目データの " " 中では、コメント指示文字の評価を行わない。
    ・ '\' によるエスケープを行う。

  ・ 通信トレースに関する改訂。
    ・ 項目名を表示する場合、(TRCTTYPE&0x0400)!=0 の場合、先頭行にメッセージ名称を表示する。
    ・ 通信トレースのメッセージ・リストの先頭スペースの個数を (TRCTTYPE&0800) で 2 or 0 の選択を
       可能とした。
    ・ TDWTraceSetDataSize() を新設し、通信トレースの打ち切りバイト数を設定可能とした。

  ・ HSMS の場合、Separate request が出ていない状態で Shutdown を行う場合、Close() により、強制的
     に Separate request を送出するように改訂。



■ V11.111 : 2011/11/15

  ・ TDSMssgNextL() における F4、F8、S8、U8 の表現が間違っていた（正常に表現できていなかった）問題
     を改訂。



■ V11.120 : 2011/12/06

  ・ HSMS 通信に関する改訂。
    ・ Passive 側において、一旦 Accept し、切断した後、再度 Accept した場合に、トレース出力に
       ACCEPT が表示されない問題を改訂。
    ・ Diselect 要求に対する T6 タイムアウトが発生するケースを想定していない問題を改訂。
    ・ Select、Deselect、LinkTest Request 時の W-bit の扱いを変更。デフォルトでは W-bit=0 とし、
       .ini の (DEVMODE&0x08)!=0 の場合に =1 とする。

  ・ トランザクションＩＤの付与において、制御用、データ用のソースＩＤを同一のものを指定するする事
     を可能とした。ただし、この場合 CommSend() において、送信時に実際に付与する TXID と戻り値に戻る
     TXID が異なる場合があるので、説明書に注記した。



■ V12.010 : 2012/01/12

  ・ SECS-1 通信における Single Block 時のブロック番号を (DEVMODE&0x04) で指定可能とした。

  ・ データ送信時 (特に SECS-1 で) 大きなメッセージ送信する場合に、送信に時間がかかって T3TO になる
     場合があること抑止するため、データ送信後にタイマーの再設定を行い、送信前の TXID の登録時は長い
     値を設定することにすることを可能とした。

  ・ SML 形式メッセージ定義において、項目名定義部分 "XX[99.99]XXXXX" に ' '、'\t' の挿入を可能にし
     た。即ち "B [ 10.. 20] BINITEM" といった定義書式が可能となり、書式整形しやすくした。



■ V12.030 : 2012/03/06

  ・ パラメータ TORECV を追加し、指定時間メッセージ受信が無い場合に接続断する事を可能にした。

  ・ (SECSMODE&0x0100) を追加し、==0 の場合は、既接続中に新規接続があった場合は、その接続を即切断。
     !=0 の場合は、既接続を切断し、新規接続を有効とする。
     これにより、接続したまま、未動作のクライアントの接続を無効とすることを可能とした。

  ・ HSMS 時の Connect 要求が失敗した場合のエラー・コードを E_CONN_ERR と明確化した。

  ・ _TDSCommStatus() を追加し、現在の接続状態を取得することを可能とした。

  ・ _TDSMDMssgInitialize() の mode に 0x4000 を追加し、指定があった場合 ((mode&0x4000)!=0 の場合)
     は、スレッドのロックを行う。これにより、ユーザＡＰでロックを行う必要がなくなる。

  ・ 簡易 API (_TDSUDrvXxxxx() 系関数) を追加し、HSMS Active 側も Connect、Select 要求を AP 側で
     コード化することなく、接続し通信することを可能とした。



■ V12.031 : 2012/03/28

  ・ サンプル・ソースコードを改訂
    ・ メッセージ定義ファイル使用処理のロック制御
    ・ Sample1、Sample2 で、送受信 SECS メッセージ構造表示を送受信が混在しないように制御する処理
       を追加



■ V12.071 : 2012/07/08

  ・ プログラマーズ・マニュアルの _TDSMDMssgInitialize()、_TDSMDMssgTerminate() の mode に 関する
     記述に誤りがあり改訂。

  ・ .ini の XMSGSIZE に大きな値を設定した場合に、CPU負荷が増加する現象を回避。



■ V12.121 : 2012/12/12

  ・ _TDSMDMssgInitialize() にて、ロック制御を行う指定をしている場合で、_TDSMDMssgFinc() にて、
     指定 SF-Code に合致するメッセージが存在せず、エラーで戻る場合にも _TDSMDMssgExit() を実行し
     ないとロックが解除されない問題を解決。

  ・ NSG/TS300 形式のメッセージ定義ファイルを使用した場合の、デフォルト・パラメータ、チェック・
     パラメータの指定で、"" を指定すると、'"' が設定されてしまう問題を解決。

  ・ 通信トレース出力におけるリスト形式表示で、データ項目値を複数行に渡り表示することで、全データ
     値を表示することを可能とした。(TRCTTYPE&0x04) にて指定する。

  ・ 通信トレース出力における１６進数形式表示で、１行に表示するデータ個数を、16バイト、20バイトの
     選択を可能とした。(TRCTTYPE&0x08) にて指定する。

  ・ _TDSMssgBuild()、_TDSMssgNext() の mode&0x4000 を有効とし、２バイト文字列の自動変換をサポート
     した。

  ・ 通信トレースに任意のコメントを出力する際、_TDSCommSendComment() で指定した文字列の後ろに、
     ゴミが付いてしまう場合がある問題を解決。
     また、長いメッセージを指定した場合に発生する問題を解決。

  ・ 通信トレース出力時、SECS データを構成する項目のデータ個数が多く、トレースの１行に収まらずに
     最後が、"..." 表記となる場合に、通信トレースに正しく表示されない問題を解決。

  ・ Windows での使用時に、DEVMODE の設定が S9Fx でトランザクションの解放を行う設定の場合に、トラ
     ンザクションの解放がされない問題を解決。

  ・ Ｔ３タイムアウト発生後に対応する２次メッセージを受信する等により、予期せぬメッセージを受信し
     た場合の報告がされない問題を解決。_TDSCommRecv() から -EFAULT で戻るように改訂。

  ・ SECS-1 接続の場合、_TDSCommOpen() 直後に、_TDSCommStatus() の値が =3 となり、接続状態を示す
     ように改訂。

  ・ _TDSSMMssgXxxxx()、_TDSTSMssgXxxxx() 系関数を廃し、_TDSMDMssgXxxxx() に一本化した。
     _TDSSMMssgXxxxx()、_TDSTSMssgXxxxx() 系関数は、互換性を保持するため、TDS.h 内でマクロ定義。
 
  ・ TDSSample1Proc.cpp、TDSSample2Proc.cpp での _TDSMDMssgInitialize() の mode の値が、仕様書での
     定義と異なった設定（0x8000 及び 0x0000）にしてしまっていたものを、正しい値（0x4000）に訂正。

  ・ 付属の Sample.sml の S6F11 の構成を変更しました。ご注意下さい。



■ V12.122 : 2013/11/10

  ・ 内部管理上の問題に関する改修。機能での変更はない。



■ V14.040 : 2014/04/25

  ・ C#、VB 対応 DLL である TDCSS.dll、TDVBS.dll が Win32 プラットホーム用であることを明記し、
     サンプルの Makefile 及び Readme.txt に、Win64 プラットホームでの Build 方法を記述。

  ・ 有効でないメッセージ定義ファイルを指定しているにも関わらず、誤って通信トレースにメッセージ名
     称、メッセージ項目名称を表示する旨の指示を行っている場合の問題を回避。

  ・ 処理中にシステム時刻が大きく変化した場合のタイムアウト処理に対応。

  ・ Sample1、Sample2 において終了時に異常終了する現象に簡易的に対応。詳細は、Sample1Dlg.cpp、
     Sample2Dlg.cpp 内のコメント参照。



■ V14.060 : 2014/06/27

  ・ Java API を整備 (JNA を使用した実装)

  ・ MacOS X (10.6.3 以降) に対応



■ V15.050 : 2015/05/08

  ・ T7 タイムアウト 及び 無受信タイムアウト発生時の、エラー情報を、ユーザＡＰにまで返す様に改訂。

  ・ １次メッセージと２次メッセージのトレース出力の順番が入れ違いになる現象を回避

  ・ .ini ファイルの DEVID 行に、複数の DeviceID を指定可能とした。

  ・ FreeBSD (10.1 以降) に対応



■ V15.080 : 2015/08/01

  ・ 64bit アプリケーション対応の .lib、.dll 等 (UNIX 系ＯＳも含む) を整備。

  ・ TDS.pdf の _TDSMssgNext() の戻り値で、解析終了を意味する値を -ENODATA と誤記していたが、正し
     い値 -E_NODATA に訂正。

  ・ TDS.h に _TDSUDrvUserComment() マクロを定義

  ・ HSMS 接続の場合、_TDSCommRecv() を実行しないと、HSMS Selected になる過程での状態を
     _TDSCommStatus() が正しい値を返さない現象を、HSMS Selected 以前の状態の場合 _TDSCommStatus()
     内で _TDSCommRecv() を実行する事により回避するように改訂。

  ・ SECS-2 メッセージ編集における項目形式コード =022 (ローカル・キャラクタ文字列項目) の扱いに誤
     りがあり、2Bytes で１項目とカウントしていたのを、正しく 1Byte で１項目とするよう修正。
     同時に、UTF-8 と SJIS、EUC-J 間での変換時に、使用 Byte数が異なる事による相違を（できるだけ）
     吸収するように改訂。

  ・ 上記に関連して、通信トレース出力において、マルチバイト文字列（"K" 指定）が正しく表現されない
     問題を改訂。また、同項目を含むメッセージを正しく認識できず、トレース出力において項目名が表示
     されない問題、_TDSMDMssgAutoRes() で対応メッセージを選択しない問題を修正。

  ・ メッセージ定義を使用した２次メッセージの自動選択機能（_TDSMDMssgAutoRes()）において、メッセー
     ジ方向を両方向とした１次メッセージ定義の下方に定義した２次メッセージの選択をしない現象を修正。

  ・ SECS メッセージの構築、解析が SECS 通信制御識別子を指定しなくても可能とした。
     _TDSMssgInit()、_TDSMssgFind() の mode に bit#11 を新設し、パラメータ fdc の扱いを変更。
     これにより、TDS 設定ファイル (.ini ファイル) を用意しなくても、SECS メッセージの構築、解析を
     可能とした。

  ・ PeerGroup 社 SDR の API と互換性のある C、C++ における SdrXxxxx() 関数 I/F 互換ライブラリ
     及び Yokogawa 社 YSD の API と互換性のある C、C++ における YSD_Xxxxxx() 関数 I/F 互換ライブラ
     リを、おまけとして整備した。
     SDR 互換 API、YSD 互換 API に関しては、弊社（info@trust-design.co.jp）までお問い合わせ下さい。



■ V15.110 : 2015/11/13

  ・ ライセンス管理の誤り（ファイアーウォール等によりライセンス管理情報がブロックされたと誤検出し
     てしまう場合がある）を改訂。



■ V15.111 : 2015/11/27

  ・ 設定ファイル（.ini）から取得した設定値を、初期化時 及び 再読込時に通信トレース・ファイルに
     出力する。
  ・ 起動スレッドのスタック・サイズの指定値（THSTACKUSR、THSTACKSYS）を正しく評価できていなかった
     問題を解決。



■ V16.010 : 2016/01/08

  ・ 設定ファイル（.ini）における共通項目に関するセクションとして、従来の [DEFAULT] に加えて
     [SECSCOMMON] を追加。従って、各接続条件において共通なパラメータは、[DEFAULT] もしくは
     [SECSCOMMON] セクションで定義することが可能。
     従来 [SECSCOMMON] セクションを定義し、使用している場合は、申し訳ありませんが、他のセクション
     名に変更する等の対応が必要になります。

  ・ 設定ファイル (.ini) の DEVMODE 指定の第16ビットを追加し、HSMS 通信における _TDSCommSend() で
     の Select、Deselect、Separate Request 送信時のセッションＩＤに、任意の値を付与する事を可能と
     した。

  ・ ライセンス管理において、他ＰＣでの同一ライセンス・キーコードのチェックを、ライセンス・キー
     コード発行日から６ヶ月が経過した後実行していたが、ライセンス・キーコード発行日から実行する
     ように変更。



■ V16.011 : 2016/01/15

  ・ 設定ファイル（.ini ファイル）を評価する際、DEVID の指定を [DEFAULT] セクション以外で複数指定
     した場合等に異常終了する等の場合がある問題を修正。



■ V16.012 : 2016/02/25

  ・ TDS.h の _TDSCommUserComment()、_TDSUDrvUserComment() のマクロ定義に ';' が付属している不具合
     を改訂。

  ・ ＡＰからの Reject 要求送信において、SessionID (DeviceID) を無指定 (=0) とした場合にも、データ
     送信要求と同様、設定ファイル (.ini ファイル) の DEVID に指定した先頭の値を使用するように改訂。

  ・ _TDSMDMssgInitialize() の (mode&0x03) による、メッセージ定義ファイルの形式指定を path==0 を指
     定した場合は無効とし、この場合のメッセージ定義ファイルの形式指定は、(TRCTTYPE&0x0300) 値にて
     決定する。

  ・ トレース・ファイルをサイズ超過で切り替える場合、1000 以上の通番が付いたファイルの次のファイル
     が、正しい通番にならない問題を修正。

  ・ トレース・ファイルとして、日付をファイル先頭に付与した形式を指定した場合で、ファイル・サイズ
     超過でのファイル切り替え指定を行った場合、正しい通番が付与されない場合がある問題を修正。

  ・ 古トレース・ファイル削除機能において、正しく削除できない場合（日付指定の無いトレース・ファイ
     ル、日付フォルダを使用したトレース・ファイル）を解決。

  ・ 起動時点が、設定ファイル（.ini）の TRCDELTIME 以降である場合、翌日の TRCDELTIME になるまで
     古トレース・ファイル削除機能を実行しなかったのを、TRCDELDAY として負値を設定した場合は、起動
     時点で常に１回同起動を実行するように機能追加。

  ・ Java 用 .jar ファイルの名称を TDS.jar から TDJVS.jar に変更。
     現在 TDS.jar を使用している場合は、CLASSPATH の設定を TDJVS.jar に変更してください。
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ・ JNA を使用しない（従って、TDS.dll も使用しない）Java 実行環境のみで動作する TDS.jar をリリー
     ス。ただし、TDS.jar は TDS.dll（及び TDJVS.jar）に比して、機能は限定的である。

  ・ Sample0/ のサンプル・ソースを改訂。



■ V16.040 : 2016/04/05

  ・ HSMS-GS 動作モードのサポート
     設定ファイル (.ini) の SECSMODE にいくつかの動作設定ビットを新設。また、従来の動作設定ビット
     とあわせて、HSMS-GS 動作モードをサポートする。新設動作設定ビットの詳細は、以下の記述 及び
     TDS.pdf を "HSMS-GS" で検索参照すること。

  ・ 設定ファイル (.ini) の SECSMODE の 0x8000、0x4000、0x2000、0x1000 ビットの設定値を追加し、
     HSMS 動作時の動作状態に関するモード設定を追加。

  ・ 設定ファイル (.ini) に指定する DEVMODE の 0x0008 及び 0x010000 の２つのビット指定を、それぞれ
     SECSMODE の 0x0800、0x0400 に移動。DEVMODE の当該ビット設定も当面は有効とする。
     近い将来のバージョンにおいて、DEVMODE の当該ビットは廃止予定です。SECSMODE の対応ビットへの
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     変更をお願いします。
     ~~~~~~~~~~~~~~~~~~~

  ・ HSMS Passive Open モードにおいて、既接続時に、新たな接続があった場合は、現状は指定により、即
     時切断する動作モードのみだが、SEMI E37 9.2.4.1 a の記述に基づく、Select Request に対して
     Select Status =3 を応答した後に切断する動作モードを、設定ファイル (.ini) の (SECSMODE&0x1000)
     に指定することにより可能とする。

  ・ _TDSUDrvRecv() において、32768Byte 以上のメッセージを受信することができなかったが、受信可能と
     した。


  ・ _TDSUDrvXxxx() を使用して Active 側と自動接続を行っている場合に、Passive 側が先に処理を終了
     した後、Active 側が _TDSUDrvClose() を実行すると、接続要求が異常終了し AP が異常停止してしま
     う現象が発生する場合がある問題を回避。

  ・ T3TimeOut、T6TimeOut 等発生時に、指定最大メッセージ長のメモリ・リークが発生する場合がある問題
     を回避。

  ・ HSMS Select Response 受信時に HeaderByte 3 (fcd) 値を評価していなかったが、正しく評価するよう
     に改訂。

  ・ Separate request 発行時に、CommRecv() にて req=99 (Not connected) が発生する前に、req=0 (All
     0) のメッセージが発生してしまう不具合を改訂。


  ・ _TDSCommSendError()、_TDSUDrvSendError() の (mode&0x02) を有効化し、厳密に送信結果を待つモー
     ドを追加。

  ・ 受信用 Callback を使用する等により、複数のスレッドで _TDSCommSend() を実行する時の mode 値を
     (mode&0x01)!=0 とした場合に、排他制御を実施する必要があったが、内部で排他制御を行う事により、
     AP 側での排他制御を不要とした。

  ・ １次メッセージ送信時にトランザクション管理テーブルが満杯の場合でも、エラー状態をエラー・ト
     レースに出力した上で送信処理を行っていたが、送信処理は行わず、エラーをＡＰに通知するように
     改訂。

  ・ T3Timeout 発生等により、その後の対応２次メッセージ受信時に .ini の DEVMODE の設定によっては
     S9F7 と Reject(3) を同時に自動送信する場合があるが、このような場合には S9F7 送信のみを送信す
     るように改訂。


  ・ C# 用の一部関数における引数の渡し方で ref にて修飾した配列引数に関して、ref キーワードを削除。
     C# 用関数を使用している AP は、ご面倒をお掛けいたしますが "ref" キーワードを削除し、再 Build
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     していただきますようお願い申し上げます。
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  ・ VB 用の一部関数において配列引数の渡し方を byref から byval に変更。
     従って、VB 用関数を使用している AP は、お手数ですが、再 Build が必要になります。
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  ・ 機能増強に伴い、使用するスタック・サイズが増加しています。特に Java + JNA 環境でご使用の場合
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     等、設定ファイル (.ini) の THSTACKUSR、THSTACKSYS の設定値に十分留意してください。
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  ・ 設定ファイル (.ini) の TRCPLEVEL、TRCULEVEL の空ループ出力のレベルを 21 から 23 に変更。

  ・ Sample0/、Sample1/、Sample2/ のサンプル・ソースを改訂
     ２次メッセージ送信時のデバイスＩＤを明示的に指定。



■ V16.060 : 2016/06/10

  ・ メッセージ定義ファイルでの２次メッセージ定義におけるメッセージ属性に 'D' を追加し、デフォルト
     の２次メッセージである事を宣言可能とした。これにより、_TDSMDMssgAutoRes() において、受信１次
     メッセージの構造が一致しないことにより、該当１次メッセージが見つからない場合も、SF-Code のみ
     が該当する場合の２次メッセージを特定する事を可能とした。



■ V16.060b: 2017/03/01

  ・ Sample0/SemiStandard.sml を改訂



■ V17.100 : 2017/10/06

  ・ 64bit バージョンにおいて、起動時に (トレース・ファイルのオープン処理に関連して) 異常終了する場
     合があることを解決した。

  ・ Windows 版での SECS-1 (RS232C) 接続において、115200 を超え定義の無い BPS (例えば 230400 等) を
     サポートした。



■ V18.010 : 2018/01/10

  ・ Passive 接続時に、Active 側から通常の切断手順以外で接続が切断された場合に、以降の接続において、
     接続後の切断の直後に再度接続が行われる場合等のおいて、動作が不安定になる現象を改善した。

  ・ (SECSMODE&0x000c0000) により HSMS 接続時の TCP/IP KeepAlive 機能の使用可否を設定可能とした。

  ・ TDSUDrv() による Active 時の自動接続処理において、切断を検知してから再接続動作をするまでの時間
     を、即時もしくは、T5 時間経過後のどちらかを (SECSMODE&0x00010000) で選択可能とした。

  ・ VB 用関数を使用する場合の "namespace TDVBL" を明示した。
     VB 用関数を使用する AP は、"imports TDVBL" を指定して、再 Build する必要があります。
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ・ SampleX フォルダを追加し、VS2013 の IDE 環境による 32bit AP の Build サンプルを置いた。
     サンプル AP 自体は、従来のものと変わりはない。



■ V18.020 : 2018/02/10

  ・ SML 形式メッセージ定義ファイルのメッセージ定義行で flag として 'H'、'E' のどちらも指定しない
     ケースにおいて、'D' のみを指定（即ち "D" もしくは "WD"）した場合に、メッセージ自体が有効にな
     らず、'D' 指定も有効にならない問題を解決。

  ・ メッセージ定義ファイルを使用した SECS メッセージの構築処理において、不定個数リスト内に @TIME
     項目が存在した場合、その項目が現在時刻に変換されない問題を解決。

  ・ SML 形式メッセージ定義ファイルにおける L[0|n] 形式をサポートした。
     これにより、LIST 項目に単一項目だけでなく、0個もしくは n個の異なるデータ項目を指定可能とした。

  ・ 上記 L[0|n] のサポートにより、SML 形式メッセージ定義ファイルのサンプル "SemiStandard.sml" を
     一部改訂。

