日本語プログラミング言語なでしこの公式掲示板

なでしこ の 掲示板

トップ 新規 検索

2021-10-05 20:18:38

win10になったら(?)RS232がうまく受信しない

KAN さん

5年前よりなでしこのRS232通信下で検査機器のデータを受け取りファイルメーカー15にSQL構文で転送する運用をしておりました。
先日使っていたPC(WIN7)が壊れたのでPCを交換しました。
作ったアプリや、なでしこ本体のバージョン等はそのままです。なでしこVer1.574
ところがRS232受診データがうまく取り込まれずアプリが機能しなくなってしまいました。
RS232通信自体はCom.txtというフリーソフトにて確認しても問題ないようなのですが、どうしてもなでしこ上ではうまく受信しません。
なでしこのバージョンを最新しても同様です。
試しにWin7OSを探してきてOSを入れ替えたら元通りになりました。
似たような経験のある方いらっしゃいませんでしょうか?
いずれWIN7PCも絶滅するので修正できればいいのですがプログラム的な問題なのかWIN10だからなのかもわかりません。
うまく表現できませんがご教授いただければと思います。



参考で検査機器から送られてくる受診データは以下のようになります。CHR表示。ポートは2番のスポットケム。
  1 H | $ ^ & | | | U P           ^ 1 1 5 0 9 0 0 3 ^ V 0 1 . 0 5         ^ S D - 4 8 1 0 ^ 1 | | | | | | | | | 2 0 2 1 1 0 0 5 1 2 5 9   C 9    2 P | 1   5 3    3 O | 1 |                                     | 0 0 0 5 | ^ ^ ^ G L U                   ^ S L 1 F 0 2 6 ^ C H 1 $ ^ ^ ^ B U N                   ^ T F 1 H 2 2 9 ^ C H 2 $ ^ ^ ^ C R E 2                 ^ T G 1 G 1 4 2 ^ C H 3 $ ^ ^ ^ C a                     ^ S F 1 E 1 9 3 ^ C H 4 $ ^ ^ ^ I P                     ^ S P 1 C 1 5 1 ^ C H 5 $ ^ ^ ^ A L P 2                 ^ T J 1 F 0 0 5 ^ C H 6 | R | | | | | | | | | | P   E 2    4 R | 1 | ^ ^ ^ C H 1 ^ G L U                   |       1 0 9 | m g / d L       | ^ ^ ^ | | | F | | | 2 0 2 1 1 0 0 4 1 9 0 1   2 D    5 R | 2 | ^ ^ ^ C H 2 ^ B U N                   |         5 0 | m g / d L       | ^ ^ ^ | H | | F | | | 2 0 2 1 1 0 0 4 1 9 0 1   6 0    6 R | 3 | ^ ^ ^ C H 3 ^ C R E 2                 |       1 . 8 | m g / d L       | ^ ^ ^ | | | F | | | 2 0 2 1 1 0 0 4 1 9 0 1   3 4    7 R | 4 | ^ ^ ^ C H 4 ^ C a                     |       9 . 9 | m g / d L       | ^ ^ ^ | | | F | | | 2 0 2 1 1 0 0 4 1 9 0 1   1 8    0 R | 5 | ^ ^ ^ C H 5 ^ I P                     |       4 . 0 | m g / d L       | ^ ^ ^ | | | F | | | 2 0 2 1 1 0 0 4 1 9 0 1   F A    1 R | 6 | ^ ^ ^ C H 6 ^ A L P 2                 |         4 7 | I U / L         | ^ ^ ^ | | | F | | | 2 0 2 1 1 0 0 4 1 9 0 1   B 2    2 L | 1 | N   0 5   


この受信データをなでしこ上で「言う」させると
  1H|$^&|||UP     ^11509003^V01.05    ^SD-4810^1|||||||||202110051259
 C9
 2P|1
 53
 3O|1|                  |0005|^^^GLU         ^SL1F026^CH1$^^^BUN         ^TF1H229^CH2$^^^CRE2        ^TG1G142^CH3$^^^Ca          ^SF1E193^CH4$^^^IP          ^SP1C151^CH5$^^^ALP2        ^TJ1F005^CH6|R||||||||||P
 E2
 4R|1|^^^CH1^GLU         |   109|mg/dL   |^^^|||F|||202110041901
 2D
 5R|2|^^^CH2^BUN         |    50|mg/dL   |^^^|H||F|||202110041901
 60
 6R|3|^^^CH3^CRE2        |   1.8|mg/dL   |^^^|||F|||202110041901
 34
 7R|4|^^^CH4^Ca          |   9.9|mg/dL   |^^^|||F|||202110041901
 18
 0R|5|^^^CH5^IP          |   4.0|mg/dL   |^^^|||F|||202110041901
 FA
 1R|6|^^^CH6^ALP2        |    47|IU/L    |^^^|||F|||202110041901
 B2
 2L|1|N
 05
 
