国产一区二区三区毛片_亚洲乱码AV中文一区二区_亚洲精品无码专区在线播放_日韩欧美一二_咪咪av影院_欧久久av一区二区

wjun7610
級別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 127 個
工控威望: 249 點
下載積分: 708 分
在線時間: 35(小時)
注冊時間: 2007-09-16
最后登錄: 2025-05-07
查看wjun7610的 主題 / 回貼
樓主  發(fā)表于: 2008-07-19 19:10
modbus rtu通信協(xié)議串口通訊動態(tài)鏈接庫DLL(以下簡稱DLL),是為滿足工業(yè)通信需要,
針對工業(yè)領(lǐng)域要求上位機對PLC、工業(yè)儀表通訊實時采集與控制的組態(tài)編程而設計。
本DLL是采用Delphi語言開發(fā)的標準串口通訊庫,具有以下特點:
1)、遵循modbus rtu串口通訊協(xié)議(施耐德、西門子、臺達、永宏等品牌PLC及各類工業(yè)儀表等支持本協(xié)議);
2)、實時性、可靠性好,通用性強;
3)、適用于多PLC聯(lián)網(wǎng)和上位機通信,滿足多方面的需要(聯(lián)網(wǎng)時可采用485總線式);
4)、函數(shù)接口功能全,操作簡單,支持modbus的大部分讀寫功能函數(shù);
5)、附加實用轉(zhuǎn)換與讀取函數(shù),易于快速開發(fā)(VC等非RAD開發(fā)環(huán)境的開發(fā));
6)、支持USB、PC擴展卡等擴展串口號;
7)、支持多種操作系統(tǒng)win9x/win2000/winXP(標注Win32 DLL);
8)、可在多種編程環(huán)境下使用,例如VB、VC、Delphi等開發(fā)環(huán)境。

9)、支持modbus rtu標準的功能代碼01、02、03、04、05、06、15、16且對相關(guān)功能代碼的讀取和寫如做了一些擴充更加符合工業(yè)自動化領(lǐng)域的工控軟件的開發(fā),是廣大工控工程師的必備工具軟件。

二、modbus rtu通訊協(xié)議簡介

    Modbus 協(xié)議是應用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(例如以太網(wǎng))
和其它設備之間可以通信。它已經(jīng)成為一通用工業(yè)標準。有了它,不同廠商生產(chǎn)的控制設備可以連成工業(yè)網(wǎng)絡,進行集
中監(jiān)控。此協(xié)議定義了一個控制器能認識使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡進行通信的。它描述了一控制器請
求訪問其它設備的過程,如果回應來自其它設備的請求,以及怎樣偵測錯誤并記錄。它制定了消息域格局和內(nèi)容的公共
格式。當在一Modbus網(wǎng)絡上通信時,此協(xié)議決定了每個控制器須要知道它們的設備地址,識別按地址發(fā)來的消息,決定
要產(chǎn)生何種行動。如果需要回應,控制器將生成反饋信息并用Modbus協(xié)議發(fā)出。在其它網(wǎng)絡上,包含了Modbus協(xié)議的消
息轉(zhuǎn)換為在此網(wǎng)絡上使用的幀或包結(jié)構(gòu)。這種轉(zhuǎn)換也擴展了根據(jù)具體的網(wǎng)絡解決節(jié)地址、路由路徑及錯誤檢測的方法。
1、在Modbus網(wǎng)絡上轉(zhuǎn)輸
標準的Modbus口是使用一RS-232C兼容串行接口,它定義了連接口的針腳、電纜、信號位、傳輸波特率、奇偶校驗。控制
器能直接或經(jīng)由Modem組網(wǎng)。控制器通信使用主—從技術(shù),即僅一設備(主設備)能初始化傳輸(查詢)。其它設備(從設備)
根據(jù)主設備查詢提供的數(shù)據(jù)作出相應反應。典型的主設備:主機和可編程儀表。典型的從設備:可編程控制器。主設備
可單獨和從設備通信,也能以廣播方式和所有從設備通信。如果單獨通信,從設備返回一消息作為回應,如果是以廣播
方式查詢的,則不作任何回應。Modbus協(xié)議建立了主設備查詢的格式:設備(或廣播)地址、功能代碼、所有要發(fā)送的數(shù)
據(jù)、一錯誤檢測域。從設備回應消息也由Modbus協(xié)議構(gòu)成,包括確認要行動的域、任何要返回的數(shù)據(jù)、和一錯誤檢測域。
如果在消息接收過程中發(fā)生一錯誤,或從設備不能執(zhí)行其命令,從設備將建立一錯誤消息并把它作為回應發(fā)送出去。
2、在其它類型網(wǎng)絡上轉(zhuǎn)輸
在其它網(wǎng)絡上,控制器使用對等技術(shù)通信,故任何控制都能初始和其它控制器的通信。這樣在單獨的通信過程中,控制
器既可作為主設備也可作為從設備。提供的多個內(nèi)部通道可允許同時發(fā)生的傳輸進程。在消息位,Modbus協(xié)議仍提供了
主—從原則,盡管網(wǎng)絡通信方法是“對等”。如果一控制器發(fā)送一消息,它只是作為主設備,并期望從從設備得到回應。
同樣,當控制器接收到一消息,它將建立一從設備回應格式并返回給發(fā)送的控制器。
3、查詢—回應周期
(1)、查詢    
    查詢消息中的功能代碼告之被選中的從設備要執(zhí)行何種功能。數(shù)據(jù)段包含了從設備要執(zhí)行功能的任何附加信息。例
如功能代碼03是要求從設備讀保持寄存器并返回它們的內(nèi)容。數(shù)據(jù)段必須包含要告之從設備的信息:從何寄存器開始讀
及要讀的寄存器數(shù)量。錯誤檢測域為從設備提供了一種驗證消息內(nèi)容是否正確的方法。
(2)、回應    
    如果從設備產(chǎn)生一正常的回應,在回應消息中的功能代碼是在查詢消息中的功能代碼的回應。數(shù)據(jù)段包括了從設備
收集的數(shù)據(jù):象寄存器值或狀態(tài)。如果有錯誤發(fā)生,功能代碼將被修改以用于指出回應消息是錯誤的,同時數(shù)據(jù)段包含
了描述此錯誤信息的代碼。錯誤檢測域允許主設備確認消息內(nèi)容是否可用。

3、兩種傳輸方式
    控制器能設置為兩種傳輸模式(ASCII或RTU)中的任何一種在標準的Modbus網(wǎng)絡通信。用戶選擇想要的模式,包括串
口通信參數(shù)(波特率、校驗方式等),在配置每個控制器的時候,在一個Modbus網(wǎng)絡上的所有設備都必須選擇相同的傳輸
模式和串口參數(shù)。
ASCII模式
   -------------------------------------------
   | 地址 | 功能代碼 | 數(shù)據(jù)數(shù)量 | 數(shù)據(jù)1 ... 數(shù)據(jù)n | LRC高字節(jié) | LRC低字節(jié) | 回車 | 換行 |
   -------------------------------------------
RTU模式
   ------------------------------------
   | 地址 | 功能代碼 | 數(shù)據(jù)數(shù)量 | 數(shù)據(jù)1 ... 數(shù)據(jù)n | CRC高字節(jié) | CRC低字節(jié) |
   ------------------------------------
    所選的ASCII或RTU方式僅適用于標準的Modbus網(wǎng)絡,它定義了在這些網(wǎng)絡上連續(xù)傳輸?shù)南⒍蔚拿恳晃唬约皼Q定
