前回の課題
PLCとRaspberryPi間をC言語でソケット通信 MCプロトコル編で紹介したプログラムを改良します.
sprintfが便利
request関数部分を以下に置き換えてください.
word_read
int word_read(char *buffer,unsigned char reg,int start_num,int num) {
char sub_h[]="5000";
char net_num[]="00";
char pc_num[]="FF";
char unit_io[]="03FF";
char unit_ch[]="00";
char nlen[]="0018";
char cputimer[]="0020";
char command[]="0401";
char subcommand[]="0000";
sprintf(buffer,"%s%s%s%s%s%s%s%s%s%c*%06d%04d",sub_h,net_num,pc_num,unit_io,unit_ch,nlen,cputimer,command,subcommand,reg,start_num,num);
return strlen(buffer);
}
例えばD1から5つ分の値を受け取りたいときはこのように指定します.
word_read(send_buffer,'D',1,5);//(伝文配列,読み取りたいレジスタ,開始場所,個数)
実行結果
日付の年以下の値も返ってきました.
このプログラムは1回読み取れば終了ですが、無限ループとして常時監視したり(できれば割り込みの方がよい)GPIOを使ったりとまだまだ改善の余地はあると思います。
おまけ
弊社のご紹介になります。
生産設備向けのPLC、PCソフトの設計・開発を行っております。
未経験からの採用もしております。
弊社メンバーは学習した内容を、日々Qiitaの記事にアウトプットしております。
弊社にご興味のある方、まずはLINEで気軽に問い合わせしてみてください!
ご応募お待ちしておりますー!