Armadilloフォーラム

Armadillo-420 WLANモデルのシリアルポートからの電文について

m.ishizuka

2018年7月12日 16時07分

お世話になります。
現在、Armadillo-420 WLANモデル開発セット ※AWL13対応を使用し、シリアル通信を行うプログラムを作成しています。

PLCからMODBUS通信でデータを送信し、Armadilloのシリアルポート(ttymxc1)で受信したいのですが、
通信アナライザで確認したところ、ArmadilloからPLCに対して何らかの電文を送信しているようです。
この電文は、現在作成しているプログラムを起動していないときでも送信しているため、
当該Armadilloそのものの動作だと思われるのですが、何が送信されているのかご存知でしょうか。
また、この電文送信を止める方法はありますでしょうか。

念のため、2台で確認しましたが、同様の結果になりました。

カーネル、ユーザランドともに変更はしておらず、デフォルトで使用しています。

何かご存知の方がおられましたら、どうぞよろしくお願いいたします。

コメント

at_ohsawa

2018年7月12日 16時48分

> カーネル、ユーザランドともに変更はしておらず、デフォルトで使用しています。
>
> 何かご存知の方がおられましたら、どうぞよろしくお願いいたします。

デフォルトのイメージであればttymxc1(= CON3)はbootloaderとkernelのコンソールに
なっているので起動メッセージやログインプロンプトが出力されています。

コンソールの割り当ての変更方法は次の記事に紹介しています。

Armadillo-400シリーズ:コンソール用シリアルインタフェースの切り替え方法
https://users.atmark-techno.com/blog/615/2924

m.ishizuka

2018年7月12日 17時07分

> デフォルトのイメージであればttymxc1(= CON3)はbootloaderとkernelのコンソールに
> なっているので起動メッセージやログインプロンプトが出力されています。
>
> コンソールの割り当ての変更方法は次の記事に紹介しています。
>
> Armadillo-400シリーズ:コンソール用シリアルインタフェースの切り替え方法
> https://users.atmark-techno.com/blog/615/2924

説明不足で失礼しました、
シリアルインタフェースの切り替えは既に実行済みです。

at_ohsawa

2018年7月13日 11時46分

> シリアルインタフェースの切り替えは既に実行済みです。
ということは、ユーザーランドのinittabは書き換えていると思うのですが、

> カーネル、ユーザランドともに変更はしておらず、デフォルトで使用しています。
デフォルトではないということで良いでしょうか。

先の記事の操作以外は実施していないのであれば、電源投入からlinuxカーネル起動、
ログインプロンプト表示以降もttymxc1のTXD(pin3)は常時約-6Vのアイドル状態を
維持し、何も電文を出力していないことを確認しています。

起動しているArmadillo-420の/etc/inittabをcatした結果を見せてもらえますか?

m.ishizuka

2018年7月13日 11時59分

> > シリアルインタフェースの切り替えは既に実行済みです。
> ということは、ユーザーランドのinittabは書き換えていると思うのですが、
>
> > カーネル、ユーザランドともに変更はしておらず、デフォルトで使用しています。
> デフォルトではないということで良いでしょうか。
そうですね、表現が適切ではありませんでした。
何も追加していない、という意図でした。

>
> 先の記事の操作以外は実施していないのであれば、電源投入からlinuxカーネル起動、
> ログインプロンプト表示以降もttymxc1のTXD(pin3)は常時約-6Vのアイドル状態を
> 維持し、何も電文を出力していないことを確認しています。
>
> 起動しているArmadillo-420の/etc/inittabをcatした結果を見せてもらえますか?
/etc/inittabをcatしたキャプチャを添付いたします。

ファイル ファイルの説明
inittab.PNG

y.nakamura

2018年7月17日 20時57分

中村です。

>> /etc/inittabをcatした結果を見せてもらえますか?
と書いたat_ohsawaさんの反応がないですね。

/etc/config/inittabはありませんか?
/etc/inittabの他に/etc/config/inittabのrespawnも見ていたと思います。

/dev/ttymxc1をopenしているプロセスがいるのだろう・・・
という仮定で、fuserやlsofで調べてみてはどうでしょうか?

Armadillo-4x0の古いユーザランドだとfuserとlsofは入っていないので
(たしか入ってなかったはず)、その場合はちょっと面倒ですが、
/procの下を調べます。