と表示されます。
しかしWin10での結果はなぜかうまく受信されずに


  1H|$^&|||UP     ^11509003^V01.05    ^2P|1
 53
 3O|1|                  |0005|^^^GLU      4R|1|^^^CH1^GLU         |   109|mg/5R|2|^^^CH2^BUN         |    50|mg/dL 6R|3|^^^CH3^CRE2        |   1.8|mg/dL 7R|4|^^^CH4^Ca          |   9.9|mg/dL 0R|5|^^^CH5^IP          |   4.0|mg/dL   |^1R|6|^^^CH6^ALP2        |    47|IU2L|1|N
 05
 

となってしまいます。データがなかったり改行がなくなったり・・
作ったアプリは以下になります。人の見よう見まねと色々と回りくどく良いスクリプトではありませんが
特にPCと検査機器間で複雑なやり取りはないのでエラー回避などあまり考えずに力技でSQL構文にしています。






※※積み木デザイナ:ここから※
※ 以下はデザインデータです。
※ コメントを削除しないようにしてください。
※ ---
 😀※母艦とはフォーム##生成  🎈※母艦とはフォーム##生成 母艦は「メインフォーム」
そのクライアントW=1000#数値
そのクライアントH=600#数値
そのタイトル=「RS232C経由 血ガス取り込みVer1.575」#文字列
※ ---
 😀ボタン1とはボタン##生成  🎈ボタン1とはボタン##生成 そのX=8#数値
そのY=8#数値
そのW=96#数値
そのH=32#数値
そのテキスト=「ポート閉じて終了」#文字列
そのクリックした時は~ボタン1__クリックした時#イベント
※ ---
 😀血ガス受信BF表示用とはメモ##生成  🎈血ガス受信BF表示用とはメモ##生成 そのX=8#数値
そのY=304#数値
そのW=464#数値
そのH=80#数値
そのテキスト=「」#文字列
そのスクロールバー=「縦横」#文字列
※ ---
 😀ボタン2とはボタン##生成  🎈ボタン2とはボタン##生成 そのX=128#数値
そのY=8#数値
そのW=80#数値
そのH=32#数値
そのテキスト=「FM手動取込み」#文字列
そのクリックした時は~ボタン2__クリックした時#イベント
※ ---
 😀血ガス取り込みデータとはメモ##生成  🎈血ガス取り込みデータとはメモ##生成 そのX=472#数値
そのY=304#数値
そのW=480#数値
そのH=80#数値
そのテキスト=「」#文字列
そのスクロールバー=「」#文字列
※ ---
 😀スポットケム表示用とはメモ##生成  🎈スポットケム表示用とはメモ##生成 そのX=8#数値
そのY=192#数値
そのW=464#数値
そのH=80#数値
そのテキスト=「」#文字列
そのスクロールバー=「縦横」#文字列
※ ---
 😀スポットケム取り込みデータとはメモ##生成  🎈スポットケム取り込みデータとはメモ##生成 そのX=472#数値
そのY=192#数値
そのW=480#数値
そのH=80#数値
そのテキスト=「」#文字列
そのスクロールバー=「」#文字列
※ ---
 😀血球表示用とはメモ##生成  🎈血球表示用とはメモ##生成 そのX=8#数値
そのY=80#数値
そのW=464#数値
そのH=80#数値
そのテキスト=「」#文字列
そのスクロールバー=「縦横」#文字列
※ ---
 😀血球取り込みデータとはメモ##生成  🎈血球取り込みデータとはメモ##生成 そのX=472#数値
そのY=80#数値
そのW=480#数値
そのH=80#数値
そのテキスト=「」#文字列
そのスクロールバー=「」#文字列
※ ---
 😀エラーログとはメモ##生成  🎈エラーログとはメモ##生成 そのX=464#数値
そのY=496#数値
そのW=304#数値
そのH=96#数値
そのテキスト=「」#文字列
そのスクロールバー=「縦横」#文字列
※ ---
 😀ラベル1とはラベル##生成  🎈ラベル1とはラベル##生成 そのX=8#数値
そのY=48#数値
そのW=64#数値
そのH=32#数値
そのテキスト=「血球計算」#文字列
※ ---
 😀ラベル2とはラベル##生成  🎈ラベル2とはラベル##生成 そのX=8#数値
そのY=160#数値
そのW=64#数値
そのH=32#数値
そのテキスト=「生化学検査」#文字列
※ ---
 😀ラベル3とはラベル##生成  🎈ラベル3とはラベル##生成 そのX=8#数値
そのY=272#数値
そのW=64#数値
そのH=32#数値
そのテキスト=「血液ガス」#文字列
※ ---
 😀尿検査表示用とはメモ##生成  🎈尿検査表示用とはメモ##生成 そのX=8#数値
