質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.80%

Qtのシリアルポートのアクセスプログラムの質問

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,684

nqf27650

score -13

CUIインターフェースで下記のプログラムを作成し、
オープン出来ますが、ポートへの出力が出来ません、

この件に関してコメント頂けますと大変助かります。

//aCUI_rs232c.pro

################################################################

 Automatically generated by qmake (2.01a) ? 4? 20 11:01:10 2017

################################################################

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

 Input

SOURCES += main.cpp

//main.cpp

include<stdio.h>

include<stdlib.h>

include<strings.h>

include<termios.h> //ok

include<unistd.h> //ok

include<fcntl.h> //ok

define BAUDRATE B600 //B38400 // 通信速度の設定

define MODEMDEVICE "/dev/ttyS0" // デバイスファイルの指定:COM1

define SERIAL_PORT "/dev/ttyS0" // デバイスファイル

define FALSE 0

define TRUE 1

define MC 4 // 読み込む文字数 4-->1

int bbb();

int main(){
bbb();
return 0;
}

int bbb(){

volatile int STOP=FALSE;

int fd, res, i; // fd:ファイルディスクリプタ res:受け取った文字数
struct termios oldtio, newtio;// 通信ポートを制御インターフェイス
unsigned char bufR[255]; // 受信文字を格納

unsigned char bufW[4]={'A','B','C','D'}; // 送信文字を格納
//警告: narrowing conversion of '192' from 'int' to 'char' inside { }
//is ill-formed in C++11 [-Wnarrowing]

//sudo chmod 666 /dev/ttyS0 で パーミションが許可された
if((fd=open(MODEMDEVICE, O_RDWR | O_NOCTTY))== -1){
//if((fd=open("/dev/ttyS0", O_RDWR | O_NOCTTY))== -1){
// O_RDWR:読み書き両用 O_NOCTTY:tty制御をしない

perror(MODEMDEVICE);
printf("Open error\n");
exit(-1);
}
printf("Open OK\n");
//emit signal();

tcgetattr(fd, &oldtio); // 現在のシリアルポートの設定を退避させる
bzero(&newtio, sizeof(newtio)); // 新しいポートの設定の構造体をクリア

newtio.c_cflag= (BAUDRATE | CS8 | CLOCAL | CREAD);
//newtio.c_cflag= (BAUDRATE | CS8 );
// CRTSCTS:フロー制御有り CS8:8ビット、ノンパリティ、ストップビット1
// CLOCAL:モデムの状態信号を無視 CREAD:受信可能にする

newtio.c_iflag=IGNPAR; // IGNPAR:パリティエラーの文字は無視

newtio.c_oflag=0; // rawモード
newtio.c_lflag=0; // 非カノニカル入力

newtio.c_cc[VTIME]=0; // キャラクタ間タイマは未使用
newtio.c_cc[VMIN]=MC; // MC文字受け取るまでブロックする

tcflush(fd,TCIFLUSH); // ポートのクリア
tcsetattr(fd, TCSANOW, &newtio); // ポートの設定を有効にする

write(fd, bufW, sizeof(bufW));

//QString str;
int cnt=10;
while(STOP==FALSE){
//QThread::msleep(10);
//str=QString("cnt=%1").arg(cnt,4,10);
//qDebug("%s", qPrintable(str));
res=read(fd, bufR, 255);
if(--cnt<1)break;
for(i=0; i<res; i++){
if(bufR[i]==0xC0 || true){
STOP=true;
printf("Get the data\n");
break;
}
printf("%c", bufR[i]);
if((i%4)==0){
printf("\n");
}
}//for
}//while

tcsetattr(fd, TCSANOW, &oldtio); // 退避させた設定に戻す
close(fd); // COM1のシリアルポートを閉じる
printf("Port is closed\n");
return 0;

}
以上、宜しくお願いします。 

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • episteme

    2017/04/20 11:28

    Markdownをちゃんと使うべし。やりなおし。

    キャンセル

回答 1

check解決した方法

-1

この質問のコードはモデム用のコードでした。
質問のR232Cポートのものではありませんでしたので、
この質問を取り消します。
なお、既に解決すみです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る