バイナリデータの送信

 投稿者:とむさん  投稿日:2016年10月 7日(金)17時44分36秒
   バイナリデータの送信で悩んでいます.

 OPEN #1:NAME "COM1:38400,n,8,1"
 PRINT #1: CMD$
では,CMD$ に上記のコマンドヘッダが書けない,つまりバイナリーを表現できないため悩んでいます.

 ある機器との間で仮想シリアルポートによるRS232Cによる文字データの送受はうまくできていたので,使用していたプログラムを他の表示装置の制御でもしようとしたのですが,
コマンドヘッダ部とデータ部を以下のようにして送信するとのことです.

 その表示装置は,8ドット(縦)×48ドット(横)をドット毎にオン/オフ出来るのですが,
制御には,
 コマンドヘッダ部(6バイト)の
 FFh, FFh, 92h, 00h, C0h, 00h
に続いて,
データ部を縦の8ドットを1列として1バイトにして,1列目,2列目,...,48列目と,48列分送るというものです.
 なお,縦の8ドットは,00hからFFhまでのパターンの変化があります.

 そこで,教えて頂きたいのですが,
これまでは,コマンドをテキスト文字で送れていたので,以下のようにして問題なかったのですが,
今回は
 OPEN #1:NAME "COM1:38400,n,8,1"
 PRINT #1: CMD$
では,CMD$ に上記のコマンドヘッダが書けない,つまりバイナリーを表現できないため悩んでいます.

 因みに,上記の記述は,この十進BASIC掲示板内で教えて頂いたものです.

 未熟者なりに,色々と検索し,OPTION CHARACTER BYTE を関係するのかな?とも思うのですが,良く理解できていません.

 ご教示いただけると幸いです.
よろしくお願いします.
 

Re: バイナリデータの送信

 投稿者:しばっち  投稿日:2016年10月 7日(金)20時19分38秒
  > No.4125[元記事へ]

とむさんさんへのお返事です。

>  バイナリデータの送信で悩んでいます.
>
>  OPEN #1:NAME "COM1:38400,n,8,1"
>  PRINT #1: CMD$
> では,CMD$ に上記のコマンドヘッダが書けない,つまりバイナリーを表現できないため悩んでいます.
> 制御には,
>  コマンドヘッダ部(6バイト)の
>  FFh, FFh, 92h, 00h, C0h, 00h
> に続いて,


つまり下記のようなことでよろしいのでしょうか?

OPTION CHARACTER BYTE
OPEN #1:NAME "COM1:38400,n,8,1"
PRINT #1:CHR$(BVAL("FF",16));CHR$(BVAL("FF",16));CHR$(BVAL("92",16));CHR$(BVAL("00",16));CHR$(BVAL("C0",16));CHR$(BVAL("00",16));

BVAL関数で16進文字を10進数にしているだけなので簡易的に

PRINT #1:CHR$(255);CHR$(255);CHR$(146);CHR$(0);CHR$(192);CHR$(0);

でいいかと思います

>  その表示装置は,8ドット(縦)×48ドット(横)をドット毎にオン/オフ出来るのですが,
> データ部を縦の8ドットを1列として1バイトにして,1列目,2列目,...,48列目と,48列分送るというものです.
>  なお,縦の8ドットは,00hからFFhまでのパターンの変化があります.

ついでにコンバートプログラムも作ってみました。

DIM A$(8)
FOR I=1 TO 8
   READ A$(I)
NEXT I
DATA "*****     **     ****    ****     ***           "
DATA "**  **   * **   **   *    **     *  **          "
DATA "**  **  *   **  **        **    **              "
DATA "*****   *   **   ****     **    **              "
DATA "**  **  ******      **    **    **              "
DATA "**  **  *   **  *   **    **     *  **          "
DATA "*****   *   **   ****    ****     ***           "
DATA "                                                "
FOR I=1 TO 48
   LET X=0
   FOR J=1 TO 8
      IF A$(J)(I:I)<>" " THEN LET BIT=1 ELSE LET BIT=0
      LET X=X+BIT*2^(J-1)
   NEXT J
   PRINT I;":";X
   !' PRINT I;":";BSTR$(X,16)
NEXT I
END
 

Re: バイナリデータの送信

 投稿者:とむさん  投稿日:2016年10月 7日(金)22時48分25秒
  しばっちさんへのお返事です。

  早速にありがとうございます.
 しかも「BASIC」のサンプルの表示パターンもありがとうございます.

 ご教示いただいた内容で試そうと思いますが,
少し日が空いてしまいます.
(明日から3連休で機器が使えません.)
 休み明けにすぐに試したいと思って自宅で準備しますが,
取り急ぎのお礼まででございます.
 感謝申し上げます.

