本文へ移動
サポートシェアリングソリューション
OKWAVE Plus

このQ&Aは役に立ちましたか?

締切済み
※ ChatGPTを利用し、要約された質問です(原文:and or xorの使い方)

and or xorの使い方

2023/10/19 05:25

このQ&Aのポイント
  • and or xorの使い方について詳しく教えてください
  • カスタムマクロのANDなどの使い方がわかりません。解釈としては、「もし・・ならば(IF)○○、そうでなければ○○」の解釈ととらえましたが合ってますか?
  • 使用例や注意点なども教えてください
※ 以下は、質問の原文です

and or xorの使い方

2013/05/22 23:21

お世話になります。
カスタムマクロのANDなどの使い方に使い方がわかりません。
解釈としては、「もし・・ならば(IF)○○、そうでなければ○○」の解釈ととらえましたが合ってますか?
使用例は
IF[[[#30GT0]GOTO1]AND[[#30LT0]GOTO2]]
(もし#30が0より大きいならN1へ、#30が0より小さいならN2へ)の使用例でやりましたがアラームが出ました。
いろいろやりましたが、理屈が正直半信半疑なもんで・・・。

使用例、使い方など教えてもらえたら幸いです。
よろしくおねがいします。

回答 (5件中 1~5件目)

2013/05/29 17:17
回答No.5

補足になりますがIF条件はシンプルに考えてこうです。

IF [#30 GT 0] THEN GOTO o100
GOTO o200

もし#30が0でなければ0(N)100へ飛びなさい
0(N)200へ飛びなさい

一行の中に複数IFを入れたいのであれば elese ifという構文が
ありますがプログラマー以外判りにくくなりますので
改行で新たに書くといった方法がいいかと思われます。



またNC言語のマクロはプログラム言語のBASIC言語とほぼ同じで
簡単な英文で書けるでそちらを参考にされてもいいかと思います。
BASICにいたってはPCでエミュレーターを入れれば動かすことが可能だと
思います、何か試される際卓上の検証にも役に立つ世思います。

このQ&Aは役に立ちましたか?

この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。

質問する
2013/05/23 12:22
回答No.4

AND OR XOR は ビット毎のそれぞれ
論理積 論理和 排他的論理和 の演算式ですので
システム変数のインターフェース入出力信号(#1032・#1132等)から
情報を取得・設定する際に使用します。

お礼

2013/05/24 23:12

アドバイスありがとうございます。
(#1032・#1132等)で使うならあまり普段は使わないんですね。

質問者
2013/05/23 10:55
回答No.3

まあNCでそんな複雑な条件式が評価されるかわからんが

文面が違うので
IF[[[#30GT0]AND[#30LT0]]GOTO xx]

こんな感じ ← 動くかどうか知らんが

意味
#30 が 0 以上 で なおかつ 0以下なら xxに行けなので
成り立ってません 






VB 等の場合


条件式1 and 条件式2 両方とも真ならば
条件式1 or 条件式2  どちらかが真ならば
条件式1 xor 条件式2 どちらかが真ならば ただし両方とも真ならば成り立たない


http://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/lr/lr04_01_04.htm

お礼

2013/05/24 22:45

アドバイスありがとうございます。
動くかどうかわかりませんが、早速やってみます。

質問者
2013/05/23 06:58
回答No.2

本森の過去の投稿です。
----------
http://mori.nc-net.or.jp/EokpControl?&tid=267334&event=QE0004
----------
参考になれば幸いです。

回答(1)さんとほとんど同じですが、
質問者さんの使用例について書いてみます。
-----
O0001
G65P0002A1.
G65P0002A-1.
G65P0002A0
M30
O0002
#30=#1
IF[#30GT0]GOTO1
IF[#30LT0]GOTO2
GOTO3
N1M0(#30>0)
GOTO4
N2M0(#30<0)
GOTO4
N3M0(#30=0)
GOTO4
N4M99
-----
ANDは登場しません。

回答(1)さんへ、

>AND、OR、XOR、は数値の演算指令です。IFの条件に直接書けません。

コントローラによっては可能です。
-----
O0001
G65P0002A-1.B-1.
G65P0002A-1.B0
G65P0002A-1.B1.
G65P0002A0B-1.
G65P0002A0B0
G65P0002A0B1.
G65P0002A1.B-1.
G65P0002A1.B0
G65P0002A1.B1.
M30
O0002
IF[[#1LT0]AND[#2LT0]]GOTO11
IF[[#1LT0]AND[#2EQ0]]GOTO12
IF[[#1LT0]AND[#2GT0]]GOTO13
IF[[#1EQ0]AND[#2LT0]]GOTO21
IF[[#1EQ0]AND[#2EQ0]]GOTO22
IF[[#1EQ0]AND[#2GT0]]GOTO23
IF[[#1GT0]AND[#2LT0]]GOTO31
IF[[#1GT0]AND[#2EQ0]]GOTO32
IF[[#1GT0]AND[#2GT0]]GOTO33
N11M0(#1<0 AND #2<0)
GOTO41
N12M0(#1<0 AND #2=0)
GOTO41
N13M0(#1<0 AND #2>0)
GOTO41
N21M0(#1=0 AND #2<0)
GOTO41
N22M0(#1=0 AND #2=0)
GOTO41
N23M0(#1=0 AND #2>0)
GOTO41
N31M0(#1>0 AND #2<0)
GOTO41
N32M0(#1>0 AND #2=0)
GOTO41
N33M0(#1>0 AND #2>0)
GOTO41
N41M99
-----

条件判定文内で論理演算が使えない機台の場合の例が下記です。
-----
O0001
G65P0002A-1.B-1.
G65P0002A-1.B0
G65P0002A-1.B1.
G65P0002A0B-1.
G65P0002A0B0
G65P0002A0B1.
G65P0002A1.B-1.
G65P0002A1.B0
G65P0002A1.B1.
M30
O0002
#31=0
IF[#1LT0]THEN#31=#31+1
IF[#1EQ0]THEN#31=#31+2
IF[#1GT0]THEN#31=#31+4
IF[#2LT0]THEN#31=#31+8
IF[#2EQ0]THEN#31=#31+16
IF[#2GT0]THEN#31=#31+32
#32=#31AND1+8
IF[#32EQ1+8]GOTO11
#32=#31AND1+16
IF[#32EQ1+16]GOTO12
#32=#31AND1+32
IF[#32EQ1+32]GOTO13
#32=#31AND2+8
IF[#32EQ2+8]GOTO21
#32=#31AND2+16
IF[#32EQ2+16]GOTO22
#32=#31AND2+32
IF[#32EQ2+32]GOTO23
#32=#31AND4+8
IF[#32EQ4+8]GOTO31
#32=#31AND4+16
IF[#32EQ4+16]GOTO32
#32=#31AND4+32
IF[#32EQ4+32]GOTO33
N11M0(#1<0 AND #2<0)
GOTO41
N12M0(#1<0 AND #2=0)
GOTO41
N13M0(#1<0 AND #2>0)
GOTO41
N21M0(#1=0 AND #2<0)
GOTO41
N22M0(#1=0 AND #2=0)
GOTO41
N23M0(#1=0 AND #2>0)
GOTO41
N31M0(#1>0 AND #2<0)
GOTO41
N32M0(#1>0 AND #2=0)
GOTO41
N33M0(#1>0 AND #2>0)
GOTO41
N41M99
-----

>IF[[#1AND#2]EQ0]GOTO2・・・
>(もし、#1と#2が0で0と同じならN2へ)という事でしょうか?

-----
#1=0,#2=0 ⇒ #1AND#2=0 ⇒ EQ0なのでN2へ
#1=0,#2=1 ⇒ #1AND#2=0 ⇒ EQ0なのでN2へ
#1=1,#2=0 ⇒ #1AND#2=0 ⇒ EQ0なのでN2へ
#1=1,#2=1 ⇒ #1AND#2=1 ⇒ EQ0ではないのですぐ下の行へ
-----
です。

お礼

2013/05/24 22:54

アドバイスありがとうございます。
ホームページの過去投稿大変為になりました。
エクセルのANDとは少々解釈が違うみたいですね。
今後共、よろしくおねがいします。

質問者

補足

2013/05/24 23:03

という事は、回答3さんが書いた式を例にすると、
IF[[#1AND#2]EQ0]GOTO2・・・
(もし、#1と#2が0で0と同じならN2へ)という事でしょうか?

訂正です。
回答3さんじゃなくて、ホームページの式を例にしました。
すみませんでした。

質問者
2013/05/22 23:45
回答No.1

マクロは単純な言語なので1行だけしか書けません。カッコ中で比較する右辺左辺の2項はカッコを使うと複雑にすることは出来る。


  IF[#30GT0]GOTO1

  IF[#30EQ0]GOTO3 ← GT0とLT0では間の EQ0 が抜ける

  GOTO2  ← LT0に相当する残りの場合


AND、OR、XOR、は数値の演算指令です。IFの条件に直接書けません。

  http://www.ai-sols.co.jp/product/macro_kihon06.htm

>こんな感じ ← 動くかどうか知らんが

ひどすぎる!


比較した結果について、成立てば1、不成立は0ゼロと値を持たせ、それをさら演算、条件分岐に使うのはC、Vbなど高級言語。

NCマクロの文法は単純そのもの。

お礼

2013/05/24 23:09

毎回お世話になります。
自分の解釈がちょっとエクセルよりでしたね。
基本は積なんで掛け算なんですね。

質問者

お礼をおくりました

さらに、この回答をベストアンサーに選びますか?

ベストアンサーを選ぶと質問が締切られます。
なおベストアンサーを選びなおすことはできません。