見出し画像

バーコード端末(S0102-0) jobn

ソースコードの内、jobn 部分の解説をしてみます。

工程1を例に紹介します。

工程1

Python3 のコードで、工程1の完了日時を記録する部分です。
db, tim は各々タイトル画像の class db, class tim のインスタンスです。

def job1():     # ******************** 工程1 ********************
   
   #global io           # IO (LED, BUZ, SW)
   global db           # SQLite 簡易サーバアクセス
   global tim          # 時刻
   global jobn
   
   i2c.write_lcd_wk(0, '1st ')
   i2c.write_lcd_wk(1, ' Process')
   
   
   donef = 0
   
   while(donef == 0):
       
       code = inpcode()            # input Barcode
       print(code)
       
       if code == 'proc1-end':
           donef = 1               # 終了
       else:
           errf = 0
           try:
               assyn = int(code)
           except:
               errf = 1
           
           if errf == 0:
               d,t = tim.nnow()            # ノーマルフォーマットの日時
               dd = '"' + d + '"'
               tt = '"' + t + '"'
               
               cmd = 'UPDATE Barcode1  SET proc1d = ' + dd + ', proc1t = ' + tt + ' where assyn = ' + str(assyn)
               c = db.srdb(cmd)            # SQLite 簡易サーバー 読み書き
               
               assyns = str(assyn) + ' ' * (8 - len(str(assyn)))
               if c != 0:
                   thread_0 = threading.Thread(target=ngdemo(assyns, 2))     # NG
               else:
                   thread_0 = threading.Thread(target=godemo(assyns))        # OK
               
               thread_0.start()            # スレッド・スタート
               
   jobn = 0

状態遷移直後のLCD表示

i2c.write_lcd_wk(0, '1st ')
LCDの1行目に文字列 '1st' を表示するように指示しています。

i2c.write_lcd_wk(1, ' Process')
同じく2行目の指示です。

実際にLECにデータを送信して表示する処理は、所定のタイミングでタイトル画像にある itimer が行います。

工程1処理中のループ

donef = 0
while(donef == 0):

jobn = 0

処理を抜けるまで、ループし次々とassyn の入力を受け付けます。
処理を抜けるとjob0 タイトル画像にあるmain を経て待機処理に遷移します。

バーコード読み出し

code = inpcode() # input Barcode

自作関数inpcode がバーコードを読み出し、改行コードを取り除いて文字列を返します。

工程1終了コマンド時の処理

if code == 'proc1-end':
 donef = 1 # 終了

所定のコマンドを受け取ると前述のdonef を 1 にして工程1の処理ループを抜けます。

assyn 確認

errf = 0
try:
 assyn = int(code)
except:
 errf = 1

バーコードで読み出した文字列が整数に変換できるか確認し、変換できなければ errf を 1 にします。

assyn による処理

if errf == 0:
 d,t = tim.nnow() # ノーマルフォーマットの日時
 dd = '"' + d + '"'
 tt = '"' + t + '"'

class tim を使ってデータベースに記録する日時の文字列を作ります。
 cmd = 'UPDATE Barcode1 SET proc1d = ' + dd + ', proc1t = ' + tt + ' where  assyn = ' + str(assyn)
 c = db.srdb(cmd)  # SQLite 簡易サーバー 読み書き

class db を使ってデータベースに日時を記録します。
 assyns = str(assyn) + ' ' * (8 - len(str(assyn)))
 if c != 0:
  thread_0 = threading.Thread(target=ngdemo(assyns, 2))   # NG
 else:
  thread_0 = threading.Thread(target=godemo(assyns))         # OK

 thread_0.start() # スレッド・スタート

LCDに表示する文字列を準備して、データベースへの書き込みが成功した場合にはOKの表示、失敗した場合はNGの表示をするように自作スレッドを開始します。
自作スレッドはLEDの点灯やブザー鳴動、LCD表示を開始する一方 while ループによってスレッドの終了を待つことなく、バーコードリーダー読み取りを開始します。

以上です。

バーコードリーダーからの入力値によってデータベースを参照したり記録する用途であれば、この部分だけを書き換えて所望の処理をさせることが出来ると思います。

ご不明の点などありましたら遠慮なくお問い合わせください。




出来ればサポート頂けると、嬉しいです。 新しい基板や造形品を作る資金等に使いたいと思います。