# ls -l /proc/*/fd/* | grep ttymxc
とすれば、ttymxcをopenしているプロセスのpidがわかると思います。

--
なかむら

m.ishizuka

2018年7月18日 9時10分

> /etc/config/inittabはありませんか?
> /etc/inittabの他に/etc/config/inittabのrespawnも見ていたと思います。
見てみましたが、/etc/configの下にはinittabはありませんでした。

> /dev/ttymxc1をopenしているプロセスがいるのだろう・・・
> という仮定で、fuserやlsofで調べてみてはどうでしょうか?
lsofで調べてみましたが、/dev/ttymxc1をopenしているプロセスはありませんでした。

> Armadillo-4x0の古いユーザランドだとfuserとlsofは入っていないので
> (たしか入ってなかったはず)、その場合はちょっと面倒ですが、
> /procの下を調べます。
>
> # ls -l /proc/*/fd/* | grep ttymxc
> とすれば、ttymxcをopenしているプロセスのpidがわかると思います。
こちらも試してみましたが、同じくプロセスは見つかりませんでした。
キャプチャした画像を添付いたします。

ファイル ファイルの説明
grep_ttymxc.PNG

y.nakamura

2018年7月18日 11時16分

中村です。

常駐して常にopenしているのがいないとすると、
時々起動して一時的にopenして何かデータを送信しているとか、
ですかねぇ~。

crontabに何かいませんか?

最初の投稿で
>> 通信アナライザで確認したところ、ArmadilloからPLCに対して何らかの電文を送信しているようです。
と書かれていました。

便利な道具をお持ちのようなので、そのアナライザで、
どういうデータが送信されているのか、わかりませんか?

それから、
アットマークテクノ提供のブートローダーとカーネルと、
コンソールを切り替えただけで他は一切何も手を加えていない
ということが確実なユーザランドで同じ症状になるのか、
もう一度試してみた方がいいと思います。

ここで言う「他は一切何も手を加えていない」というのは、
最初の質問投稿で書かれていた
>> この電文は、現在作成しているプログラムを起動していないときでも送信しているため、
の「現在作成しているプログラム」など、何も入れていない状態です。

--
なかむら

m.ishizuka

2018年7月19日 13時41分

> 常駐して常にopenしているのがいないとすると、
> 時々起動して一時的にopenして何かデータを送信しているとか、
> ですかねぇ~。
しばらく確認してみたのですが、やはりopenしているプロセスは特にありませんでした。
送信されているデータはデータ長が長かったり短かったりで、
中身も特に規則性がなく、どういうものなのかよくわかりませんでした。
参考にならずずみません。

>
> それから、
> アットマークテクノ提供のブートローダーとカーネルと、
> コンソールを切り替えただけで他は一切何も手を加えていない
> ということが確実なユーザランドで同じ症状になるのか、
> もう一度試してみた方がいいと思います。
念のため、再度試してみましたが、状況は変わらずでした。

Armadillo上で動作する、シリアル通信のサンプルコードなどはどこかにあるでしょうか?
プログラムは何も動かしていませんので、関係ないかもしれませんが、プログラムのほうも再度確認してみようかと思います。

y.nakamura

2018年7月19日 21時28分

中村です。

> 送信されているデータはデータ長が長かったり短かったりで、
> 中身も特に規則性がなく、どういうものなのかよくわかりませんでした。
...
> 念のため、再度試してみましたが、状況は変わらずでした。

コンソールを切り替えただけで他は一切何も手を加えていないものを使って、
相手機器を接続せず、通信アナライザだけをつないでも出ますか?
また、相手機器を接続せず、通信アナライザではなくオシロスコープで
CON3(Dsub9)のTXD(pin3)を観察するとどうなりますか?

参考:2018/07/13のat_ohsawaさんの投稿
>> 先の記事の操作以外は実施していないのであれば、電源投入からlinuxカーネル起動、
>> ログインプロンプト表示以降もttymxc1のTXD(pin3)は常時約-6Vのアイドル状態を
>> 維持し、何も電文を出力していないことを確認しています。

> Armadillo上で動作する、シリアル通信のサンプルコードなどはどこかにあるでしょうか?

Armadillo用としての特別な処理は何も必要ありませんが、
(普通のLinux用のシリアル通信のプログラムがそのまま使えます)
アットマークテクノさんのドキュメント類では、
開発ガイド第2部にシリアル通信のサンプルがあります。
[6.5. シリアルポートの入出力]
https://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja-3…

