Win-GRAF-User_Manual-chinese V1.05

Similar documents
Win-GRAF-User_Manual-chinese

The golden pins of the PCI card can be oxidized after months or years

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

TwinCAT 1. TwinCAT TwinCAT PLC PLC IEC TwinCAT TwinCAT Masc

TC35短信发送程序设计

untitled

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

51 C 51 isp 10 C PCB C C C C KEIL

ActiveX Control

概述

untitled

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

3.1 num = 3 ch = 'C' 2

FY.DOC

epub83-1

投影片 1

Win-GRAF-User_Manual-chinese

如何將 WinCE5.0 程式昇級為 WEC7.0 程式 平台比較 CPU PXA270 CPU AM335x CPU 型號 WP-8x3x/WP-8x4x WP-514x/WP-515x VP-25Wx WP-8x2x/WP-9x2x WP-523x VP-x23x 作業系統版本 WinCE 5.

<4D F736F F D B0D3B77EC3FEA7DEC3C0C476C1C9A5BFA6A1B8D5C3442DB57BA6A1B35DAD702DBEC7ACEC2E646F6378>

Microsoft Word - 01.DOC

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

CC213

Microsoft PowerPoint - OPVB1基本VB.ppt

Microsoft PowerPoint - VB14.ppt

Microsoft Word - 小心翼翼的二十一點N.doc