> とむさんさんへのお返事です。
>
> >  バイナリデータの送信で悩んでいます.
> >
> >  OPEN #1:NAME "COM1:38400,n,8,1"
> >  PRINT #1: CMD$
> > では,CMD$ に上記のコマンドヘッダが書けない,つまりバイナリーを表現できないため悩んでいます.
> > 制御には,
> >  コマンドヘッダ部(6バイト)の
> >  FFh, FFh, 92h, 00h, C0h, 00h
> > に続いて,
>
>
> つまり下記のようなことでよろしいのでしょうか?
>
> OPTION CHARACTER BYTE
> OPEN #1:NAME "COM1:38400,n,8,1"
> PRINT #1:CHR$(BVAL("FF",16));CHR$(BVAL("FF",16));CHR$(BVAL("92",16));CHR$(BVAL("00",16));CHR$(BVAL("C0",16));CHR$(BVAL("00",16));
>
> BVAL関数で16進文字を10進数にしているだけなので簡易的に
>
> PRINT #1:CHR$(255);CHR$(255);CHR$(146);CHR$(0);CHR$(192);CHR$(0);
>
> でいいかと思います
>
> >  その表示装置は,8ドット(縦)×48ドット(横)をドット毎にオン/オフ出来るのですが,
> > データ部を縦の8ドットを1列として1バイトにして,1列目,2列目,...,48列目と,48列分送るというものです.
> >  なお,縦の8ドットは,00hからFFhまでのパターンの変化があります.
>
> ついでにコンバートプログラムも作ってみました。
>
> DIM A$(8)
> FOR I=1 TO 8
>    READ A$(I)
> NEXT I
> DATA "*****     **     ****    ****     ***           "
> DATA "**  **   * **   **   *    **     *  **          "
> DATA "**  **  *   **  **        **    **              "
> DATA "*****   *   **   ****     **    **              "
> DATA "**  **  ******      **    **    **              "
> DATA "**  **  *   **  *   **    **     *  **          "
> DATA "*****   *   **   ****    ****     ***           "
> DATA "                                                "
> FOR I=1 TO 48
>    LET X=0
>    FOR J=1 TO 8
>       IF A$(J)(I:I)<>" " THEN LET BIT=1 ELSE LET BIT=0
>       LET X=X+BIT*2^(J-1)
>    NEXT J
>    PRINT I;":";X
>    !' PRINT I;":";BSTR$(X,16)
> NEXT I
> END
>
 

Re: バイナリデータの送信

 投稿者:とむさん  投稿日:2016年10月11日(火)16時43分48秒
  > No.4126[元記事へ]

しばっちさんへのお返事です。

しばっちさん

 御報告が遅くなり申し訳ありません.

 お陰さまで,御教示いただいた方法でうまく行きました.
 BVAL関数を使わない方法でもうまく行きました.

 これで,いろいろなパターンを表示できるようになります.

 大変ありがとうございました.


> とむさんさんへのお返事です。
>
> >  バイナリデータの送信で悩んでいます.
> >
> >  OPEN #1:NAME "COM1:38400,n,8,1"
> >  PRINT #1: CMD$
> > では,CMD$ に上記のコマンドヘッダが書けない,つまりバイナリーを表現できないため悩んでいます.
> > 制御には,
> >  コマンドヘッダ部(6バイト)の
> >  FFh, FFh, 92h, 00h, C0h, 00h
> > に続いて,
>
>
> つまり下記のようなことでよろしいのでしょうか?
>
> OPTION CHARACTER BYTE
> OPEN #1:NAME "COM1:38400,n,8,1"
> PRINT #1:CHR$(BVAL("FF",16));CHR$(BVAL("FF",16));CHR$(BVAL("92",16));CHR$(BVAL("00",16));CHR$(BVAL("C0",16));CHR$(BVAL("00",16));
>
> BVAL関数で16進文字を10進数にしているだけなので簡易的に
>
> PRINT #1:CHR$(255);CHR$(255);CHR$(146);CHR$(0);CHR$(192);CHR$(0);
>
> でいいかと思います
>
> >  その表示装置は,8ドット(縦)×48ドット(横)をドット毎にオン/オフ出来るのですが,
> > データ部を縦の8ドットを1列として1バイトにして,1列目,2列目,...,48列目と,48列分送るというものです.
> >  なお,縦の8ドットは,00hからFFhまでのパターンの変化があります.
>
> ついでにコンバートプログラムも作ってみました。
>
> DIM A$(8)
> FOR I=1 TO 8
>    READ A$(I)
> NEXT I
> DATA "*****     **     ****    ****     ***           "
> DATA "**  **   * **   **   *    **     *  **          "
> DATA "**  **  *   **  **        **    **              "
> DATA "*****   *   **   ****     **    **              "
> DATA "**  **  ******      **    **    **              "
> DATA "**  **  *   **  *   **    **     *  **          "
> DATA "*****   *   **   ****    ****     ***           "
> DATA "                                                "
> FOR I=1 TO 48
>    LET X=0
>    FOR J=1 TO 8
>       IF A$(J)(I:I)<>" " THEN LET BIT=1 ELSE LET BIT=0
>       LET X=X+BIT*2^(J-1)
>    NEXT J
>    PRINT I;":";X
>    !' PRINT I;":";BSTR$(X,16)
> NEXT I
> END
>
 

戻る