--
なかむら

m.ishizuka

2018年7月20日 14時08分

とりいそぎ、確認できることを調べてみました。

> コンソールを切り替えただけで他は一切何も手を加えていないものを使って、
> 相手機器を接続せず、通信アナライザだけをつないでも出ますか?
相手機器を接続しない状態では、何も出力はありません。
機器をつないだ状態(ただしArmadillo側では何も動かしていない)で、出力があります。

> また、相手機器を接続せず、通信アナライザではなくオシロスコープで
> CON3(Dsub9)のTXD(pin3)を観察するとどうなりますか?
以前返信いただいたとおり、常時-6Vを維持しているのを確認できました。

>
> 参考:2018/07/13のat_ohsawaさんの投稿
> >> 先の記事の操作以外は実施していないのであれば、電源投入からlinuxカーネル起動、
> >> ログインプロンプト表示以降もttymxc1のTXD(pin3)は常時約-6Vのアイドル状態を
> >> 維持し、何も電文を出力していないことを確認しています。

シリアル通信のプログラムは、もう少し考えてみます。
(makeもでき、動作する状態になりましたが、
プログラムが起動しているかに依らず、相変わらず電文が出力されている状態です)

y.nakamura

2018年7月20日 14時39分

中村です。

> 相手機器を接続しない状態では、何も出力はありません。
...
> 以前返信いただいたとおり、常時-6Vを維持しているのを確認できました。

相手機器と接続するRS-232Cケーブルの送信と受信を間違えてませんか?

--
なかむら

m.ishizuka

2018年7月20日 14時57分

> 中村です。
>
> > 相手機器を接続しない状態では、何も出力はありません。
> ...
> > 以前返信いただいたとおり、常時-6Vを維持しているのを確認できました。
>
> 相手機器と接続するRS-232Cケーブルの送信と受信を間違えてませんか?
>
それはないと思います。。
相手機器(PLC)からの電文は決まったフォーマットに従っているため、
具体的に”0110…”といった感じで、読める電文なのです。
アナライザで確認すると、相手からArmadilloへの電文になっています。(これは正常動作です)
今回気にしている電文は、Armadilloから出ている方向の電文です。

y.nakamura

2018年7月20日 15時09分

中村です。

> 具体的に”0110…”といった感じで、読める電文なのです。
> アナライザで確認すると、相手からArmadilloへの電文になっています。(これは正常動作です)

Armadilloのソフトでこれを受信できている、ということでしょうか?

> 今回気にしている電文は、Armadilloから出ている方向の電文です。

相手機器を接続せずに、オシロで
> > 以前返信いただいたとおり、常時-6Vを維持しているのを確認できました。
を計測した状態のままArmadilloの電源は切らず、プローブは外さずに、
相手機器を接続すると、TXDの電圧はどのように変化しますか?

できれば相手機器の接続の前後をデジタルオシロでキャプチャしてください。
それから、Armadilloから電文が出ているというタイミングでも
波形をキャプチャして見せていただけますか?

--
なかむら

m.ishizuka

2018年7月20日 18時06分

> > 具体的に”0110…”といった感じで、読める電文なのです。
> > アナライザで確認すると、相手からArmadilloへの電文になっています。(これは正常動作です)
>
> Armadilloのソフトでこれを受信できている、ということでしょうか?
現状では何もソフトを起動していないので、受信はしていませんが、
アナライザで確認できています。

>
> > 今回気にしている電文は、Armadilloから出ている方向の電文です。
>
> 相手機器を接続せずに、オシロで
> > > 以前返信いただいたとおり、常時-6Vを維持しているのを確認できました。
> を計測した状態のままArmadilloの電源は切らず、プローブは外さずに、
> 相手機器を接続すると、TXDの電圧はどのように変化しますか?
>
> できれば相手機器の接続の前後をデジタルオシロでキャプチャしてください。
> それから、Armadilloから電文が出ているというタイミングでも
> 波形をキャプチャして見せていただけますか?
接続前後ではなく接続後のみですが、
オシロのキャプチャをみると-6V以外に時々ノイズがのっているようです。
ボーレートはB115200です。

ファイル ファイルの説明
TEK0040.JPG

y.nakamura

2018年7月20日 19時06分

中村です。

> ボーレートはB115200です。

それらしいデータですね。