そのY=408#数値
そのW=464#数値
そのH=80#数値
そのテキスト=「」#文字列
そのスクロールバー=「縦横」#文字列
※ ---
 😀尿検査取り込みデータとはメモ##生成  🎈尿検査取り込みデータとはメモ##生成 そのX=472#数値
そのY=408#数値
そのW=480#数値
そのH=80#数値
そのテキスト=「」#文字列
そのスクロールバー=「」#文字列
※ ---
 😀ラベル4とはラベル##生成  🎈ラベル4とはラベル##生成 そのX=8#数値
そのY=384#数値
そのW=64#数値
そのH=24#数値
そのテキスト=「尿検査」#文字列
※※※積み木デザイナ:ここまで※

!変数宣言が必要
!「rs232c.nako」を取り込む
!STX="{\$02}"
!ETX="{\$03}"
!EOT="{\$04}"
!ENQ="{\$05}"
!ACK="{\$06}"
!EOF="{\$1a}"
!CR="{\$0d}"
!LF="{\$0a}"
!CRLF="{CR}{LF}"
!NAK="{\$15}" #Ver1.53追加

#血ガス宣言群
血ガス1とは文字列
血ガス2とは配列
血ガス4とは配列
血ガス5とは配列
血ガス6とは文字列
血ガスBFとは文字列
LLとは整数
Pとは整数

#CBC宣言群
CBCデータ1とは配列
CBCデータ2とは配列
CBCデータ3とは配列
CBCデータ4とは配列
CBCデータ5とは配列
CBCデータ6とは文字列
Lとは整数
LLとは整数
Nとは整数
Pとは整数
血球BFとは文字列

#スポットケム宣言群
スポットケム受信BFとは配列
スポットケムデータとは配列
生化学検査とは文字列
生化学データとは文字列
生化学検査データとは配列
Mとは整数

#尿検査宣言群 2016/10/31Ver1.55から追加
尿検査データとは文字列
尿とは配列
尿2とは配列
尿3とは配列

#接続宣言群
CONNECTSTRとは文字列
SQLとは文字列


血ガスRS232CとはRS232C #血ガスRS232C部品を作る
血ガスRS232Cについて
  ポート=「COM4」
  BPS=9600
  CHARBIT=8
  STOPBIT=1
  #パケットサイズ=0
  #XonLim=0
  #XoffLim=0
  PARITYMODEは「無し」 #(無し/EVEN/ODD/MARK/SPACE)より選択
  #XonChar=17
  #XoffChar=19
  #ErrorChar=0
  #EvtChar=0
  EofChar=04 #EOT
  血ガスRS232Cの受信した時は~
      FM自動取込の有効はオフ
      血ガスBFに「{受信データ}」を追加。
      受信データでEOTが何文字目
      もし、それが0ならば
       ACKを血ガスRS232Cで送信。
      違えば
       血ガス1は「{血ガスBF}」。
       血ガス受信BF表示用は血ガス1
       BLOODGASSデータ整理。 #関数
      FM自動取込の有効はオン

血球計算RS232CとはRS232C #血球計算器RS232C部品を作る
血球計算RS232Cについて
  ポート=「COM1」
  BPS=19200
  CHARBIT=8
  STOPBIT=1
  #パケットサイズ=0
  #XonLim=0
  #XoffLim=0
  PARITYMODEは「無し」 #(無し/EVEN/ODD/MARK/SPACE)より選択
  #XonChar=0
  #XoffChar=0
  #ErrorChar=0
  #EvtChar=03 #ETX
  #EvtChar=05 #ENQ
  #EvtChar=17 #ETB
  EofChar=04 #EOT
  血球計算RS232Cの受信した時は~
      FM自動取込の有効はオフ
      血球BFに「{受信データ}」を追加。
      受信データでEOTが何文字目
      もし、それが0ならば
       ACKを血球計算RS232Cで送信。
      違えば
       CBCデータ1は「{血球BF}」。
       血球表示用はCBCデータ1
       血球計算整理。 #関数
      FM自動取込の有効はオン

スポットケムRS232CとはRS232C #スポットケムRS232C部品を作る
スポットケムRS232Cについて
  ポート=「COM2」
  BPS=19200
  CHARBIT=8
  STOPBIT=1
  #パケットサイズ=0
  #XonLim=0
  #XoffLim=0
  PARITYMODEは「無し」 #(無し/EVEN/ODD/MARK/SPACE)より選択
  #XonChar=0
  #XoffChar=0
  #ErrorChar=0
  #EvtChar=03
  #EvtChar=05
  #EvtChar=17 #ETX,ENQ,ETB
  EofChar=04 #EOT
  スポットケムRS232Cの受信した時は~ #Ver1.53変更
         FM自動取込の有効はオフ
         スポットケム受信BFに「{受信データ}」を追加
         受信データでEOTが何文字目
         もし、それが0ならば
          ACKをスポットケムRS232Cで送信。
         違えば
          スポットケム表示用は「{スポットケム受信BF}」
          スポットケムデータ整理。 #関数
          接続スポットケム。
         FM自動取込の有効はオン