27 :OPC 45 [4] (Automation Interface Standard), (Costom Interface Standard), OPC 2,,, VB Delphi OPC, OPC C++, OPC OPC OPC, [1] 1 OPC 1.1 OPC OPC(OLE f

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

(HMI) IO A

概述

酒 神 (长篇小说)

(Microsoft Word - 136\260g\270\364\252\272\267s\256Q.doc)

C/C++ - 文件IO

游戏厅捕鱼技巧_天天酷跑游戏技巧 2048游戏技巧,游戏厅打鱼技巧_

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

mvc

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

投影片 1

untitled

<B0B8C0FDCAD6B2E15FD3A1CBA2B0E6>

TPM BIOS Infineon TPM Smart TPM Infineon TPM Smart TPM TPM Smart TPM TPM Advanced Mode...8

f2.eps

Excel VBA Excel Visual Basic for Application

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

C/C++程序设计 - 字符串与格式化输入/输出

多層次傳銷與獎金系統

Chapter 16 集合

ICD ICD ICD ICD ICD

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

untitled

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

Contents

Microsoft Word - CX1000-HMI_程序开发_PLC通讯

多媒體應用 13 新增專案並完成版面配置 <ExMusic01> <activity_main.xml> ImageView ID imgplay ImageView ID imgstop ImageView ID imgfront TextView ID txtsong TextView ID t

S 可编程控制器

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

/ / (FC 3)...

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

Outline USB Application Requirements Variable Definition Communications Code for VB Code for Keil C Practice

Visual Basic D 3D

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID

INTRODUCTION TO COM.DOC

CC213

VB程序设计教程

untitled

RUN_PC連載_12_.doc

2/14 Buffer I12, /* x=2, buffer = I 1 2 */ Buffer I243, /* x=34, buffer = I 2 43 */ x=56, buffer = I243 Buffer I243I265 code_int(int x, char *buffer)

Microsoft Word - CIN-DLL.doc

Oracle高级复制配置手册_业务广告_.doc

untitled

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

instructions.PDF

投影片 1

c_cpp

行业

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

基于ECO的UML模型驱动的数据库应用开发1.doc

Microsoft Word - ACG chapter00c-3ed.docx

1 1 Excel VBA 說明 ( ) (_) STEP4 Excel 2 STEP5 A1 1 B2 2 C3 3 STEP6 A1 STEP7 > > 1-11

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

untitled

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

目 录

Contents

Chapter 2

Microsoft Word - 11.doc

38 诚 信 始 于 入 口 从 入 口 处 着 手 打 好 律 师 队 伍 建 设 的 诚 信 基 础 / 刘 彦 平 4 0 我 国 证 券 公 司 治 理 缺 陷 的 根 源 及 其 出 路 / 黄 运 成 曹 里 加 李 畅 4 3 中 止, 因 为 什 么? 被 告 人 胡 鹏 等 五 人

ebook140-9

穨2700使用手冊.doc

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南

Microsoft PowerPoint - 04-array_pointer.ppt

C/C++语言 - C/C++数据

新版 明解C++入門編

VB控件教程大全

ebook71-13

indows CE 1996 Semiconductor Industry Association (SIA) Windows CE Windows Embedded CE 6.0 Windows CE Windows Embedded CE 6.0 Micr

6020

使用手冊

Transcription:

第 13 章使用 VB.net 2008 程式來讀 / 寫 Win-GRAF 變數 本章以 Visual Studio.NET 2008 開發工具建立一個範例程式的方式來說明, 範例程式可以在 XP-8xx8-CE6, WP-8xx8, VP-x2x8-CE7, WP-5xx8-CE7 產品盒內附的 CD-ROM 內找到 VB.NET 光碟 : \napdos\win-graf\demo-project\vb.net_2008_demo\ demo_vb01 : 數位 I/O 範例, 搭配 I-87055W 模組 ( 於 Slot 0) demo_vb02 : 類比 I/O 範例, 搭配 I-87024W (Slot 1) 與 I-8017HW (Slot 2) 模組 demo_vb03 : 讀 / 寫 Win-GRAF Internal Integers, Timer, Real 以及 String 變數 ( 無需 I/O 模組 ) demo_vb04 : 讀 / 寫 Win-GRAF Internal String 變數 ( 無需 I/O 模組 ) Win-GRAF 光碟 : \napdos\win-graf\demo-project\ "demo_vb01.zip", "demo_vb02.zip", "demo_vb03.zip", "demo_vb04.zip" 13.1 如何回存 Win-GRAF 專案? 以下介紹如何把 Win-GRAF 範例程式, 回存到 Win-GRAF Workbench 中 首先, 滑鼠點選工具列 File -> Add Exiting Project -> FromZip, 並選擇想要回存的 Win-GRAF 專案 (zip 檔 ), 即可回存該專案 之後, 請執行編譯並將專案下載到 PAC 內 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-1

13.2 如何開放 Win-GRAF 變數給.NET 程式與 Soft-GRAF HMI 使用? Win-GRAF 中, 除了字串 (String) 變數之外, 其它欲開放的變數需在 "Binding" 設定中產生一個位址 才能提供.NET 程式或 Soft-GRAF HMI 進行存取 以下將示範如何開放變數 : 1. 滑鼠點選工具列上的 Open Binding Configuration 按鈕來開啟 Binding 視窗 2. 點選 "PUBLIC (:9000)" 來設定要公開的資料,"Address" 欄位無需填寫,"Port" 欄位固定為 "9000", 請勿更動 Open Binding Configuration "PUBLIC" 區不必 填寫 Address 變數區 3. 在設定公開資料之前, 您必須在變數區先建立好要公開的變數 滑鼠點選 Global variables 再按 Ins 鍵來新增變數項目, 下表為 Test_3 範例所使用的變數, 您可依實際需求來設定, 設定完 成後, 畫面如下 變數名稱 Public_BOOL Public_INT Public_DINT Public_WORD Public_REAL 資料型態 BOOL INT DINT WORD REAL Enter 鍵 4. 如下圖, 滑鼠點選在 "PUBLIC(:9000)", 接著選取變數區內欲公開的變數資料, 並將其拖曳到 "Name" 區域 "Identifier" 欄位會自動產生編號, 若其他 VB 或.Net 程式想取用變數資料, 需 設定一樣的 ID 編號 注意 : "PUBLIC" 最多可使用 8192 個變數,"Identifier" 編號只能是 "1 ~ 8192" Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-2

另外, 如需開放 Win-GRAF 的 String 變數, 可使用 "Pub_String" 函式 在 Win-GRAF 專案的程式裡, 加入此段 ST 語言程式 ( 您可回存 Win-GRAF demo_vb04 範例程式, 來查看以下程式內容 ) Pub_string(Address, String_val) ; Address: 開放的位址編號, 範圍可以是 1 ~ 1024 String_val: String 變數的名稱 變數 名稱型態說明 Init BOOL 初始化用, 初值設定為 True Tmp_val BOOL msg1 STRING, 字串長度為 100 msg2 STRING, 字串長度為 32 msg3 STRING, 字串長度為 60 判斷開放位址是否成功 True 表示成功,"False" 表示失敗 欲開放的 String 變數 注意 : 字串長度可以是 1 ~ 255 程式內容 : If init then Init := false; (* 開放位址為 1 的字串值 *) Tmp_val := pub_string(1,msg1); (* 開放位址為 2 的字串值 *) Tmp_val := pub_string(2,msg2); (* 開放位址為 3 的字串值 *) Tmp_val := pub_string(3,msg3); End_if; Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-3

13.3 建立 VB.NET 新專案 1. 開啟微軟 Visual Studio.NET 2008 軟體, 點選 [File] > [New Project] 2. 點選 [Smart Device] > [.NET frame work 3.5] > [Smart Device Project], 在下方輸入專案名稱 ( 本例 : project1), 然後按 OK 1 2 3 3. 點選 [Device Application] > [Windows CE] > [.NET Compact Framework Version 3.5], 然後按 OK 2 1 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-4

13.3.1 加入專案參考 (Project Reference) UserShareNet 程式庫 (Library) 中包含了所有要跟 Win-GRAF 專案交換資料用的函式 (Function), 而在程式裡使用 UserShare 關鍵字之前, 您必須在應用程式的參考清單裡加入參考 : UserShareNet.dll 1. 請於出貨光碟中 (\napdos\win-graf\demo-project\demo_vb01\vb01\), 將 UserShareNet.dll 檔 複製到目前專案的位置底下 ( 例如 : "C:\project1") 2. 滑鼠右鍵點擊 Solution Explorer 視窗中的專案名稱 ( 例如 : "project1"), 再選擇 Add Reference 滑鼠右鍵 3. 點選 Browse 頁籤, 並切換到目前的專案位置 ( 例如 : "C:\project1"), 再選擇 UserShareNet.dll, 並按 OK 即完成了 切換到目前的專案位置 ( 例如 : "C:\project1") 註 : 加入 UserShareNet.dll 後, 下次需開發新專案時, 即可從先前開發的專案目錄中 ( 例如 : "C:\project1"), 將此檔案複製並加入到新的專案中, 或是, 可預先從光碟中複製 UserShareNet.dll 到固定路徑中 ( 例如 : "C:\dll_lib") Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-5

4. 加入 UserShareNet.dll 後, 請雙擊專案的 My Project, 確認是否已加入 UserShareNet.dll 雙擊滑鼠 5. 以滑鼠右鍵點選 Form1.vb, 選擇 View Code, 並在第一 二行插入 Option Explicit On 與 Imports UserShareNet ( 如下圖 ) 右鍵 接著, 就可以在您的 VB 表格中設計所需的物件與動作了 請參考 13.5 節的說明來使用 UserShareNet.dll" 內的函式, 來讀 / 寫 Win-GRAF 專案內的變數資料 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-6

13.4 編譯應用程式 程式編寫完成後, 請依照以下步驟來編譯 (Build) 並產生一個執行檔 (.exe) 1. 請記得隨時按下 Save All 工具按鈕來存檔 2. 點選 Build > Build project1 來編譯此專案 (project1), 於 Error List 視窗中會顯示編譯結果 3. 編譯完成後, 執行檔會存放在以下目錄中 < 您的 VB.net 專案資料夾 > \bin\release\ <project_name>.exe 請將此執行檔 ( 例如 : project1.exe ) 複製到 PAC 的 \System_Disk\Win-GRAF\ 目錄下來執行 注意 : 使用者可複製 VB.net 執行檔到其他目錄下執行, 但請記得同時複製相關的 DLL 檔案, 否則執行會有錯誤 例如 : 要在 \Micro_SD\ 目錄下執行 "project1.exe", 該目錄必須有以下 3 個檔案, 即 project1.exe UserShareNet.dll Quicker.dll 檔 ( 可在光碟的 \System_disk\Win-GRAF\ 目錄下取得 UserShareNet.dll 與 Quicker.dll 檔案 ) Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-7

13.5 "UserShareNet.DLL" 內的函式說明 本節著重於 "UserShareNet.DLL" 內的函式 (Function) 來進行說明 "UserShareNet.DLL" 提供了許多函式, 可用來讀 / 寫 Win-GRAF 專案裡的變數, 以下分為幾類 : 1. 讀 / 寫 Boolean 2. 讀 / 寫 8-bit 整數 3. 讀 / 寫 16-bit 整數 4. 讀 / 寫 32-bit 整數 5. 讀 / 寫 64-bit 整數 6. 讀 / 寫 32-bit 實數 7. 讀 / 寫 64-bit 實數 請參考附錄 A 來查看 Win-GRAF 變數的資料型態與範圍 13.5.1 讀 / 寫 Boolean 的函式 Set_BOOL 設定指定位址編號的 Boolean 變數值 UserShare.Set_BOOL ( iuseraddress As System.UInt16, ByVal istatus As byte) as Byte iuseraddress : 指定變數的位址編號 (1 ~ 8192) istatus : 設定變數的狀態 ; 例如 : istatus = 1 表示 "True",iStatus = 0 表示 "False" 設定位址 1 的 Win-GRAF Boolean 變數為 "True". UserShare.Set_BOOL(Convert.ToUInt16(1), 1) 光碟 : \napdos\win-graf\demo-project\vb.net_2008_demo\demo_vb01 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-8

Get_BOOL 讀出指定位址編號的 Boolean 變數值 UserShare.Get_BOOL ( iuseraddress As System.UInt16, ByRef istatus As byte) iuseraddress : 指定變數的位址編號 (1 ~ 8192) istatus : 取得變數的狀態 ;istatus = 1 表示 "True",iStatus = 0 表示 "False" 取得 Win-GRAF Boolean 位址編號 1 的變數狀態. Dim istatus As Byte UserShare.Get_BOOL(Convert.ToUInt16(1), istatus) 光碟 : \napdos\win-graf\demo-project\vb.net_2008_demo\demo_vb01 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-9

13.5.2 讀 / 寫整數的函式 Set_SINT Set_INT Set_DINT Set_LINT 設定指定位址編號的 Win-GRAF 8-bit Integer, 16-bit Integer, 32-bit Integer 及 64-bit Integer 變數值 UserShare.Set_SINT (ByVal iuseraddress As System.UInt16, ByVal istatus As SByte) As Byte UserShare.Set_INT (ByVal iuseraddress As System.UInt16, ByVal istatus As Short) As Byte UserShare.Set_DINT (ByVal iuseraddress As System.UInt16, ByVal istatus As Integer) As Byte UserShare.Set_LINT (ByVal iuseraddress As System.UInt16, ByVal istatus As long) As Byte iuseraddress : 指定變數的位址編號 (1 ~ 8192) istatus : 設定 8-bit Integer, 16-bit Integer, 32-bit Integer 及 64-bit Integer 值 設定 32-bit integer 值 1234567 到位址編號 1 的變數. UserShare.Set_DINT(Convert.ToUInt16(1), Convert.ToInt32(1234567) ) 設定 integer 值 -1234 到位址編號 2 的變數. UserShare.Set_INT(Convert.ToUInt16(3), Convert.ToInt16(-1234) ) 設定 64-bit integer 值 123456789012345 到位址編號 3 的變數. UserShare.Set_LINT(Convert.ToUInt16(3), Convert.ToInt64(123456789012345) ) 設定 8-bit integer 值 125 到位址編號 4 的變數. UserShare.Set_SINT(Convert.ToUInt16(3), Convert.ToSByte(125) ) 光碟 : 1. 讀 / 寫類比 I/O: \napdos\win-graf\demo-project\vb.net_2008_demo\demo_vb02 2. 讀 / 寫 Internal long integer Timer 及 Real ( 浮點數 ) 的值 : \napdos\win-graf\demo-project\vb.net_2008_demo\demo_vb03 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-10

Get_SINT Get_INT Get_DINT Get_LINT 讀出指定位址編號的 Win-GRAF 8-bit Integer, 16-bit Integer, 32-bit Integer 及 64-bit Integer 變數值 UserShare. Get_SINT (ByVal iuseraddress As System.UInt16, ByRef istatus As SByte) As Byte UserShare. Get_INT (ByVal iuseraddress As System.UInt16, ByRef istatus As Short) As Byte UserShare.Get_DINT (ByVal iuseraddress As System.UInt16, ByRef istatus As Integer) As Byte UserShare. Get_LINT (ByVal iuseraddress As System.UInt16, ByRef istatus As long) As Byte iuseraddress : 指定變數的位址編號 (1 ~ 8192) istatus : 取得 8-bit Integer, 16-bit Integer, 32-bit Integer 及 64-bit Integer 值 Dim Dlong_val As Int64 Dim short_val As Int16 Dim long_val As Int32 Dim Sbyte_val as sbyte 取得位址編號 7 的 64-bit 整數的變數值. UserShare.Get_LINT(Convert.ToUInt16(7), Dlong_val) 取得位址編號 8 的 32-bit 整數的變數值. UserShare.Get_DINT(Convert.ToUInt16(8), long_val) 取得位址編號 9 的 16-bit 整數的變數值. UserShare.Get_INT(Convert.ToUInt16(9), short_val) 取得位址編號 10 的 8-bit 整數的變數值. UserShare.Get_SINT(Convert.ToUInt16(9), sbyte_val) 光碟 : 1. 讀 / 寫類比 I/O: \napdos\win-graf\demo-project\vb.net_2008_demo\demo_vb02 2. 讀 / 寫 Internal long integer Timer 及 Real ( 浮點數 ) 的值 : \napdos\win-graf\demo-project\vb.net_2008_demo\demo_vb03 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-11

13.5.3 讀 / 寫實數的函式 Get_REAL Get_LREAL 讀出指定位址編號的 Win-GRAF 32-bit Real 64-bit Real 變數值 UserShare. Get_REAL (ByVal iuseraddress As System.UInt16, ByRef istatus As Single) As Byte UserShare. Get_LREAL(ByVal iuseraddress As System.UInt16, ByRef istatus As Double) As Byte iuseraddress : 指定變數的位址編號 (1 ~ 8192) istatus : 取得浮點數數值 Dim float_val As Single Dim double_val As Double 取得位址編號 7 的 double 變數值. UserShare.Get_LREAL(Convert.ToUInt16(7), double_val) 取得位址編號 8 的 Single 變數值. UserShare.Get_REAL(Convert.ToUInt16(8), float_val) 光碟 : 1. 讀 / 寫類比 I/O: \napdos\win-graf\demo-project\vb.net_2008_demo\demo_vb02 2. 讀 / 寫 Internal long integer Timer 及 Real ( 浮點數 ) 的值 : \napdos\win-graf\demo-project\vb.net_2008_demo\demo_vb03 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-12

Set_REAL Set_LREAL 寫入指定位址編號的 Win-GRAF 32-bit Real 64-bit Real 變數值 UserShare. Set_REAL (ByVal iuseraddress As System.UInt16, ByVal istatus As Single) As Byte UserShare. Set_LREAL(ByVal iuseraddress As System.UInt16, ByVal istatus As Double) As Byte iuseraddress : 指定變數的位址編號 (1 ~ 8192) istatus : 設定浮點數數值 寫入 11234.234567 到位址編號 7 的變數 UserShare.Set_LREAL(Convert.ToUInt16(7),Convert.ToDouble(11234.234567)) 寫入 123.12 到位址編號 8 的變數 UserShare.Set_REAL(Convert.ToUInt16(8), Convert.ToSingle (123.12)) 光碟 : 1. 讀 / 寫類比 I/O: \napdos\win-graf\demo-project\vb.net_2008_demo\demo_vb02 2. 讀 / 寫 Internal long integer Timer 及 Real ( 浮點數 ) 的值 : \napdos\win-graf\demo-project\vb.net_2008_demo\demo_vb03 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-13

13.5.4 讀 / 寫字串的函式 Get_STRING 讀取指定位址編號的 Win-GRAF 字串變數值 UserShare. Get_STRING (ByVal iuseraddress As System.UInt16, ByVal msg() As Byte) As Byte iuseraddress : 指定變數的位址編號 (1 ~ 1024) msg() : 取得 / 設定 Win-GRAF 的字串值 Dim str_val As String Dim msg() As Byte 取得位址編號 7 的 String 變數值. UserShare.Get_STRING(Convert.ToUInt16(7),msg ) str_val= byte_array_to_unicode(msg) Private Function byte_array_to_unicode(byval buf() As Byte) As String Dim tmpmsg As String If buf.length > 255 Then Return Nothing End If tmpmsg = System.Text.Encoding.GetEncoding("UTF-8").GetString(buf, 0, buf.length) Return tmpmsg End Function 光碟 : 1. 讀 / 寫 STRING 的值 : \napdos\win-graf\demo-project\vb.net_2008_demo\demo_vb04 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-14

Set_STRING 寫入指定位址編號的 Win-GRAF 字串值 UserShare. Set_STRING (ByVal iuseraddress As System.UInt16, ByVal msg() As Byte) As Byte iuseraddress : 指定變數的位址編號 (1 ~ 1024) msg() : 設定 Win-GRAF 的字串值 Dim str_val As String= Hellow World Dim msg() As Byte msg= unicode_to_byte_array(str_val) 寫入位址編號 7 的 String 變數值. UserShare.Set_STRING(Convert.ToUInt16(7),msg ) 轉換字串成 byte array Private Function unicode_to_byte_array(byval msg As String) As Byte() Dim tmpbuf() As Byte If msg.length > 255 Then Return Nothing End If tmpbuf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(msg) Return tmpbuf End_Function 光碟 : 1. 讀 / 寫 STRING 的值 : \napdos\win-graf\demo-project\vb.net_2008_demo\demo_vb04 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-15

13.5.5 如何讓 VB.NET 程式讀取 Win-GRAF 字串變數?.NET 應用程式如果要寫入字串變數, 必須根據目前使用的語言編碼 ( 例如 : UTF-8) 轉換成 byte 陣列才能寫入, 若是讀出字串變數的陣列內容, 則需要根據語言編碼轉換成字串 以下提供 VB.NET 程式轉換的範例 ( 編碼為 UTF-8 ): String 轉成 byte 陣列 Private Function unicode_to_byte_array(byval msg As String) As Byte() Dim tmpbuf() As Byte If msg.length > 255 Then Return Nothing End If tmpbuf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(msg) Return tmpbuf End Function byte 陣列轉字串 Private Function byte_array_to_unicode(byval buf() As Byte) As String Dim tmpmsg As String If buf.length > 255 Then Return Nothing End If tmpmsg = System.Text.Encoding.GetEncoding("UTF-8").GetString(buf, 0, buf.length) Return tmpmsg End Function Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 13-16

第 14 章使用 C# 程式來讀 / 寫 Win-GRAF 變數 本章以 Visual Studio.NET 2008 開發工具建立一個範例程式的方式來說明, 範例程式可以在 XP-8xx8-CE6, WP-8xx8, VP-x2x8-CE7, WP-5xx8-CE7 產品盒內附的 CD-ROM 內找到 C# 光碟 : \napdos\win-graf\demo-project\csharp.net_2008_demo\ demo_csharp01 : 數位 I/O 範例, 搭配 I-87055W 模組 ( 於 Slot 0) demo_csharp02 : 類比 I/O 範例, 搭配 I-87024W (Slot 1) 與 I-8017HW (Slot 2) 模組 demo_csharp03 : 讀 / 寫 Win-GRAF Internal Integer, Timer, 及 Real 變數 ( 無需 I/O 模組 ) demo_csharp04 : 讀 / 寫 Win-GRAF String 變數 ( 無需 I/O 模組 ) Win-GRAF 光碟 : \napdos\win-graf\demo-project\ "demo_vb01.zip", "demo_vb02.zip", "demo_vb03.zip", "demo_vb04.zip" 14.1 如何回存 Win-GRAF 專案? 請參考 13.1 節來回存 Win-GRAF 專案 14.2 如何開放 Win-GRAF 變數給 C# 程式使用? 請參考 13.2 節 - 開放 Win-GRAF 變數給.NET 程式使用的方式 14.3 建立 C# 新專案 1. 開啟微軟 Visual Studio.NET 2008, 點選功能表 [File] > [New Project] Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-1

2. 點選 [Smart Device] > [.NET frame work 3.5] > [Smart Device Project], 並輸入專案名稱 ( 例如 : "project1 ), 然後點選 "OK" 3. 點選 [Device Application] > [Windows CE] > [.NET Compact Framework Version 3.5], 然後點選 "OK" Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-2

14.3.1 加入 C# 專案參考 UserShareNet 程式庫 (Library) 中包含了所有要跟 Win-GRAF 專案交換資料用的函式, 而在程式裡 使用 UserShare 關鍵字之前, 您必須在應用程式的參考清單裡加入參考 : UserShareNet.dll 1. 請於出貨光碟中 (\napdos\win-graf\demo-project\demo_csharp01\demo_csharp01\), 將 UserShareNet.dll 檔複製到目前專案的位置底下 ( 例如 : "C:\project1") 2. 滑鼠右鍵點選 Solution Explorer 視窗中的 專案名稱 ( 例如 : "project1"), 再選擇 Add Reference 滑鼠右鍵 3. 點選 Browse 頁籤, 並切換到目前的專案位置 ( 例如 : "C:\project1"), 再選擇 UserShareNet.dll, 並按 OK 即完成了 切換到目前的專案位置 ( 例如 : "C:\project1") 註 : 加入 UserShareNet.dll 後, 下次需開發新專案時, 即可從先前開發的專案目錄中 ( 例如 : "C:\project1"), 將此檔案複製並加入到新的專案中 或是, 可預先從光碟中複製 UserShareNet.dll 到固定路徑中 ( 例如 : "C:\dll_lib") Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-3

4. 加入 UserShareNet.dll, 會出現在 Solution Explorer 視窗 5. 以滑鼠右鍵點選 Form1.cs, 選擇 View Code, 將游標移到最上方, 在第一個區段中加入 using UserShareNet 接著, 就可以在您的 C# 表單中設計所需的物件與動作了 請參考 14.5 節的說明來使用 UserShareNet.dll 內的函式, 來讀 / 寫 Win-GRAF 內的變數資料 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-4

14.4 編譯應用程式 程式編寫完成後, 請依照以下步驟來編譯 (Build) 並產生一個執行檔 (.exe) 1. 請記得隨時按下 Save All 工具按鈕來存檔 2. 點選 Build > Build project1 來編譯此專案 (project1), 於 Error List 視窗中會顯示編譯結果 3. 編譯完成後, 執行檔會存放在以下目錄中 < 您的 C#.net 專案資料夾 > \bin\release\ <project_name>.exe 請將此執行檔 ( 例如 : project1.exe ) 複製到 PAC 的 \System_Disk\Win-GRAF\ 目錄下來執行 注意 : 使用者可複製 C#.net 執行檔到其他目錄下執行, 但請記得同時複製相關的 DLL 檔案, 否則執行會有錯誤 例如 : 要在 \Micro_SD\ 目錄下執行 "project1.exe", 該目錄必須有以下 3 個檔案, 即 project1.exe UserShareNet.dll Quicker.dll 檔 ( 可在光碟的 \System_disk\Win-GRAF\ 目錄下取得 UserShareNet.dll 與 Quicker.dll 檔案 ) Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-5

14.5 "UserShareNET.DLL" 內的函式說明 本節將針對 "UserShareNet.DLL" 內的函式 (Function) 來進行說明 "UserShareNet.DLL" 提供了許多函式, 可用來讀 / 寫 Win-GRAF 專案裡的變數, 以下分為幾類 : 1. 讀 / 寫 Boolean 2. 讀 / 寫 8-bit 整數 3. 讀 / 寫 16-bit 整數 4. 讀 / 寫 32-bit 整數 5. 讀 / 寫 64-bit 整數 6. 讀 / 寫 32-bit 實數 7. 讀 / 寫 64-bit 實數 請參考附錄 A 來查看 Win-GRAF 的變數資料型態與範圍 14.5.1 讀 / 寫 Boolean 的函式 Set_BOOL 設定指定位址編號的 Win-GARF Boolean 變數值 UserShare.Set_BOOL(ushort iuseraddress, byte istatus) iuseraddress : 指定變數的位址編號 (1 ~ 8192) istatus : 設定變數的狀態 ; 例如 : istatus = 1 表示 "True",iStatus = 0 表示 "False" // 設定位址 1 的 Win-GRAF 變數為 True. UserShare.Set_BOOL(Convert.ToUInt16(1), 1); 光碟 : \napdos\win-graf\demo-project\csharp.net_2008_demo\demo_csharp01 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-6

Get_BOOL 讀出指定位址編號的 Win-GARF Boolean 變數值 UserShare.Get_BOOL(ushort iuseraddress, out byte istatus) iuseraddress : 指定變數位址編號 (1 ~ 8192) istatus : 取得變數的狀態 ;istatus = 1 表示 "True",iStatus = 0 表示 "False" Byte istatus=0; // 取得位址編號 1 的變數狀態. UserShare.Get_BOOL(Convert.ToUInt16(1),out istatus); 光碟 : \napdos\win-graf\demo-project\csharp.net_2008_demo\demo_csharp01 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-7

14.5.2 讀 / 寫整數的函式 Set_SINT Set_INT Set_DINT Set_LINT 設定指定位址編號的 Win-GRAF 8-bit Integer, 16-bit Integer, 32-bit Integer 及 64-bit Integer 變數值 UserShare.Set_SINT(ushort iuseraddress, sbyte istatus) UserShare.Set_INT(ushort iuseraddress, short istatus) UserShare.Set_DINT(ushort iuseraddress, int istatus) UserShare.Set_LINT(ushort iuseraddress, long istatus) iuseraddress : 指定變數的位址編號 (1 ~ 8192) istatus : 設定 8-bit Integer, 16-bit Integer, 32-bit Integer 及 64-bit Integer 值 // 設定 32-bit integer 值 1234567 到位址編號 1 的變數. int temp1=1234567; UserShare.Set_DINT(Convert.ToUInt16(1), temp ); // 設定 16-bit Integer 值 -1234 到 Modbus 位址編號 2 的變數. short temp2= -1234; UserShare.Set_INT(Convert.ToUInt16(2), temp2 ); // 設定 64-bit Integer 值 123456789012345 到位址編號 3 的變數. long temp3=123456789012345; UserShare.Set_LINT(Convert.ToUInt16(3), temp3 ); // 設定 8-bit Integer 125 值到位址編號 4 的變數. Sbyte temp4=125; UserShare.Set_SINT(Convert.ToUInt16(4), temp4 ); 光碟 : 1. 讀 / 寫類比 I/O: \napdos\win-graf\demo-project\csharp.net_2008_demo\demo_csharp02 2. 讀 / 寫 Internal long integer Timer 及 Real ( 浮點數 ) 的值 : \napdos\win-graf\demo-project\csharp.net_2008_demo\demo_csharp03 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-8

Get_SINT Get_INT Get_DINT Get_LINT 讀出指定位址編號的 Win-GRAF 8-bit Integer, 16-bit Integer, 32-bit Integer 及 64-bit Integer 變數值 UserShare.Get_SINT(ushort iuseraddress, out sbyte istatus) UserShare.Get_INT(ushort iuseraddress, out short istatus) UserShare.Get_DINT(ushort iuseraddress, out int istatus) UserShare.Get_LINT(ushort iuseraddress, out long istatus) iuseraddress : 指定變數的位址編號 (1 ~ 8192) istatus : 取得 8-bit Integer, 16-bit Integer, 32-bit Integer 及 64-bit Integer 值 Int64 Dlong_val; Int16 short_val; Int32 long_val ; sbyte sbyte_val; // 取得位址編號 7 的 64-bit 整數的變數值. UserShare.Get_LINT(Convert.ToUInt16(7),out Dlong_val); // 取得位址編號 8 的 32-bit 整數的變數值. UserShare.Get_DINT(Convert.ToUInt16(8),out long_val); // 取得位址編號 9 的 16-bit 整數的變數值. UserShare.Get_INT(Convert.ToUInt16(9),out short_val); // 取得位址編號 10 的 8-bit 整數的變數值. UserShare.Get_SINT(Convert.ToUInt16(9),out sbyte_val) 光碟 : 1. 讀 / 寫類比 I/O: \napdos\win-graf\demo-project\csharp.net_2008_demo\demo_csharp02 2. 讀 / 寫 Internal long integer Timer 及 Real ( 浮點數 ) 的值 : \napdos\win-graf\demo-project\csharp.net_2008_demo\demo_csharp03 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-9

14.5.3 讀 / 寫實數的函式 Get_REAL Get_LREAL 讀出指定位址編號的 Win-GRAF 32-bit Real 64-bit Real 變數值 UserShare. Get_REAL (System.UInt16 iuseraddress, out float istatus) UserShare. Get_LREAL(ByVal iuseraddress As System.UInt16, out Double istatus) iuseraddress : 指定變數的位址編號 (1 ~ 8192) istatus : 取得浮點數數值 float float_val; double double_val; // 取得位址編號 7 的 double 變數值. UserShare.Get_LREAL(Convert.ToUInt16(7),out double_val); // 取得位址編號 8 的 float 變數值. UserShare.Get_REAL(Convert.ToUInt16(8),out float_val); 光碟 : 1. 讀 / 寫類比 I/O: \napdos\win-graf\demo-project\csharp.net_2008_demo\demo_csharp02 2. 讀 / 寫 Internal long integer Timer 及 Real ( 浮點數 ) 的值 : \napdos\win-graf\demo-project\csharp.net_2008_demo\demo_ demo_csharp03 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-10

Set_REAL Set_LREAL 寫入指定的位址編號的 Win-GRAF 32-bit Real 64-bit Real 變數值 UserShare. Set_REAL ( ushort iuseraddress, float istatus ) UserShare. Set_LREAL( ushort iuseraddress, Double istatus) iuseraddress : 指定變數的位址編號 (1 ~ 8192) istatus : 設定浮點數數值 // 寫入 11234.234567 到位址編號 7 的變數 UserShare.Set_LREAL(Convert.ToUInt16(7),Convert.ToDouble(11234.234567)); // 寫入 123.12 到位址編號 8 的變數 UserShare.Set_REAL(Convert.ToUInt16(8), Convert.ToSingle (123.12)); 光碟 : 1. 讀 / 寫類比 I/O: \napdos\win-graf\demo-project\csharp.net_2008_demo\demo_csharp02 2. 讀 / 寫 internal long integer Timer 及 Real ( 浮點數 ) 的值 : \napdos\win-graf\demo-project\csharp.net_2008_demo\demo_csharp03 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-11

14.5.4 讀 / 寫字串的函式 Set_STRING 寫入指定位址編號的 Win-GRAF 字串值 UserShare.Set_STRING (ushort addr, Byte [] msg) addr : 指定變數的位址編號 (1 ~ 1024) msg[] : 設定 Win-GRAF String 變數值 String str_val; Byte[] msg; // 寫入位址編號 7 的 String 變數值. msg= unicode_to_byte_array(str_val); UserShare.Set_STRING(Convert.ToUInt16(7),msg ); //String 轉成 byte 陣列 private byte[] unicode_to_byte_array(string msg) { byte[] tmpbuf; if (msg.length > 255) return null; } tmpbuf = Encoding.GetEncoding("UTF-8").GetBytes(msg); return tmpbuf; 光碟 : 1. 讀 / 寫 STRING 的值 : \napdos\win-graf\demo-project\csharp.net_2008_demo\demo_csharp04 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-12

Get_STRING 讀取指定位址編號的 Win-GRAF 字串變數值 UserShare.Set_STRING (ushort addr, Byte [] msg) addr : 指定變數的位址編號 (1 ~ 1024) msg[] : 設定 Win-GRAF String 變數值 String str_val= Hello World ; Byte[] msg; // 設定位址編號 7 的 String 變數值. UserShare.Get_STRING(Convert.ToUInt16(7),msg ); str_val= byte_array_to_unicode(msg); //byte 陣列轉字串 private string byte_array_to_unicode(byte[] buf) { string tmpmsg; if (buf.length > 255) return null; } tmpmsg = Encoding.GetEncoding("UTF-8").GetString(buf, 0, buf.length); return tmpmsg; 光碟 : 1. 讀 / 寫 STRING 的值 : \napdos\win-graf\demo-project\csharp.net_2008_demo\demo_csharp04 Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-13

14.5.5 如何讓 C # 程式讀取 Win-GRAF 字串變數?.NET 程式如果要寫入字串變數, 必須根據目前使用的語言編碼 ( 例如 : UTF-8) 轉換成 byte 陣列才能寫入, 若是讀出字串變數的陣列內容, 則需要根據語言編碼轉換成字串 以下提供 C# 程式轉換的範例 ( 編碼為 UTF-8 ): //String 轉成 byte 陣列 private byte[] unicode_to_byte_array(string msg) { byte[] tmpbuf; if (msg.length > 255) return null; } tmpbuf = Encoding.GetEncoding("UTF-8").GetBytes(msg); return tmpbuf; //byte 陣列轉字串 private string byte_array_to_unicode(byte[] buf) { string tmpmsg; if (buf.length > 255) return null; } tmpmsg = Encoding.GetEncoding("UTF-8").GetString(buf, 0, buf.length); return tmpmsg; Win-GRAF 使用手冊, 1. 05 版, 2016 年 3 月 ICP DAS 14-14