(57)【要約】      （修正有）【課題】パチンコ機等に好適な省電力なソレノイド駆動プログラムを作成する。保持状態での電力消費の７５％を節減するプログラムを従来の遊技用プログラムに簡単に追加できる様にする。【解決手段】コイルに並列にダイオードが接続されているソレノイドを可動部を吸引する時は１００％で駆動し、吸引されて保持状態にはパルス駆動する。５０％ＯＮ、５０％ＯＦＦのパルスなら、コイルに流れる電流は１／２となり、その内５０％が外部電源から供給される。従来の保持状態でも１００％駆動していた方式に対して、７５％の電力節減が出来る。遊技機に既に用いられているマイコンの制御プログラムは、タイマー割込方式で作られており、タイマー割込のプログラムが１回走行するとパルス駆動でＯＮとし、次回のタイマー割込のプログラムが走行する時はパルス駆動をＯＦＦにする。この繰り返しで５０％ＯＮ、５０％ＯＦＦのパルス駆動を可能とする。【選択図】図１
2012253308.tif 000002
【特許請求の範囲】
【請求項１】
ソレノイドコイルに並列にダイオードが接続されているソレノイドを
スイッチング部材で駆動するに当たり、
スイッチング部材の制御端子に、マイコンから制御信号を、
可動部を吸引するに必用な駆動用時間は１００％のＯＮ信号を与え、
吸引され、保持状態の保持用時間には５０％のＯＮ信号のパルスを与える方式であって、
マイコンの制御プログラムがタイマー割込方式であり、
タイマー割込が走行する度に、ソレノイド駆動要求判定部で要求が有るか否かが確認され、
要求が有る場合は、ＲＡＭの稼働中タイマーを作動させ、
タイマー割込が走行する度に、時間判定部で稼働中タイマーが０でない場合には、
駆動用時間の間は出力ポートバッファの対応ビットに１を立て、
保持用時間の間は対応ビットに１，と０を交互に出力ポートバッファの対応ビットに入れ、
保持用時間が経過したタイマー割込では、
前記稼働中タイマーの値を０に変える事を特徴とするソレノイド駆動プログラム。
【請求項２】
請求項１であって、
複数個のソレノイド駆動の為に、ソレノイド駆動要求判定部と時間判定部を
ＤＪＮＺ命令で繰り返されるループ内に配置してプログラムを圧縮した事を特徴とするソレノイド駆動プログラム。
【請求項３】
請求項２であって、
保持用時間の間に対応ビットの１と０を交互に出力ポートバッファの対応ビットに入れる方法として、タイマー割込が走行する度に０と１が切り替わる値を
０ビット目に０か１が入り他のビットは０のＲＡＭ，
１ビット目に０か１が入り他のビットは０のＲＡＭ，
２ビット目に０か１が入り他のビットは０のＲＡＭ，
３ビット目に０か１が入り他のビットは０のＲＡＭ，
４ビット目に０か１が入り他のビットは０のＲＡＭ，
５ビット目に０か１が入り他のビットは０のＲＡＭ，
６ビット目に０か１が入り他のビットは０のＲＡＭ，
７ビット目に０か１が入り他のビットは０のＲＡＭ，
の内、ソレノイドの数と同数のＲＡＭに書き込んでいる事を特徴とするソレノイド駆動プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、パチンコ機、スロット機に関連する。
【背景技術】
【０００２】  パチンコ機等遊技機は遊技者の好み、製造者の競争関係から、高度に電子化され、電子、電気部品のかたまりと成り、多大な電力消費が必要と成っている。しかし、東日本大震災を機に、その電力消費が反社会的との声さえ出ている。パチンコ機では普通電動役物、特別電動役物のソレノイドは必須部品であり、省電力化に対しては、演出用のソレノイドも廃止は出来ない。数を減らすのが精一杯の努力である。
これまで、電気は無制限に利用出来るのは当然と考えられ、スイッチング部材（トランジスター等）でＯＮ−ＯＦＦするのが安価であり、省電力化の進歩が遅れた。が、ソレノイドには発熱、温度上昇での吸引力低下と言う問題は以前から検討されており、特開平６−３１０３５、実開平５−２５７０４、実開平７−４２１０５等が先行技術としてある。【０００３】  ソレノイドには可動部を吸引させるには大きな電流を必要とするが、吸着状態を保持するには１〜２割の電流でよいと言う特性があり、特開平６−３１０３５、実開平７−４２１０５等は２電源を持ち、駆動時は大きな電流、保持時は小さな電流をの考えで構成される。
実開平５−２５７０４は大変優れた考えで、１個の電源で駆動時は１００％で、保持時はパルス状に電流を流す方式を取っている。ソレノイドのコイルは磁気エネルギーを蓄え、駆動パルスのＯＦＦの時間には磁気エネルギーがダイオードを介してコイルに電流を流し続ける事を利用している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平６−３１０３５
【特許文献２】実開平５−２５７０４
【特許文献３】実開平７−４２１０５
【発明の概要】
【発明が解決しようとする課題】
【０００５】本発明が解決しようとする課題は、以下の通りである。
（１）  ソレノイドの保持状態消費電力を大幅（７５％）削減し、省電力に貢献する。
（２）  ソレノイドの発熱を低減し、小型化に貢献する。
（３）  遊技機の様にＲＯＭ，ＲＡＭの使用可能容量が制限されている場合でも利用出来る、従来遊技プログラムに追加出来る小さくて、確実なソレノイド駆動プログラムを製作する事。【０００６】  ソレノイドをパルス的に駆動するにはハード的にも可能で、出願人はハードでの具体化も検討を進めている。が、なんと言ってもソフトで対応出来れば、部品が無用で最安価である。が、パチンコ機で認められるＲＯＭ容量は４Ｋバイト、ＲＡＭ容量は２５６バイトであり、現状の遊技用のプログラムで一杯である。また、検査機関が読みやすいプログラム型式のルールもあり、ソフト対応は遊技用に関しては簡単ではない。【０００７】
【課題を解決する為の手段】
【０００８】  請求項１のソレノイド駆動プログラムはソレノイドコイルに並列にダイオードが接続されているソレノイドをスイッチング部材で駆動するに当たり、スイッチング部材の制御端子に、マイコンから制御信号を、可動部を吸引するに必要な駆動用時間は１００％のＯＮ信号を与え、吸引され、保持状態の保持用時間には５０％のＯＮ信号のパルスを与える方式であって、マイコンの制御プログラムがタイマー割込方式であり、タイマー割込が走行する度に、ソレノイド駆動要求判定部で要求が有るか否かが確認され、要求が有る場合は、ＲＡＭの稼働中タイマーを作動させ、タイマー割込が走行する度に、時間判定部で稼働中タイマーが０でない場合には、駆動用時間の間は出力ポートバッファの対応ビットに１を立て、保持用時間の間は対応ビットに１，と０を交互に出力ポートバッファの対応ビットに入れ、保持用時間が経過したタイマー割込では、前記稼働中タイマーの値を０に変える事を特徴とするソレノイド駆動プログラムであるから、課題の（１）の大幅な電力消費削減を可能とする。また、課題（２）の発熱を低減しソレノイドの小型化を可能とする。又、課題（３）のＲＯＭ、ＲＡＭ容量に制限を受けている条件でも使い易い。また、従来２４Ｖ電源で用いられていたソレノイドを３６Ｖ電源で用いれば、吸引される時にはより確実に作動し、保持状態は２４Ｖの時より発熱、電力消費が少ない使い方が可能となる。
【０００９】  請求項２のソレノイド駆動プログラムはソレノイドコイルに並列にダイオードが接続されているソレノイドをスイッチング部材で駆動するに当たり、スイッチング部材の制御端子に、マイコンから制御信号を、可動部を吸引するに必要な駆動用時間は１００％のＯＮ信号を与え、吸引され、保持状態の保持用時間には５０％のＯＮ信号のパルスを与える方式であって、マイコンの制御プログラムがタイマー割込方式であり、タイマー割込が走行する度に、ソレノイド駆動要求判定部で要求が有るか否かが確認され、要求が有る場合は、ＲＡＭの稼働中タイマーを作動させ、タイマー割込が走行する度に、時間判定部で稼働中タイマーが０でない場合には、駆動用時間の間は出力ポートバッファの対応ビットに１を立て、保持用時間の間は対応ビットに１，と０を交互に出力ポートバッファの対応ビットに入れ、保持用時間が経過したタイマー割込では、前記稼働中タイマーの値を０に変える事を特徴とするソレノイド駆動プログラムであると共に、複数個のソレノイド駆動の為に、ソレノイド駆動要求判定部と時間判定部をＤＪＮＺ命令で繰り返されるループ内に配置してプログラムを圧縮した事を特徴とするソレノイド駆動プログラムであるから、複数個のソレノイド駆動を制御する時、特に課題（３）の問題に適している。
【００１０】請求項３のソレノイド駆動プログラムはソレノイドコイルに並列にダイオードが接続されているソレノイドをスイッチング部材で駆動するに当たり、スイッチング部材の制御端子に、マイコンから制御信号を、可動部を吸引するに必要な駆動用時間は１００％のＯＮ信号を与え、吸引され、保持状態の保持用時間には５０％のＯＮ信号のパルスを与える方式であって、マイコンの制御プログラムがタイマー割込方式であり、タイマー割込が走行する度に、ソレノイド駆動要求判定部で要求が有るか否かが確認され、要求が有る場合は、ＲＡＭの稼働中タイマーを作動させ、タイマー割込が走行する度に、時間判定部で稼働中タイマーが０でない場合には、駆動用時間の間は出力ポートバッファの対応ビットに１を立て、保持用時間の間は対応ビットに１，と０を交互に出力ポートバッファの対応ビットに入れ、保持用時間が経過したタイマー割込では、前記稼働中タイマーの値を０に変える事を特徴とするソレノイド駆動プログラムであると共に、複数個のソレノイド駆動の為に、ソレノイド駆動要求判定部と時間判定部をＤＪＮＺ命令で繰り返されるループ内に配置してプログラムを圧縮した事を特徴とするソレノイド駆動プログラムであり、保持用時間の間に対応ビットの１と０を交互に出力ポートバッファの対応ビットに入れる方法として、タイマー割込が走行する度に０と１が切り替わる値を０ビット目に０か１が入り他のビットは０のＲＡＭ，１ビット目に０か１が入り他のビットは０のＲＡＭ，２ビット目に０か１が入り他のビットは０のＲＡＭ，３ビット目に０か１が入り他のビットは０のＲＡＭ，４ビット目に０か１が入り他のビットは０のＲＡＭ，５ビット目に０か１が入り他のビットは０のＲＡＭ，６ビット目に０か１が入り他のビットは０のＲＡＭ，７ビット目に０か１が入り他のビットは０のＲＡＭ，の内、ソレノイドの数と同数のＲＡＭに書き込んでいる事を特徴とするソレノイド駆動ソフトであるから、複数個のソレノイド駆動を制御する時、特に課題（３）の問題に適している。
【００１１】
【図面の簡単な説明】
【００１２】
【図１】  本発明のソレノイド駆動プログラムの説明図。
【図２】  本発明のソレノイド駆動プログラムの第１実施例を示すフローチャート図。
【図３】  本発明のソレノイド駆動プログラムの第２実施例を示すフローチャート図。
【図４】  本発明のソレノイド駆動プログラムの説明図表。
【発明を実施する為の形態】
【００１３】  図１は本発明のソレノイド駆動プログラムの説明図であり、図（ａ）は本発明のソレノイド駆動プログラムが適応されるハード構成の一例を示す。図（ｂ）は本発明の基礎と成るソレノイド電流波形を示す。図（ｃ）は同電流波形の拡大図である。図（ａ），（ｂ），（ｃ）は一体的に用いて説明する。
【００１４】  マイコン１の出力端子Ｐ０は抵抗６を介してＦＥＴ２のゲート端子２ｃに結ばれ、同ＦＥＴ２のドレイン端子２ａはソレノイドコイル３とダイオード４のアノードに結ばれる。同ソレノイドコイル３の他端とダイオード４のカソードは外部電源５の＋に結ばれる。ＦＥＴ２のソース端子２ｂは外部電源５の−に結ばれる。出力端子Ｐ０からの波形はＴａで示される駆動用時間はＦＥＴ２をＯＮのままにし、Ｔｂ−Ｔａで示される保持用時間はＦＥＴ２が５０％ＯＮ、５０％ＯＦＦのパルス駆動される事を示す。
【００１５】    マイコン１の出力端子Ｐ１は抵抗１０を介してトランジスター７のベース端子７ｃに結ばれ、同トランジスター７のコレクタ端子７ａはソレノイドコイル８とダイオード９のアノードに結ばれる。同ソレノイドコイル８の他端とダイオード９のカソードは外部電源５の＋に結ばれる。トランジスター７のエミッター端子７ｂは外部電源５の−に結ばれる。出力端子Ｐ１からの波形はＴｃで示される駆動用時間はトランジスター７をＯＮのままにし、Ｔｄ−Ｔｃで示される保持用時間はトランジスター７が５０％ＯＮ、５０％ＯＦＦのパルス駆動される事を示す。
ＦＥＴ２，トランジスター７はＩＧＢＴ、ＩＰＤ（インテリジェント、パワーデバイス）等に置き換え出来、総称してスイッチング部材と言う。
【００１６】  次ぎに、図（ｂ）でソレノイド電流波形の説明をする。説明はマイコン１の出力端子Ｐ０側で説明する。駆動用時間ＴａでＦＥＴ２を完全ＯＮ状態にすると、ｉ＝Ｉｏ（１−ｅ−Ｒｔ／Ｌ）の式で電流は増大し、Ｉｐで示す点で上昇は減速し、再び上記式に従い上昇する。Ｉｏは外部電源５の電圧値をソレノイドコイル３の抵抗値で割った値であり、Ｉｐで示す点で上昇が減速するのはソレノイドの可動鉄心、または鉄片が動く事で起電力が外部電源と逆極性で生ずる事に起因する。動きが停止すれば、起電力は無くなり、再び元の式に従う。
【００１７】  Ｔａが終わり、保持用時間Ｔｂ−Ｔａに入ると、５０％ＯＮ、５０％ＯＦＦのパルス駆動の結果、半分の電流値のＩｏ／２の電流がソレノイドコイル３に流れる。１／２以下の電流値で一層の省電力を目指すならＯＮの時間割合を少なくすれば可能である。が、本発明は、制御ソフトの簡単化を目指とする為、５０％ＯＮ、５０％ＯＦＦのパルス駆動に限定する。
【００１８】  次ぎに、図（ｃ）で５０％ＯＮ、５０％ＯＦＦのパルス駆動の細部を説明する。Ｉｏ／２の電流値を中心に指数関数に従う上昇と下降の繰り返しであるが、上昇する時は初期値ＩＬから、目標値Ｉｏに向かい、目標値Ｉｏと初期値ＩＬと差が計数となる。結果、時間と共に変化する電流値の式はｉ＝ＩＬ＋（Ｉｏ−ＩＬ）＊（１−ｅ−Ｒｔ／Ｌ）となる。ＯＦＦでの下降する電流値は初期値ＩＨから電流値０に向かう指数関数であり、式はｉ＝ＩＨ＊ｅ−Ｒｔ／Ｌで表せる。ここで、記号Ｌはソレノイドコイルのインダクタンスであり、ＲはＯＮ時はソレノイドコイル及びＦＥＴ２，外部電源５，配線上の抵抗分であり、ＯＦＦ時はソレノイドコイル及びダイオード４の抵抗分である。ＯＮ時とＯＦＦ時で抵抗分が異なる事は５０％ＯＮ、５０％ＯＦＦのパルス駆動をした時、完全な１／２の電流値Ｉｏ／２と差が生ずる事を意味する。抵抗分は発熱で損失に成る成分であるから、ダイオード４は整流用ダイオードよりショットキーダイオードが望ましいし、ＦＥＴもより抵抗値の低い物が望ましい。
【００１９】  図（ｃ）でもう一つ大切な事がある。ＯＮ時は電流は外部電源５からソレノイドコイル３、ＦＥＴ２を通り流れ、外部電源の電力を消費する。が、ＯＦＦ時はソレノイドコイル３からダイオード４へ流れるのみで外部電源の電力を消費していない事に注意を要する。これは、ＯＮ時にソレノイドコイル３に蓄えられた磁気エネルギーがＯＦＦ時にダイオード４を通して放出される現象を利用しているからである。結果、パルス駆動しなかった時に流れる電流値Ｉｏの半分の更に半分である、１／４Ｉｏが外部電源から供給されるのみであり、７５％の省電力と言える。
【００２０】  次に、図２の本発明のソレノイド駆動プログラムの実施例を示す、フローチャート図に従い説明を行う。図（ａ）はメインプログラムであり、図（ｂ）はタイマー割込プログラムであり、図（ｃ）は使用されるＲＡＭを示す。
先ず、図（ａ）で電源投入されるとステップＳ１でマイコンの各種設定がされる。例えばＲＡＭに０を書き込み、初期化したり、タイマー割込を１ｍＳ毎にする等の事である。その後は通常はループを組み、タイマー割込の基点となり、時間毎に割込作業が行われ、例えば０．５ｍＳで割込作業が完了すれば、ループに帰り０．５ｍＳ間ループを走行し、次の割込へ行かせる役目をする。
本実施例では、Ｓ１の後にはステップＳ２からステップＳ７で構成されるソレノイド駆動要求判定部がループ内に設けられた例として示されているが、ソレノイド駆動要求判定部はタイマー割込内に入れても良い。ただ、タイマー割込で実行される遊技を制御するプログラムは遊技の状況、状況で分岐しながら走行するが、希には決められた走行時間内（以後１ｍＳ内とも言う）に走行するに余裕が無い時も有り、ソレノイド駆動要求判定部をタイマー割込内で走行させるより残余時間とも言われるメインプログラムのループ内で行わせる方がメリットがある。
【００２１】  ソレノイドが２個駆動される場合で説明するが、ステップＳ２でソレノイド１の駆動要求が有るか否かが判定される。ソレノイドはスイッチがＯＮなら即作動の場合も有るが、当たり判定で、当たりの場合に作動する場合もあり、イベント判定として図示した。判定がＹＥＳならステップＳ３（以後ステップの文字を省略する事がある）へ行き、稼働中タイマーＴｉｍｅｒ１と名前を付けたＲＡＭに時間設定値を入れる。図１のＴｂの値が相当する。次ぎにＳ４でＥＶＥＮＴの指示はＴｉｍｅｒ１に取り込まれたので０を入れ消され、次の割込で稼働中タイマーＴｉｍｅｒ１に重ね書きを防ぐ。
Ｓ２でＮＯの場合はＳ５の前に分岐する。次ぎにソレノイド２に対する駆動要求が有るか否かが判定され、前述と同様にＹＥＳならばＳ６で、稼働中タイマーＴｉｍｅｒ２と名前を付けたＲＡＭに時間設定値を入れる。図１のＴｄの値が相当する。又、Ｓ７で対応ＥＶＥＮＴの内容は消される。ソレノイドの数は８個までは以上の繰り返しで稼働中タイマーに値を入れる事で対応出来る。
Ｓ５でＮＯの判定の場合はＳ７の後へ分岐し、Ｓ７の後はＳ２の先頭に帰り、ループを組み、同一の事が繰り返される。
【００２２】  次ぎに図（ｂ）のタイマー割込の説明をする。割込毎にステップＳ８のカウンターＦｒｅｅＣは１が加算される。このカウンターは後述する割込毎にＯＮ、ＯＦＦの出力を出す為の物であり、ビット０のみが用いられる。また、後述するが廃止する事も可能であるが、説明が判りやすいので用いる場合で説明する。  次ぎにＳ９で、稼働中タイマーＴｉｍｅｒ１の中が０か否かが判定される。０であれば稼働要求が無い休止状態を意味し、０以外なら稼働中を意味する。０であれば何もせずに抜けるが０でなければ、Ｓ１５迄の時間判定部の動作が始まる。今、Ｔｂが１秒とし、Ｔａが０．２秒とし、割込は１ｍＳ毎とする。Ｓ１０ではＴｉｍｅｒ１に格納されている１０００の値から１が減算され、Ｓ１１へ進み、Ｔｂ−Ｔａの８００と対比される。初期は当然８００より大きな値が残っているからＳ１２へと進み、出力ポートバッファＰＯＵＴＢのビット０に１が書き込まれる。Ｓ１１での判定でＴｉｍｅｒ１の値が８００以下に成ると、Ｓ１３へ進み、Ｓ１３ではＴｂの値１０００が完了した事を示す、０に達しているか否かが判定される。当初は達していないので、Ｓ１４へ進み、前述したＳ８のカウンターＦｒｅｅＣのビット０の値が出力ポートバッファＰＯＵＴＢのビット０に書き込まれる。この作業で書き込まれた値が１であったとすれば、次の割込ではカウンターＦｒｅｅＣのビット０は必ず０に成り、Ｓ１４に達して出力ポートバッファＰＯＵＴＢのビット０には０が書き込まれる。即ち、図１で説明した、保持用時間であるＴｂ−Ｔａの間は割込毎に０，１が交互に、且つ同一時間幅で出力を出す準備がされた事を示す。
更に割込が繰り返され、Ｓ１３での判定でＴｉｍｅｒ１が０に成り、ＹＥＳに成ったとすると、Ｓ１５では出力ポートバッファＰＯＵＴＢのビット０に０が書き込まれ、０．２秒間ソレノイドを１００％で駆動し、０．８秒間割込毎にＯＮ−ＯＦＦする５０％のパルス駆動の動作が完了する。
なお、出力ポートバッファＰＯＵＴＢの状態は出力部であるＳ２３でＰＯＵＴＢをＰＯＲＴ出力する命令で図１の出力端子Ｐ０から外部出力される。
【００２３】  次ぎに、Ｓ１６からＳ２２のソレノイド２用の時間判定部の説明を行うが、稼働中タイマーＴｉｍｅｒ２と言う別なタイマーが必要なこと、出力ポートバッファＰＯＵＴＢのビット１の部分が使われる事以外同一であるから、重複の説明は省略する。  が、なぜ２個を図示したかには意味がある。ソレノイドが５個８個と増えた時には、Ｓ２，Ｓ５の繰り返し、Ｓ９，Ｓ１６の繰り返しでプログラムが長くなる事を明示する事を目的にしている。プログラムが長くなる問題点に対しては図３で示すループを用いる方法を開示するが、ループを用いた説明は理解しにくい面があり、技術公開の点で劣り、まずは全体を正しく理解して頂く事を目的に重複部分のある資料で説明した。また、ステップＳ８でのカウンターＦｒｅｅＣを廃止出来ると述べたが、その方法はＳ１４で出力ポートバッファＰＯＵＴＢに書き込む時に今の状態に対して排他的ＯＲ処理をしてＰＯＵＴＢを書き換える命令文を追加するのみで実現する。但し、これも、読む人に理解しにくい面があり、より判り易いカウンターＦｒｅｅＣを用いる方法で説明した。また、稼働中タイマーＴｉｍｅｒ１，稼働中タイマーＴｉｍｅｒ２を減算方式で説明したが、加算方式に変更する事も簡単である。その場合はＳ３での設定値書き込みは１の書き込みを行う。Ｓ１１ではＴａである２００と対比され、Ｓ１３ではＴｂである１０００と対比される。図（ｃ）のＲＡＭは名前と使用されるビット位置を示す。
【００２４】  さて、図３の本発明のソレノイド駆動プログラムの第２実施例を示すフローチャート図でその動作を説明する。図（ａ）はメインプログラム、図（ｂ）はタイマー割込プログラムで，図２での図（ｃ）は別紙の図４とし、ＲＡＭ、ＲＯＭの関係を表した。説明は図（３）、（４）を一体的に用いて説明する。この実施例はＤＪＮＺ（Ｄｅｃｒｅｍｅｎｔ  ａｎｄ  Ｊｕｍｐ  ｉｆ  Ｎｏｔ  Ｚｅｒｏ）の命令とインデックス  アドレシング  モードを用いる方式であり、同一のプログラムが繰り返し使われる場合、バイト数を大幅に圧縮出来る。ソレノイドの数が８個までの一般化した表記であるが図１の様に２個を対象に説明する。ＤＪＮＺ命令はＺ８０系固有の命令ではあるが、６８系でもＢを減算しながら０に成れば分岐させる命令は簡単に作成出来るので、ＤＪＮＺとは、ＤＪＮＺ同機能命令と理解して欲しい。
【００２５】  図（ａ）のメインプログラムは、初期設定のＳ２４のみでループでタイマー割込待ちとした。図（ｂ）のタイマー割込プログラムには、ここには書かれていない遊技プログラムも、ソレノイド駆動要求判定部と時間判定部と遊技にも共通な出力部が書かれている。８個のソレノイドを駆動出来るように一般化した表現で記載したが、図４での表は４個まで、また、言葉での説明は２個のソレノイドまでとして説明する。
【００２６】  Ｓ２５ではカウンターＦｒｅｅＣが、インデックスＩＸを用いたアドレッシングで呼び出され、割込毎に＋１される。Ｓ２６でそのビット０が１か０かが判定される。１であればＳ２７へ行き、ＲＡＭアドレスがＦｒｅｅＣのアドレスの＋１から＋４のアドレスのＲＡＭに０１Ｈ、０２Ｈ、０４Ｈ、０８Ｈのデータを書き込む。なお、１６進数０１Ｈは０００００００１Ｂである。また、Ｓ２６で判定が０の場合はＳ２８へ行き、ＲＡＭアドレスがＦｒｅｅＣのアドレスの＋１から＋４のアドレスのＲＡＭに００Ｈ、００Ｈ、００Ｈ、００Ｈのデータを書き込む。この作業は後のＳ３８で割込毎にＯＮ−ＯＦＦを繰り返す動作に用いられる。
【００２７】  次ぎに、Ｓ２９でマイコン内のアキュムレータＢにソレノイドの数２が書き込まれる。２が書き込まれた意味合いは、ＤＪＮＺ命令が書かれる迄の命令文を１回走行する毎にＢを１減算しながら繰り返し、Ｂが０に成ればループ繰り返しを終了させ、次ぎに進む命令であるから、Ｓ３０からＳ３９を２回繰り返す意味である。Ｓ３０ではソレノイド駆動要求判定部の始まりであり、ソレノイド駆動要求の情報が納められている、シンボルＥＶＥＮＴＦのＲＡＭがそのアドレス７Ｆ１６を元にＥＶＥＮＴの内容が呼び出され、そのｎ番目のビットの内容がチェックされる。今は２番目すなわち、ビットｂ１がチェックされる。その方法の説明には、図４の表が必要である。ＲＡＭにはシンボルＰＯＵＴＢ、ＦｒｅｅＣ、ＦｒｅｅＣ−０、ＦｒｅｅＣ−１、ＦｒｅｅＣ−２、ＦｒｅｅＣ−３、ＥＶＥＶＴＦ、が各１バイトでＴｉｍｅｒ１，Ｔｉｍｅｒ２，Ｔｉｍｅｒ３，Ｔｉｍｅｒ４が各２バイトでアドレス７Ｆ１０から７Ｆ１Ｅまで決められた順序で配置されている。結果、例えば、ＥＶＥＮＴのアドレスで呼び出した後にＴｉｍｅｒ２を操作したい時は（２−１）＊２バイト＋次ぎで、３バイトを加算したアドレスの内容を扱えばよい。ちなみにＴｉｍｅｒ４なら（４−１）＊２＋１＝７バイトＥＶＥＮＴのアドレスに加算すればよい。
また、ＲＯＭにはデータとしてシンボルＳＯＬＦ０−１、ＳＯＬＦ０−２、Ｔｂ，Ｔｂ−Ｔａの６バイトがソレノイド１用に、ＳＯＬＦ１−１、ＳＯＬＦ１−２、Ｔｄ，Ｔｄ−Ｔｃ，の６バイトがソレノイド２用にと各６バイトの間隔で配置されている。ＲＡＭで説明したと同様に例えば先頭のＳＯＬＦ０−１のアドレスを指定してその他は＊＊バイト加算したアドレスと指定すれば確実に操作したい対象が指定できる。
ここで、ＲＯＭの表のＳＯＬＦ０−１、ＳＯＬＦ０−２、ＳＯＬＦ１−１、ＳＯＬＦ１−２、ＳＯＬＦ２−１、ＳＯＬＦ２−２、ＳＯＬＦ３−１、ＳＯＬＦ３−２を説明する。これは今後、Ｓ３６，Ｓ３８等で必要なビットに対する操作を簡単化する為のマスクデータである。  また、シンボルＴｂ，Ｔｂ−Ｔａに書かれたデータは１０００と８００の時間データである。
【００２８】  さて、図（ｂ）のＳ３０から説明を再開する。ＳＯＬ２のＥＶＥＮＴ？はインデックスレジスターに７Ｆ１６を入れ、ＥＶＥＮＴの内容を取り込み、そのビット１を判定する事であるから、ＲＯＭデータのアドレス１０１０を基点に＋６のアドレスの内容００００００１０を取り込み、ＡＮＤ処理をすれば結果が判定出来る。
今、１であればＳ３１へ進み、稼働中タイマーＴｉｍｅｒ２へ設定値Ｔｄを書き込むには、ＲＯＭ指定アドレスを＋８して１０１８とし、その内容を取り込み、ＲＡＭ指定アドレスを＋３して、７Ｆ１９とし、そのアドレスの内容として書き込めばよい。次ぎに、Ｓ３２へ行き、ＳＯＬ１  ＥＶＥＮＴＦに０を入れ、再びＳ３１の時間設定値を書き換えない様にする。その手段はＲＡＭのＥＶＥＮＴＦを読み出し、ＲＯＭのＳＯＬＦ１−２とＡＮＤした後、ＥＶＥＮＴＦに返す事で実現する。次は時間判定部のＳ３３へ向かうが、Ｓ３０の判定で０の場合は上記、Ｓ３１，Ｓ３２を経過せず、直接Ｓ３３へ向かう。
【００２９】  Ｓ３３ではソレノイド２が稼働の状態か否かを示す、稼働中タイマーＴｉｍｅｒ２が０か０でないかが判定され、時間判定を必要とするか否かが判定される。０であれば、何もせずにＳ４０へと向かう。０でなければＳ３４へ向かう。Ｓ３４では、Ｓ３３の判定の為にＲＡＭから引き出したＴｉｍｅｒ２の値が−１され、ＲＡＭのＴｉｍｅｒ２へ返される。次には、その値を持ったままＳ３５へ進む。ここでは、Ｔｉｍｅｒ２の値がＲＯＭのシンボルＴｄ−Ｔｃから取り込んだ値に対して未だ大きいか否かが判定される。当初はＴｉｍｅｒ２の方が大きいので、判定はＹＥＳでＳ３６へと向かう。Ｓ３６では出力をＯＮさせる為に、ＰＯＵＴＢのビット１に１を立てる。その方法は、ＲＡＭのアドレスを−６してＰＯＵＴＢの内容を取り込んだ後、ＲＯＭのＳＯＬＦ１−１のデータを取り、両者のＯＲ処理の後、結果をＰＯＵＴＢへ返す事で実現する。
割込回数が進み、Ｓ３５での判定がＮＯと成り、１００％ソレノイドＯＮからパルス駆動へ切り換えの分岐に達すると、Ｓ３７へ進む、Ｓ３７はＲＯＭのＴｄの時間経過判定がＴｉｍｅｒ２が０に成ると言う視点で判定されている。当初はＴｄに成っていないから、ＮＯ判定で、Ｓ３８へと進む。
【００３０】  Ｓ３８は本発明の大切な一部である。割込毎に切り替わるカウンターＦｒｅｅＣのビット０の内容をＰＯＵＴＢのビット１へ書き込むのだが、ループ処理では適用ビット目が変化するので、ビット０を入れるのに特別な手段が必要となる。
ここでは、ＰＯＵＴＢの内容をＲＡＭから取り込み、ＲＯＭデータのＳＯＬＦ１−２を取り込みＡＮＤ処理を行う、結果、対象としているｂ１のみを空である０にし、他は変化していない。その後、ＲＡＭデータのＦｒｅｅＣ−１が取り込まれ、両者のＯＲ処理をする。ＦｒｅｅＣ−１はビット１の部分にＦｒｅｅＣのビット０の内容を入れ他のビットは０にされているため、他のビットに悪影響を与えない。以上の処理でＰＯＵＴＢのｂ１にＦｒｅｅＣのｂ０の内容が書き込まれる。Ｓ２７，Ｓ２８は割込毎に切り替わる為、結果、Ｓ３８でＰＯＵＴＢに入る値は０，１が交互に切り替わる。
ここでは、判りやすい方法として、Ｓ２５の割込毎に＋１されるカウンターＦｒｅｅＣとＳ２６のビット０の１，０判定機を用いる方法で説明したが、割込毎にＳ２７，とＳ２８に切り替わる他の手段を用いてもよい。
【００３１】  割込が更に進み、Ｓ３７での判定がＹＥＳでＳ３９へ切り変わった時の説明をする。Ｓ３９はソレノイドの全動作時間終了で動作を終了させる為、出力バッファＰＯＵＴＢのｂ１に０を入れる。ＲＡＭを呼出し、ＲＯＭデータＳＯＬＦ１−２の１１１１１１０１とＡＮＤ処理し、ＰＯＵＴＢを元へ返す操作でそのビットのみを０にして、他のビットには変化を与えていない。
【００３２】  次にはＳ４０へ進みＤＪＮＺ判定がされる。即ち、アキュムレーターＢの値が−１され、０に成ったかが判定される。今は２−１で残１で０ではないからＳ３０のループの先頭に帰る。
【００３３】  Ｂ＝ｎ＝１でＳ３０から説明する。前回と同様な説明の為、簡略化して、説明する。Ｓ３０ではソレノイド１の駆動要求イベントが来ているかチェツクされる。０で来ていなければＳ３３へ進むが、１で来ていれば、Ｓ３１で稼働中タイマーＴｉｍｅｒ１へＲＯＭのＴｂの値を書き込む、ちなみに表に書かれたＴｂの値は２進数で表記した１０００であり、１秒動作用の値である。次ぎにＳ３２でＲＡＭのＥＶＥＮＴＦのｂ０に０が書かれ取り込み完了後の２重書き込み禁止の処置がされる。
【００３４】  次にはソレノイド１用の時間判定部の作動として、Ｓ３３で稼働中タイマーＴｉｍｅｒ１の中身が０か否かが判定される。０ならＳ４０へ分岐するが、０でなければＳ３４でＴｉｍｅｒ１の値は−１され、引かれた値がＳ３５でＲＯＭデータＴｂ−Ｔａと比較される。２進数で書かれたＴｂ−Ｔａの値は８００であり、１０００から８００までの２００＊１ｍＳの間Ｓ３６へ進ませる仕事をする。Ｓ３６はＰＯＵＴＢのｂ０へ１を出す指示であるから、結果、０．２秒間ソレノイドを１００％ＯＮさせる動作となる。
【００３５】  割込回数が進み、Ｓ３５での判定がＮＯと成り、１００％ソレノイドＯＮからパルス駆動へ切り換えの分岐に達すると、Ｓ３７へ進む、Ｓ３７はＲＯＭのＴｂの時間経過判定がＴｉｍｅｒ１が０に成ると言う視点で判定されている。当初はＴｂに成っていないから、ＮＯ判定で、Ｓ３８へと進み、前のループで説明したと同じ手順でＰＯＵＴＢのｂ０に０と１を割込毎に出力し図１で示したマイコンの出力端子Ｐ０に５０％，５０％のＯＮ−ＯＦＦのパルスを割込時間の２倍を周期として出力する。
【００３６】  更に割込が進み、Ｓ３７の判定で０が検知されＹＥＳに分岐すればＴｂの動作時間が終了した事を意味し、Ｓ３９でＰＯＵＴＢのｂ０をクリヤーする。次ぎに、Ｓ３３の０判定からの流れと同じように、Ｓ４０のＤＪＮＺ判定がされＢが−１され、０になるから、Ｓ４１へ進み、ＰＯＵＴＢのデータがＰＯＲＴ出力命令で図１の出力端子Ｐ０から出力される。次ぎに、ＥＮＤに達し次の割込動作で上記を繰り返す。
【００３７】  上記の説明では、割込時間を１ミリ秒として説明したが、この時は得られるパルスの周期は５００ヘルツとなる。主基板のソフトでは４ミリ秒の割込が多用され、この時は１２５ヘルツのパルスとなる。周期が遅く成ると保持が弱くなる心配に対して、実験で５０ヘルツでも正常な動作を確認した。
また、プログラムの長さを短くする事は、本件の重要ポイントであるが、図２の例で１６０バイト程、図３の例で１１０バイト程である。
【００３８】  以上、図１，図２，図３、図４、で説明したソレノイド駆動プログラムは省電力が強く求められる時代背景の中、貢献度の大きいものと言える。
【符号の説明】
【００３９】１                      マイコン
２                      ＦＥＴ（スイッチング部材）
３                      ソレノイドコイル
４                      ダイオード
５                      外部電源
６                      抵抗
７                      トランジスター（スイッチング部材）
８                      ソレノイドコイル
９                      ダイオード
１０                    抵抗
【図１】
2012253308.tif 000003
【図２】
2012253308.tif 000004
【図３】
2012253308.tif 000005
【図４】
2012253308.tif 000006