尿検査RS232CとはRS232C #尿検査RS232C部品を作る。2016/10/31Ver1.55から追加
尿検査RS232Cについて
  ポート=「COM3」
  BPS=2400
  CHARBIT=7
  STOPBIT=2
  #パケットサイズ=0
  #XonLim=0
  #XoffLim=0
  PARITYMODEは「EVEN」 #(無し/EVEN/ODD/MARK/SPACE)より選択
  #XonChar=0
  #XoffChar=0
  #ErrorChar=0
  #EvtChar=03
  #EvtChar=05
  #EvtChar=17 #ETX,ENQ,ETB
  #EofChar=04 #EOT
  尿検査RS232Cの受信した時は~
         FM自動取込の有効はオフ
         尿検査データに「{受信データ}」を追加。
         尿検査表示用は「{尿検査データ}」
         尿検査表示用でETXが何文字目
         もし、それが0ならば
           抜ける
         違えば
           尿検査表示用は「{尿検査データ}」 #20170626修正
           尿データ整理。 #関数
         FM自動取込の有効はオン

#プログラム本体
CBCデータ6は空。 #CBCクリア
生化学データは空。 #スポットケムクリア
血ガス6は空。 #血ガスクリア
尿検査データは空。 #尿検クリア2016/10/31Ver1.55から追加
母艦を中央移動
#「{デスクトップ}BLOODGASS.fp7」を「Admin」と「」でFILEMAKER開く FM12うまく動作せず
エラー監視
血ガスRS232Cで開く。 #4ポート解放
スポットケムRS232Cで開く。
血球計算RS232Cで開く。
尿検査RS232Cで開く。
#FM自動取込とはタイマー。 #タイマー設置
#その値は1000*10。
#その時満ちた時は~
#接続BLOODGASS。 #取り込み関数
#接続尿検査。
#接続スポットケム
#接続血球計算
#FM自動取込を開始。 #タイマー開始
エラーならば
  「COMポートが開けません。」と言う。
  エラーメッセージを言う。
  3秒待つ。
  ボタン1__クリックした時
  終了。

母艦の閉じた時は~閉じるイベント。

●閉じるイベント
  血ガスRS232Cを閉じる。
  尿検査RS232Cを閉じる。
  スポットケムRS232Cを閉じる。
  血球計算RS232Cを閉じる。
  FILEMAKER終了。
  終わり。
#ここまで

#関数
●尿データ整理
 尿は文字列。尿=「」。尿は配列。 #尿1データ初期化
 尿[0]はMID(尿検査データ,2,8) #使用機器
 尿[1]はMID(尿検査データ,33,11) #検査日
 尿[2]はMID(尿検査データ,44,6) #検査時間
 尿[3]はMID(尿検査データ,50,8) #検体番号
 尿[4]はMID(尿検査データ,65,5) #使用尿ペーパー
 尿[5]はMID(尿検査データ,78,25) #検査結果1
 尿[6]はMID(尿検査データ,103,25) #検査結果2
 尿[7]はMID(尿検査データ,128,25) #検査結果3
 尿[8]はMID(尿検査データ,153,25) #検査結果4
 尿[9]はMID(尿検査データ,178,25) #検査結果5
 尿[10]はMID(尿検査データ,203,25) #検査結果6
 尿[11]はMID(尿検査データ,230,25) #検査結果7
 尿[12]はMID(尿検査データ,255,25) #検査結果8
 尿[13]はMID(尿検査データ,280,25) #検査結果9
 尿[14]はMID(尿検査データ,305,25) #検査結果10
 尿[15]はMID(尿検査データ,330,25) #検査結果11
 尿[16]はMID(尿検査データ,355,25) #検査結果12
 尿[17]はMID(尿検査データ,421,4) #温度
 尿[18]はMID(尿検査データ,427,4) #COM
 もしMID(尿[0],0,1)が「V」ならば
   尿2[0]はMID(尿[0],3,7) #使用機器
 もしMID(尿[1],0,1)が「D」ならば
   尿2[1]はMID(尿[1],2,10) #検査日
 もしMID(尿[2],0,1)が「T」ならば
   尿2[2]はMID(尿[2],2,5) #検査時間
 もしMID(尿[3],0,1)が「N」ならば
   尿2[3]はMID(尿[3],5,4) #検査番号
 もしMID(尿[4],0,1)が「S」ならば
   尿2[4]はMID(尿[4],2,4) #使用尿ペーパー
 回数で0から14まで繰り返す
  もしMID(尿[回数+5],0,4)が「BIL*」にワイルドカード一致ならば
    尿2[5]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,4)が「PRO*」にワイルドカード一致ならば
    尿2[6]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,4)が「GLU*」にワイルドカード一致ならば
    尿2[7]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,4)が「CRE*」にワイルドカード一致ならば
    尿2[8]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,4)が「URO*」にワイルドカード一致ならば
    尿2[9]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,4)が「S.G.*」にワイルドカード一致ならば
    尿2[10]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,4)が「BLD*」にワイルドカード一致ならば
    尿2[11]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,4)が「PH*」にワイルドカード一致ならば
    尿2[12]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,4)が「KET*」にワイルドカード一致ならば
    尿2[13]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,4)が「NIT*」にワイルドカード一致ならば
    尿2[14]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,4)が「LEU*」にワイルドカード一致ならば
    尿2[15]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,4)が「ALB*」にワイルドカード一致ならば
    尿2[16]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,4)が「A/C*」にワイルドカード一致ならば
    尿2[17]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,4)が「P/C*」にワイルドカード一致ならば
    尿2[18]はMID(尿[回数+5],0,25)
  もしMID(尿[回数+5],0,2)が「T.」にワイルドカード一致ならば
    尿2[19]はMID(尿[回数+5],3,2)
 尿3は尿2を改行で区切り、「','」で配列結合したもの。
 尿検査取り込みデータは尿3。