怎樣將信息打包成消息域和如何解碼。在其它網(wǎng)絡上(象MAP和Modbus Plus)Modbus消息被轉(zhuǎn)成與串行傳輸無關(guān)的幀。
    因ASCII模式通訊效率較低一多采用RTU模式,這里只對RTU模式進行詳細介紹。

4、Modbus RTU模式

    當控制器設為在Modbus網(wǎng)絡上以RTU(遠程終端單元)模式通信,在消息中的每個8Bit字節(jié)包含兩個4Bit的十六進制
字符。這種方式的主要優(yōu)點是:在同樣的波特率下,可比ASCII方式傳送更多的數(shù)據(jù)。

代碼系統(tǒng)

    8位二進制,十六進制數(shù)0...9,A...F
    消息中的每個8位域都是一個兩個十六進制字符組成

每個字節(jié)的位

    1個起始位
    8個數(shù)據(jù)位,最小的有效位先發(fā)送
    1個奇偶校驗位,無校驗則無
    1個停止位(有校驗時),2個Bit(無校驗時)

錯誤檢測域
    
     CRC(循環(huán)冗長檢測)

地址域

    消息幀的地址域包含8Bit(RTU)。可能的從設備地址是0...247(十進制)。單個設備的地址范圍是1...247。主設備通過
將要聯(lián)絡的從設備的地址放入消息中的地址域來選通從設備。當從設備發(fā)送回應消息時,它把自己的地址放入回應的地址域
中,以便主設備知道是哪一個設備作出回應。地址0是用作廣播地址,以使所有的從設備都能認識。當Modbus協(xié)議用于更高
水準的網(wǎng)絡,廣播可能不允許或以其它方式代替。

如何處理功能域

    數(shù)據(jù)域是由兩個十六進制數(shù)集合構(gòu)成的,范圍00...FF。根據(jù)網(wǎng)絡傳輸模式,這可以是由一RTU字符組成。從主設備發(fā)給
從設備消息的數(shù)據(jù)域包含附加的信息:從設備必須用于進行執(zhí)行由功能代碼所定義的所為。這包括了象不連續(xù)的寄存器地址,
要處理項的數(shù)目,域中實際數(shù)據(jù)字節(jié)數(shù)。例如,如果主設備需要從設備讀取一組保持寄存器(功能代碼03),數(shù)據(jù)域指定了起
始寄存器以及要讀的寄存器數(shù)量。如果主設備寫一組從設備的寄存器(功能代碼10十六進制),數(shù)據(jù)域則指明了要寫的起始寄
存器以及要寫的寄存器數(shù)量,數(shù)據(jù)域的數(shù)據(jù)字節(jié)數(shù),要寫入寄存器的數(shù)據(jù)。如果沒有錯誤發(fā)生,從從設備返回的數(shù)據(jù)域包含
請求的數(shù)據(jù)。如果有錯誤發(fā)生,此域包含一異議代碼,主設備應用程序可以用來判斷采取下一步行動。在某種消息中數(shù)據(jù)域
可以是不存在的(0長度)。例如,主設備要求從設備回應通信事件記錄(功能代碼0B十六進制),從設備不需任何附加的信息。

作者:  wjun7610
QQ:    157610979
淘寶店:http://shop34821629.taobao.com
[ 此貼被wjun7610在2008-07-20 14:25重新編輯 ]
附件: Modbus.rar (153 K) 下載次數(shù):2207
網(wǎng)站提示: 請不要用迅雷下載附件,容易出錯
wjun7610
級別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 127 個
工控威望: 249 點
下載積分: 708 分
在線時間: 35(小時)
注冊時間: 2007-09-16
最后登錄: 2025-05-07
查看wjun7610的 主題 / 回貼
1樓  發(fā)表于: 2008-07-19 19:10
三、DLL函數(shù)說明


modbus.DLL是王俊于2007年最新開發(fā)的基于施耐得modbus rtu 通訊協(xié)議的串口通訊鏈接庫。modbus.DLL專業(yè)版實現(xiàn)了對保持寄存器40001~4XXXX區(qū)數(shù)據(jù)讀寫(FCN03:讀、FCN16:寫,F(xiàn)CN06寫單個數(shù)據(jù));對邏輯線圈00001~0XXXX的 讀寫(FCN01:讀取一組線圈,F(xiàn)CN05:強置單線圈,F(xiàn)CN15強置多線圈);對輸入狀態(tài)10001~1XXXX的讀(FCN02);對輸入寄存器30001~3XXXX的讀(FCN04)。

DLL中的主要函數(shù):

ComOpen:打開串口

ComClose:關(guān)閉串口

FCN01:讀取一組線圈(00001~0XXXX)

FCN02:取得一組開關(guān)輸入狀態(tài)數(shù)據(jù)(10001~1XXXX)

FCN03:讀多個保持寄存器數(shù)據(jù)(40001~4XXXX)

FCN04:讀多個輸入寄存器數(shù)據(jù)(30001~3XXXX)

FCN05S:置位單線圈(00001~0XXXX)

FCN05R:復位單線圈(00001~0XXXX)

FCN06: 預置單保持寄存器數(shù)據(jù)(40001~4XXXX)

FCN15: 強置多線圈的通斷數(shù)據(jù)(00001~0XXXX)

FCN16: 寫多個保持寄存器數(shù)據(jù)(40001~4XXXX)

FCN16_xSet:單保持寄存器的0~15相應位的置位(40001.0-40001.15~4XXXX.0-4XXXX.15)

FCN16_xReset:單保持寄存器的0~15相應位的復位(40001.0-40001.15~4XXXX.0-4XXXX.15)

FCN16_xSetReset:單保持寄存器的0~15相應位的置復位(40001.0-40001.15~4XXXX.0-4XXXX.15),
                 指使相應的位短時間通斷一次(約通60ms)

ComTrue:讀取DLL中的串口是否備有效打開

CinBin: 字中相應的位的狀態(tài)抽取

1、打開串口

Function ComOpen(nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint;stdcall;

參數(shù):nport: 打開串口號,取值為1~8,代表COM1~COM8;
      
      BaudRate:波特率,取值為:1200、2400、4800、9600、19200、38400;
    
      DataBits:數(shù)據(jù)位,取值為5、6、7、8;

      Parity:  校驗位,取值1(代表Even)、取值2(代表Odd)、取值3(代表Mark)、取值4(代表Space)、取值5(代表None);
  
      StopBits:停止位,取值1(代表1位停止位)、取值2(代表2位停止位)、取值3(代表1.5位停止位);

      User:DLL授權(quán)用戶名;

返回值:長整型,操作成功返回“1”或“2”;1表示注冊授權(quán)用戶,2表示用戶未注冊;

操作不成功返回為“0”時的原因:1)、串口不存在或被占用; 2)、DLL注冊授權(quán)不正確。

注:本DLL用戶不注冊除了下面說明的功能限制外沒有其他限制,未注冊用戶請使用特定用戶名:wangjun。

    注冊用戶功能上無任何限制,且將得到永久的軟件使用和更新升級服務;

使用舉例:

Delphi:ComOpen(1,9600,8,1,1,Pchar('wangjun')) , 打開COM1口。

VB:ComOpen(1,9600,8,1,1,"wangjun") , 打開COM1口。(注:下面的示例都以VB調(diào)用形式給出)

2、關(guān)閉串口

Function ComClose(nport:longint):longint;stdcall;

參數(shù):nport: 串口號,取值為1~8,代表COM1~COM8;

返回值:長整型,操作成功返回“1”,否則返回“0”;

使用舉例:

ComClose(1) ,關(guān)閉打開的COM1口。

3、modbus相應功能碼所對應的讀取功能函數(shù)。

1)、01功能碼位元件的讀取(讀取一組線圈)

Function FCN01(nport,node,address,Count:longint):Pchar;stdcall;