パリティがわからないのでパリティなしと仮定すると、
7ビットデータでストップ1ビット。
最初のデータの値は0x79。
次のものは下位6ビットしかわかりませんが、
その6ビットを2進数で書くと100101。
のようにみえます。

これだったらアナライザでデータ取れませんか?

相手機器器をつなぐと出てくるとのことですが、
ArmadilloのDsub9のTXD(pin3)とGND(pin5)の2本だけを
相手機器につないだ場合はどうなりますか?

--
なかむら

y.nakamura

2018年7月20日 19時33分

中村です。

すみません、訂正です。
画像をパソコン画面で見て先ほどのを書きましたが、
印刷して定規をあててみたら、違っていたみたいです。

> パリティがわからないのでパリティなしと仮定すると、
> 7ビットデータでストップ1ビット。
> 最初のデータの値は0x79。
> 次のものは下位6ビットしかわかりませんが、
> その6ビットを2進数で書くと100101。

8ビットデータでストップ2(あるいは
ストップ1でアイドルが1ビット分)で、
最初のデータの値は0xF9。
次のものは下位7ビットしかみえませんが、
(7ビット目はギリギリ・・・ですが)
その7ビットを2進数で書くと1100101なので、
0x65か0xE5。

--
なかむら

y.nakamura

2018年7月21日 22時33分

中村です。

もしかしたら・・・
armadilloが外部機器から受信したデータを
エコーバックしているのではないでしょうか?

Armadilloで
stty -a -F /dev/ttymxc1
してみてください。

--
なかむら

m.ishizuka

2018年7月23日 15時16分

>
> もしかしたら・・・
> armadilloが外部機器から受信したデータを
> エコーバックしているのではないでしょうか?
>
> Armadilloで
> stty -a -F /dev/ttymxc1
> してみてください。
コマンドを投げてみましたが、状況は変わりませんでした。
エコーバックしているかどうか知る方法は他にありますでしょうか?

y.nakamura

2018年7月23日 16時24分

中村です。

> コマンドを投げてみましたが、状況は変わりませんでした。
> エコーバックしているかどうか知る方法は他にありますでしょうか?

> > stty -a -F /dev/ttymxc1
これは設定を変更するためのものではありませんので、
これをやっても何も変わりません。

エコーバックの設定がどうなっているかも含めて、
このオプションでttymxc1の現在の設定を表示してくれます。

sttyのmanページを読んでください。
https://linuxjm.osdn.jp/html/GNU_sh-utils/man1/stty.1.html
https://linuxjm.osdn.jp/html/GNU_coreutils/man1/stty.1.html

--
なかむら

m.ishizuka

2018年7月24日 14時26分

> > > stty -a -F /dev/ttymxc1
> これは設定を変更するためのものではありませんので、
> これをやっても何も変わりません。
勘違いしておりました、失礼いたしました。
設定を確認したところ、確かにデフォルトではエコーバックする設定になっていました。

そこでプログラムの中でエコーバックのフラグをOFFにするよう追記し、
動作させてみたところ、エコーバックの設定はOFFになったことを確認できました。

ですが通信アナライザで確認してみると、エコーバックON時と同じような応答が返ってきます。
加えて、エコーバックON時は数十バイト程度だったArmadilloからの応答が、1000バイト程度に増えてしまいました。

何度も申し訳ありませんが、他にも何かお気づきのことがありましたらご指摘いただけますと幸いです。

y.nakamura

2018年7月24日 14時50分

中村です。

> 何度も申し訳ありませんが、他にも何かお気づきのことがありましたらご指摘いただけますと幸いです。

いろいろと想像できる原因を上げて試していただきましたが、
どれもダメ(違う)みたいですね。

わかってしまえば簡単なことが原因なのでしょうけど、
(たぶん...実機を直接見ればすぐにわかると思うのですが)
これ以上はヒアリング(フォーラムでのやり取り)では、
私には無理そうです。
申し訳ありません。

どなたか、このスレッドをお読みの方、
何かアドバイスをいただけませんでしょうか?

--
なかむら

y.nakamura

2018年7月25日 1時07分

中村です。

先ほど「これ以上はフォーラムでは私には無理そうです」と書きましたが、
もう1つ試してもらいたいものがありました。

次のソースをコンパイルしてarmadilloで動かして、
その状態で(このプログラムを動かしたまま)、
シリアルポートの送受信データを調べてみてください。