/*.
14回
 もしMID(尿[回数+4],0,4)が「BIL*」にワイルドカード一致ならば
   尿2[5]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,4)が「PRO*」にワイルドカード一致ならば
   尿2[6]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,4)が「GLU*」にワイルドカード一致ならば
   尿2[7]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,4)が「CRE*」にワイルドカード一致ならば
   尿2[8]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,4)が「URO*」にワイルドカード一致ならば
   尿2[9]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,4)が「S.G.*」にワイルドカード一致ならば
   尿2[10]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,4)が「BLD*」にワイルドカード一致ならば
   尿2[11]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,4)が「PH*」にワイルドカード一致ならば
   尿2[12]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,4)が「KET*」にワイルドカード一致ならば
   尿2[13]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,4)が「NIT*」にワイルドカード一致ならば
   尿2[14]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,4)が「LEU*」にワイルドカード一致ならば
   尿2[15]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,4)が「ALB*」にワイルドカード一致ならば
   尿2[16]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,4)が「A/C*」にワイルドカード一致ならば
   尿2[17]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,4)が「P/C*」にワイルドカード一致ならば
   尿2[18]はMID(尿[回数+4],6,20)
 もしMID(尿[回数+4],0,2)が「T.」にワイルドカード一致ならば
   尿2[19]はMID(尿[回数+4],3,2)
.*/
●接続尿検査
 #FM12とのOBDC接続設定
 もし尿検査取り込みデータが空ならば抜ける。 #取り込み前のデータの有無(FMへ転送済みなら空)
 違えば
  DSN名は「血液検査」
  CONNECTSTRは
  「DSN={DSN名};UID=admin;PWD=;」
  CONNECTSTRでADO開く。
  SQLは、
  「INSERT INTO UROTEST ("使用機器","検査日","検査時間","検査番号","使用尿ペーパー","BIL","PRO","GLU","CRE","URO","SG","BLD","PH","KET","NIT","LEU","ALB","AC比","PC比","温度")」& 
  「VALUES ('{尿3}') 」#「""」が使えず「''」にする
  SQLで、SQL実行。
  DB閉じる。
  尿検査データは「」。 #バッファ初期化
  尿検査取り込みデータは「」。 #取り込みデータ表示初期化
  尿2は文字列。尿2=「」。尿2は配列。 #尿2整理データ初期化
  尿3は文字列。尿3=「」。尿3は配列。 #尿3整理データ初期化