參數(shù):

nport:   串口號,取值為1~8,代表COM1~COM8;

node:   modbus從站號,取值1~255;

address: 元件地址,取值范圍從00001~0XXXX地址區(qū)(邏輯線圈)值(你要讀標準modbus的00001地址這個值為0000,依次類推)

Count:   讀取的位元件個數(shù),一次最多讀取1000個但不能超出尋址范圍;

返回值: 16進制字符串數(shù)據(jù),字符串數(shù)據(jù)的終止符為"@";

使用舉例:

FCN01(1,1,19,37),由COM1讀取modbus 1號從站00020~00056(標準modbus地址)的位狀態(tài)值,返回值為“CD6BB20E1B@”

則表示27~20:CD, 35~28:6B, 43~36:B2, 51~44:0E, 56~52:1B;

字節(jié)值與實際的位狀態(tài)值對應參考(其他位功能函數(shù)的說明不再重復本內(nèi)容):
            
位地址:    | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 35 | 34 | 33 | 32 | 31 | 30 | 29 | 28 |
            -----------------------------------------
各位賦值:   | 1  | 1  | 0  | 0  | 1  | 1  | 0  | 1  | 0  | 1  | 1  | 0  | 1  | 0  | 1  | 1  |
            -----------------------------------------
16進制串:  |         C         |         D         |         6         |         B         |
            -----------------------------------------

不足8位的位組的狀態(tài)值參考:

位地址:    | 56 | 55 | 54 | 53 | 52 |
            -------------
各位賦值:   | 0  | 1  | 0  | 1  | 1  |
            -------------
16進制串:  | 1  |         B         |
            -------------

在讀取錯誤或不能讀取的情況下返回“Error@”

注:沒有注冊的用戶只能讀取00001~00006范圍的狀態(tài)值;

2)、02功能碼位元件的讀取(取得一組開關(guān)輸入狀態(tài)數(shù)據(jù))

Function FCN02(nport,node,address,Count:longint):Pchar;stdcall;

參數(shù):

nport:   串口號,取值為1~8,代表COM1~COM8;

node:   modbus從站號,取值1~255;

address: 元件地址,取值范圍從10001~1XXXX地址區(qū)(開關(guān)輸入狀態(tài))值(你要讀標準modbus的10001地址這個值為0000,依次類推)

Count:   讀取的位元件個數(shù),一次最多讀取1000個但不能超出尋址范圍;

返回值: 16進制字符串數(shù)據(jù),字符串數(shù)據(jù)的終止符為"@";

使用舉例:

FCN02(1,1,196,22),由COM1讀取modbus 1號從站10197~10218(標準modbus地址)的位狀態(tài)值,返回值為“ACDB35@”

則表示10204~10197:AC, 10212~10205:DB, 10218~10213:35;

在讀取錯誤或不能讀取的情況下返回“Error@”

注:沒有注冊的用戶只能讀取10001~10006范圍的狀態(tài)值;

3)、03功能碼字元件的讀取(讀多個保持寄存器數(shù)據(jù))

Function FCN03(nport,node,address,Count:longint):Pchar;stdcall;

參數(shù):

nport:   串口號,取值為1~8,代表COM1~COM8;

node:   modbus從站號,取值1~255;

address: 元件地址,取值范圍從40001~4XXXX地址區(qū)(保持寄存器數(shù)據(jù))值(你要讀標準modbus的40001地址這個值為0000,依次類推)

Count:   讀取的位元件個數(shù),一次最多讀取60個但不能超出尋址范圍;

返回值: 16進制字符串數(shù)據(jù),字符串數(shù)據(jù)的終止符為"@";

使用舉例:

FCN03(1,1,107,3),由COM1讀取modbus 1號從站40108~40110(標準modbus地址)的字狀態(tài)值,返回值為“022B00000064@”

則表示40108:022B, 40109:0000, 40110:0064;

在讀取錯誤或不能讀取的情況下返回“Error@”

注:沒有注冊的用戶只能讀取40001~40003范圍的狀態(tài)值;

4)、04功能碼字元件的讀取(讀多個輸入寄存器數(shù)據(jù))

Function FCN04(nport,node,address,Count:longint):Pchar;stdcall;

參數(shù):

nport:   串口號,取值為1~8,代表COM1~COM8;

node:   modbus從站號,取值1~255;

address: 元件地址,取值范圍從30001~3XXXX地址區(qū)(輸入寄存器數(shù)據(jù))值(你要讀標準modbus的30001地址這個值為0000,依次類推)

Count:   讀取的位元件個數(shù),一次最多讀取60個但不能超出尋址范圍;

返回值: 16進制字符串數(shù)據(jù),字符串數(shù)據(jù)的終止符為"@";

使用舉例:

FCN04(1,17,8,1),由COM1讀取modbus 17號從站30009(標準modbus地址)的字狀態(tài)值,返回值為“000A@”

則表示30009:000A;

在讀取錯誤或不能讀取的情況下返回“Error@”

注:沒有注冊的用戶只能讀取30001~30003范圍的狀態(tài)值;

4、modbus相應功能碼所對應的寫入功能函數(shù)

1)、05功能碼線圈的置復位功能函數(shù)

    1、線圈置位
            
       Function FCN05S(nport,node,address:longint):longint;stdcall;

參數(shù):

nport:   串口號,取值為1~8,代表COM1~COM8;

node:   modbus從站號,取值1~255;

address: 元件地址,取值范圍從00001~0XXXX地址區(qū)(邏輯線圈)值(你要寫標準modbus的00001地址這個值為0000,依次類推)

返回值: 長整數(shù),操作成功返回1,不能寫入或操作錯誤返回0;

使用舉例:

FCN05S(1,12,15),由COM1將modbus 12號從站00013(標準modbus地址)的位狀態(tài)值置1,返回值為1表示成功

注:沒有注冊的用戶只能寫入00001~00006范圍的狀態(tài)值;

       2、線圈復位
            
       Function FCN05R(nport,node,address:longint):longint;stdcall;

參數(shù):

nport:   串口號,取值為1~8,代表COM1~COM8;

node:   modbus從站號,取值1~255;

address: 元件地址,取值范圍從00001~0XXXX地址區(qū)(邏輯線圈)值(你要寫標準modbus的00001地址這個值為0000,依次類推)

返回值: 長整數(shù),操作成功返回1,不能寫入或操作錯誤返回0;

使用舉例:

FCN05R(1,12,15),由COM1將modbus 12號從站00013(標準modbus地址)的位狀態(tài)值置0,返回值為1表示成功

注:沒有注冊的用戶只能寫入00001~00006范圍的狀態(tài)值;

2)、06功能碼預置單保持寄存器數(shù)據(jù)功能函數(shù)

Function FCN06(nport,node,address:longint;Sendstr:pchar):longint;stdcall;

參數(shù):

nport:   串口號,取值為1~8,代表COM1~COM8;

node:   modbus從站號,取值1~255;

address: 元件地址,取值范圍從40001~4XXXX地址區(qū)(保持寄存器)值(你要寫標準modbus的40001地址這個值為0000,依次類推)

Sendstr: 寫入字值,該值為4個一組的16進制字符串組成其取值為0000~FFFF(整數(shù)值為0~65535);

返回值: 長整數(shù),操作成功返回1,不能寫入或操作錯誤返回0;

當要寫入字值時依次排列即可。如給40001寫值1000,先將1000轉(zhuǎn)成16進制字符串03E8,則sendstr=03E8;

使用舉例:

FCN06(1,2,2,"03E8"),由COM1給modbus 2號從站40003(標準modbus地址)的字單元寫入1000(16進制03E8),返回值為1表示成功