シリアルデバイス/dev/ttymxc1はコマンドラインの引数で指定します。
それ以外の通信パラメタはソース埋め込みですので、適当に修正してください。
パリティの設定が出てきませんが、cfmakeraw()するとパリティなしになります。

無限ループしていますので、終了はCTRL-Cで強制終了です。
終了時にシリアルポートの設定を元に戻しません。
open()はエラーチェックしていますが、それ以外はエラーチェックしてません。

#include <stdio.h>
#include <termios.h>
#include <fcntl.h>
 
int main(int argc, char *argv[])
{
    struct termios tios;
 
    if (argc != 2) {
        fprintf(stderr, "arg error\n");
        return 1;
    }
 
    char *device = argv[1];
 
    int fd = open(device, O_RDWR | O_NOCTTY);
    if (fd < 0) {
        perror(device);
        return 1;
    }
 
    // TODO error check
 
    tcgetattr(fd, &tios);
 
    cfmakeraw(&tios);
    cfsetspeed(&tios, B115200);
 
    tios.c_cflag &= ~CSTOPB; // stop:1
 
    tcsetattr(fd, TCSAFLUSH, &tios);
 
    for (;;) {
        char buf[1024];
 
        int n = read(fd, buf, sizeof buf);
        printf("n=%d\n", n);
#if 1
        int i;
        for (i = 0; i < n; i++) {
            printf("%02X ", buf[i]);
        }
        printf("\n");
#endif
    }
 
    return 0;
}

--
なかむら

y.nakamura

2018年7月25日 7時44分

中村です。

補足です。

> 終了時にシリアルポートの設定を元に戻しません。

他の試験をするときには、シリアルポートの設定を元にすために
再起動してください。

--
なかむら

m.ishizuka

2018年7月25日 17時20分

>溝渕様
同様に他のECHO[*]もoffにしてみましたが、改善しませんでした。

>中村様
提示いただいたソースコードを元に、シリアルポートの設定を少し追記してビルドしてみました。
結果はこれまでと同様で、改善しませんでした。

標準出力のキャプチャを添付いたします。
2桁ずつ出力している数字の、左から4番目が0x00~0x17でカウントアップするのが正しい動作なのですが、
時々飛んでしまいます。
アナライザを見ていると、この時にArmadilloからの応答があるようです。

ファイル ファイルの説明
0725.PNG

y.nakamura

2018年7月25日 17時37分

中村です。

> 提示いただいたソースコードを元に、シリアルポートの設定を少し追記してビルドしてみました。
> 結果はこれまでと同様で、改善しませんでした。

「シリアルポートの設定を少し追記して」とありますが、
どのような修正をしましたか?
使用したソースコードをそのまま開示してください。

--
なかむら

m.ishizuka

2018年7月25日 17時47分

> 中村です。
>
> > 提示いただいたソースコードを元に、シリアルポートの設定を少し追記してビルドしてみました。
> > 結果はこれまでと同様で、改善しませんでした。
>
> 「シリアルポートの設定を少し追記して」とありますが、
> どのような修正をしましたか?
> 使用したソースコードをそのまま開示してください。
情報が足りず失礼いたしました。
ソースコードを添付いたします。

ファイル ファイルの説明
serial.c

y.nakamura

2018年7月25日 18時03分

中村です。

次の部分を元に戻して(私の投稿のとおりに戻して)、
もう一度テストしてください。

    tcgetattr(fd, &tios);
 
    //memset( &tios, 0, sizeof(tios) );
 
    tios.c_cflag += CREAD;
    tios.c_cflag += CLOCAL;
    tios.c_cflag += CS8;
    tios.c_cflag += ~CRTSCTS;
    tios.c_cflag += 0;
    tios.c_lflag &= ~ECHO;
    tios.c_lflag &= ~CSTOPB;
    tcsetattr(fd, TCSAFLUSH, &tios);
 
    cfsetspeed(&tios,B115200);
    cfmakeraw(&tios);
    tcsetattr( fd, TCSANOW, &tios );
    ioctl( fd, TCSETS, &tios );

--
なかむら

toshiya_hata

2018年7月26日 9時21分

畑と申します。普段は仕事中の立場上、他社様の案件にコメントし難いのですが、
TERMIOSのフラグはビットフィールドなので、
> tios.c_cflag += ~CRTSCTS;
のように算術演算すべきではありません。元の値によっては桁上がりする(→意図しないフラグを立てる)場合があります。
特にこの行は、c_cflagのほとんどのビットを変えてしまいます。