●BLOODGASSデータ整理
 血ガス6は空
 血ガス2は血ガス1を改行で区切ったもの。
 LL=血ガス2の要素数。
 Pで0からLL-1まで繰り返す
  血ガス4【P】は血ガス2【P】を「|」で区切ったもの。
 Pで0からLL-1まで繰り返す
  もし、血ガス4【P,0】が「*H」にワイルドカード一致ならば
  血ガス5【0】は血ガス4【P,4】から14文字左部分。 #使用機器
  血ガス5【1】は血ガス4【P,13】から14文字左部分。 #インポート日時
  もし、血ガス4【P,0】が「*P」にワイルドカード一致ならば
  血ガス5【2】は血ガス4【P,3】。 #ID
  もし、血ガス4【P,0】が「*O」にワイルドカード一致ならば
  血ガス5【3】は血ガス4【P,3】の1から12文字削除したもの。 #検体番号
  血ガス5【4】は血ガス4【P,18】。 #LOT
  血ガス5【5】は血ガス4【P,22】から14文字左部分。 #検査日時
  もし、血ガス4【P,0】が「*R」にワイルドカード一致ならば
  もし、血ガス4【P,2】が「*pH*」にワイルドカード一致ならば
  血ガス5【6】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*PCO2*」にワイルドカード一致ならば
  血ガス5【7】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*PO2*」にワイルドカード一致ならば
  血ガス5【8】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*BE*」にワイルドカード一致ならば
  血ガス5【9】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*tCO2*」にワイルドカード一致ならば
  血ガス5【10】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*HCO3*」にワイルドカード一致ならば
  血ガス5【11】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*BB*」にワイルドカード一致ならば
  血ガス5【12】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*BEact*」にワイルドカード一致ならば
  血ガス5【13】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*BEecf*」にワイルドカード一致ならば
  血ガス5【14】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*cH+*」にワイルドカード一致ならば
  血ガス5【15】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*tHb*」にワイルドカード一致ならば
  血ガス5【16】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*SO2*」にワイルドカード一致ならば
  血ガス5【17】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*AaDO2*」にワイルドカード一致ならば
  血ガス5【18】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*Na*」にワイルドカード一致ならば
  血ガス5【19】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*K+*」にワイルドカード一致ならば
  血ガス5【20】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*Ca++*」にワイルドカード一致ならば
  血ガス5【21】は血ガス4【P,3】。 #検査結果
  もし、血ガス4【P,2】が「*SamType*」にワイルドカード一致ならば
  血ガス5【22】は血ガス4【P,3】。 #動脈血or静脈血
  もし、血ガス4【P,2】が「*Puncture Site*」にワイルドカード一致ならば
  血ガス5【23】は血ガス4【P,3】。 #採血部位
  もし、血ガス4【P,2】が「*Baro*」にワイルドカード一致ならば
  血ガス5【24】は血ガス4【P,3】。 #大気圧
  もし、血ガス4【P,2】が「*Temp*」にワイルドカード一致ならば
  血ガス5【25】は血ガス4【P,3】。 #温度
 血ガス6は血ガス5を改行で区切り、「','」で配列結合したもの。
 血ガス取り込みデータは「{血ガス6}」

●接続BLOODGASS
 #FM12とのOBDC接続設定
 もし血ガス6が空ならば抜ける。 #取り込み前のデータの有無(FMへ転送済みなら空)
 違えば
  DSN名は「血液検査」
  CONNECTSTRは
  「DSN={DSN名};UID=admin;PWD=;」
  CONNECTSTRでADO開く。
  SQLは、
  「INSERT INTO BLOODGASS ("使用機器","インポート日時","ID","検体番号","LOT","検査日時","pH","PCO2","PO2","BE","tCO2","HCO3","BB","BEact","BEecf","CH","tHb","SO2","AaDO2","Naイオン","Kイオン","Caイオン","血液","採血部位","大気圧","温度")」& 
  「VALUES ('{血ガス6}') 」#「""」が使えず「''」にする
  SQLで、SQL実行。
  DB閉じる。
  血ガス取り込みデータは空。 #表示消去
  血ガス6は空。 #バッファ消去

●スポットケムデータ整理
 生化学検査は空。
 スポットケム取り込みデータは空。
 スポットケム表示用の「^^^Panel-V2    ^」を「」に置換。
 それの「^^^CH*^」を「」にワイルドカード置換。
 それの「^^^Electrolyte ^」を「」にワイルドカード置換。
 #それの「 」を「」にワイルドカード置換
 スポットケムデータはそれを改行で区切ったもの。
 #メモ4のアイテムはスポットケムデータ
 M=スポットケムデータの要素数。
 #Nで0からM-1まで繰り返す
 # もしスポットケムデータ【N】の文字数が10以上ならスポットケムデータ【N】をデータに一行追加。
 Nで0からM-1まで繰り返す
  生化学検査データ【N】はスポットケムデータ【N】を「|」で区切ったもの
 Nで0からM-1まで繰り返す
  もし、生化学検査データ【N,0】が「*H」にワイルドカード一致ならば
  生化学検査【0】は生化学検査データ【N,4】から7文字左部分を空白除去したもの。 #使用機器
  生化学検査【1】は生化学検査データ【N,13】から12文字左部分。 #検査日時(正確には転送日時)
  もし、生化学検査データ【N,0】が「*O」にワイルドカード一致ならば
  生化学検査【2】は生化学検査データ【N,2】。 #検査ID
  生化学検査【3】は生化学検査データ【N,3】。 #検査番号
  生化学検査【4】は生化学検査データ【N,13】。 #エラー
  もし、生化学検査データ【N,0】が「*R」にワイルドカード一致ならば
  生化学検査【30】は生化学検査データ【N,11】。 #検査開始時間
  もし、生化学検査データ【N,2】が「Na*」にワイルドカード一致ならば
  生化学検査【5】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「K*」にワイルドカード一致ならば
  生化学検査【6】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「Cl*」にワイルドカード一致ならば
  生化学検査【7】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「CRP*」にワイルドカード一致ならば
  生化学検査【8】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「BUN*」にワイルドカード一致ならば
  生化学検査【9】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「CRE*」にワイルドカード一致ならば
  生化学検査【10】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「GOT*」にワイルドカード一致ならば
  生化学検査【11】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「GPT*」にワイルドカード一致ならば
  生化学検査【12】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「GGT*」にワイルドカード一致ならば
  生化学検査【13】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「ALP*」にワイルドカード一致ならば
  生化学検査【14】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「T-BIL*」にワイルドカード一致ならば
  生化学検査【15】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「CPK*」にワイルドカード一致ならば
  生化学検査【16】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「TG*」にワイルドカード一致ならば
  生化学検査【17】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「T-CHO*」にワイルドカード一致ならば
  生化学検査【18】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「HDL*」にワイルドカード一致ならば
  生化学検査【19】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「LD*」にワイルドカード一致ならば
  生化学検査【20】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「TP*」にワイルドカード一致ならば
  生化学検査【21】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「ALB*」にワイルドカード一致ならば
  生化学検査【22】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「Ca*」にワイルドカード一致ならば
  生化学検査【23】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「IP*」にワイルドカード一致ならば
  生化学検査【24】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「AMYL*」にワイルドカード一致ならば
  生化学検査【25】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「GLU*」にワイルドカード一致ならば
  生化学検査【26】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「FRA*」にワイルドカード一致ならば
  生化学検査【27】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「Mg*」にワイルドカード一致ならば
  生化学検査【28】は生化学検査データ【N,3】を空白除去したもの。
  もし、生化学検査データ【N,2】が「NH3*」にワイルドカード一致ならば
  生化学検査【29】は生化学検査データ【N,3】を空白除去したもの。
 生化学データは生化学検査を「','」で配列結合したもの。
 スポットケム取り込みデータは生化学データ。