注:沒有注冊的用戶只能寫入40001~40003范圍的狀態(tài)值;

(00001~0XXXX)

3)、15功能碼強置多線圈的通斷數(shù)據(jù)功能函數(shù)

Function FCN15(nport,node,address,Count:longint;Sendstr:pchar):longint;stdcall;

參數(shù):

nport:   串口號,取值為1~8,代表COM1~COM8;

node:   modbus從站號,取值1~255;

address: 元件地址,取值范圍從00001~0XXXX地址區(qū)(邏輯線圈)值(你要寫標準modbus的00001地址這個值為0000,依次類推)

Count:  寫入位元件個數(shù),一次最多1000個但不能超出尋址范圍;

Sendstr: 給位元件寫入的值按8個為一組和成字節(jié)值在寫入,該值為2個一組的16進制字符串組其取值為00~FF(整數(shù)值為0~255);

返回值: 長整數(shù),操作成功返回1,不能寫入或操作錯誤返回0;

                  ---------- - ~ - ------
寫字符串序列如:  | 00 | FF | 10 | 64 |   ~    | 08 | 04 |
                  ---------- - ~ - ------

實際字符串與位地址的數(shù)值應如下表:  
          
位地址:    | 40 | 39 | 38 | 36 | 35 | 34 | 33 | 32 | 48 | 47 | 46 | 45 | 44 | 43 | 42 | 41 |
            -----------------------------------------
各位賦值:   | 0  | 1  | 1  | 0  | 0  | 1  | 0  | 0  | 0  | 1  | 0  | 1  | 0  | 0  | 0  | 0  |
            -----------------------------------------
16進制串:  |         6         |         4         |         5         |         0         |
            -----------------------------------------

使用舉例:

FCN06(1,2,19,10,"CD01"),由COM1給modbus 2號從站00020~00029(標準modbus地址)10個位單元寫如相應值,返回值為1表示成功

寫入值的參考 27~20:CD; 29~28:01;

位地址:    | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | -- | -- | -- | -- | -- | -- | 29 | 28 |
            -----------------------------------------
各位賦值:   | 1  | 1  | 0  | 0  | 1  | 1  | 0  | 1  | 0  | 0  | 0  | 0  | 0  | 0  | 0  | 1  |
            -----------------------------------------
16進制串:  |         C         |         D         |         0         |         1         |
            -----------------------------------------

注:沒有注冊的用戶只能寫入00001~00006范圍的狀態(tài)值;

4)、16功能碼寫多個保持寄存器數(shù)據(jù)功能函數(shù)

Function FCN16(nport,node,address,Count:longint;Sendstr:pchar):longint;stdcall;

參數(shù):

nport:   串口號,取值為1~8,代表COM1~COM8;

node:   modbus從站號,取值1~255;

address: 元件地址,取值范圍從40001~4XXXX地址區(qū)(保持寄存器)值(你要寫標準modbus的40001地址這個值為0000,依次類推)

Count:  寫入字元件個數(shù),一次最多60個但不能超出尋址范圍;

Sendstr: 給字寫入的值,該值為4個一組的16進制字符串組其取值為0000~FFFF(整數(shù)值為0~65535);

返回值: 長整數(shù),操作成功返回1,不能寫入或操作錯誤返回0;

當要寫入多個字值時依次排列即可。如給40001與40002寫值100和1000,先將100轉(zhuǎn)成16進制字符串0064、1000轉(zhuǎn)成16進制字符串03E8,

則sendstr=006403E8;一次最多寫64個字即字符串長應小于等于256;

                            ---------- ----   ~  ---------
寫字符串序列如:             | 0064 | 03E8 | 0010 | 6004 |   ~     | 0008 | 0400 |
                            ---------- ----   ~  ---------

使用舉例:

FCN16(1,2,1,"000A0102"),由COM1給modbus 2號從站40002(標準modbus地址)的字單元寫入給10(16進制000A)、40003(標準modbus地址)

的字單元寫入給258(16進制0102)返回值為1表示成功;

注:沒有注冊的用戶只能寫入40001~40003范圍的狀態(tài)值;

5)、modbus功能碼16的擴展功能函數(shù)

       1、單保持寄存器的0~15相應位的置位 (40001.0-40001.15~4XXXX.0-4XXXX.15)
            
       Function FCN16_xSet(nport,node,address,Bit:longint):longint;stdcall;

參數(shù):

nport:   串口號,取值為1~8,代表COM1~COM8;

node:   modbus從站號,取值1~255;

address: 元件地址,取值范圍從40001~4XXXX地址區(qū)(保持寄存器)值(你要寫標準modbus的40001地址這個值為4000,依次類推)

Bit:     保持寄存器的位,取值0~15;

返回值: 長整數(shù),操作成功返回1,不能寫入或操作錯誤返回0;

使用舉例:

FCN16_xSet(1,12,2,0),由COM1將modbus 12號從站40003(標準modbus地址)的第0個位狀態(tài)值置1,返回值為1表示成功

注:沒有注冊的用戶不能使用本功能;

        2、單保持寄存器的0~15相應位的復位 (40001.0-40001.15~4XXXX.0-4XXXX.15)
            
        Function FCN16_xReset(nport,node,address,Bit:longint):longint;stdcall;

參數(shù):

nport:   串口號,取值為1~8,代表COM1~COM8;

node:   modbus從站號,取值1~255;

address: 元件地址,取值范圍從40001~4XXXX地址區(qū)(保持寄存器)值(你要寫標準modbus的40001地址這個值為4000,依次類推)

Bit:     保持寄存器的位,取值0~15;

返回值: 長整數(shù),操作成功返回1,不能寫入或操作錯誤返回0;

使用舉例:

FCN16_xReset(1,10,3,12),由COM1將modbus 10號從站40004(標準modbus地址)的第12個位狀態(tài)值置0,返回值為1表示成功

注:沒有注冊的用戶不能使用本功能;

        3、單保持寄存器的0~15相應位的置復位 (40001.0-40001.15~4XXXX.0-4XXXX.15)指使相應的位短時間通斷一次(接通約60ms)
            
        Function FCN16_xSetReset(nport,node,address,Bit:longint):longint;stdcall;

參數(shù):

nport:   串口號,取值為1~8,代表COM1~COM8;

node:   modbus從站號,取值1~255;

address: 元件地址,取值范圍從40001~4XXXX地址區(qū)(保持寄存器)值(你要寫標準modbus的40001地址這個值為4000,依次類推)

Bit:     保持寄存器的位,取值0~15;

返回值: 長整數(shù),操作成功返回1,不能寫入或操作錯誤返回0;

使用舉例:

FCN16_xSetReset(1,10,9,10),由COM1將modbus 10號從站40010(標準modbus地址)的第10個位狀態(tài)值置1后約60ms再置0,返回值為1表示成功

注:沒有注冊的用戶不能使用本功能;

四、DLL附加函數(shù)說明 (本段函數(shù)對未注冊用戶沒有限制,完全可以使用。)

1、串口打開狀態(tài)的讀取

Function ComTrue(nport:longint):longint;stdcall;

參數(shù):

noprt: 串口號,取值為1~8,代表COM1~COM8;

返回值:長整型,串口成功打開返回“1”,否則返回“0”;

這里讀取是DLL有效取得了串口的控制權(quán),如果其他程序占用(串口不存在)等原因仍返回“0”。

2、整數(shù)轉(zhuǎn)換成16進制字符串 (為VC等非RAD開發(fā)環(huán)境所增設)

Function CIntToHex(Dcint,Digits:Longint):Pchar;stdcall;

參數(shù):

Cint: 待轉(zhuǎn)換整數(shù),取值為(0~65535);

