影響を受けるバージョン:BioStar2のすべてのバージョン、すべてのマスター端末のFW

発生頻度:ランダム

利用可能なパッチファイル:BioStar 2.8.10、2.8.11、2.8.12、2.8.13

修正バージョン:BioStar 2.8.14(リリース日:2021年12月)


問題の説明

端末の設定情報を変更するとBioStar2は誤った内部パラメーター値をRS485マスター端末に送信及び適用されます。

RS485マスター端末が再起動すると、エラーパラメータ値が、RS485スレーブ端末との通信接続に影響します。また、RS485マスター端末とRS485スレーブ端末が再接続できない問題が発生します。

RS485接続が切断されているため、ユーザーがRS485スレーブで認証するときドア解錠ができなくなります。




[イメージ1- スレーブ端末の切断]



お知らせ

問題が発生する前に予防することが重要です。

RS485構成でドアやエレベータボタンを制御する現場は、以下のパッチファイルを使用して適用してください。



<1> RS485切断の問題を防ぐ方法

1) BioStar SettingにてすべてのBioStarサービスを停止します。

2) 現在インストールされているBioStar2バージョンのパッチファイルをインストールします。


パッチファイルのダウンロード(バージョン2.8.10、2.8.11、2.8.12、2.8.13)はリンクをご確認ください。


3) .exeファイルのファイル名を「biostar-server.exe」に変更します。ダウンロードしたファイルを以下のパスに貼り付けます。念のため既存のbiostar-server.exeファイルはバックアップします。

C:\Program Files\BioStar 2 (x64)


4) DB接続プログラムを実行します。DBタイプに応じて「BioStar 2 Patch - Release Note_ENG.txt」のクエリをコピーし、クエリを実行します。


Maria DBの場合:Heidi SQLもしくはMySQL Workbench

MSSQLの場合:SQL Management Studio


「Select * from T_DEVFORCECMD」クエリを実行すると、テーブルが正常に作成されたかどうかを確認できます。


Maria DBクエリ