●接続スポットケム
 #FM12とのOBDC接続設定
 エラー監視
  もし生化学データが空ならば抜ける。
  違えば
   DSN名は「血液検査」。
   CONNECTSTRは
   「DSN={DSN名};UID=admin;PWD=;」。
   CONNECTSTRでADO開く。
   SQLは、#一行でないと動かない。もしくは&でつなぐ。
   「INSERT INTO SPOTCAM ("使用機器","インポート時間","検査ID","検査番号","エラー","Na","K","Cl","CRP","BUN","CRE","GOT","GPT","GGT","ALP","TBIL","CPK","TG","TCHO","HDL","LD","TP","ALB","Ca","P","AMYL","GLU","FRA","Mg","NH3","検査日時")」&
   「VALUES ('{生化学データ}') 」#「""」が使えず「''」にする
   SQLで、SQL実行。
   DB閉じる。
   スポットケム受信BFは空。
   スポットケム取り込みデータは空。
   生化学データは空。
   #スポットケム表示用は空。
 エラーならば
  エラーログに今を一行追加。
  エラーログにエラーメッセージを追加。
  戻る。

●血球計算整理
 CBCデータ2は血球表示用を改行で区切ったもの。
 L=CBCデータ2の要素数。
 #LLLで0からL-1まで繰り返す
 # もしCBCデータ2【LLL】の文字数が10以上ならCBCデータ2【LLL】をCBCデータ3に一行追加。
 #LL=CBCデータ2の要素数。
 #LLを言う
 Pで0からL-1まで繰り返す
  CBCデータ4【P】はCBCデータ2【P】を「|」で区切ったもの。
 Pで0からL-1まで繰り返す
  もし、CBCデータ4【P,0】が「*H」にワイルドカード一致ならば
  CBCデータ5【0】はCBCデータ4【P,4】から8文字左部分。 #使用機器
  CBCデータ5【1】はCBCデータ4【P,13】。 #インポート日時
  もし、CBCデータ4【P,0】が「*O」にワイルドカード一致ならば
  CBCデータ5【2】はCBCデータ4【P,2】から13文字左部分を空白除去したもの。 #検査番号 ID4ケタ
  CBCデータ5【3】はCBCデータ4【P,22】。 #検査日時
  #CBCデータ5【26】は「{CBCデータ4【P,22】から4文字左部分}/{CBCデータ4【P,22】の5から2文字抜き出す}/{CBCデータ4【P,22】の7から2文字抜き出す}」。 #検査日 2017/3/25削除
  #CBCデータ5【27】は「{CBCデータ4【P,22】の9から2文字抜き出す}:{CBCデータ4【P,22】の11から2文字抜き出す}:{CBCデータ4【P,22】の13から2文字抜き出す}」。 #検査時分秒 2017/3/25削除
  もし、CBCデータ4【P,3】が「*NormalRangeType*」にワイルドカード一致ならば
  CBCデータ5【4】はCBCデータ4【P,3】の1から18文字削除したもの。 #動物タイプ
  もし、CBCデータ4【P,0】が「*R」にワイルドカード一致ならば
  もし、CBCデータ4【P,2】が「*WBC*」にワイルドカード一致ならば
  CBCデータ5【5】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*RBC*」にワイルドカード一致ならば
  CBCデータ5【6】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*HGB*」にワイルドカード一致ならば
  CBCデータ5【7】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*HCT*」にワイルドカード一致ならば
  CBCデータ5【8】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*MCV*」にワイルドカード一致ならば
  CBCデータ5【9】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*MCH^JC10」にワイルドカード一致ならば
  CBCデータ5【10】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*MCHC^JC10」にワイルドカード一致ならば
  CBCデータ5【11】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*PLT*」にワイルドカード一致ならば
  CBCデータ5【12】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*GR\#」にワイルドカード一致ならば
  CBCデータ5【13】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*LY\#」にワイルドカード一致ならば
  CBCデータ5【14】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*EO\#」にワイルドカード一致ならば
  CBCデータ5【15】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*MO\#」にワイルドカード一致ならば
  CBCデータ5【16】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*GR%」にワイルドカード一致ならば
  CBCデータ5【17】はCBCデータ4【P,3】。 #検査結果2016/7/25追加
  もし、CBCデータ4【P,2】が「*LY%」にワイルドカード一致ならば
  CBCデータ5【18】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*EO%」にワイルドカード一致ならば
  CBCデータ5【19】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*MO%」にワイルドカード一致ならば
  CBCデータ5【20】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*RDW-CV」にワイルドカード一致ならば
  CBCデータ5【21】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*RDW-SD」にワイルドカード一致ならば
  CBCデータ5【22】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*MPV」にワイルドカード一致ならば
  CBCデータ5【23】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*PCT」にワイルドカード一致ならば
  CBCデータ5【24】はCBCデータ4【P,3】。 #検査結果
  もし、CBCデータ4【P,2】が「*PDW」にワイルドカード一致ならば
  CBCデータ5【25】はCBCデータ4【P,3】。 #検査結果
 CBCデータ6はCBCデータ5を「','」で配列結合したもの。
 血球取り込みデータはCBCデータ6。