Digits: 轉(zhuǎn)換的字符串位數(shù),指定位數(shù)小于實際位數(shù)時按實際輸出;

在參數(shù)錯誤等非法的情況下返回“Error@”

使用舉例:

CIntToHex(200,2),則返回字符串“C8@”;
CIntToHex(200,4),則返回字符串“00C8@”;
CIntToHex(200,8),則返回字符串“000000C8@”;
CIntToHex(4500,4),則返回字符串“1194@”;
CIntToHex(4500,3),則返回字符串“1194@”,因為“194”不足以表示4500這個數(shù)所以按實際輸出字符串“1194@”;

"@"為字符串數(shù)據(jù)的終止符。

3、16進制字符串轉(zhuǎn)換成整數(shù) (為VC等非RAD開發(fā)環(huán)境所增設)

Function CHexToInt(CHex:Pchar):Longint;stdcall;

參數(shù):

CHex: 待轉(zhuǎn)換字符串,取值為(0000~FFFF);

使用舉例:

CHexToInt("03E8"),則返回整數(shù)1000;

注:在參數(shù)不正確等出錯情況下返回值為“-1”。

4、抽取(0~65535)所示整數(shù)中(0~15)某個位的值

Function CinBin(CHex,Start:longint):longint;stdcall;

參數(shù):

CHex: 待轉(zhuǎn)換整數(shù),取值為0~65535(0000~FFFF);

Start: 抽取的位,取值為(0~15);

使用舉例:

CinBin(15,3),則返回值1;
CinBin(15,4),則返回值0;
CinBin(1000,6),則返回值1;

讀取MB0組合成的字節(jié)值為“FC”(252)時,要讀取M0.1的值時,則調(diào)用CinBin(252,1)返回值0表示M0.1的值為0。

注:在參數(shù)不正確等出錯情況下返回值為“-1”。

5、返回字符串Text左邊的Count個字符  (為VC等非RAD開發(fā)環(huán)境所增設)

Function CLeftStr(Text:Pchar;Count:longint):Pchar;stdcall;

參數(shù):

Text: 字符串原型;

Count: 指定返回左側(cè)字符串個數(shù);

在參數(shù)錯誤等非法的情況下返回“Error@”

使用舉例:

CleftStr("123456", 3) = "123@";

"@"為字符串數(shù)據(jù)的終止符。

6、返回字符串Text右邊的Count個字符  (為VC等非RAD開發(fā)環(huán)境所增設)

Function CRightStr(Text:Pchar;Count:longint):Pchar;stdcall;

參數(shù):

Text: 字符串原型;

Count: 指定返回右側(cè)字符串個數(shù)

在參數(shù)錯誤等非法的情況下返回“Error@”

使用舉例:

CRightStr("123456", 3) = "456@";

"@"為字符串數(shù)據(jù)的終止符。

7、返回字符串Text從Start開始的Count個字符 (為VC等非RAD開發(fā)環(huán)境所增設)

Function CMidStr(Text:Pchar;Start,Count:longint):Pchar;stdcall;

參數(shù):

Text: 字符串原型;

Start: 指定返回字符串的起始位置;

Count: 指定返回字符串個數(shù);

在參數(shù)錯誤等非法的情況下返回“Error@”

使用舉例:

CMidStr("123456",2,3) = "234@";

"@"為字符串數(shù)據(jù)的終止符。

8、字符串Cstr開始于字符串Ostr的位置 (為VC等非RAD開發(fā)環(huán)境所增設)

Function Cinstr(Ostr,Ckstr:Pchar;Dcint:Longint):Longint;stdcall;

參數(shù):

Ostr:  字符串原型;

Cstr:  查詢的字符串;

Dcint: 設定查詢字符串的起始位置,取值>=1,即最少從源字符串的第一個字符開始查詢;

返回值:長整型;

使用舉例:

CinStr("1Tfdg23456","2",2) = 6

注:在參數(shù)不正確等出錯情況下返回值為“0”。

9、PC喇叭的報警過程函數(shù);

Function MyBeep(SoundHz:longint):longint;stdcall;

參數(shù):SoundHz:長整型;

返回值:長整型,操作成功返回“1”,否則返回“0”。

使用舉例:

MyBeep(2000); 按2000的頻率發(fā)出報警聲。

DLL中關(guān)于傳出字符串值的函數(shù)都以"@"為字符串函數(shù)值終止符,這是對多開發(fā)環(huán)境應用時方便用戶正確讀取返回字符串數(shù)據(jù)而設。

五、Delphi、VB、VC語言環(huán)境的開發(fā)使用說明

1、Delphi語言環(huán)境開發(fā)說明

在Delphi環(huán)境下將modbus.dll、serialmodbus.slip(許可文件)復制到應用程序目錄下(即將上述文件與編譯后的可執(zhí)行文件方入同一文件內(nèi));

在工程文件的主程序窗體(pas)文件中聲明:

  Function ComOpen(nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint;stdcall;External'modbus.dll';
  Function ComClose(nport:longint):longint;stdcall;External'modbus.dll';
  Function FCN01(nport,node,address,Count:longint):Pchar;stdcall;External'modbus.dll';
  Function FCN02(nport,node,address,Count:longint):Pchar;stdcall;External'modbus.dll';
  Function FCN03(nport,node,address,Count:longint):Pchar;stdcall;External'modbus.dll';
  Function FCN04(nport,node,address,Count:longint):Pchar;stdcall;External'modbus.dll';
  Function FCN05S(nport,node,address:longint):longint;stdcall;External'modbus.dll';
  Function FCN05R(nport,node,address:longint):longint;stdcall;External'modbus.dll';
  Function FCN06(nport,node,address:longint;Sendstr:pchar):longint;stdcall;External'modbus.dll';
  Function FCN15(nport,node,address,Count:longint;Sendstr:pchar):longint;stdcall;External'modbus.dll';
  Function FCN16(nport,node,address,Count:longint;Sendstr:pchar):longint;stdcall;External'modbus.dll';
  Function FCN16_xSet(nport,node,address,Bit:longint):longint;stdcall;External'modbus.dll';
  Function FCN16_xReset(nport,node,address,Bit:longint):longint;stdcall;External'modbus.dll';
  Function FCN16_xSetReset(nport,node,address,Bit:longint):longint;stdcall;External'modbus.dll';
  Function ComTrue(nport:longint):longint;stdcall;External'modbus.dll';
  Function MyBeep(SoundHz:longint):longint;stdcall;External'modbus.dll';

其它附加函數(shù)Delphi有實用函數(shù),建議用Delphi自帶函數(shù),如需使用聲明參照上例;

注:所有DLL的函數(shù)必須聲明方能使用,建議本DLL的聲明采用示例所示的靜態(tài)聲明方式。 聲明后可以在程序中使用這些函數(shù),附加函數(shù)

中除ComTrue、CinBin、MyBeep等Delphi系統(tǒng)自帶有類似功能函數(shù)。通信時必須先使用ComOpen函數(shù)打開串口,在串口打開后可以有效操作

相關(guān)函數(shù),為確保通信可在程序運行開始時打開串口,程序退出前關(guān)閉串口。應用程序退出之前請務必將關(guān)閉所有串口,如串口沒有關(guān)閉

而退出程序?qū)伋霎惓ee誤。

確保應用程序在關(guān)閉釋放前關(guān)閉打開的串口。解決方法,在form的OnDestroy事件中加入如下語句:

for i:=1 to 8 do
begin
  if ComTrue(i)=1 then ComClose(i);
end;

在Delphi中給中給DLL中的函數(shù)傳pchar值問題,建議string型轉(zhuǎn)換到Pchar型采用strPCopy()函數(shù),Pchar型轉(zhuǎn)換到string型采用straps()函數(shù),

