本発明の一実施形態について、重量選別機を例に挙げて説明する。
図1に示すように、本実施形態に係る重量選別機10は、計量コンベヤ12と、この計量コンベヤ12の前段(図1における左側)に設けられた搬入用コンベヤ14と、当該計量コンベヤ12の後段(図1における右側)に設けられた搬出用コンベヤ16と、を備えている。そして、この重量選別機10による選別対象である被計量物18は、図1に矢印20で示すように、搬入用コンベヤ14から計量コンベヤ12へと搬送され、さらに当該計量コンベヤ12から搬出用コンベヤ16へと搬送される。この搬送過程において、被計量物18が計量コンベヤ12上にあるときに、当該被計量物18の重量Wmが求められ、厳密には後述する重量測定値Wm’[x]が求められる。この重量測定値Wm’[x]は、搬出用コンベヤ16に付属されている図示しない選別装置に送られる。選別装置は、当該重量測定値Wm’[x]に基づいて、これに対応する被計量物18を選別する。
ところで、計量コンベヤ12は、ベルト式のコンベヤ本体22を備えており、このコンベヤ本体22は、荷重検出手段としてのロバーバル型のロードセル24によって支持されている。詳しくは、コンベヤ本体22は、適宜の可動側支持部材26を介して、ロードセル24の可動端(図1における右側の端部)に結合されている。そして、ロードセル24の固定端(図1における左側の端部)は、適宜の固定側支持部材28を介して、筐体のフレーム等の基部30に固定されている。
コンベヤ本体22は、駆動手段としてのモータ32から与えられる駆動力によって駆動する。そして、このモータ32もまた、ロードセル24によって支持されている。具体的には、モータ32は、可動側支持部材26の適宜の箇所に取り付けられている。そして、このモータ32側のタイミングプーリ34と、コンベヤ本体22側のタイミングプーリ36とが、駆動力伝達手段としてのタイミングベルト38を介して、互いに結合されている。これによって、モータ32の駆動力が、タイミングベルト38を介して、コンベヤ本体22に伝達され、当該コンベヤ本体22が駆動する。
また、上述した重量測定値Wm’[x]は、ロードセル24から出力されるアナログ荷重検出信号Wy(t)(t;時間)に基づいて求められる。詳しくは、当該荷重検出信号Wy(t)は、重量選別機10全体の制御を司る指示器50に送られる。指示器50は、図2に示すように、増幅回路52を有しており、この増幅回路52に、荷重検出信号Wy(t)が入力される。増幅回路52は、入力された荷重検出信号Wy(t)に増幅処理を施し、この増幅処理後の荷重検出信号Wy(t)は、ローパスフィルタ回路54に入力される。ローパスフィルタ回路54は、入力された荷重検出信号Wy(t)に含まれている比較的に高い周波数帯域のノイズ成分、例えば100[Hz]以上の主に電気的な要因によるノイズ成分、を除去するためのものであり、このローパスフィルタ回路54によるアナログフィルタリング処理後の荷重検出信号Wy(t)は、A/D変換回路56に入力される。
A/D変換回路56は、入力された荷重検出信号Wy(t)を、パルス生成手段としてのクロックパルス(CK)生成回路58から与えられるクロックパルスCKの立ち上がりに同期して、サンプリングする。これによって、当該アナログ荷重検出信号Wy(t)は、ディジタル荷重検出信号Wy[k](k;サンプリング番号)に変換される。なお、このA/D変換回路56によるサンプリング周期、つまりクロックパルスCKの周期ΔTは、例えば1[ms]とされている。
A/D変換回路56による変換後のディジタル荷重検出信号Wy[k]は、入出力インタフェース回路60を介して、CPU(Central
Processing Unit)62に入力される。また、CPU62には、当該荷重検出信号Wy[k]の他に、上述のクロックパルスCKと、後述する基点検出信号Sbとが、入出力インタフェース回路60を介して、入力される。なお、後述するように、基点検出信号Sbは、いわゆる2値信号であり、その周期は、モータ32の回転周期と同じである。
CPU62は、クロックパルスCKの立ち上がりに同期して、基点検出信号Sbの後述する立ち上がり時点Gを検出する。そして、この基点検出信号Sbの立ち上がり時点Gを基準として、荷重検出信号Wy[k]をWy[x](x;基点検出信号Sbの立ち上がり時点Gを基準とするサンプリング番号)という信号に変換する。さらに、この変換後の荷重検出信号Wy[x]に基づいて、重量測定値Wm’[x]を求める。この重量測定値Wm’[x]は、入出力インタフェース回路60を介して、上述した選別装置に送られる。
この重量測定値Wm’[x]を求めるためのCPU62の動作については、後でさらに詳しく説明するが、このCPU62の動作は、これに接続された記憶手段としてのメモリ回路64に記憶されている制御プログラムに従う。また、CPU62には、これに各種命令を入力するための命令入力手段としての操作キー66や、当該CPU62による処理結果等の各種情報を出力するための情報出力手段としての液晶型のディスプレイ68等が、入出力インタフェース回路60を介して、接続されている。なお、操作キー66とディスプレイ68とは、互いに一体化されたものでもよく、例えばタッチスクリーンでもよい。
ここで、本実施形態の重量選別機10が稼働しているとき、細かく言えばモータ32が駆動しているとき、のアナログ荷重検出信号Wy(t)に注目すると、この荷重検出信号Wy(t)には、例えば図3に誇張して示すような振動成分Ws(t)が重畳される。この振動成分Ws(t)は、モータ32や各タイミングプーリ34および36等の回転体がロードセル24によって支持されているがゆえに生じるものであり、主として当該モータ32の偏芯荷重に起因する。従って、この振動成分Ws(t)の周期Tは、モータ30の回転周期と同じであり、これを周波数f(=1/T)に換算すると、概ね数[Hz]〜十数[Hz]である。この振動成分Ws(t)は、言うまでもなく計量精度の低下を招くため、これを除去することが必要とされる。そのために、本実施形態では、次のような工夫が成されている。
まず、図4に示すように、モータ32の回転円周上、例えば当該モータ32側のタイミングプーリ34の中心から離れた位置に、基点としてのマーク70が付される。なお、このマーク70は、モータ30の回転円周上(タイミングプーリ34と同心の円の円周上)の1点を特定するためのものであり、この特定が成されるのであれば、当該マーク70の大きさや形状は特に限定されない。また、このマーク70の素材としては、シールやテープ等の貼着物であってもよいし、塗料であってもよいが、次に説明する基点センサ72によって検出され易いものが適当である。
基点センサ72は、モータ32と共に回転するマーク70を一定の場所で検出するためのものであり、このような基点センサ72としては、例えば反射型の光センサ(フォトリフレクタ)が採用される。従って、マーク70としては、その周囲(タイミングプーリ34の表面)に比べて色彩コントラストの大きいものが適当である。例えば、マーク70の周囲が黒色等の比較的に暗い色である場合には、当該マーク70として、白色等の明るい色のもの、特に銀色等の光沢色のもの、が適当である。これとは反対に、マーク70の周囲が比較的に明るい色である場合には、当該マーク70として、黒色等の暗い色のもの、特に艶消し状のもの、が適当である。この基点センサ72は、図示しないセンサ用支持部材を介して、適当な固定部、例えば図1に示した可動側支持部材26や基部30、に固定されている。そして、この基点センサ72の出力信号が、上述した基点検出信号Sbとして、指示器50に与えられ、ひいてはCPU62に入力される。
基点検出信号Sbは、図5(a)に示すような2値信号であり、例えば、基点センサ72によってマーク70が検出されているときにハイ(H)レベルとなり、そうでないときにはロー(L)レベルとなる。CPU62は、この基準検出信号Sbの立ち上がり時点Gを、図5(b)に示すクロックパルスCKの立ち上がりに同期して検出する。詳しくは、基点検出信号Sbの信号レベルが所定のスレッショルドレベルVtを超えた時点以降に最初に到来するクロックパルスCKの立ち上がり時点を、当該基点検出信号Sbの立ち上がり時点Gとする。なお、ここで言うスレッショルドレベルVtは、ハイレベルについての閾値である。
そして、CPU62は、基点検出信号Sbの或る立ち上がり時点Gから次の立ち上がり時点Gまでの時間T’を、モータ30の回転周期とし、つまりディジタル荷重検出信号Wy[k]に含まれる振動成分Ws[k]の周期とする。この振動成分Ws[k]を概念的に図示すると、例えば図5(c)のようになるが、この振動成分Ws[k]の周期T’は、図3に示した言わば実際の振動成分Ws(t)の周期Tと必ずしも同じではなく、最大でクロックパルスCKの1周期ΔT分のバラツキ(=T−T’=±1[ms])を有する。ただし、実際の振動成分Ws(t)の周波数fが概ね数[Hz]〜十数[Hz]であること、これを周期Tに換算すると数百[ms]〜数十[ms]であること、を鑑みると、この周期Tに対する当該バラツキは十分に小さく、無視できる。
このようにしてCPU62が基点検出信号Sbの立ち上がり時点Gを検出すると共に、振動成分Ws[k]の周期T’を認識することを前提として、本実施形態では、次の要領で事前の調整作業が行われる。
即ち、図2に示した操作キー66の操作によって、調整モードが選択される。そして、モータ32が停止状態にあり、かつ、計量コンベヤ12上に被計量物18が載置されていないとき、言わば当該計量コンベヤ12が無負荷状態にあるとき、のディジタル荷重検出信号Wy[k]が、CPU62によって取得される。このときの荷重検出信号Wy[k]には、被計量物18の重量Wm成分は含まれておらず、また振動成分Ws[k]も含まれていないが、コンベヤ本体22やモータ32,可動側支持部材28等の各重量成分のように当初からロードセル24に印加されている初期荷重成分Wiと、増幅回路52等のオフセット成分のように必然的に存在するゼロシフト成分Wzと、が含まれている。従って、被計量物18の重量Wmが次の式1によって表されることから、当該式1に基づく式2が成立する。なお、これら式1および式2において、αは、調整係数としてのスパン係数である。
《式1》
Wm=α・{Wy[k]−Wi−Wz−Ws[k]}
《式2》
0=Wy[k]−Wi−Wz ∵Wm=0,Ws[k]=0
ここで、操作キー66の操作によって、ゼロ調整命令が入力されると、CPU62は、式1が満足されるように、ゼロ調整処理を行う。具体的には、初期荷重成分Wiとゼロシフト成分Wzとの総和をゼロ調整成分Wa(=Wi+Wz)とし、このゼロ調整成分Waに荷重検出信号Wy[k](サンプリング値)を代入(Wa=Wy[k])する。そして、このようにして求めたゼロ調整成分Waを、メモリ回路64に記憶する。
次に、モータ32は停止したままの状態で、重量Wmが既知の被計量物18(サンプル荷重)が計量コンベヤ12上に載置される。そして、このときのディジタル荷重検出信号Wy[k]が、CPU62によって取得される。この場合、上述の式1に基づく次の式3が成立する。
《式3》
Wm=α・{Wy[k]−Wa} where Wa=Wi+Wz
ここで、操作キー66の操作によって、スパン調整命令が入力されると、CPU62は、この式3が満足されるように、スパン係数αを求め、つまりスパン調整処理を行う。このスパン係数αもまた、メモリ回路64に記憶される。
続いて、計量コンベヤ12上からサンプル荷重としての被計量物18が除去されることによって、当該計量コンベヤ12が改めて無負荷状態とされる。この状態で、モータ32が駆動され、つまり当該モータ32を含む計量コンベヤ12が無負荷状態で駆動される。そして、このときのディジタル荷重検出信号Wy[k]が、CPU62によって取得される。この荷重検出信号Wy[k]には、図5に示したような振動成分Ws[k]が現れる。CPU62は、上述した基点検出信号Sbの立ち上がり時点Gを基準として、この振動成分Ws[k]を検出し、詳しくは図6に示すような当該基点検出信号Sbの立ち上がり時点Gを基準とする振動成分Ws[n](n;基点検出信号Sbの立ち上がり時点Gを基準とするサンプリング番号)を得る。このために、CPU62は、図7に示す振動成分検出回路100をソフトウェア的に構成する。
この振動成分検出回路100によれば、荷重検出信号Wy[k]は、加算回路102に入力される。また、この加算回路102には、上述のゼロ調整成分Waも与えられている。加算回路102は、荷重検出信号Wy[k]からゼロ調整成分Waを差し引くことで、振動成分Ws[k]を抽出する。そして、この振動成分Ws[k]は、同期回路104に入力される。同期回路104には、基点検出信号SbおよびクロックパルスCKも入力されており、当該同期回路104は、基点検出信号Sbの立ち上がり時点Gを基準として、クロックパルスCKの立ち上がりに合わせて、振動成分Ws[k]を再符号化する。これによって、図6に示した態様の振動成分Ws[n]が得られる。つまり、基点検出信号Sbの立ち上がり時点Gが到来するたびに、Ws[0]〜Ws[N−1]というN個のサンプリング値Ws[n]が得られる。これは、振動成分Ws[n]の1周期T’がクロックパルスCKの1周期ΔTを単位としてN分割されること、言い換えればモータ32の1回転の回転角度(=360[°])がN分割されること、を意味する。
CPU62は、この振動成分Ws[n]をP(P;複数)周期分にわたって取得し、これらP周期分の振動成分Wsp[n](p;1〜Pの整数)をメモリ回路64に記憶する。このメモリ回路64内においては、当該P周期分の振動成分Wsp[n]は、図8に示すように、個別の一時記憶レジスタに記憶されており、CPU62は、これらP周期分の振動成分Wsp[n]について、それぞれのサンプリング番号nのものごとに、平均値を求める。そして、この平均値を、平均振動信号Wh[n]として、図9に示す平均振動信号レジスタに記憶する。つまり、平均振動信号Wh[n]は、次の式4で表される。
《式4》
Wh[n]={Σ(Wsp[n])}/P where p=1〜P
ただし、何らかの原因によってモータ32の回転速度が変化すると、これに伴い、当該モータ32の回転周期が変化し、ひいては振動成分Ws[k]の周期T’が変化する。すると、図8に示した一時記憶レジスタに記憶されているP周期分の振動成分Wsp[n]の間で、それぞれのデータ量(Nの値)に差異が生じ、例えば図10に示すような状態になる。これでは、当該P周期分の振動成分Wsp[np]間でのサンプリング番号npごとの対応関係に不一致が生じ、式4から適切な平均振動信号Wh[n]を求めることができない。
この不都合を解消するために、CPU62は、P周期分の振動成分Wsp[np]のデータ量Npの平均値を求め、この平均値を、平均振動信号Wh[n]のデータ量Nとする。つまり、次の式5に基づいて、当該データ量Nを求める。
《式5》
N={Σ(Np)}/P where p=1〜P
そして、CPU62は、P周期分の振動成分Wsp[np]のそれぞれを、このデータ量Nに応じた信号Wsp[n]に変換する。具体的には、例えば、任意の振動成分Wsp[np]のデータ量Npが目標のデータ量Nよりも大きい(Np>N)とする。この場合、CPU62は、次の式6に基づいて、当該任意の振動成分Wsp[np]のそれぞれのサンプリング番号npを当該目的のデータ量Nに応じたサンプリング番号nに変換する。詳しくは、式6におけるnpに0〜Np−1という値を順次代入することによって、当該npの値をnという値に変換する。なお、変換後のnの値が小数の場合には、小数点以下を切り捨てる。
《式6》
np・ΔT=n・(Np/N)・ΔT
∴n=np/(Np/N)
さらに、CPU62は、この式6による変換後の任意のサンプリング番号nに対応するデータWsp[n]として、変換前のサンプリング番号npに対応するデータWsp[np]を割り当てる。これによって、図11(a)に示すように、Npというデータ量の振動成分Wsp[np]が、これよりも小さいNというデータ量の信号Wsp[n]に変換される。
なお、この式6に基づく変換手順によれば、変換前の複数のサンプリング番号npについて、変換後に同じサンプリング番号nとなる場合がある。例えば、Np/N=2/1である、と仮定すると、変換前のサンプリング番号npがnp=0であっても、np=1であっても、変換後のサンプリング番号nはn=0となる。この場合は、変換後に同じサンプリング番号nとなる変換前の各サンプリング番号npのうち、最も大きいサンプリング番号npに対応するデータWsp[np]が、当該変換後のサンプリング番号nに対応するデータWsp[n]として最終的に割り当てられる。
これとは異なり、例えば、任意の振動成分Wsp[np]のデータ量Npが目標のデータ量Nと同じ(Np=N)である場合、CPU62は、変換前のサンプリング番号npを、そのまま変換後のサンプリング番号nとする。そして、当該変換前のサンプリング番号npに対応するデータWsp[np]を、変換後のサンプリング番号nに対応するデータWsp[n]として割り当てる。つまり、図11(b)に示すように、変換前の振動成分Wsp[np]は、そのまま変換後の信号Wsp[n]とされる。
さらに、任意の振動成分Wsp[np]のデータ量Npが目標のデータ量Nよりも小さい(Np<N)場合、CPU62は、次の式7に基づいて、当該任意の振動成分Wsp[np]のそれぞれのサンプリング番号npを当該目的のデータ量Nに応じたサンプリング番号nに変換する。なお、この式7による変換後のnの値が小数の場合は、小数点以下を切り捨てる。
《式7》
n={np/(Np/N)}+1
そして、CPU62は、この式7による変換後の任意のサンプリング番号nに対応するデータWsp[n]として、変換前のサンプリング番号npに対応するデータWsp[np]を割り当てる。これによって、図11(c)に示すように、Npというデータ量の振動成分Wsp[np]が、これよりも大きいNというデータ量の信号Wsp[n]に変換される。
なお、この式7に基づく変換手順によれば、変換後のサンプリング番号nに抜けが生じる場合がある。例えば、Np/N=1/2である、と仮定すると、変換前のサンプリング番号npがnp=0であるとき、変換後のサンプリング番号nはn=1となる。つまり、n=0が抜ける。また、変換前のサンプリング番号npがnp=1であるときには、変換後のサンプリング番号nはn=3となる。つまり、n=2が抜ける。この場合は、抜けたサンプリング番号nに対応するデータWsp[n]として、当該抜けたサンプリング番号nの次に大きいサンプリング番号n+1に対応するデータWsp[n+1]に割り当てられるのと同じデータWsp[np]が割り当てられる。
このような変換処理が成されることによって、図8に示したのと同様に、互いに同じデータ量NのP周期分の振動成分Wsp[n]が得られる。CPU62は、この変換後のP周期分の振動成分Wsp[n]を上述の式4に適用することで、平均振動信号Wh[n]を求める。これをもって、事前の調整作業が終了する。そして、操作キー66の操作によって、稼働モードが選択されることで、実際の選別作業が可能となる。
この実際の選別作業においては、上述したようにCPU62によって重量測定値Wm’[x]が求められるが、そのために、当該CPU62は、図12に示す振動成分除去回路200をソフトウェア的に構成する。
即ち、この振動成分除去回路200によれば、図7に示したのと同様の同期回路202が設けられており、この同期回路202に、ディジタル荷重検出信号Wy[k]が入力される。また、この同期回路202には、基点検出信号SbおよびクロックパルスCKも入力されており、当該同期回路202は、基点検出信号Sbの立ち上がり時点Gを基準として、クロックパルスCKの立ち上がりに合わせて、ディジタル荷重検出信号Wy[k]を再符号化する。これによって、ディジタル荷重検出信号Wy[k]は、上述したWy[x]という信号に変換される。なお、この変換後の荷重検出信号Wy[x]には、図13に示すような振動成分Ws[x]が重畳されている。つまり、基点検出信号Sbの立ち上がり時点Gが到来するたびに、Wy[0]〜Wy[X−1]という1周期T’分の振動成分Wy[x]が現れる。
そして、この振動成分Ws[x]を含む荷重検出信号Wy[x]は、加算回路204に入力される。この加算回路204には、平均振動信号Wh[n]に基づいて作成された補正用信号Wr[x](厳密には後述する実行レジスタに記憶されているデータR[x])も入力されており、当該加算回路204は、荷重検出信号Wy[x]から補正用信号Wr[x]を差し引くことで、振動成分Ws[x]を除去する。なお、補正用信号Wr[x]については、後で詳しく説明する。
加算回路204によって振動成分Ws[x]が除去された後の荷重検出信号Wy’[x]は、ディジタルフィルタ回路206に入力される。ディジタルフィルタ回路206は、入力された荷重検出信号Wy[x]に含まれている比較的に低い周波数帯域のノイズ成分、例えば20[Hz]〜100[Hz]という周波数帯域のノイズ成分であって、ここで言う振動成分Ws[x]以外の機械的振動に起因するノイズ成分、を除去するためのものであり、このディジタルフィルタ回路206によるディジタルフィルタリング処理後の荷重検出信号Wy”[x]は、図7に示したのと同様の加算回路208に入力される。なお、ディジタルフィルタ回路206としては、例えば移動平均フィルタ回路が適当である。
加算回路208には、上述したゼロ調整成分Waが与えられており、当該加算回路208は、このゼロ調整成分Waを荷重検出信号Wy”[x]から差し引くことで、被計量物18の重量Wmに比例(または反比例)した重量比例信号Wm”[x]を生成する。そして、この重量比例信号Wm”[x]は、乗算回路210に入力される。乗算回路210は、入力された重量比例信号Wm”[x]にスパン係数αを乗ずることで、重量測定値Wm’[x]を生成する。つまり、この振動成分除去回路200によれば、上述した式1に準拠して、重量測定値Wm’が求められる。
さて、上述の補正用信号Wr[x]は、次のようにして作成される。即ち、補正用信号Wr[x]は、平均振動信号Wh[n]に基づいて実際の振動成分Ws[x]を推定したものであり、当該振動成分Ws[x]の1周期T’分のデータに相当する。従って、基本的には、この補正用信号Wr[x]として、平均振動信号Wh[n]を適用することができる筈である。しかし、上述したように何らかの原因によってモータ32の回転速度が変化すると、振動成分Ws[x]の周期T’が変化し、これに伴い、当該振動成分Ws[x]の1周期T’分のデータ量Xと平均振動信号Wh[n]のデータ量Nとの間に差異が生じる。そうなると、補正用信号Wr[x]として、平均振動信号Wh[n]がそのまま適用されるのは、不適切である。
この不都合を解消するために、CPU62は、実際の振動成分Ws[x]の1周期T’を随時検出し、詳しくは上述した基点検出信号Sbの立ち上がり時点Gが到来するたびに当該振動成分Ws[k]の1周期T’を検出する。そして、この検出結果に基づいて、これから作成する補正用信号Wr[x]を記憶するための図14に示す補正用信号レジスタをメモリ回路64内に形成する。
さらに、CPU62は、これから作成する補正用信号Wr[x]のデータ量Xと、平均振動信号Wh[n]のデータ量Nと、を比較する。ここで、例えば、図15(a)に示すように、補正用信号Wr[x]のデータ量Xと、平均振動信号Wh[n]のデータ量Nとが、互いに同じ(X=N)である、とする。この場合、CPU62は、図9に示した平均振動信号レジスタに記憶されている平均振動信号Wh[n]を、図14に示した補正用信号レジスタにそのままコピー(転送)する。これによって、補正用信号レジスタに補正用信号Wr[x]が記憶される。
これとは異なり、例えば、図15(b)に示すように、補正用信号Wr[x]のデータ量Xが平均振動信号Wh[n]のデータ量Nよりも小さい(X<N)、とする。この場合、CPU62は、上述した式6と同様の次の式8に基づいて、平均振動信号Wh[n]のそれぞれのサンプリング番号nを補正用信号Wr[x]のデータ量Xに応じたサンプリング番号xに変換する。詳しくは、式8におけるnに0〜N−1という値を順次代入することによって、当該nの値をxという値に変換する。なお、変換後のxの値が小数の場合は、小数点以下を切り捨てる。
《式8》
n・ΔT=x・(N/X)・ΔT
∴x=n/(N/X)
そして、CPU62は、この式8による変換後の任意のサンプリング番号xに対応する補正用信号レジスタ(図14参照)の領域(アドレス)に、変換前のサンプリング番号nに対応する平均振動信号レジスタ(図9参照)の領域に記憶されている平均振動信号Wh[n]のデータをコピーする。これによって、実際の振動成分Ws[x]の推定信号である補正用信号Wr[x]が作成される。
なお、この式8に基づく変換手順によれば、変換前の複数のサンプリング番号nについて、変換後に同じサンプリング番号xとなる場合がある。例えば、N/X=2/1である、と仮定すると、変換前のサンプリング番号nがn=0であっても、n=1であっても、変換後のサンプリング番号xはx=0となる。この場合は、変換後に同じサンプリング番号xとなる変換前の各サンプリング番号nのうち、最も大きいサンプリング番号nに対応するデータWh[n]が、当該変換後のサンプリング番号xに対応するデータWr[x]として最終的にコピーされる。これに代えて、変換後に同じサンプリング番号xとなる変換前の各サンプリング番号nに対応する各データWh[n]の平均値が、当該変換後のサンプリング番号xに対応するデータWs[x]としてコピーされてもよい。
さらに、図15(c)に示すように、補正用信号Wr[x]のデータ量Xが平均振動信号Wh[n]のデータ量Nよりも大きい(X>N)場合、CPU62は、上述した式7と同様の次の式9に基づいて、平均振動信号Wh[n]のそれぞれのサンプリング番号nを補正用信号Wr[x]のデータ量Xに応じたサンプリング番号xに変換する。なお、この式9による変換後のxの値が小数の場合は、小数点以下を切り捨てる。
《式9》
x={n/(N/X)}+1
そして、CPU62は、この式9による変換後の任意のサンプリング番号xに対応する補正用信号レジスタ(図14参照)の領域に、変換前のサンプリング番号nに対応する平均振動信号レジスタ(図9参照)の領域に記憶されている平均振動信号Wh[n]のデータをコピーする。これによって、実際の振動成分Ws[x]の推定信号である補正用信号Wr[x]が作成される。
なお、この式9に基づく変換手順によれば、変換後のサンプリング番号xに抜けが生じる場合がある。例えば、N/X=1/2である、と仮定すると、変換前のサンプリング番号nがn=0であるとき、変換後のサンプリング番号xはx=1となる。つまり、x=0が抜ける。また、変換前のサンプリング番号nがn=1であるときには、変換後のサンプリング番号xはx=3となる。つまり、n=2が抜ける。この場合は、抜けたサンプリング番号xに対応するデータWr[x]として、当該抜けたサンプリング番号xの次に大きいサンプリング番号x+1に対応するデータWr[x+1]に割り当てられるのと同じデータWh[n]がコピーされる。
このようにして作成された補正用信号Wr[x]が図12に示した加算回路204に入力されることで、当該加算回路204によって、荷重検出信号Wy[x]から振動成分Ws[x]が適切に除去される。つまり、当該振動成分Ws[x]に起因する誤差が精確に補正される。
なお、厳密に言うと、この補正用信号Wr[x]による補正の対象となる荷重検出信号Wy[x]は、当該補正用信号Wr[x]が作成された後に得られたものである。従って、例えば、この補正用信号Wr[x]による補正対象をWr[x'](x’;0〜X’)という符号で表すと、当該補正対象である荷重検出信号Wr[x’]のデータ量X’と、補正用信号Wr[x]のデータ量Xとが、多少なりとも一致しないことが有り得る。この場合は、特に荷重検出信号Wr[x’]のデータ量X’が補正用信号Wr[x]のデータ量Xよりも大きい(X’>X)場合は、当該荷重検出信号Wr[x’]のうち補正用信号Wr[x]のデータ量Xを超過した部分Wr[X]〜Wr[X’−1]については、補正用信号Wr[x]の最後尾のデータWr[X−1]が誤差補正に適用される。これ以外の場合、つまり荷重検出信号Wr[x’]のデータ量X’が補正用信号Wr[x]のデータ量Xと同じ(X’=X)であるか、当該荷重検出信号Wr[x’]のデータ量X’が補正用信号Wr[x]のデータ量Xとよりも小さい(X’<X)場合は、互いのサンプリング番号x’およびxが対応するもの(x’=x)として、誤差補正が行われる。
また、この誤差補正と並行して、補正用信号Wr[x]が随時作成し直され、言わば更新される。従って、厳密には、補正用信号Wr[x]が更新されるたびに、当該補正用信号Wr[x]は、実行データR[x]として、図16に示す実行レジスタに丸ごと記憶される。そして、この実行レジスタに記憶された実行データR[x]によって誤差補正が行われ、つまり当該実行データR[x]が図12に示した加算回路204に入力される。
この誤差補正を実現するために、CPU62は、メモリ回路64に記憶されている上述した制御プログラムに従って、図17および図18のフローチャートで示される誤差補正タスクを実行する。
即ち、CPU62は、クロックパルスCKの立ち上がりを受けると、図17のステップS1に進み、ディジタル荷重検出信号Wy[k]を取得する。そして、ステップS3に進み、重量選別機10が稼働しているか否か、細かく言えばモータ32が駆動しているか否かを、判定する。ここで、モータ32が駆動していない場合、CPU62は、ステップS5に進む。
ステップS5において、CPU62は、初期設定処理を行う。具体的には、Fs,Fc,FaおよびFbという4つのフラグのそれぞれに、“0”を設定する。併せて、xおよびqという2つのカウンタのカウント値をリセットし、つまりそれぞれのカウント値xおよびqを“0”とする。なお、これらのフラグFs,Fc,FaおよびFb,ならびにカウント値xおよびqとの詳細については、後で順番に説明する。さらに、CPU62は、実行データR[x](補正用信号Wr[x])の最後尾のサンプリング番号X−1を一時的に記憶するためのレジスタMxに、平均信号信号Whの最後尾のサンプリング番号N−1を設定する。この初期設定設定を終えると、CPU62は、一旦、当該誤差補正タスクを終了する。
一方、ステップS3において、モータ32が駆動している場合、CPU62は、ステップS7に進む。そして、このステップS7において、上述のフラグFsが“0”であるか否かを判定する。このフラグFsは、モータ32が起動途中であるか否かを表す指標であり、例えば当該フラグFsが“0”の場合は、モータ32が起動途中であることを表す。これとは反対に、このフラグFsが“1”の場合には、モータ32が起動し終えて、定常に回転駆動していることを表す。ここで、例えば、フラグFsが“0”の場合、つまりモータ32が起動途中である場合は、CPU62は、ステップS9に進む。
ステップS9において、CPU62は、別のフラグFcが0”であるか否かを判定する。このフラグFcは、上述した基点検出信号Sbの立ち上がり時点Gが検出されたか否かを表す指標であり、例えば当該フラグFcが“0”の場合は、基点検出信号Sbの立ち上がり時点Gが未だ検出されていないことを表し、言い換えれば当該基点検出信号Sbの立ち上がり時点Gが到来するのを待っている状態にあることを表す。一方、このフラグFcが“1”の場合は、基点検出信号Sbの立ち上がり時点Gが検出されたことを表し、厳密には当該基点検出信号Sbの立ち上がり時点Gが検出された直後であることを表す。ここで、フラグFcが“0”の場合、つまり基点検出信号Sbの立ち上がり時点Gが未だ検出されていない場合は、CPU62は、ステップS11に進む。
ステップS11において、CPU62は、基点検出信号Sbの信号レベルがローレベルであるか否かを判定する。ここで、当該基点検出信号Sbの信号レベルがローレベルである場合、CPU62は、ステップS13に進む。なお、上述のステップS9において、フラグFcが“1”の場合、つまり基点検出信号Sbの立ち上がり時点Gが検出された直後である場合は、CPU62は、ステップS11をスキップして、直接、ステップS13に進む。
一方、ステップS11において、基点検出信号Sbの信号レベルがハイレベルの場合、CPU62は、当該基点検出信号Sbの立ち上がり時点Gが到来したものと見なして、ステップS15に進む。そして、このステップS15において、CPU62は、上述のステップS9で説明したフラグFcに“1”を設定することで、当該基点検出信号Sbの立ち上がり時点Gを検出したことを表明する。さらに、CPU62は、ステップS17に進み、上述のカウント値xをリセットする。なお、このカウント値xは、基点検出信号Sbの立ち上がり時点Gを基準とするサンプリング番号を表す。
ステップS17の実行後、CPU62は、ステップS19に進み、別のカウント値qを“1”だけインクリメントする。このカウント値qは、モータ32が起動し始めてからの当該モータ32の回転回数を表す。そして、CPU62は、ステップS21に進み、当該インクリメント後のカウント値qと、予め設定された閾値Qと、を比較する。ここで、当該カウント値qが閾値Qに満たない(q<Q)場合、CPU62は、モータ32が未だ起動途中であると見なして、一旦、誤差補正タスクを終了する。なお、このようにステップS21においてモータ32が未だ起動途中であると見なして誤差補正タスクを終了した場合、CPU62は、次の機会に当該誤差補正タスクを実行する際には、上述のステップS13に進むことになる。
ステップS13において、CPU62は、上述のサンプリング番号xを表すカウント値xを“1”だけインクリメントする。そして、ステップS23に進み、このインクリメント後のカウント値xと、予め設定された基準値Dと、を比較する。ここで、カウント値xが基準値D以上(x≧D)である場合、CPU62は、ステップS25に進む。そして、このステップS25において、フラグFcに“0”を設定して、改めて基点検出信号Sbの立ち上がり時点Gが到来するのを待つ姿勢であることを表明し、一旦、誤差補正タスクを終了する。一方、ステップS23において、カウント値xが基準値Dに満たない(x<D)場合、CPU62は、ステップS25に進むことなく、一旦、誤差補正タスクを終了する。
このようにステップS23およびステップS25が設けられているのは、図19に示すように、基点検出信号Sbの立ち上がり時点Gが検出された直後に到来するクロックパルスCKの立ち上がり時点が、改めて当該基点検出信号Sbの立ち上がり時点Gとして検出されること、言わば誤検出されること、を防止するためである。即ち、基点検出信号Sbの真の立ち上がり時点Gから一定期間Taにわたって、当該基点検出信号Sbの立ち上がり時点Gの検出が不許可とされる。この不許可期間Taが設けられることによって、基点検出信号Sbの立ち上がり時点Gの誤検出が防止される。なお、不許可期間Taは、基点検出信号Sbのパルス幅Tbよりも大きく(Ta>Tb)、詳しくは上述の基準値DによってTa=D・ΔTと規定される。そして、この不許可期間Ta中に、フラグFcが“1”とされ、そうでないときには、当該フラグFcは“0”とされる。
図17に戻って、ステップS21において、カウント値qが閾値Q以上(q≧Q)である場合、CPU62は、モータ32が起動し終えたものと見なして、ステップS27に進む。そして、このステップS27において、フラグFsに“1”を設定することで、モータ32が起動し終えたことを表明する。
さらに、CPU62は、ステップS29に進み、図16に示した実行レジスタから今現在のカウント値xに対応する実行データR[x](=Wr[x])を読み出す。そして、ステップS31に進み、この読み出した実行データR[x]を図12に示した振動成分除去回路200(加算回路204)に適用する。これによって、振動成分Ws[x]が除去された荷重検出信号Wy[x]を求め、ひいては重量測定値Wm’[x]を求める。CPU62は、この重量測定値Wm’[x]を、次のステップS33で選別装置に送信した後、一旦、誤差補正タスクを終了する。
また、上述したステップS7において、フラグFsが“1”の場合、つまりモータ32が起動し終えている場合は、CPU62は、図18のステップS35に進む。このステップS35において、CPU62は、上述のステップS9と同様に、フラグFcが0”であるか否かを判定する。ここで、例えば、フラグFcが“0”の場合、つまり基点検出信号Sbの立ち上がり時点Gが未検出の場合は、ステップS37に進む。
ステップS37において、CPU62は、上述のステップS11と同様に、基点検出信号Sbの信号レベルがローレベルであるか否かを判定する。ここで、例えば、当該基点検出信号Sbの信号レベルがローレベルである場合、CPU62は、ステップS39に進む。なお、このステップS37の前のステップS35において、フラグFcが“1”の場合、つまり基点検出信号Sbの立ち上がり時点Gが検出された直後である場合には、CPU62は、当該ステップS37をスキップして、直接、ステップS39に進む。
ステップS39において、CPU62は、上述のステップS13と同様に、サンプリング番号xを表すカウント値xを“1”だけインクリメントする。そして、ステップS41に進み、このインクリメント後のカウント値xと上述の基準値Dとを比較する。ここで、カウント値xが基準値D以上(x≧D)である場合、CPU62は、ステップS43に進む。そして、このステップS43において、フラグFcに“0”を設定して、改めて基点検出信号Sbの立ち上がり時点Gが到来するのを待つ姿勢であることを表明した後、ステップS45に進む。一方、ステップS41において、カウント値xが基準値Dに満たない(x<D)場合、CPU62は、ステップS43をスキップして、直接、ステップS45に進む。なお、ステップS41およびステップS43が設けられているのは、上述したステップS23およびステップS25と同様の趣旨である。
ステップS45において、CPU62は、今現在のカウント値(サンプリング番号)xと、実行データR[x](補正用信号Wr[x])の最後尾のサンプリング番号Mx(=X−1)と、を比較する。ここで、例えば、今現在のカウント値xが実行データR[x]の最後尾のサンプリング番号Mxを超えている(x>Mx)場合、つまり補正対象である荷重検出信号Wr[x’]のデータ量X’が実行データR[x]のデータ量Xを超過している場合は、ステップS47に進む。そして、このステップS47において、今現在のカウント値xに実行データR[x]の最後尾のサンプリング番号Mxを代入した後、当該カウント値xに対応する実行データR[x]を読み出すべく、上述のステップS29に進む。一方、ステップS45において、今現在のカウント値xが実行データR[x]の最後尾のサンプリング番号Mx以下(x≦Mx)の場合は、ステップS47をスキップして、直接、ステップS29に進む。
さらに、上述のステップS37において、基点検出信号Sbの信号レベルがハイレベルの場合、CPU62は、当該基点検出信号Sbの立ち上がり時点Gが到来したものと見なして、ステップS49に進む。そして、このステップS49において、フラグFaが“1”であるか否かを判定する。なお、このフラグFaは、今現在、補正用信号Wr[x]を作成(更新)している最中であるか否かを表す指標であり、例えば当該フラグFaが“0”の場合は、補正用信号Wr[x]の作成中ではないことを表す。これとは反対に、フラグFaが“1”の場合は、補正用信号Wr[x]の作成中であることを表す。ここで、例えば、フラグFaが“0”の場合、つまり補正用信号Wr[x]の作成中でない場合は、ステップS51に進む。
ステップS51において、CPU62は、今現在のカウント値xを、これから新たに作成しようとする補正用信号Wr[x]の最後尾のサンプリング番号Mxとして設定する。そして、CPU62は、ステップS53に進み、フラグFaに“1”を設定することで、当該新たな補正用信号Wr[x]を作成するための処理に入ることを表明する。そして、ステップS55に進み、当該新たな補正用信号Wr[x]を作成するための補正用信号作成タスクの実行を開始する。なお、この補正用信号作成タスクの詳細については、後で説明する。
この補正用信号作成タスクの実行と並行して、CPU62は、ステップS57に進む。そして、このステップS57において、カウント値xをリセットした後、ステップS59に進み、フラグFcに“1”を設定して、ステップS45に進む。
また、上述のステップS49において、フラグFaが“1”である場合、つまり補正用信号Wr[x]を作成している最終である場合、CPU62は、ステップS61に進む。そして、このステップS61において、フラグFbが“1”であるか否かを判定する。このフラグFbは、補正用信号Wr[x]の作成(更新)が終了したか否かを表す指標であり、例えば当該フラグFbが“0”の場合は、補正用信号Wr[x]の作成が未だ終了していないことを表す。一方、このフラグFbが“1”の場合は、補正用信号Wr[x]の作成が終了したことを表す。なお、後述するように、当該フラグFbは、補正用信号作成タスクの終了時に“1”とされる。
ステップS61において、フラグFbが“1”の場合、つまり補正用信号Wr[x]の作成が終了している場合、CPU62は、ステップS63に進む。そして、この新たに作成された補正用信号Wr[x]を、新たな実行データR[x]として、次のステップS63で、上述の実行レジスタ(図16参照)に記憶する。さらに、CPU62は、ステップS65に進み、フラグFbに“0”を設定する。そして、ステップS67に進み、フラグFaに“0”を設定した後、上述のステップS57に進む。このようにステップS65およびステップS67を実行することで、CPU62は、ステップS63が実行されたこと、つまり実行データR[x]が最新のものに更新されたこと、を表明する。なお、ステップS61において、フラグFbが“0”の場合、つまり補正用信号Wr[x]の作成が未だ終了していない場合には、ステップS63〜ステップS67をスキップして、直接、ステップS57に進む。
続いて、図20および図21を参照して、補正用信号作成タスクの詳細を説明する。
即ち、CPU62は、図18に示したステップS55において、この補正用信号作成タスクの実行を開始する。そして、まず、ステップS101に進み、これから作成しようとする補正用信号Wr[x”]の最後尾のサンプリング番号Mxに“1”を足すことで、当該補正用信号Wr[x]のデータ量Xを求める。さらに、CPU62は、ステップS103に進み、上述した平均振動信号Wh[n]のサンプリング番号nを指定するためのカウンタのカウント値nをリセットした後、ステップS105に進む。
ステップS105において、CPU62は、平均振動信号Wh[n]のデータ量Nと、これから作成しようとする補正用信号Wr[x]のデータ量Xと、を比較する。ここで、例えば、図15(a)に示したように、平均振動信号Wh[n]のデータ量Nと、補正用信号Wr[x]のデータ量Xとが、互いに等しい(X=N)場合、CPU62は、ステップS107に進む。そして、このステップS107において、補正用信号Wr[x]のサンプリング番号xを指定するための(誤差補正タスクにおけるカウント値xとは別の)レジスタ値xに、平均振動信号Wh[n]のサンプリング番号nを指定するための上述したカウント値nを設定した後、ステップS109に進む。
ステップS109において、CPU62は、上述のカウント値nによって指定された平均振動信号Wh[n]のデータを、上述のレジスタ値xによって指定された補正用信号Wr[x]のデータとして、コピーする。そして、CPU62は、ステップS111に進み、当該カウント値nを“1”だけインクリメントする。さらに、CPU62は、ステップS113に進み、ステップS111におけるインクリメント後のカウント値nと、平均振動信号Wh[n]のデータ量Nの値と、を比較する。ここで、カウント値nが当該データ量Nの値に満たない(n<N)とき、つまり補正用信号Wr[x]の作成が未だ終了していないときは、CPU62は、ステップS107に戻る。一方、カウント値nが当該データ量Nの値に達した(n=N)とき、つまり補正用信号Wr[x]の作成が終了したときには、ステップS115に進む。
ステップS115において、CPU62は、上述したフラグFbに“1”を設定することで、補正用信号Wr[x]の作成が終了したことを表明する。そして、このステップS115の実行をもって、補正用信号作成タスクを終了する。
さらに、上述したステップS105において、平均振動信号Wh[n]のデータ量Nと、これから作成しようとする補正用信号Wr[x]のデータ量Xとが、互いに等しくない(N≠X)とき、CPU62は、図21のステップS117に進む。このステップS117において、CPU62は、平均振動信号Wh[n]のデータ量Nと、これから作成しようとする補正用信号Wr[x]のデータ量Xと、の大小関係を判定する。ここで、例えば、図15(b)に示したように、平均振動信号Wh[n]のデータ量Nが、これから作成しようとする補正用信号Wr[x]のデータ量Xよりも大きい場合、CPU62は、ステップS119に進む。
ステップS119において、CPU62は、上述した式8に基づいて、今現在のカウント値nによって指定される平均振動信号Wh[n]のサンプリング番号nを、補正用信号Wr[x]のサンプリング番号xに変換する。そして、ステップS121に進み、変換前のサンプリング番号nに対応する平均振動信号Wh[n]のデータを、変換後のサンプリング番号xに対応する補正用信号Wr[x]のデータとして、コピーする。
さらに、CPU62は、ステップS123に進み、今現在のカウント値nを“1”だけインクリメントした後、ステップS125に進む。そして、このステップS125において、ステップS123におけるインクリメント後のカウント値nと、平均振動信号Wh[n]のデータ量Nの値と、を比較する。ここで、カウント値nが当該データ量Nの値に満たない(n<N)とき、つまり補正用信号Wr[x]の作成が未だ終了していないときは、CPU62は、ステップS119に戻る。一方、カウント値nが当該データ量Nの値に達した(n=N)とき、つまり補正用信号Wr[x]の作成が終了したときは、図20に示したステップS115に進む。
また、上述のステップS117において、図15(c)に示したように、平均振動信号Wh[n]のデータ量Nが、これから作成しようとする補正用信号Wr[x]のデータ量Xよりも小さい場合、CPU62は、ステップS127に進む。そして、このステップS127において、上述したのとは別のレジスタ値Maに“−1”という値を設定する。
さらに、CPU62は、ステップS129に進み、上述した式9に基づいて、今現在のカウント値nによって指定される平均振動信号Wh[n]のサンプリング番号nを、補正用信号Wr[x]のサンプリング番号xに変換する。そして、この変換後のサンプリング番号xを、次のステップS131で、さらに別のレジスタ値Mbに設定した後、ステップS133に進む。
ステップS133において、CPU62は、上述のステップS129における変換前のサンプリング番号nに対応する平均振動信号Wh[n]のデータを、変換後のサンプリング番号xに対応する補正用信号Wr[x]のデータとして、コピーする。そして、CPU62は、ステップS135に進み、変換後のサンプリング番号xから上述のレジスタ値Maを差し引いた値が“2”以上であるか否か、要するに当該変換後のサンプリング番号xに上述した抜けがあるか否か、を判定する。
このステップS135において、変換後のサンプリング番号xに抜けがある場合、CPU62は、この抜けを補完するべく、ステップS137に進む。つまり、このステップS137において、サンプリング番号xの値を“1”だけデクリメントした後、ステップS133に戻る。一方、ステップS135において、変換後のサンプリング番号xに抜けがない場合は、ステップS139に進む。
ステップS139において、CPU62は、上述のレジスタ値Mbをレジスタ値Maに移す。そして、ステップS141に進み、今現在のカウント値nを“1”だけインクリメントした後、ステップS143に進む。
ステップS143において、CPU62は、ステップS141におけるインクリメント後のカウント値nと、平均振動信号Wh[n]のデータ量Nの値と、を比較する。ここで、カウント値nが当該データ量Nの値に満たない(n<N)とき、つまり補正用信号Wr[x]の作成が未だ終了していないときは、CPU62は、ステップS129に戻る。一方、カウント値nが当該データ量Nの値に達した(n=N)とき、つまり補正用信号Wr[x]の作成が終了したときは、図20に示したステップS115に進む。
以上のように、本実施形態によれば、上述した従来技術とは異なり、光学式のロータリエンコーダのような回転ディスク等の機械的要素を含む手段を用いることなく、モータ32等の回転体が回転駆動することに伴う振動成分Ws[x](またはWs(t))による誤差を補正することができる。つまり、従来よりも極めて小型かつ安価な構成で当該誤差を補正することができる。また、モータ32の回転速度が変化することによって、振動成分Ws[x]の周期T’(またはT)が変化したとしても、これに追随して精確な誤差補正を実現することができる。
なお、本実施形態においては、重量選別機10用の計量コンベヤ12に本発明を適用する場合について説明したが、これに限らない。例えば、計量コンベヤ12は、ベルト式に限らず、ローラ式やチェーン式のものであってもよい。つまり、モータ32等の回転体がロードセル24等の荷重検出手段によって支持されている構成の計量装置であれば、本発明は有効に機能する。
また、本実施形態においては、基点センサ72として、光センサを採用したが、これに限らない。例えば、磁気センサやカラーセンサ等の他種のセンサを採用してもよい。この場合、基点センサ72の種類に応じて、マーク70を適宜に選択する必要があることは、言うまでもない。
さらに、基点センサ72の出力信号である基点検出信号Sbは、図5に示したのとは逆相であってもよい。また、当該基点検出信号Sbの立ち上がり時点Gを検出することとしたが、立ち下がり時点を検出してもよい。
そして、クロックパルスCKの周期(サンプリング周期)ΔTを1[ms]としたが、この値を小さくすることで、より精確な誤差補正を実現することができる。また、当該クロックパルスCKの周期ΔTの値を大きくすることで、CPU62の負担を軽減することができ、言い換えれば当該CPU62として廉価なものを採用することができる。
そしてさらに、本実施形態においては、モータ32の回転速度が変化することに伴い、振動成分Ws[x]の周期T’が変化したときに、これに合わせて、補正用信号Wr[x]のデータ量Xを変化させることで、当該振動成分Ws[x]の周期T’の変化に追随するようにしたが、これに限らない。例えば、補正用信号Wr[x]のデータ量Xについては一定とし、クロックパルスCKの周期ΔTを変化させることで、振動成分Wr[x]の周期T’の変化に追随するようにしてもよい。