中村様のコメント通り、元のコードでテストされることをお勧めします。

m.ishizuka

2018年7月26日 10時29分

>中村様
Armadilloを再起動して、提示いただいたそのままのソースコードで改めて試してみました。
おおむねn=11でデータを取得できています(PLCからのデータが11byte単位のため)。
時々タイミングが合わないときにn=1,7などになります。
アナライザで見ていると、Armadilloからの応答が返っているようです。

>畑様
参考にした(ここではない別の)サンプルコードが算術演算で記述していましたので、
そのまま使用していました。
特にその行は、ハードフロー制御を明示的にoffにしたく、追記していましたが、
書き方が適切ではなかったのですね。
コメントどうもありがとうございます、勉強になりました。

y.nakamura

2018年7月26日 12時55分

中村です。

> おおむねn=11でデータを取得できています(PLCからのデータが11byte単位のため)。
> 時々タイミングが合わないときにn=1,7などになります。

read()の特性上、これは問題ありません。
// 説明は長くなるので省略

> アナライザで見ていると、Armadilloからの応答が返っているようです。

ボーレートはあっているのようなので、
どういうデータが送信されているのか、
そのアナライザでわかりませんか?
また、何を受信したら何を送信しているかもだいたいわかると思います。
そのためのアナライザですから。
そういった情報をいただけませんでしょうか?

> 参考にした(ここではない別の)サンプルコードが算術演算で記述していましたので、
> そのまま使用していました。

ネット上の解説(特に個人ブログのようなもの)には
間違いやウソがあふれています。
また、それが何をしているのかを自分で理解しないまま、
どこかで拾ってきたものをそのままコピペしているような
サイトもたくさんありますので、
複数のサイトに書いてあったからといっても、
それが正しいとは限りません。

今回の参考にしたというサイトは「自分で理解していない」記事の
典型だと思います。

--
なかむら

m.ishizuka

2018年7月27日 9時45分

当方の知識不足でごく初歩的なことまでレスをいただいてしまい
申し訳ありません。

アナライザの内容を添付いたします。
古いアナライザですので、スマートに結果を出力することができず、画面を撮ったものではありますが。。
値が読めるほうがPLCからArmadilloへの送信データです。
反対に、Armadilloからの送信データは化けてしまって読めないのです。

ファイル ファイルの説明
DSC_0178.JPG

m.ishizuka

2018年7月27日 11時59分

> 当方の知識不足でごく初歩的なことまでレスをいただいてしまい
> 申し訳ありません。
>
> アナライザの内容を添付いたします。
> 古いアナライザですので、スマートに結果を出力することができず、画面を撮ったものではありますが。。
> 値が読めるほうがPLCからArmadilloへの送信データです。
> 反対に、Armadilloからの送信データは化けてしまって読めないのです。
すみません、読める設定方法がわかったかもしれませんので、わかり次第改めて報告いたします。

y.nakamura

2018年7月27日 18時20分

中村です。

> > 値が読めるほうがPLCからArmadilloへの送信データです。
> > 反対に、Armadilloからの送信データは化けてしまって読めないのです。

上の段の右矢印がArmadilloの送信ということですね。
反転のFEというのはフレーミングエラーでしょうか?
PFはパリティかな?

これらが大量に発生していますが、
数日前にいただいたオシロの画像と見比べてみると、
あのオシロの信号だったならばFEが(反転のFEがフレーミング
エラーだとして)こんなに発生することはないと思います。

接続を間違えているとか、そいううことはないでしょうか?

> すみません、読める設定方法がわかったかもしれませんので、わかり次第改めて報告いたします。

続報をお待ちします。

--
なかむら

y.nakamura

2018年7月27日 22時10分

中村です。

> 接続を間違えているとか、そいううことはないでしょうか?

Armadilloが送受信するデータをアナライザで正しく取れるかどうか
などを確認するために、次のテストをしていただけますか?

1) 相手のPLC機器をとりはずし、代わりにパソコンを接続

RS-232Cインターフェースがないパソコンの場合は、
USB-シリアル変換器などを使ってください。
クロスケーブルが必要になることもあります。

2) TeraTermなどを起動(パソコンがWindowsの場合)

シリアルの通信速度などを適切に設定。
パソコンがWindowsではない場合は、
適当なシリアル通信ソフトを使ってください。