不推薦使用直接轉(zhuǎn)換法即string到Pchar類型采用Mpchar=Pchar(str),Pchar到string采用str:=Mpchar (str為string類型、Mpchar為Pchar

類型)。上述可以詳細參照DEMO程序。

2、VB語言環(huán)境開發(fā)說明

在VB環(huán)境下將modbus.dll、serialmodbus.slip(許可文件)復制到應用程序目錄下(即將上述文件與編譯后的可執(zhí)行文件方入同一文件夾內(nèi));

函數(shù)說明中給出的是Delphi的函數(shù)原型,在VB中聲明時只要注意一下類型的對應即可Delphi中的longint類型對應VB中的Long類型、

Delphi中的Pchar對應VB中的String類型,下面給出主要函數(shù)的聲明:

Private Declare Function ComOpen Lib "modbus.dll" (ByVal nport As Long, ByVal BaudRate As Long, ByVal DataBits As Long, ByVal Parity As Long, ByVal StopBits As Long, ByVal User As String) As Long
Private Declare Function ComClose Lib "modbus.dll" (ByVal nport As Long) As Long
Private Declare Function FCN01 Lib "modbus.dll" (ByVal nport As Long, ByVal node As Long, ByVal address As Long, ByVal Count As Long) As String
Private Declare Function FCN02 Lib "modbus.dll" (ByVal nport As Long, ByVal node As Long, ByVal address As Long, ByVal Count As Long) As String
Private Declare Function FCN03 Lib "modbus.dll" (ByVal nport As Long, ByVal node As Long, ByVal address As Long, ByVal Count As Long) As String
Private Declare Function FCN04 Lib "modbus.dll" (ByVal nport As Long, ByVal node As Long, ByVal address As Long, ByVal Count As Long) As String
Private Declare Function FCN05S Lib "modbus.dll" (ByVal nport As Long, ByVal node As Long, ByVal address As Long) As Long
Private Declare Function FCN05R Lib "modbus.dll" (ByVal nport As Long, ByVal node As Long, ByVal address As Long) As Long
Private Declare Function FCN06 Lib "modbus.dll" (ByVal nport As Long, ByVal node As Long, ByVal address As Long, ByVal Sendstr As String) As Long
Private Declare Function FCN15 Lib "modbus.dll" (ByVal nport As Long, ByVal node As Long, ByVal address As Long, ByVal Count As Long, ByVal Sendstr As String) As Long
Private Declare Function FCN16 Lib "modbus.dll" (ByVal nport As Long, ByVal node As Long, ByVal address As Long, ByVal Count As Long, ByVal Sendstr As String) As Long
Private Declare Function FCN16_xSet Lib "modbus.dll" (ByVal nport As Long, ByVal node As Long, ByVal address As Long, ByVal Bit As Long) As Long
Private Declare Function FCN16_xReset Lib "modbus.dll" (ByVal nport As Long, ByVal node As Long, ByVal address As Long, ByVal Bit As Long) As Long
Private Declare Function FCN16_xSetReset Lib "modbus.dll" (ByVal nport As Long, ByVal node As Long, ByVal address As Long, ByVal Bit As Long) As Long
Private Declare Function ComTrue Lib "modbus.dll" (ByVal nport As Long) As Long
Private Declare Function MyBeep Lib "modbus.dll" (ByVal SoundHz As Long) As Long
Private Declare Function CinBin Lib "modbus.dll" (ByVal CHex As Long, ByVal start As Long) As Long

其它附加函數(shù)VB有實用函數(shù),建議用VB自帶函數(shù),如需使用聲明參上面的例子給相應的函數(shù)聲明;做完上述聲明后,便可以在程序中使用

相關(guān)函數(shù)了。本DLL是串口通信庫,通信時必須先使用ComOpen函數(shù)打開串口,在串口打開后可以有效操作相關(guān)函數(shù),為保證通信可以在

程序運行開始時打開串口,程序退出前關(guān)閉串口。在應用程序關(guān)閉之前請務必將關(guān)閉所有串口,如您的程序串口沒有關(guān)閉退出程序?qū)?br />
出異常。當出現(xiàn)這樣的異常請更改您的程序,確保應用程序在關(guān)閉釋放前關(guān)閉所打開的串口。

解決方法,在form的Unload事件中加入如下例:

If ComTrue(1)=1 then
  ComClose(1)
End if

為確保Unload事件有效執(zhí)行程序中不應使用“End”語句,而盡量使用“Unload”語句釋放所有窗體,因使用“End”語句系統(tǒng)不會執(zhí)行

正常的窗體釋放等事件而直接退出程序,如程序中有form1,form2兩個窗體,則使用下面語句:

Unload  form1
Unload  form2

VB會在所有窗體關(guān)閉后釋放所有占用資源。上述可以詳細參照DEMO程序。當然也可在使用“End”語句前將串口關(guān)閉也是可以釋放串口的。

3、VC語言環(huán)境開發(fā)說明

在VC環(huán)境下將modbus.dll、serialmodbus.slip(許可文件)復制到應用程序目錄下(即將上述文件與編譯后的可執(zhí)行文件方入同一文件夾內(nèi));

在VC中使用DLL一般都是采用動態(tài)聲明的方式,函數(shù)說明中給出的是Delphi的函數(shù)原型,在VC中聲明時只要注意一下類型的對應即可

Delphi中的longint類型對應VC中的Long類型、Delphi中的Pchar對應VC中的char* 類型,下面給出主要函數(shù)的聲明:

在工程主文件cpp中聲明一個句柄:

HINSTANCE m_handle;

用來標識導入的動態(tài)鏈接庫。

1)、導入動態(tài)鏈接庫,如例所示:

   m_handle =:: LoadLibrary("modbus.dll");

2)、按下例說明聲明相關(guān)各個函數(shù):

typedef long (CALLBACK* pOpen)(long nport, long BaudRate, long DataBits, long Parity, long StopBits, char* User);
typedef long (CALLBACK* pClose)(long nport);
typedef char* (CALLBACK* pFCN01)(long nport, long node, long address, long Count);
typedef char* (CALLBACK* pFCN02)(long nport, long node, long address, long Count);
typedef char* (CALLBACK* pFCN03)(long nport, long node, long address, long Count);
typedef char* (CALLBACK* pFCN04)(long nport, long node, long address, long Count);
typedef long (CALLBACK* pFCN05S)(long nport, long node, long address);
typedef long (CALLBACK* pFCN05R)(long nport, long node, long address);
typedef long (CALLBACK* pFCN06)(long nport, long node, long address, char* Sendstr);
typedef long (CALLBACK* pFCN15)(long nport, long node, long address, long Count, char* Sendstr);
typedef long (CALLBACK* pFCN16)(long nport, long node, long address, long Count, char* Sendstr);
typedef long (CALLBACK* pFCN16_xSet)(long nport, long node, long address, long Bit);
typedef long (CALLBACK* pFCN16_xReset)(long nport, long node, long address, long Bit);
typedef long (CALLBACK* pFCN16_xSetReset)(long nport, long node, long address, long Bit);
typedef long (CALLBACK* pTrue)(long nport);
typedef char* (CALLBACK* pIntHex)(long Dcint,long Digits);
typedef long (CALLBACK* pHexInt)( char* CHex);
typedef long (CALLBACK* pBin)( long Chex, long Start);
typedef char* (CALLBACK* pLeft)( char* Text, long Count);
typedef char* (CALLBACK* pRight)( char* Text, long Count);
typedef char* (CALLBACK* pMid)( char* Text, long  Start, long Count);
typedef long (CALLBACK* pinstr)( char* Ostr, char* Ckstr, Long Dcint);
typedef long (CALLBACK* pBeep)( long SoundHz);