CREATE TABLE IF NOT EXISTS T_DEVFORCECMD
(    DEVID INT NOT NULL,    CMDTYPE INT NOT NULL COMMENT 'Command type ex : 0x012A 298 BS2_CMD_RS485_SET_SLAVE',    RSLT Char(1) DEFAULT 'N' COMMENT 'Y - sent, N - not yet',    createdAt DATETIME,    updatedAt DATETIME,    PRIMARY KEY (DEVID)    );
ALTER TABLE T_DEVFORCECMD COMMENT = 'Send a command only once to the target device.';
INSERT IGNORE INTO T_DEVFORCECMD(DEVID,CMDTYPE,RSLT,createdAt,updatedAt) SELECT DEVID, 298,'N', NOW() AS createdAt, NOW() AS updatedAt  FROM t_dev WHERE RS4MD <> 'S';CREATE TABLE IF NOT EXISTS T_DEVFORCECMD(    DEVID INT NOT NULL,    CMDTYPE INT NOT NULL COMMENT 'Command type ex : 0x012A 298 BS2_CMD_RS485_SET_SLAVE',    RSLT Char(1) DEFAULT 'N' COMMENT 'Y - sent, N - not yet',    createdAt DATETIME,    updatedAt DATETIME,    PRIMARY KEY (DEVID)    );ALTER TABLE T_DEVFORCECMD COMMENT = 'Send a command only once to the target device.';INSERT IGNORE INTO T_DEVFORCECMD(DEVID,CMDTYPE,RSLT,createdAt,updatedAt) SELECT DEVID, 298,'N', NOW() AS createdAt, NOW() AS updatedAt  FROM t_dev WHERE RS4MD <> 'S';CREATE TABLE IF NOT EXISTS T_DEVFORCECMD(    DEVID INT NOT NULL,    CMDTYPE INT NOT NULL COMMENT 'Command type ex : 0x012A 298 BS2_CMD_RS485_SET_SLAVE',    RSLT Char(1) DEFAULT 'N' COMMENT 'Y - sent, N - not yet',    createdAt DATETIME,    updatedAt DATETIME,    PRIMARY KEY (DEVID)    );ALTER TABLE T_DEVFORCECMD COMMENT = 'Send a command only once to the target device.';INSERT IGNORE INTO T_DEVFORCECMD(DEVID,CMDTYPE,RSLT,createdAt,updatedAt) SELECT DEVID, 298,'N', NOW() AS createdAt, NOW() AS updatedAt  FROM t_dev WHERE RS4MD <> 'S';CREATE TABLE IF NOT EXISTS T_DEVFORCECMD(    DEVID INT NOT NULL,    CMDTYPE INT NOT NULL COMMENT 'Command type ex : 0x012A 298 BS2_CMD_RS485_SET_SLAVE',    RSLT Char(1) DEFAULT 'N' COMMENT 'Y - sent, N - not yet',    createdAt DATETIME,    updatedAt DATETIME,    PRIMARY KEY (DEVID)    );ALTER TABLE T_DEVFORCECMD COMMENT = 'Send a command only once to the target device.';INSERT IGNORE INTO T_DEVFORCECMD(DEVID,CMDTYPE,RSLT,createdAt,updatedAt) SELECT DEVID, 298,'N', NOW() AS createdAt, NOW() AS updatedAt  FROM t_dev WHERE RS4MD <> 'S';CREATE TABLE IF NOT EXISTS T_DEVFORCECMD(    DEVID INT NOT NULL,    CMDTYPE INT NOT NULL COMMENT 'Command type ex : 0x012A 298 BS2_CMD_RS485_SET_SLAVE',    RSLT Char(1) DEFAULT 'N' COMMENT 'Y - sent, N - not yet',    createdAt DATETIME,    updatedAt DATETIME,    PRIMARY KEY (DEVID)    );ALTER TABLE T_DEVFORCECMD COMMENT = 'Send a command only once to the target device.';INSERT IGNORE INTO T_DEVFORCECMD(DEVID,CMDTYPE,RSLT,createdAt,updatedAt) SELECT DEVID, 298,'N', NOW() AS createdAt, NOW() AS updatedAt  FROM t_dev WHERE RS4MD <> 'S';CREATE TABLE IF NOT EXISTS T_DEVFORCECMD(    DEVID INT NOT NULL,    CMDTYPE INT NOT NULL COMMENT 'Command type ex : 0x012A 298 BS2_CMD_RS485_SET_SLAVE',    RSLT Char(1) DEFAULT 'N' COMMENT 'Y - sent, N - not yet',    createdAt DATETIME,    updatedAt DATETIME,    PRIMARY KEY (DEVID)    );ALTER TABLE T_DEVFORCECMD COMMENT = 'Send a command only once to the target device.';INSERT IGNORE INTO T_DEVFORCECMD(DEVID,CMDTYPE,RSLT,createdAt,updatedAt) SELECT DEVID, 298,'N', NOW() AS createdAt, NOW() AS updatedAt  FROM t_dev WHERE RS4MD <> 'S';CREATE TABLE IF NOT EXISTS T_DEVFORCECMD(    DEVID INT NOT NULL,    CMDTYPE INT NOT NULL COMMENT 'Command type ex : 0x012A 298 BS2_CMD_RS485_SET_SLAVE',    RSLT Char(1) DEFAULT 'N' COMMENT 'Y - sent, N - not yet',    createdAt DATETIME,    updatedAt DATETIME,    PRIMARY KEY (DEVID)    );ALTER TABLE T_DEVFORCECMD COMMENT = 'Send a command only once to the target device.';INSERT IGNORE INTO T_DEVFORCECMD(DEVID,CMDTYPE,RSLT,createdAt,updatedAt) SELECT DEVID, 298,'N', NOW() AS createdAt, NOW() AS updatedAt  FROM t_dev WHERE RS4MD <> 'S';CREATE TABLE IF NOT EXISTS T_DEVFORCECMD(    DEVID INT NOT NULL,    CMDTYPE INT NOT NULL COMMENT 'Command type ex : 0x012A 298 BS2_CMD_RS485_SET_SLAVE',    RSLT Char(1) DEFAULT 'N' COMMENT 'Y - sent, N - not yet',    createdAt DATETIME,    updatedAt DATETIME,    PRIMARY KEY (DEVID)    );ALTER TABLE T_DEVFORCECMD COMMENT = 'Send a command only once to the target device.';INSERT IGNORE INTO T_DEVFORCECMD(DEVID,CMDTYPE,RSLT,createdAt,updatedAt) SELECT DEVID, 298,'N', NOW() AS createdAt, NOW() AS updatedAt  FROM t_dev WHERE RS4MD <> 'S';CREATE TABLE IF NOT EXISTS T_DEVFORCECMD(    DEVID INT NOT NULL,    CMDTYPE INT NOT NULL COMMENT 'Command type ex : 0x012A 298 BS2_CMD_RS485_SET_SLAVE',    RSLT Char(1) DEFAULT 'N' COMMENT 'Y - sent, N - not yet',    createdAt DATETIME,    updatedAt DATETIME,    PRIMARY KEY (DEVID)    );ALTER TABLE T_DEVFORCECMD COMMENT = 'Send a command only once to the target device.';INSERT IGNORE INTO T_DEVFORCECMD(DEVID,CMDTYPE,RSLT,createdAt,updatedAt) SELECT DEVID, 298,'N', NOW() AS createdAt, NOW() AS updatedAt  FROM t_dev WHERE RS4MD <> 'S';
SQL