3) 先日のテストプログラムのforループ部分を次のように修正

    for (;;) {
        char buf[1024];
 
        int n = read(fd, buf, sizeof buf);
        printf("n=%d\n", n);
        write(fd, buf, n);               // <==== この行を追加
#if 1
        int i;
        for (i = 0; i < n; i++) {
            printf("%02X ", buf[i]);
        }
        printf("\n");
#endif
    }

このプログラムで #include を忘れてましたので、
このインクルードも追加しておいてください。

4) パソコン⇔Armadillo間の送受信テスト

パソコンのTeraTermでキーボードを適当に叩いて、
あるいは、適当な文字列をコピペするなして、
パソコン⇒Armadillo の方向でデータを送信し、
そのデータをアナライザで確認。

今回追加したwrite()によって、Armadillo⇒パソコン の方向に
同じデータが流れるはずですので、それをアナライザで確認。

Armadilloのコンソールに受信・送信したバイト数と
そのデータの16進数表示をしていますので、それを確認。

--
なかむら

m.ishizuka

2018年8月1日 14時51分

アナライザの設定方法ですが、いろいろ試しで見ましたが
残念ながら画像の表示が正しいようです。
ですので、おそらくフレーミングエラー(FE)とパリティエラー(PE)なのだと思います。

> Armadilloが送受信するデータをアナライザで正しく取れるかどうか
> などを確認するために、次のテストをしていただけますか?
手順に従ってテストしてみました。
IDLEが間に入っていて見づらいのですが、PC(TeraTerm)から数字を入力すると(=下段)
Armadilloが同じ値が返っているようです。(上段)

CR(0x0d)のあとにフレーミングエラー・パリティエラーです。

今回のソースコード追記分も、前回も、エラーが出るものの動作としては正しく見えますので、
接続は合っていると思うのですが。。

ファイル ファイルの説明
P1060808.JPG
P1060809.JPG

y.nakamura

2018年8月1日 15時33分

中村です。

> IDLEが間に入っていて見づらいのですが、PC(TeraTerm)から数字を入力すると(=下段)
> Armadilloが同じ値が返っているようです。(上段)
>
> CR(0x0d)のあとにフレーミングエラー・パリティエラーです。

パソコンから送信した文字以外のものがパソコン画面に表示されていますか?

TeraTermのログの設定画面のオプションのところの「バイナリ」に
チェックを入れて受信データをログファイルに残し、
そのログファイルをHEXダンプして、中身を確認していただけますか?

CRのあとにFEが6個、そのあとIDLEのようですが、
そのまま放置すると、FEはそれ以上はでませんか?

'8'(0x38)とCR(0x0d)以外は試されましたか?
CR以外のコントロールコードはどうなりますか?
'8'のあと放置するとFEは出ますか?

LE-2500のカタログがネットあったので読んでみたところ、
ロジアナ機能があるようです。
FEになっている部分の信号をロジアナ機能で取れますか?

他のアナライザをお持ちではないですか?

--
なかむら

m.ishizuka

2018年8月1日 17時10分

すぐに確認できたものから返信いたします。

> パソコンから送信した文字以外のものがパソコン画面に表示されていますか?
表示されていないです。

> TeraTermのログの設定画面のオプションのところの「バイナリ」に
> チェックを入れて受信データをログファイルに残し、
> そのログファイルをHEXダンプして、中身を確認していただけますか?
中身を確認してみました。
見たところ、表示されているものと一致しています。(e=0x65, g=0x67 など)

> CRのあとにFEが6個、そのあとIDLEのようですが、
> そのまま放置すると、FEはそれ以上はでませんか?
エンターキーを押さずに放置するとIDLEのまま、FEはそれ以上出ません。

> '8'(0x38)とCR(0x0d)以外は試されましたか?
> CR以外のコントロールコードはどうなりますか?
> '8'のあと放置するとFEは出ますか?
'0'~’9', 'e','f','g','(スペース)'あたりを試してみました。

> LE-2500のカタログがネットあったので読んでみたところ、
> ロジアナ機能があるようです。
> FEになっている部分の信号をロジアナ機能で取れますか?
すみませんが、もう少し時間をください。

> 他のアナライザをお持ちではないですか?
他には持っていないです、すみません。

y.nakamura

2018年8月1日 18時07分

中村です。

> エンターキーを押さずに放置するとIDLEのまま、FEはそれ以上出ません。
...
> > LE-2500のカタログがネットあったので読んでみたところ、
> > ロジアナ機能があるようです。
> > FEになっている部分の信号をロジアナ機能で取れますか?
> すみませんが、もう少し時間をください。