3)、聲明并建立動態(tài)鏈接庫中的函數(shù)與新函數(shù)名的對應關(guān)系,如下:

pOpen Copen = (pOpen)GetProcAddress(m_handle,"ComOpen");
pClose Cclose = (pClose)GetProcAddress(m_handle,"ComClose");
pFCN01 CFCN01 = (pFCN01)GetProcAddress(m_handle,"FCN01");
pFCN02 CFCN02 = (pFCN02)GetProcAddress(m_handle,"FCN02");
pFCN03 CFCN03 = (pFCN03)GetProcAddress(m_handle,"FCN03");
pFCN04 CFCN04 = (pFCN04)GetProcAddress(m_handle,"FCN04");
pFCN05S CFCN05S = (pFCN05S)GetProcAddress(m_handle,"FCN05S");
pFCN05R CFCN05R = (pFCN05R)GetProcAddress(m_handle,"FCN05R");
pFCN15 CFCN15 = (pFCN15)GetProcAddress(m_handle,"FCN15");
pFCN16 CFCN16 = (pFCN16)GetProcAddress(m_handle,"FCN16");
pFCN16_xSet CFCN16_xSet = (pFCN16_xSet)GetProcAddress(m_handle,"FCN16_xSet");
pFCN16_xReset CFCN16_xReset = (pFCN16_xReset)GetProcAddress(m_handle,"FCN16_xReset");
pFCN16_xSetReset CFCN16_xSetReset = (pFCN16_xSetReset)GetProcAddress(m_handle,"FCN16_xSetReset");
pTrue Ctrue = (pTrue)GetProcAddress(m_handle," ComTrue");
pIntHex Cinthex = (pIntHex)GetProcAddress(m_handle," CIntToHex");
pHexInt Chexint = (pHexInt)GetProcAddress(m_handle," CHexToInt");
pBin Cbin = (pBin)GetProcAddress(m_handle," CinBin");
pLeft Cleft = (pLeft)GetProcAddress(m_handle," CLeftStr");
pRight Cright = (pRight)GetProcAddress(m_handle," CRightStr");
pMid Cmid= (pMid)GetProcAddress(m_handle," CMidStr");
pinstr Cinstr=(pinstr)GetProcAddress(m_handle," CinStr");
pTrue CBeep = (pBeep)GetProcAddress(m_handle," MyBeep");

注:雙引號中為動態(tài)鏈接庫中的函數(shù)名。

4)、接下來就可以自由使用動態(tài)鏈接庫中的函數(shù)了,如:

Copen(參數(shù)略);
Cclose(參數(shù)略);
CFCN01(參數(shù)略);
CFCN02(參數(shù)略);
CFCN03(參數(shù)略);
CFCN04(參數(shù)略);
CFCN05S(參數(shù)略);
CFCN05R(參數(shù)略);
CFCN15(參數(shù)略);
CFCN16(參數(shù)略);
CFCN16_xSet(參數(shù)略);
CFCN16_xReset(參數(shù)略);
CFCN16_xSetReset(參數(shù)略);
Ctrue(參數(shù)略);
Cinthex(參數(shù)略);
Chexint(參數(shù)略);
Cbin(參數(shù)略);
Cleft(參數(shù)略);
Cright(參數(shù)略);
Cmid(參數(shù)略);
Cinstr(參數(shù)略);
CBeep(參數(shù)略);

注:函數(shù)中用到了char*型參數(shù),這里介紹下char*與Cstring的相互轉(zhuǎn)換的函數(shù):

(1)char*->CString

char* sz;
CString str;
str.Format("%s",sz);  //可以用此函數(shù)將讀取的值轉(zhuǎn)成字符串

(2) CString -> char*

CString str;
char* sz = str.GetBuffer(0);//可將字符串轉(zhuǎn)成char*給函數(shù)賦值


5)、當不再需要使用DLL時記得關(guān)閉串口及釋放動態(tài)鏈接庫,如:

關(guān)閉串口

if cTrue(1)==1 then
{
  cClose(1);
}

6)、釋放DLL

FreeLibrary(m_handle);

六、詳細的DLL使用請參DEMO程序,相關(guān)DEMO程序和說明所使用的開發(fā)環(huán)境VB指的是VB6.0,Delphi指的是Delphi6.0/Delphi7.0,

VC指的是VC6.0。如果使用了高版本開發(fā)環(huán)境請根據(jù)開發(fā)軟件更新后所兼容的聲明方式進行聲明調(diào)用。VC的串口調(diào)用沒DEMO程序

請參照本手冊的說明進行調(diào)用(本說明的方法經(jīng)過測試是可行有效的)。

DLl已經(jīng)過使用和測試具有很好的穩(wěn)定性(測試平臺為Win2000/WinXP),目前還沒有用戶方面返回的缺陷報告,如果你在使用過程中發(fā)現(xiàn)

有什么缺陷也請和我聯(lián)系,我將在最短時間內(nèi)給你更新升級(更新升級只針對注冊用戶)。

作者:  wjun7610
QQ:    157610979
淘寶店:http://shop34821629.taobao.com

