テーマ 使 用 機 器 機 器 構 成 Application Note 資 料 作 成 081127 資 料 番 号 an2k-003 RS-485 接 続 温 湿 度 計 の 記 録 と 取 り 出 し その 2 資 料 番 号 an2k-002 と 似 ていますが このサンプルでは 時 刻 と 温 湿 度 を MPC の 点 データエリアに 記 録 します MPC-2100,MPC-Cunet,MRS-MCOM,USB-CUnet タッチパネル:パナソニック 電 工 GT11, 温 湿 度 計 :CHNO HN-CHNS Windows PC(VB6 オリジナルアプリ) 概 要 2 台 の 温 湿 度 計 のデータを 一 定 間 隔 で MPC の 点 データエリアに 蓄 積 保 存 します 必 要 に 応 じて PC を 接 続 し VB アプリケーションでデータを 読 み 込 みます VB アプリは CSV ファイル 保 存 が 出 来 るので 別 途 EXCEL で 処 理 をすることも 可 能 です 通 常 は MPC が 単 独 で 稼 働 任 意 のタイミングでデータを 取 得 するという 想 定 です RS-485 結 線 通 信 フォーマット タッチパネル 画 面 は 資 料 番 号 an2k-002 をご 覧 下 さい このサンプルの 特 徴 MPC は CU_POST サーバを 起 動 し メール 機 能 でデータ 転 送 をしています この 場 合 VB アプリがホスト MPC がスレーブとなり VB の 要 求 に 対 して MPC がバックグラウンドで 自 動 的 に 応 答 するので MPC のユーザープログラムではメール 機 能 を 操 作 するコードはありません 1
MPC プログラム CUNET 4 4 8 CU_POST MEWNET 38400 2 S_MBK &H20 8 OFF 70000 CNFG# 5 RS485 "9600b7pes1NONE" FOR I=100 TO 131 S_MBK 0 I NEXT I S_MBK 0 200~Wrd *START S_MBK 0 300 WAIT SW(70000)=1 S_MBK 1 300 DELAY=75 NEWP PNT=1 OUT 0 2032~Int FORMAT "0000/00/00" S_MBK HEX$(DATE(0)) 124 10 /* CUnet 初 期 化 /* CUnet サーバ 起 動 /* タッチパネル 通 信 /* タッチパネルページ 切 り 替 え /* START SW オフ /* MRS-MCOM ch5 RS-485 モード /* タッチパネル 使 用 エリア 初 期 化 /* Write Count /* タッチパネル Msg "Push START" /* タッチパネル START SW (オルタネート) /* タッチパネル Msg "Logging" /* read 間 隔 必 要 に 応 じて 加 減 /* 点 データクリア /* 点 番 号 /* データ 数 @CUnet グローバルメモリ /* 文 字 列 書 式 /* タッチパネル 年 月 日 表 示 DO CH$="01" GOSUB *GET_DATA RES1$=RES$ S_MBK RES1$ 100 9 TEMP1=t HUM1=h TIME DELAY CH$="02" GOSUB *GET_DATA RES2$=RES$ S_MBK RES2$ 108 9 TEMP2=t HUM2=h /* 温 湿 度 計 ch1 /* タッチパネル 温 度, 湿 度 表 示 /* この 温 湿 度 計 には 必 要 みたい /* 温 湿 度 計 ch2 /* タッチパネル 温 度, 湿 度 表 示 TM=TIME(0) /* 時 計 FORMAT "00:00:00" S_MBK HEX$(TM) 116 8 /* タッチパネル 時 分 秒 表 示 IF TM&&HFF==0 THEN /* 秒 のチェック X(PNT)=TM /* 時 間 (HEX で 入 る) Y(PNT)=TEMP1*&H10000+HUM1 /* 上 位 2byte= 温 度 下 位 2byte= 湿 度 Z(PNT)=TEMP2*&H10000+HUM2 /* 上 位 2byte= 温 度 下 位 2byte= 湿 度 PR PNT P(PNT) WAIT (TIME(0)&&HFF)!=0 OUT PNT 2032~Int S_MBK PNT 200~Wrd PNT=PNT+1 END_IF TIME DELAY IF SW(70000)==0 THEN GOTO *START END_IF LOOP /* 秒!=00 待 ち /* CUnet グローバルメモリに 書 き 込 み /* タッチパネル カウンタ 値 表 示 /* この 温 湿 度 計 には 必 要 みたい /* タッチパネル STOP SW 押 下 なら *GET_DATA PRINT# 5 CHR$(5) CH$ CHR$(2) "RPV01" CHR$(3) "\r\n" /* 温 湿 度 計 にコマンド 送 信 INPUT# 5 a$ /* 温 湿 度 計 データ 受 信 dummy=val(a$) FOR I=1 to 9 dummy=val(0) NEXT I t=val(10) /* 温 度 値 取 得 dummy=val(0) /* 読 み 飛 ばし h=val(10) /* 湿 度 値 取 得 FORMAT "00.0" /* 書 式 = 整 数 2 桁 小 数 1 桁 RES$=STR$(t) /* 温 度 文 字 列 FORMAT "00.0" RES$=RES$+","+STR$(h) /* 温 度 文 字 列, 湿 度 文 字 列 RETURN 2
PC の VB6 プログラム MSChart1 Text1 データ 表 示 Text2 ファイル 名 Command1 データ 読 込 Command2 保 存 Module1 usbcunet.dll コマンド 宣 言 (サンプルで 使 っているのはこの 内 の 一 部 です) Declare Function usb_open Lib "usbcunet.dll" () As Long Declare Sub usb_close Lib "usbcunet.dll" () Declare Function fw_vid Lib "usbcunet.dll" () As Long Declare Function fw_pid Lib "usbcunet.dll" () As Long Declare Function dll_ver Lib "usbcunet.dll" () As Long Declare Function fw_ver Lib "usbcunet.dll" () As Long Declare Sub init_cunet Lib "usbcunet.dll" (ByVal sa As Long, ByVal ow As Long, ByVal en As Long) Declare Function cunet_in Lib "usbcunet.dll" (ByVal adr As Long, ByVal siz As Long) As Long Declare Sub cunet_out Lib "usbcunet.dll" (ByVal dat As Long, ByVal adr As Long, ByVal siz As Long) Declare Sub cunet_on Lib "usbcunet.dll" (ByVal adr As Long) Declare Sub cunet_off Lib "usbcunet.dll" (ByVal adr As Long) Declare Function cunet_sw Lib "usbcunet.dll" (ByVal adr As Long) As Long Declare Function cunet_peek Lib "usbcunet.dll" (ByVal adr As Long) As Long Declare Sub cunet_poke Lib "usbcunet.dll" (ByVal dat As Long, ByVal adr As Long) Declare Function cunet_post_pnt Lib "usbcunet.dll" (ByVal dest_sa As Long, ByVal ar_top As Long, ByRef send_ar As Any) As Long Declare Function cunet_req_pnt Lib "usbcunet.dll" (ByVal req_sa As Long, ByVal ar_top As Long, ByRef rcv_ar As Any) As Long Public Declare Sub Sleep Lib "kernel32" (ByVal dwmilliseconds As Long) Public Const CuChr = 1 '1byte 符 号 無 Public Const CuInt = 2 '2Byte 符 号 付 Public Const CuWrd = 4 '2Byte 符 号 無 Public Const CuLng = 8 '4Byte 符 号 付 3
Form1 USB のオープン CUnet 初 期 化 等 は Form_Load()で 行 っています Command1_Click()でデータを 読 み 込 みグラフに 反 映 Command2_Click()で Text1 の 内 容 を CSV 保 存 します Private Sub Command1_Click() dc = cunet_in(2032, CuWrd) Label2.Caption = "data count " + CStr(dc) MSChart1.RowCount = 0 MSChart1.RowCount = dc MSChart1.TitleText = CStr(Date) 'CUnet グローバルエリア データ 総 数 'Clear Text1.Text = "" s = Int(dc / 10) With MSChart1.Plot.Axis(VtChAxisIdX).CategoryScale.Auto = False ' 自 動 設 定 を 解 除.DivisionsPerLabel = s 'ラベル 間 隔.DivisionsPerTick = s ' 補 助 メモリ 表 示 単 位 read_data dc 'データ 取 得 & グラフ 描 画 usb_close Private Sub read_data(dc) Dim ar(0 To 59) As Long s = " 時 間, 温 度 1, 湿 度 1, 温 度 2, 湿 度 2" rc = 1 For ar_top = 1 To dc Step 15 res = cunet_req_pnt(4, ar_top, ar(0)) If res <> 0 Then Label2.Caption = "DATA Receive fail" For i = 0 To 14 ii = i * 4 TM = Format(Hex(ar(ii)), "00:00:00") TEMP1 = (Int(ar(ii + 1) / &H10000)) / 10 HUM1 = (ar(ii + 1) And 65535) / 10 TEMP2 = (Int(ar(ii + 2) / &H10000)) / 10 HUM2 = (ar(ii + 2) And 65535) / 10 ' MPC にデータを 要 求 : 要 求 SA, P() 先 頭, 格 納 配 列 ' ar()には 15 点 分 のデータが 入 っている ' X 軸 ' Y 軸 上 位 2byte ' Y 軸 下 位 2byte ' Z 軸 上 位 2byte ' Z 軸 下 位 2byte If TM <> "00:00:00" Then s = s + Chr(13) + Chr(10) + TM + _ "," + Format(TEMP1, "00.0") + "," + Format(HUM1, "00.0") + _ "," + Format(TEMP2, "00.0") + "," + Format(HUM2, "00.0") If rc = 1 Then ' 最 初 の 時 間 から 保 存 ファイル 名 を 作 成 Text2.Text = Format(Date, "YYMMDD-") + Format(Hex(ar(ii)), "000000.csv") If (rc <= dc) Then With MSChart1.Row = rc.rowlabel = TM.Column = 1.Data = TEMP1.Column = 2.Data = HUM1.Column = 3.Data = TEMP2.Column = 4.Data = HUM2 rc = rc + 1 Next i 4 ' グラフに 入 れる
Next ar_top Text1.Text = s Text1.SelStart = Len(s) Private Sub Command2_Click() On Error GoTo err_handler Open Text2.Text For Output As #1 'debug では C:\Program Files\Microsoft Visual Studio\VB98 に 保 存 される Print #1, Text1.Text Close #1 err_handler: MsgBox Err.Description, vbcritical Private Sub Form_Load() If usb_open <> 1 Then Label1.Caption = "USB OPEN ERROR" ' USB-CUnet OPEN Label1.Caption = "fw_ver:" + CStr(fw_ver) + " dll_ver:" + CStr(dll_ver) init_cunet 255, 0, 0 ' USB-CUnet Reset Sleep 500 init_cunet 0, 4, 8 ' USB-CUnet initialize SA,OWN,EN Sleep 500 Label2.Caption = "" Text1.Text = "" Text1.FontName = "MS ゴシック" Text1.FontSize = 9 Text2.Text = "" With MSChart1.chartType = VtChChartType2dLine 'グラフ 種 類 '.charttype = VtChChartType3dLine.RandomFill = False.RowCount = 0 'Clear.ColumnCount = 4.Column = 1.ColumnLabel = " 温 度 1".Column = 2.ColumnLabel = " 湿 度 1".Column = 3.ColumnLabel = " 温 度 2".Column = 4.ColumnLabel = " 湿 度 2".ShowLegend = True ' 凡 例 表 示 With MSChart1.Plot.Axis(VtChAxisIdX).Labels(1).VtFont '.Effect = VtFontEffectUnderline ' 文 字 飾 り.Name = "MS ゴシック" 'フォント 名.Size = 12 'フォントサイズ '.Style = VtFontStyleItalic 'スタイル '.VtColor.Automatic = False ' 色 の 自 動 設 定 を 解 除 '.VtColor.Set 0, 255, 255 ' 色 を 設 定 With MSChart1.Plot.Axis(VtChAxisIdY).ValueScale.Auto = False ' 自 動 設 定 を 解 除.Maximum = 100 ' 最 大 値.Minimum = -10 ' 最 小 値.MajorDivision = 11 ' 目 盛 線 数.MinorDivision = 2 ' 補 助 目 盛 線 数 考 察 隙 間 風 をシャットアウトできればエコで 快 適...しっかり 目 張 りしましょうか 5