うまく取れるといいのですが・・・

もう1つ。
FEやPEを無視してデータを表示することはできますか?

--
なかむら

m.ishizuka

2018年8月7日 10時56分

> > > FEになっている部分の信号をロジアナ機能で取れますか?
> > すみませんが、もう少し時間をください。
>
> うまく取れるといいのですが・・・
>
遅くなりましてすみません。ロジックアナライザ機能で取得してみました。
何らかの信号は流れているように見えますが、これが何なのかと言われるとよく分かりません…

> FEやPEを無視してデータを表示することはできますか?
これはできませんでした。

どうにも原因がわかりませんので、試しに伝文をASCIIモードにしてみようと思います。
何かわかり次第、また報告いたします。

ファイル ファイルの説明
DSC_0208.JPG

y.nakamura

2018年8月7日 12時03分

中村です。

ロジアナ機能の画像、ありがとうございます。
何かでているようですが・・・

2つくらい前のお返事で、
> > TeraTermのログの設定画面のオプションのところの「バイナリ」に
> > チェックを入れて受信データをログファイルに残し、
> > そのログファイルをHEXダンプして、中身を確認していただけますか?
> 中身を確認してみました。
> 見たところ、表示されているものと一致しています。(e=0x65, g=0x67 など)
というのがありました。

TeraTermは、たとえばボーレート不一致などで文字化けしたときも、
バイナリモードでのログには化けたデータが記録されます。

ところが、TeraTermのバイナリモードのログには化けた文字は一切なく、
アナライザではフレーミングエラー・パリティエラーとなるような
データが大量に出る、ということですよね。

Armadilloの外に(アナライザの故障など)問題があるような気がします。

別のアナライザのレンタルなどを考えてみてはどうですか?
開発が何日も(もうすぐ1ヶ月でしょうか・・・)遅れていることを考えれば、
レンタル料はそれほど高くはないと思います。
あるいは社外に(有償であっても)調査を依頼するとか。
// この3行は、あまり書きたくなかったのですけど。

試した方がいいことをもう1つ、思いつきました。
Armadilloと相手機器の送受を逆につないだら
どうなりますか?
アナライザの液晶で上段と下段が逆になるように、です。
これはまだやってませんよね?

--
なかむら

y.nakamura

2018年7月26日 12時22分

中村です。

畑さん、
コメント、ありがとうございます。

面倒なので個々の指摘はやめてましたが、
畑さんからのビット操作と加算の問題の他に、もう少し。

>> tios.c_lflag &= ~CSTOPB;

CSTOPBはc_lflagではなくてc_cflagです。

で、これらの間違い設定をしたあとに
>> cfmakeraw(&tios);
>> tcsetattr( fd, TCSANOW, &tios );
をしているので、それ以前の間違いはクリアされるかもしれないのですが、
完全にクリアされるかどうかはわかりません。

--
なかむら

at_mizo

2018年7月24日 15時03分

溝渕です。

> そこでプログラムの中でエコーバックのフラグをOFFにするよう追記し、
> 動作させてみたところ、エコーバックの設定はOFFになったことを確認できました。

上記の状態で、

stty -a -F /dev/ttymxc1

を実行した結果を貼り付けていただけますか。

m.ishizuka

2018年7月24日 15時46分

>中村様
何度もすみませんでした、どうもありがとうございました。

どなたかに聞いてしまったほうが早いかもと思ったのですが、
同じようなことを経験されている方はいらっしゃらないようで、
やはり何かこちらで(意図せず)設定してしまったことがあるのかもしれません。。

>溝渕様
キャプチャを添付いたします。
設定前の結果は流れてしまったため、同一のArmadilloではないのですが、
同じ型式のArmadilloでの結果です。
”echo"が"-echo"になっていることから、エコーバックはOFFだと判断しました。
誤っていたらご指摘いただければと思います。

ファイル ファイルの説明
0724_before.PNG
0724_after.PNG

at_mizo

2018年7月24日 16時02分

溝渕です。

> ”echo"が"-echo"になっていることから、エコーバックはOFFだと判断しました。
> 誤っていたらご指摘いただければと思います。

”echo”はOFFになっています。

他の”echo”で始まる設定(例えば”echok”)も全てOFFにしてみていただけますか。