主站蜘蛛池模板: 国产日韩欧美在线精品首页_亚洲偷精品国产五月丁香麻豆_娇小1213╳yⅹ╳毛片_日本高清www视频在线观看_欧美在线观看你懂的_国产精品久久久久久人妻_久久久精品免费看_久久人人妻人人做人人爱 | 日韩免费无码专区精品观看_久久久久久久久久久久久久免费看_18av千部免费影片与您_日本天堂在线视频_空姐毛片_香蕉私人影院_黑人巨茎大战白人美女_国产成人av免费观看 | 国产免费成人在线视频_色网视频_激情综合网五月_日韩国产一_一及片在线观看_特级无码毛片免费视频_久久精品这里精品_欧美午夜精品一区二区 | av色偷偷_欧美xyx_人人澡人人射_久久人妻天天AV_超碰777_亚洲欧美不卡视频在线播放_国产欧美在线一区二区_高潮娇喘抽搐喷水潮喷视频网站 | 玖玖视频精品_国产丝袜无码一区二区视频_黄色avav_av免费国产_麻豆果传媒成人A片免费看_国产一区二区三区精品av_性欧美videofree高清69_成视频年人黄网站视频福利 | 日韩精品不卡一区二区_久久久久久久久久久免费_久久91亚洲精品久久91综合_免费高清国产_久久免费福利_日本一区二区三区免费_无码人妻丰满熟妇啪啪7774_亚洲一区二区三区香蕉 高清不卡免费视频_猛烈顶弄H禁欲老师H春潮视频_国产老肥熟精品大全_亚洲欧美成人a毛片_亚洲精品在_第一区免费在线观看_免费国产自久久久久三四区久久_亚洲男人的天堂网 | 不卡一区二区在线观看_国产乱弄免费视频_日韩精品一区二区三区四_手机a级毛片免费观看_中文天堂在线最新版在线WWW_精品综合久久久久久888_日本免费播放一区二区三区_久久久久亚洲精品男人的天堂 | 午夜禁片_久久久亚洲精品一区二区三区浴池_国产成人牲交在线观看视频_免费1级片_国产亚洲精品久久久久久豆腐_成熟丰满熟妇高潮XXXXXA片_久久精品久久久久久久_两个男人吮她的花蒂和奶水视频 | 国产成人无码精品久久久性色_国产精品呻吟久久av图片_男人激烈吮乳吃奶视频免费_www.伊人.com_亚洲日韩中文无码久久_欧美人与动性行为视频_黄色在线视屏_国产色综合一区 | 久久人妻少妇嫩草AV_97国产精品视频人人做人人爱_色综合久久婷婷88_免费在线黄网站_超碰自拍网_韩国久久久久无码国产精品_外国一级毛片_黑人巨大40厘米免费播放 | 一级黄片毛片免费看_色又黄又爽18禁免费网站现观看_一区二区三区四区五区精品_视频一区在线视频_欧美一级黄色录像片_亚洲黄色片视频_国产免费av大片在线观看_麻豆精品免费 | 国产黑丝一区二区_精品久久看_日韩欧美在线观看一区二区_亚洲精品在线免费_北条麻纪在线观看aⅴ_日韩成人免费av_999国产精品视频免费_国产网址在线观看 | 无码国产精成人午夜视频不卡_久久成人午夜视频_国产超碰人人爽人人做人人爱_成人av福利_高清久久久久久_亚洲成AV人在线观看天堂无码_久久先锋男人AV资源网站_91在线中文 | 免费播放大片免费观看视频_四房播播在线观看_狼群社区视频www中文_美欧日韩av无码一区二区_亚洲专区一区_337P日本欧洲亚洲大胆人人_色哟哟精品视频在线观看_简单av网 | 少妇啪啪免费观看欧美三p_俺来也中文字幕_亚洲精品aaaa精品_69夜色精品国产69乱_人与狗精品aa毛片_视频福利一区_亚洲精品中文字幕乱码三区_成人免费视频a | 亚洲日韩国产成网在线观看_69久久久_伊人久久精品无码麻豆一区_亚洲欧美日韩在线观看a三区_日本网站在线_av在线免费观看国产_最近免费中文字幕大全高清MV_性欧美长视频免费观看不卡 | 99涩涩_国产愉拍精品手机_日本少妇喷浆_欧美性猛少妇xxxxx_hd女人奶水授乳milk_最新在线黄色网址_久久久久久蜜桃_国产69精品久久777的优势 | 国自产拍亚洲免费视频_夫妇激情在线观看视频_亚洲精品高潮呻吟久久av_妞干网在线观看_精品久久久网_精品国产91久久久久久久妲己_国产人妇三级视频在线观看_国产精品56页 | 亚洲精品一区二区在线播放_久久国产精品一国产精品金尊_久久国产精品一国产精品_在线国产日韩_狠狠色综合网站久久久久久久_8060yy中文无码视频在线观看_美女色站_中文第一区 | 夜夜穞天天穞狠狠穞AV美女按摩_亚洲高清视频免费_国产片在线看_永久高清免费av网址_大尺度做爰视频在线观看_国产精品一级大片_免费无码黄十八禁网站在线观看_55av亚洲 | 在线观看啊啊啊啊_精品亚洲国产成人A片在线观看_国产精品永久久久久久久www_黄色国产视频_欧洲美女粗暴牲交免费观看_18国产一二三精品国产_一区二区三区日本在线观看_在线观看视频99 | 百合AV无码专区亚洲AV极速版_国产视频网爆门福利观看_日韩美女中文字幕_97caoporn国产免费人人_久久精品1区2区_日韩国产变态另类欧美_日韩av网址一卡二卡_伊人网狠狠干 | 五月天色婷婷丁香_午夜三级A三级三点自慰_国产免费播放一区二区_中文在线观看免费视频_se吧提供在线看片免费人成久网_欧美日韩大片在线观看_久草在线视频免费资源_91久精品 | 一区二区三区二区中文字幕视频_蜜臀AV无码国产精品色午夜麻豆_欧美在线观看自拍影视_天堂久久网_2021久久超碰国产精品最新_黄片毛片av_鲁大师在线视频播放免费观看_成人欧美一区二区三区视频网页 | 少妇作爱视频在线观看视频_亚洲视频自拍_国产精品乱码在线_国产精品一区久久_国产成人免费高潮激情视频_午夜精品一区二区三区在线观看_婷婷丁香五月综合色_亚洲色中文字幕在线播放 | 狠狠色丁香_永久免费AV无码网站喷水_99精品中文字幕在线不卡_亚州中文字幕_欧美v日韩_欧美含羞草免费观看全部完_91毛片网_www.av天堂com | 国产精品久久久久一区_一线高清视频在线观看www国产_成人黄色视频播放165_国产精品亚洲自拍_中文字幕亚洲精品日韩一区_狠狠躁日日躁夜夜躁2020_久色91_成年人免费看片 | 国产AV日韩AⅤ亚洲AV无码馆_精品久久久久久一区_男同GAY18禁免费网站_亚洲一级少妇_91污色多多_成人免费视频网_国产高清-国产av_重囗另类BBWSeⅹHD | 国产AV旡码专区亚洲AV_国产亚洲高清在线观看_日韩精品免费_成人乱码一区二区三区av_国产在线一区二区三区四区_偷拍自拍在线视频_不卡的一区_国内精品国语自产拍在线观看 | 女朋友的妹妹在线观看_自偷自拍视频_亚洲精品另类在线_成人激情在线视频_久久久欧美日韩精品一区_四虎永久在线视频_99精彩视频_91av视频在线播放 | 久久婷婷国产_亚洲伦理片在线_色五月色开心色婷婷色丁香_青青在线视频观看_波多野结衣视频一区_日韩在线理论_国产成人免费在线_久久中文免费视频 | 班花在教室伦流澡到高潮视频_国产精选91热在线观看_黑人一级大片_蜜臀传媒_红杏出墙记_最近免费观看高清韩国日本大全_亚洲日韩精品无码专区网站_人妻丝袜av先锋影音先 | 搞笑一家人韩剧韩语在线看_中文字幕mv在线观看_蜜桃视频在线播放_懂色av一区二区夜夜嗨_夜夜夜网站_欧美性群另类交_久久免费视频网站_亚洲欧美日韩国产精品专区 | 国产激情久久久久_粉嫩一区二区三区国产精品_日韩操人_办公室强奷漂亮少妇同事_少妇人妻诗雨系列无删减_最新日韩视频_外国一级黄色_日本不卡在线播放 | 国产精品无打码在线播放_丰满少妇伦精品无码专区_亚洲综合成人一区_亚洲性猛交xxxx_全黄H全肉边做边吃奶视频_久久久久99精品成人片风流寡妇_91免费大片_欧美老妇激情BBBWWBBW | 成人在线观看地址_国产成人AV永久免费观看網站信息!_久久综合久久伊人_久久亚洲一区二区三_91短视频版在线观看高清_免费九九视频_性满足bbwbbwbbw_午夜精品在线免费观看 | 天地争霸美猴王在线观看国语高清_婬色網kk4444_麻豆导航_www.亚洲高清_亚洲精品国产a久久久久久_成人在线一区二区_最新国产精品剧情在线SS_九色91 | 久草视频中文_aiai久久_日韩精品一区二区三区免费_av网站一区二区_精品视频久久久久久久_亚州av网站大全_国产单亲乱视频_国产成人a区在线观看视频 | 99热这里只有精品2_久久免费国产美女裸体精东_亚洲情艺中心_成人欧美一区二区三区黑人麻豆_小草久久久久久久久爱六_美女站立式x0x0又黄动态图_99精品视频国产_拔插拔插在线 | 2021亚洲卡一卡二新区入口_狠狠噜狠狠狠狠丁香五月_护士被两个病人伦奷日出白浆_国产女人本色高清在线观看_嫩草懂你_国内精品99_久久久国产精品免费观看_免费看成年人视频 | 久久不见久久见免费影院_日韩第一页_最新国产拍偷乱偷精品_久久激情五月丁香伊人_av网页在线播放_色丁香av_日日夜夜免费精品视频_亚洲乱码精品久久久久 |