●接続血球計算
 #FM12とのOBDC接続設定
 エラー監視
  もしCBCデータ6が空ならば抜ける。
  違えば
   DSN名は「血液検査」
   CONNECTSTRは
   「DSN={DSN名};UID=admin;PWD=;」
   CONNECTSTRでADO開く。
   SQLは、
   「INSERT INTO CBC ("検査機器","インポート時間","検査番号","検査日時","動物種","WBC","RBC","Hg","Ht","MCV","MCH","MCHC","PLT","GR","LY","EO","MO","GR%","LY%","EO%","MO%","RDWCV","RDWSD","MPV","PCT","PDW") 」&
   「VALUES ('{CBCデータ6}') 」#「""」が使えず「''」にする
   SQLで、SQL実行。
   DB閉じる。
   血球BFは空。
   血球取り込みデータは空。
   CBCデータ6は空。
   CBCデータ5は文字列。 #ウサギ転送時前のデータが残る2016/7/25追加
   CBCデータ5=「」。 #ウサギ転送時前のデータが残る2016/7/25追加
   CBCデータ5は配列。 #ウサギ転送時前のデータが残る2016/7/25追加
 エラーならば
  エラーメッセージを言う。
  戻る。

●空行削除(Sの|Sを)
 それ=S。S=空。
 反復
   もし、対象が空でなければ、対象をSに配列追加。
 Sで戻る。
●ボタン1__クリックした時
  #血ガスRS232Cを閉じる。
  #尿検査RS232Cを閉じる。
  スポットケムRS232Cを閉じる。
  血球計算RS232Cを閉じる。
  FILEMAKER終了。
  終了。

●ボタン2__クリックした時
  #接続BLOODGASS
  #接続血球計算
  #接続スポットケム
  
  
  



/*.
変更履歴
2016/10/21 Ver1.55 デザイン変更(尿検査表示欄追加)。
2016/10/29 Ver1.55 尿検査RS232追加。
2016/10/31 Ver1.55 尿検査RS232修正。尿検査関数追加。
2016/11/17 Ver1.55 尿検査データ整理関数の修正。
2016/11/19 Ver1.55 接続尿検査追加。尿検査データ整理関数の修正2。
2017/2/24 Ver1.56 母艦閉じたとき追加。
2017/3/25 Ver1.57 CBCの検査時間、検査日を削除(FMの方を検査日時から計算に変更したため)
2017/6/26 Ver1.575 FM12接続テスト
.*/

(編集パスワード送信)


テキスト表示



親記事

この内容(No.1159)に返信

この内容(No.1159)をダウンロード

この内容(No.1159)のテキスト表示

子記事

1272 Re③:win10になったら(?)RS232がうまく受信しない (22-03-31)
1177 Re②:win10になったら(?)RS232がうまく受信しない (21-10-26)
1171 Re①:win10になったら(?)RS232がうまく受信しない (21-10-20)
1160 受診データの補足 (21-10-07)




www.eznavi.net