MSSQL DBクエリ

IF (NOT EXISTS (SELECT *                 FROM INFORMATION_SCHEMA.TABLES                 WHERE TABLE_SCHEMA = 'dbo'                 AND  TABLE_NAME = 'T_DEVFORCECMD'))
BEGIN
CREATE TABLE [T_DEVFORCECMD](    [DEVID] Int NOT NULL,    [CMDTYPE] Int NOT NULL,    [RSLT] Char(1) NULL CHECK ([RSLT] IN ('Y', 'N')),    [createdAt] DATETIME2 NULL,    [updatedAt] DATETIME2 NULL,    PRIMARY KEY ([DEVID]));

EXEC sp_addextendedproperty 'MS_Description', 'Command type ex : 0x012A 298 BS2_CMD_RS485_SET_SLAVE', 'USER', DBO, 'TABLE', T_DEVFORCECMD, 'COLUMN', CMDTYPE;
EXEC sp_addextendedproperty 'MS_Description', 'Y - sent, N - not yet', 'USER', DBO, 'TABLE', T_DEVFORCECMD, 'COLUMN', RSLT;
EXEC sp_addextendedproperty 'MS_Description', 'Send a command only once to the target device.', 'USER', DBO, 'TABLE', T_DEVFORCECMD
INSERT INTO [dbo].[T_DEVFORCECMD] SELECT DEVID,298,'N',GETDATE() AS createdAt,GETDATE() AS updatedAt FROM t_dev WHERE RS4MD <> 'S';
END
 
SQL


4) すべての手順1〜3が完了したら、すべてのBioStarサービスを開始します。

5) DB接続プログラムで、以下のクエリを使用して確認してください。検索結果がない場合、プロセスは成功です。

SELECT b.DEVID, a.RSLT FROM T_DEVFORCECMD a, T_DEV b WHERE a.DEVID = b.PARENTDEVID AND b.DEL = 'N' AND a.RSLT = 'N'
SQL

-状況によっては、クエリの「AND a.RSLT = 'N'」を削除して、RSLT列の値が 'Y'に変更されているかどうかを確認してもかまいません。このテーブルは、デバイスがBioStar2に接続されているときにRSLT値がNの場合にのみSetrs485コマンド信号を提供するために使用されます。Set rs485コマンド信号はスレーブを備えたマスターデバイスに与えられるため、BioStar2に接続されているデバイスの数によっては、RSLT列の値が「N」->「Y」に変わるまでに時間がかかる場合があります。




上記のパッチは、問題を防止するパッチであり、問題の状況を解決することはできません。RS485切断の問題がすでに発生している場合は、以下の手順をご確認ください。


<2> RS485切断の問題を解決する方法

1) BioStar2の端末メニューをクリックします。

2) 左のデバイスツリーからマスター端末を右クリックします。

3) スレーブ端末を検索をクリックします。

4) [スレーブ端末の検索]ポップアップウィンドウのローディングが完了します。[キャンセル]ボタンをクリックしてポップアップウィンドウを閉じます。

5) スレーブ端末がマスター端末に再接続されているかどうかを確認します。