当前位置:文档之家› 欧姆龙PLC全系列Host Link通信协议串口动态链接库DLL

欧姆龙PLC全系列Host Link通信协议串口动态链接库DLL

本栏论题:欧姆龙PLC全系列Host Link通信协议串口动态链接库DLL [4307]

一、最新欧姆龙PLC全系列Host Link通信协议串口动态链接库DLL(以下简称DLL),是为满足工业

通信需要,针对工业领域要求上位机对PLC实时采集与控制的组态编程而设计。本DLL 是采用

Delphi语言开发的标准串口通讯库,具有以下特点:

1)、实时性、可靠性好,可根据通信数据量自行调整通信时间;

2)、适用于多PLC联网和上位机通信,满足多方面的需要;

3)、函数接口功能全,操作简单;

4)、附加实用转换与读取函数,易于快速开发(VC等非RAD开发环境的开发);

5)、支持USB、PC扩展卡等扩展串口号;

6)、支持多种操作系统win9x/win2000/winXP;

7)、可在多种编程环境下使用,例如VB、VC、Delphi等开发环境。

二、DLL函数说明

1、打开串口

Function ComOpen

(nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint;stdcal l;

参数:nport: 打开串口号,取值为1~8,代表COM1~COM8;

BaudRate:波特率,取值为1200、2400、4800、9600、19200、38400 (推荐使用9600或

19200);

DataBits:数据位,取值为5、6、7、8(推荐使用7或8);

Parity:校验位,取值为1(E)、2(O)、3(M)、4(S)、5(N),注括号里是校验位的英文缩

写;

StopBits:停止位,取值为1(1)、2(2)、3(1.5),注括号里是实际的停止位位数

User:DLL授权用户名;

返回值:长整型,操作成功返回1,否则返回0;打开串口不成功即返回0时的原因:1)、串口不存

在或被占用; 2)、DLL试用过期; 3)、DLL授权注册不正确。

使用举例:

ComOpen(1,9600,7,1,1,'wjun') , 打开COM1口,并设定波特率=9600、数据位=7、校

验位=E(偶

校验)、停止位=1,授权用户='wjun'。

2、关闭串口

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

参数:nport: 串口号,取值为1~8,代表COM1~COM8;

返回值:长整型,操作成功返回1,否则返回0;

使用举例:

ComClose(1) ,关闭打开的COM1口。

3、读取PLC的操作状态----{这很重要因为Host Link只有在监视或编程状态才可以进行写操

作与强制操作,工控应用中应使用监视状态}

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

Function ComMS(nport,node:Longint):Longint;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: PLC站号或节点号(单元号),取值为0~31;

返回值:长整型,返回值:0:编程、1:运行、2:监视、3:读取错误;

使用举例:

ComMS(1,0),由串口1读取0号PLC的操作状态;

4、改变PLC的操作状态

Function ComSC(nport,node,State:longint):Longint;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: PLC站号或节点号(单元号),取值为0~31;

State:PLC状态参数,取值为0:编程、1:运行、2:监视;

返回值:长整型,操作成功返回1,否则返回0;

5、读取PLC的型号代码

Function ComMM(nport,node:Longint):Pchar;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: PLC站号或节点号(单元号),取值为0~31;

返回值:Pchar(字符串),返回值:"Error":表示读取错误

其他见下表:

型号代码 PLC型号

"01" C250

"02" C500

"03" C120

"0E" C2000

"10" C1000H

"11" C2000H/CQM1/CPM2A/CPM2C/CPM1/CPM1A/SRM1(-V2)

"12" C20H/C28H/C40H/C200H/C200HS

"20" CV500

"21" CV1000

"22" CV2000

"30" CP1H

"40" CVM1-CPU01-E

"41" CVM1-CPU11-E

"42" CVM1-CPU21-E

所有字符串返回值都以"@"为字符串数据终止符,有效字符串为"@"之前的所有字符串组;

6、测试PC与PLC的通信是否可以有效执行

Function ComTS(nport,node:longint):Longint;stdcall

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: PLC站号或节点号(单元号),取值为0~31;

返回值:长整型,测试成功返回1,否则返回0;

7、PLC存储器数据的读取(IR/SR、LR、HR、AR、DM、T-PV值、T-状态值)

Function ComWR(nport,node,address,Count:longint;Order:pchar):Pchar;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: PLC站号或节点号(单元号),取值为0~31;

address: 寄存器地址,取值请参欧姆龙PLC手册;

Count: 读取寄存器个数,T-状态值的读取最大可读一次都120个,其它一次可读30

个字的数据;

Order:读取各区命令字符见下表:

命令代码读取区域

"RR" IR/SR

"RL" LR

"RH" HR

"RJ" AR

"RD" DM

"RC" T-PV值

"RG" T-状态值

返回值:字符串数据,字符串数据的终止符为"@";

使用举例:

ComWR(1,0,0,4,'RR') ,由COM1读取0000~0003四个寄存器的值,如返回值为

“0001006403E809F0@”,则表示0000=0001, 0001=0064,0002=03E8,0003=09F0;

1)、非T区的读取返回值为16进制字符串组,可以将返回值如上四位一组再转换成“0000~FFFF”

的整数值;

-----------------

读字符串序列如: | 0001 | 0064 | 03E8 | 009F | | @ |

-----------------

IR区 0000 0001 0002 0003 终止符

对T/C区:

2)、如读T-PV值,例ComWR(1,0,0,4,'RC') 则返回BCD码组合数据,表示T的PV值(当前值)

-----------------

读字符串序列如: | 0001 | 01000 | 1000 | 0159 | | @ |

-----------------

T区 0000 0001 0002 0003 终止符

3)、如读取T/C-状态值,例ComWR(1,0,0,4,'RG') 则返回0、1字符串组,表示T/C的完成状态

----------------

读字符串序列如: | 1 | 0 | 0 | 1 | | @ |

----------------

T区 0000 0001 0002 0003 终止符

8、PLC存储器数据的写入(IR/SR、LR、HR、AR、DM)

Function

ComWW(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: PLC站号或节点号(单元号),取值为0~31;

address: 寄存器地址,取值请参欧姆龙PLC手册;

Sendstr:给PLC写入的字符串数据组;IR/SR区一次最多写30个字、LR区、HR区、AR 区注意不要超出

地址范围、

DM值区一次最多写29个字。

Order:写入各区命令字符见下表:

命令代码写入区域

"WR" IR/SR

"WL" LR

"WH" HR

"WJ" AR

"WD" DM

返回值:长整型,操作成功返回1,否则返回0;

使用举例:ComWW(1,0,0,'0001006403E8009F','WR'),由串口1预置值0号PLC的IR 区的0000=1,

0001=100,0002=1000,0003=159。

写入值为16进制字符串组

写字符串序列如: | 0001 | 0064 | 03E8 | 009F |

--------------

IR区 0000 0001 0002 0003

9、PLC的线圈强制置位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR) Function

ComFBitset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: PLC站号或节点号(单元号),取值为0~31;

address: 寄存器地址,取值请参欧姆龙PLC手册,

Bit: 强制置位字地址的位地址,取值0~15,TIM、TIMH、TIML、TMHH、CNT、CNTR强制置位时的

取值总是0。

Order:强制置位各区命令字符见下表:

命令代码强制置位区域

"CIO" IR/SR

"LR" LR

"HR" HR

"AR" AR

"TIM" 定时器完成标志

"TIMH" 高速定时器完成标志

"TIML" 长定时器完成标志

"TMHH" 特高速定时器完成标志

"CNT" 计数器完成标志

"CNTR" 可逆定时器完成标志

返回值:长整型,操作成功返回1,否则返回0;

使用举例:

ComFBitset(1,0,0,0,'CIO'),强制置位(IR)0.00;

ComFBitset(1,0,0,0,'TIM'),强制置位(T)0000。

10、PLC的线圈强制复位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR) Function

ComFBitreset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: PLC站号或节点号(单元号),取值为0~31;

address: 寄存器地址,取值请参欧姆龙PLC手册;

Bit: 强制复位字地址的位地址,取值0~15;TIM、TIMH、TIML、TMHH、CNT、CNTR强制复位时的

取值总是0。

Order:强制复位各区命令字符见下表:

命令代码强制复位区域

"CIO" IR/SR

"LR" LR

"HR" HR

"AR" AR

"TIM" 定时器完成标志

"TIMH" 高速定时器完成标志

"TIML" 长定时器完成标志

"TMHH" 特高速定时器完成标志

"CNT" 计数器完成标志

"CNTR" 可逆定时器完成标志

返回值:长整型,操作成功返回1,否则返回0;

使用举例:

ComFBitreset(1,0,0,0,'CIO'),强制复位(IR)0.00;

ComFBitreset(1,0,0,0,'TIM'),强制复位(T)0000。

11、PLC的多线圈强制置位复位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR) Function

ComFRSset(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;

参数:

nport: 串口号,取值为1~8, 代表COM1~COM8;

node: PLC站号或节点号(单元号),取值为0~31;

address: 寄存器地址,取值请参欧姆龙PLC手册;

sendstr: 给多线圈写入的值,该值为16进制字符串组成的16个字符串依下表次排列,TIM、TIMH

、TIML、TMHH、CNT、CNTR强制置位复位时仅第15位是有效的其它将被忽略。

-----------------------------

--

字符串序列: | 0 | 2 | 3 | 5 | 4 | 8| 2 | 5 | 3 | 0 | 2 | 8 | 0 | 2 | 3 | 5

|

-----------------------------

--

bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

16进制字符串所表示的处理意义参下表:

0:不改变位状态

2:复位

3:置位

4:强制复位

5:强制置位

8:取消强制置位/复位

Order:强制置位复位各区命令字符见下表:

命令代码复位区域

"CIO" IR/SR

"LR" LR

"HR" HR

"AR" AR

返回值:长整型,操作成功返回1,否则返回0;

使用举例:

ComFRSset(1,0,0,'0235482530280235','CIO'),DLL将给(IR)0000按下表动作:

0.15 0 不改变位状态

0.14 2 复位

0.13 3 置位

0.12 5 强制置位

0.11 4 强制复位

0.10 8 取消强制置位/复位

0.09 2 复位

0.08 5 强制置位

0.07 3 置位

0.06 0 不改变位状态

0.05 2 复位

0.04 8 取消强制置位/复位

0.03 0 不改变位状态

0.02 2 复位

0.01 3 置位

0.00 5 强制置位

12、取消所有被强制置位、复位、及多位强制置复位的强制状态

Function ComFCancel(nport,node:longint):Longint;stdcall;

参数:

nport: 串口号,取值为1~8, 代表COM1~COM8;

node: PLC站号或节点号(单元号),取值为0~31;

返回值:长整型,操作成功返回1,否则返回0;

使用举例:

ComFCancel(1,0),取消PLC中所有被强制置位、复位的单元

注:使用强制命令后PLC程序、写入命令都无法改变被强制的位的状态值,因此在实际工控应用中

建议用写入命令或多线圈强制置位复位命令ComFRSset中的字符串处理码的2:复位、3:置位来操作

置位复位。如果一定要用强制命令,那么在记得使用后用取消强制命令来恢复管理。

由此可以推出下面的置位与复位函数,注意采用置位与复位函数,置位或复位的结果将受PLC程序

输出的影响,推崇置/复位用在输入条件中。

13、PLC的线圈置位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)

Function

ComSet(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: PLC站号或节点号(单元号),取值为0~31;

address: 寄存器地址,取值请参欧姆龙PLC手册,

Bit: 置位字地址的位地址,取值0~15,TIM、TIMH、TIML、TMHH、CNT、CNTR置位时的取值总是0

Order:置位各区命令字符见下表:

命令代码置位区域

"CIO" IR/SR

"LR" LR

"HR" HR

"AR" AR

"TIM" 定时器完成标志

"TIMH" 高速定时器完成标志

"TIML" 长定时器完成标志

"TMHH" 特高速定时器完成标志

"CNT" 计数器完成标志

"CNTR" 可逆定时器完成标志

返回值:长整型,操作成功返回1,否则返回0;

使用举例:

ComSet(1,0,0,0,'CIO'),置位(IR)0.00;

ComSet(1,0,0,0,'TIM'),置位(T)0000。

14、PLC的线圈复位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)

Function

ComReset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: PLC站号或节点号(单元号),取值为0~31;

address: 寄存器地址,取值请参欧姆龙PLC手册;

Bit: 复位字地址的位地址,取值0~15;TIM、TIMH、TIML、TMHH、CNT、CNTR复位时的取值总是0

Order:复位各区命令字符见下表:

命令代码复位区域

"CIO" IR/SR

"LR" LR

"HR" HR

"AR" AR

"TIM" 定时器完成标志

"TIMH" 高速定时器完成标志

"TIML" 长定时器完成标志

"TMHH" 特高速定时器完成标志

"CNT" 计数器完成标志

"CNTR" 可逆定时器完成标志

返回值:长整型,操作成功返回1,否则返回0;

使用举例:

ComReset(1,0,0,0,'CIO'),复位(IR)0.00;

ComReset(1,0,0,0,'TIM'),复位(T)0000。

在本DLL中去除了一些特权操作指令接一些不太容易在现场应用中使用的指令(如果有朋友

认为指令怎么不全而你正好需要的话请注册时与我提出我会将你需要的指令加入。)

三、DLL附加函数说明

1、串口打开状态的读取

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

参数:

noprt: 串口号,取值为1~8,代表COM1~COM8;

返回值:长整型,串口打开返回1,否则返回0;

2、整数转换成16进制字符串 (为VC等非RAD开发环境所增设)

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

参数:

Cint: 待转换整数,取值为(0~65535);

Digits: 转换的字符串位数,指定位数小于实际位数时按实际输出;

使用举例:

CIntToHex(200,2),则返回字符串“C8@”;

CIntToHex(200,4),则返回字符串“00C8@”;

CIntToHex(4500,4),则返回字符串“1194@”;

CIntToHex(4500,3),则返回字符串“1194@”,因为“194”不足以表示4500这个数所以按实际输

出字符串“1194@”;

"@"为字符串数据的终止符。

3、16进制字符串转换成整数 (为VC等非RAD开发环境所增设)

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

参数:

CHex: 待转换字符串,取值为(0000~FFFF);

使用举例:

CHexToInt(‘03E8’),则返回整数1000;

4、抽取16进制字符串中某个位的值

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

参数:

CHex: 待转换字符串,取值为(0000~FFFF);

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

使用举例:

CinBin(‘0F’,3),则返回值1;

CinBin(‘0F’,4),则返回值0;

CinBin(‘03E8’,6),则返回值1;

读取M8~M15组合成的字节值为“FC”时,要读取M10的值时,则调用

CinBin(‘FC’,3)返回值1表

示M10的值为1。

5、返回字符串Text左边的Count个字符 (为VC等非RAD开发环境所增设)

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

参数:

Text: 字符串原型;

Count: 指定返回左侧字符串个数;

使用举例:

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

"@"为字符串数据的终止符。

6、返回字符串Text右边的Count个字符 (为VC等非RAD开发环境所增设)

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

参数:

Text: 字符串原型;

Count: 指定返回右侧字符串个数

使用举例:

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

"@"为字符串数据的终止符。

7、返回字符串Text从Start开始的Count个字符 (为VC等非RAD开发环境所增设) Function CMidStr(Text:Pchar;Start,Count:longint):Pchar;stdcall;

参数:

Text: 字符串原型;

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

Count: 指定返回字符串个数;

使用举例:

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

"@"为字符串数据的终止符。

8、字符串Substr开始于字符串S的位置 (为VC等非RAD开发环境所增设)

Function CinStr(S,Substr:Pchar):Longint;stdcall;

参数:

S: 字符串原型;

Substr: 查询的字符串;

返回值:长整型;

使用举例:

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

DLL中关于传出字符串值的函数都以"@"为字符串函数值终止符。

四、Delphi、VB、VC语言环境的开发使用说明

1、Delphi语言环境开发说明

在Delphi环境下将omron.dll、omron.slip(许可文件)复制到应用程序目录下(即将上述文件与编

译后的可执行文件方入同一文件夹内);

在工程文件的主程序窗体(pas)文件中声明:

Function ComOpen

(nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint;stdcal l;External

'omron.dll';

Function ComClose(nport:longint):longint;stdcall;External'omron.dll';

Function

ComWR(nport,node,address,Count:longint;Order:pchar):Pchar;stdcall;

External'omron.dll';

Function ComWW

(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;External'o mron.dll';

Function ComMM(nport,node:Longint):Pchar;stdcall;External'omron.dll';

Function ComMS(nport,node:Longint):Longint;stdcall;External'omron.dll';

Function

ComSC(nport,node,State:longint):Longint;stdcall;External'omron.dll';

Function ComTS(nport,node:longint):Longint;stdcall;External'omron.dll';

Function ComFBitset

(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron .dll';

Function ComFBitreset

(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron .dll';

Function ComFRSset

(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;External'o mron.dll';

Function

ComFCancel(nport,node:longint):Longint;stdcall;External'omron.dll';

Function ComSet

(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron .dll';

Function ComReset

(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron .dll';

Function ComTrue(nport:longint):longint;stdcall;External'omron.dll';

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

External'omron.dll';

其它附加函数Delphi有实用函数,建议用Delphi自带函数,如需使用声明参上例;

声明后可以在程序中使用这些函数,附加函数置中除ComTrue、CinBin外Delphi系统自带有类似功

能函数。通信时必须先使用ComOpen函数打开串口,在串口打开后可以有效操作相关函数,为确保

通信可在程序运行开始时打开串口,程序关闭前关闭串口。应用程序关闭之前请务必将关闭所有

串口,如串口未关闭前关闭系统将抛出异常。确保应用程序在关闭释放前关闭打开的串口。解决

方法,在form的OnDestroy事件中加入如下语句:

if ComTrue(1)=1 then ComClose(1);

在Delphi中给中给DLL中的函数传pchar值问题,参考下例:

procedure TForm_omron.ButtonDsendClick(Sender: TObject);

Var

i,k,l:longint;

sendText,Order:pchar;

sendstr,Orderstr:string;

begin

i:=strtoint(Rightstr(Comboxcom.Text,1));

if (SendEdit.Enabled) and (comTrue(i)=1) then

begin

k:=strtoint(DaddressW.Text);

case ComDwrite.ItemIndex of

0: Orderstr:='WR';

1: Orderstr:='WL';

2: Orderstr:='WH';

3: Orderstr:='WJ';

4: Orderstr:='WD';

end;

l:=length(SendEdit.Text) div 4;

l:=l*4;

sendstr:=leftstr(SendEdit.Text,l); //以字为单位多余省略,4个字符串为一个字

try

sendText:=strAlloc(200);

sendText:=strPCopy(sendText,sendstr);

Order:=strAlloc(4);

Order:=strPCopy(Order,Orderstr);

if ComWW(i,0,k,SendText,Order)=1 then SendEdit.Enabled:=False; //写各区值

finally

StrDispose(sendText);

StrDispose(Order);

end;

end;

end;

建议采用strPCopy():string型转换到Pchar型,straps():Pchar型转换到string型,不推荐使用直

接转换法。

上述可以详细参照DEMO程序。

2、VB语言环境开发说明

在VB环境下将omron.dll、omron.slip(许可文件)复制到应用程序目录下(即将上述文件与编译

后的可执行文件方入同一文件夹内);

在工程文件中声明:

Private Declare Function ComOpen Lib "omron.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 "omron.dll" (ByVal nport As Long) As Long Private Declare Function ComWR Lib "omron.dll" (ByVal nport As Long, ByVal node As

Long,ByVal address As Long, ByVal Count As Long, ByVal Order As String) As String Private Declare Function ComWW Lib "omron.dll" (ByVal nport As Long, ByVal node As

Long, ByVal address As Long, ByVal Sendstr As String, ByVal Order As String) As Long

Private Declare Function ComMM Lib "omron.dll" (ByVal nport As Long, ByVal node As

Long) As String

Private Declare Function ComMS Lib "omron.dll" (ByVal nport As Long, ByVal node As

Long) As Long

Private Declare Function ComSC Lib "omron.dll" (ByVal nport As Long, ByVal node As

Long, ByVal State As Long) As Long

Private Declare Function ComTS Lib "omron.dll" (ByVal nport As Long, ByVal node As

Long) As Long

Private Declare Function ComFBitset Lib "omron.dll" (ByVal nport As Long, ByVal node

As Long, ByVal address As Long, ByVal Bit as Long, ByVal Order As String) As Long

Private Declare Function ComFBitreset Lib "omron.dll" (ByVal nport As Long, ByVal

node As Long, ByVal address As Long, ByVal Bit as Long, ByVal Order As String) As

Long

Private Declare Function ComFRSset Lib "omron.dll" (ByVal nport As Long, ByVal node

As Long, ByVal address As Long, ByVal Sendstr As String, ByVal Order As String) As

Long

Private Declare Function ComFCancel Lib "omron.dll" (ByVal nport As Long, ByVal node

As Long) As Long

Private Declare Function ComSet Lib "omron.dll" (ByVal nport As Long, ByVal node As

Long, ByVal address As Long, ByVal Bit as Long, ByVal Order As String) As Long Private Declare Function ComReset Lib "omron.dll" (ByVal nport As Long, ByVal node As

Long, ByVal address As Long, ByVal Bit as Long, ByVal Order As String) As Long Private Declare Function ComTrue Lib "omron.dll" (ByVal nport As Long) As Long Private Declare Function CinBin Lib "omron.dll" (ByVal Chex As String, ByVal Start As

Long) As Long

其它附加函数VB有实用函数,建议用VB自带函数,如需使用声明参上例;

做完上述声明后,便可以在程序中使用相关函数了。本DLL是串口通信库,通信时必须先使用

ComOpen函数打开串口,在串口打开后可以有效操作相关函数,为保证通信可以在程序运行开始时

打开串口,程序关闭前关闭串口。在应用程序关闭之前请务必将关闭所有串口,如您的程序串口

未关闭前被关闭系统将抛出异常。当出现这样的异常请更改您的程序,确保应用程序在关闭释放

前关闭打开的串口。

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

If ComTrue(1)=1 then

ComClose(1)

End if

为确保Unload事件有效执行程序中应使用“End”语句,而尽量使用“Unload”语句释放所有窗体

,因使用“End”语句系统不会执行正常的窗体释放等事件而直接退出程序,如程序中有form1,

form2两个窗体,则使用下面语句:

Unload form1

Unload form2

VB会在所有窗体关闭后释放所有占用资源。

上述可以详细参照DEMO程序。

3、VC语言环境开发说明

在VC环境下将omron.dll、omron.slip(许可文件)复制到应用程序目录下(即将上述文件与编译

后的可执行文件方入同一文件夹内);

在工程主文件cpp中声明一个句柄:

HINSTANCE m_handle;

用来标识导入的动态链接库。

1)、导入动态链接库,如例所示:

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

2)、按下例说明声明相关各个函数:

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* pWR)(long nport,long node, long address, long Count, char*

Order);

typedef long (CALLBACK* pWW)(long nport,long node, long address, char* Sendstr,

char*

Order);

typedef char* (CALLBACK* pMM)(long nport,long node);

typedef long (CALLBACK* pMS)(long nport,long node);

typedef long (CALLBACK* pSC)(long nport,long node, long State);

typedef long (CALLBACK* pTS)(long nport,long node);

typedef long (CALLBACK* pFset)(long nport,long node, long address, long Bit, char*

Order);

typedef long (CALLBACK* pFReset)(long nport,long node, long address, long Bit, char*

Order);

typedef long (CALLBACK* pFRSset)(long nport,long node, long address, char* Sendstr,

char* Order);

typedef long (CALLBACK* pFCancel)(long nport,long node);

typedef long (CALLBACK* pset)(long nport,long node, long address, long Bit, char*

Order);

typedef long (CALLBACK* pReset)(long nport,long node, long address, long Bit, char*

Order);

typedef long (CALLBACK* pTrue)(long nport);

typedef long (CALLBACK* pBin)( char* Chex, long Start);

typedef char* (CALLBACK* pIntHex)(long Cint,long Digits);

typedef long (CALLBACK* pHexInt)( char* CHex);

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* S, char* Substr);

3)、声明并建立动态链接库中的函数与新函数名的对应关系,如下:

pOpen CMOpen = (pOpen)GetProcAddress(m_handle,"ComOpen");

pClose CMClose = (pClose)GetProcAddress(m_handle,"ComClose");

pWR CMWR = (pWR)GetProcAddress(m_handle,"ComWR");

pWW CMWW = (pWW)GetProcAddress(m_handle,"ComWW");

pMM CMMM = (pMM)GetProcAddress(m_handle,"ComMM");

pMS CMMS = (pMS)GetProcAddress(m_handle,"ComMS");

pSC CMSC = (pSC)GetProcAddress(m_handle,"ComSC");

pTS CMTS = (pTS)GetProcAddress(m_handle,"ComTS");

pFset CMFset = (pFset)GetProcAddress(m_handle,"ComFBitset");

pFReset CMFReset = (pFReset)GetProcAddress(m_handle,"ComFBitreset"); pFRSset CMFRSset = (pFRSset)GetProcAddress(m_handle,"ComFRSset");

pFCancel CMFCancel = (pFCancel)GetProcAddress(m_handle,"ComFCancel"); pset CMSet = (pset)GetProcAddress(m_handle,"ComSet");

pReset CMReset = (pReset)GetProcAddress(m_handle,"ComReset");

pTrue CMTrue = (pTrue)GetProcAddress(m_handle," ComTrue");

pIntHex CMIntHex = (pIntHex)GetProcAddress(m_handle," CIntToHex");

pHexInt CMHexInt = (pHexInt)GetProcAddress(m_handle," CHexToInt");

pBin CMBin = (pBin)GetProcAddress(m_handle," CinBin");

pLeft CMLeft = (pLeft)GetProcAddress(m_handle," CLeftStr");

pRight CMRight = (pRight)GetProcAddress(m_handle," CRightStr");

pMid CMMid= (pMid)GetProcAddress(m_handle," CMidStr");

pinstr CMinstr=(pinstr)GetProcAddress(m_handle," CinStr");

注:双引号中为动态链接库中的函数名。

4)、接下来就可以自由使用动态链接库中的函数了,如:

CMOpen(参数略);

CMClose(参数略);

CMWR(参数略);

CMWW(参数略);

CMMM(参数略);

CMMS(参数略);

CMSC(参数略);

CMTS(参数略);

CMFset(参数略);

CMFReset(参数略);

CMFRSset(参数略);

CMFCancel(参数略);

CMSet(参数略);

CMReset(参数略);

CMTrue(参数略);

CMIntHex(参数略);

CMHexInt(参数略);

CMBin(参数略);

CMLeft(参数略);

CMRight(参数略);

modbus_通讯协议_实例

上海安标电子有限公司 ——PC39A接地电阻仪通信协议 通信协议: 波特率:9600数据位:8校验位:无停止位:1 上位机(计算机): 字节号 1 2 3 4 5 6 7 8 意义ID Command 数据地址V alue CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,读:3或4,写:6 3 数据地址:2个字节,寄存器地址,读从100开始,写从200开始 4 V alue:2个字节,读:个数(以整型为单位),写:命令/ 数据(以整型为单位) 5 CRC:计算出CRC 下位机(PC39A): 读数据,若正确 字节号 1 2 3 3+N (N=个数*2) 3+N+1 3+N+2 意义ID Command=3 / 4 数据个数数据CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,收到的上位机命令 3数据个数:1个字节,返回数据个数(以字节为单位) 4 V alue:N个字节,是返回上位机的数据 5 CRC:计算出CRC 写命令,若正确 返回收到的数据: 若错误 字节号 1 2 3 4 5 意义ID Command 数据CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,收到的上位机命令或上0x80, 如收到3,返回0x83 3数据:1个字节,错误的指令 错误指令 1:表示command不存在 2:表示数据地址超限 4 CRC:计算出CRC

例如读PC39A 电流数据: 机器地址为12,电流的数据地址100,数据为15.45(A) (一个整型数据) 主机: ID Command 数据地址 V alue CRC 16进制 0x0c 0x03 0x0064 0x0001 CRC_H CRC_L 10进制 12 3 100 1 CRC_H CRC_L 从机返回 如正确: ID Command 数据个数(以字节为单位) V alue CRC 16进制 0x0c 0x03 0x002 0x0609 CRC_H CRC_L 10进制 12 3 2 1545 CRC_H CRC_L 如错误: ID Command 数据 CRC 16进制 0x0c 0x83 0x02 CRC_H CRC_L 10进制 12 131 2 CRC_H CRC_L 例如发PC39A 启动命令: 机器地址为12,命令的地址200,数据为25000(25000表示启动) 主机: ID Command 数据地址 V alue CRC 16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L 10进制 12 6 200 25000 CRC_H CRC_L 从机返回 如正确: ID Command 数据地址 V alue CRC 16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L 10进制 12 6 200 25000 CRC_H CRC_L 如错误: ID Command 数据 CRC 16进制 0x0c 0x86 0x02 CRC_H CRC_L 10进制 12 134 2 CRC_H CRC_L 0011 10000110 错误码0x83 功能码0x06错误码0x86

共通技术-iFIX与欧姆龙PLC连接手册

iFIX与欧姆龙PLC通讯连接手册 目录 1 概述 (1) 1.1 iFIX与欧姆龙PLC连接的通讯驱动 (1) 1.2 通讯驱动安装 (2) 2 iFIX使用OMR驱动与欧姆龙PLC串口连接 (5) 2.1 OMR驱动支持PLC系列及读写寄存器区域 (5) 2.2 OMR驱动配置 (5) 2.3 数据库标签建立 (9) 3 iFIX使用OMF驱动与欧姆龙PLC以太网连接 (10) 3.1 OMF驱动支持PLC系列及可读写区域 (10) 3.2 OMF驱动配置 (11) 3.3 设置路由表 (14) 3.4 FINSGateway设置 (15) 3.5 建立数据库标签 (17) 4 iFIX使用OMS与欧姆龙PLC以太网连接 (19) 4.1 OMS驱动支持PLC系列及可读写区域 (19) 4.2 OMS驱动配置 (19) 4.3 设置路由表 (22) 4.4 FINSGateway设置 (23) 4.5 建立数据库标签 (26) 5 iFIX使用OPC与欧姆龙PLC以太网连接 (28) 5.1 OPC驱动支持PLC系列及可访问寄存器 (28) 5.2 OPC驱动配置 (30) 5.2.1 Sysmac OPC Server配置 (30) 5.2.2 OPC Client配置 (32) 5.3 设置路由表 (36) 5.4 FINSGateway设置 (37) 5.5 建立数据库标签 (40)

1 概述 iFIX的驱动程序主要是完成硬件设备(包括PLC,电度表,电量监测仪,模拟量模块等)和组态监控软件IFIX动态数据交换,以完成上位监控软件的监视与控制功能。 iFIX有两种模式的I/0驱动:基于串口的驱动程序和基于TCP/IP的驱动程序。 两种驱动程序的安装包里都包含以下五个文件: setup.exe 驱动的安装文件 setup.dll 驱动安装文件的动态库 license 驱动的授权安装文件 xxx.inf 驱动程序安装过程中的安装配置文件,其中XXX为三个字母驱动程序名 [注: 在IFIX 中所有的驱动程序名都只能且只能有三个字母] Server.Cab 驱动程序安装包 1.1 iFIX与欧姆龙PLC连接的通讯驱动 目前iFIX与欧姆龙PLC通讯连接驱动主要有两种: 1、由组态软件厂商开发的基于串口(Hostlink)或TCP/IP的驱动程序,如OMR(OMRON COM),基于串口Hostlink协议,可直接与欧姆龙PLC连接;IGS,基于OMRON FINS EtherNet、OMRON FINS Series、Hostlink 等。 2、基于中间接口软件开发的通讯驱动,需安装FINSGateway软件。例如,OMF、OMS、OMRON Sysmac OPC Server。 其中OMR、OMF驱动属于iFIX 6.X版本,版本较旧,支持访问的PLC寄存器区存在较多的限制(具体见每一种通讯连接说明),一般不建议使用; OMS驱动属于较新的驱动,对欧姆龙新型PLC CS/CJ/CP系列全面兼容,可访问的寄存器区几乎无限制,推荐客户使用; OMRON Sysmac OPC Server和通用的OPC驱动一样,主要是提供欧姆龙过程设备的通用接口。 IGS驱动是目前iFIX主推的通讯驱动,兼容当前主流PLC设备开发出各种通讯驱动,支持自动化行业200多种主流PLC。

欧姆龙PLC知识

SCL2指令应用案例 条件:变送器的输出信号为0-10V,对应温度为-100--200摄氏度;CP1H的模拟量输入量程设置为0-10V, 分辨率选择6000 目的:使用SCL2指令将模拟量转换得到的数据0-6000(BIN)对应缩放到-100--200(BCD)摄氏度显示 输出。 程序如下: SCL2控制字解释: 200:CP1H的模拟量输入通道1 D100:偏移量(带符号BIN)详见下图 D101:ΔX(带符号BIN)详见下图 D102:ΔY(BCD)详见下图 D200:转换结果通道 结果:程序执行后就可以实现0-6000(BIN)转换到-100--200(BCD)摄氏度显示了。 注:因为BCD数是以十六进制来表示十进制数据的,因此对应的温度值应该用16进制方式去监视。例如:当200CH中的数据是&4000(即6.66V电压输入),那么用十六进制监控数据D200应该显示#100。 &符号表示十进制数;#表示十六进制数。

SCL指令应用案例 条件:变送器的输出信号为0-10V,对应压力为0-400MPa;CP1H的模拟量输入量程设置为0-10V,分辨 率选择6000。 目的:使用SCL指令将模拟量转换得到的数据0-6000(BIN)对应缩放到0-400MPa(BCD)显示输出。 程序如下: 结果:程序执行后就可以实现0-6000(BIN)转换到0-400(BCD)的压力值了。 注:因为BCD数是以十六进制来表示十进制数据的,因此对应的压力值应该用16进制方式去监视。例如:当200CH中的数据是&3000(即5V电压输入),那么用十六进制监控数据D200应该显示#200。 &符号表示十进制数;#表示十六进制数。 使用CPM1A-AD041的模块采集模拟量4-20ma的信号,该模拟量信号取自一位移传感器信号,代表一个0-100mm的距离,要怎么才能把输入通道里 的数据转换成所对应的这个距离值呢?

无线通信协议设计.doc

关键字:网络协议,成本低,外围电路少,传感器。 第一阶段 传感器网络的三要素是传感器,观察者和感知对象。传感器由电源,感知部件,嵌入式处理器,存储器,通信部件和软件这几部分构成。 无线传感器网络通常包括传感器节点,汇聚节点和管理节点。大量传感器节点随机部署在监测区域内部或附近,这一过程可以通过飞行器撒播,人工埋置和火箭弹射等方式完成。撒放后的传感器节点进入到自检启动的唤醒状态,在簇首节点的引领下,建立起路由拓扑,之后传感器节点采集并记录周围感兴趣的环境信息,沿着之前建立好的路由拓扑路径逐跳进行传输,在传输过程中数据可能被多个节点处理,经过单跳或者路由多跳后传输到汇聚节点,汇聚节点通过串口将数据传送到网关节点进行集中处理。在本课题中网关节点用PC充当,网关节点再连接到基于IPv6的cernet2主干网上,监控中心从cernet2上获取数据,并完成对数据的融合,展示,预测,以及决策,从而对整个网络进行协调和控制。 无线传感器网络具有以下特点: (1)网络规模大。 (2)网络的自组织能力(要求传感器节点具有自组织的能力,并且能够自动进行配置和管理,通过拓扑控制机制和网络协议自动形成转发监测数据的多跳无线网络系统) (3)无线传感器网络节点的通信能力有限(无线传感器网络中传感器节点的传输率低,一般只有200kbps左右,通信距离短) (4)无线传感器网络节点的电源能量有限 (5)无线传感器网络存储和计算能力有限(无线传感器网络中的传感器节点是一种微型嵌入式设备)(6)无线传感器网络以数据为中心 一个基于ZigBee技术的无线传感器网络平台 研究了无线传感器网络中控制信息及传感器数据的获取,描述,解析,存储和传输。 采用了新兴的ZigBee技术,为解决WSNs中的核心问题—能量限制建立了基础。 设计和实现了低成本的两层板的工作频率为2.4GHZ的无线数据传输模块。 (4)建立了一个分知式的远程无线监测及控制的平台。在该平台上实现了 ZigBee协议,组建了一个具有路由节点的无线网络。为进~步的无线传感器的 实际应用打下了基础。 立意的意义 目前,无线传感器终端的希望和要求主要集中在尽量节省的系统能量消耗、 尽量节省的信息处理以及简易的信号收发。对于无线传感器网络中的网络协议 的期待是:用简洁的协议栈支持传感器网络的有效运行,到处存在接入可能; 利用广播信息,避免交互应答:简化的协议层次、简练的信令方式;节省的系 开销等。正是基于无线传感器网络终端的要求,ZigBee协议应运而生。ZigBee 协议是专用于无线传感器网络的通信协议,能最大可能的节省网络中能量,可 随时接入大量节点,高容错性,强鲁棒性,逐渐成为了无线传感器网络的首选 络协议。 到目前为止无线传感器网络的发展己经经历了三个阶段{25]: (1) 点对点。只是简单取代了有线网络,各个设备之间只是直接联系, 只有有限通信能力。 (2) 点对多点。传感器网络中有一个路由和控制的中央节点,所有数据 流动必须通过基站。 (3) 多跳/网状结构。完全的RF冗余,具有多数据通道,自我建构,自 我调整,智能分布式。 ZigBee是一种专门为低速率传感器网络而设计的低成本、低功耗的短距离

欧姆龙PLC初级培训教材

欧姆龙PLC初级培训教材

PLC初级培训教材 第一章电气系统及PLC简介 一、设备电气系统结构简介设备电气系统一般由以下几部分组成 1、执行机构:执行工作命令 陶瓷行业中常见的执行机构有:电动机(普通、带刹车、带离合)、电磁阀(控制油路或气路的通闭完成机械动作)、伺服马达(控制调节油路、气路的开度大小)等。 2、输入元件:从外部取入信息 陶瓷行业中常见的输入元件有:各类主令电器(开头、按扭)、行程开关(位置)、近接开关(反映铁件运动位置)、光电开关(运动物体的位置)、编码器(反映物体运动距离)、热电偶(温度)、粉位感应器粉料位置)等。 控制中心:记忆程序或信息、执行逻辑运算及判断 常见控制中心部件有各类PLC、继电器、接触器、热继电器、等。 电源向输入元件、控制中心提供控制电源;向执行机构提供电气动力。 二、简单的单台电动机电气系统 例:一台星——角启动的鼠笼式电动机的电气系统 1、一次线路图 2、二次线路图 A B C T Q JC1 R R JC1 SJ JC1 JCJ JCJ JCJ SJ JCY JCJ A

3、上图看出,二次回路图中为实现延时控制,要使用一个时间继电器,而在 陶瓷行业中,星——角启动控制可说是一种非常简单的例子,若在陶瓷生产设备上全部采用继电器类来实现生产过程的自动控制,要使用许多的继电器、时间继电器等其它一些电气产品,而该类产品占空间大,且运行不是十分可靠。 三、PLC简介 1、可编程序控制器 早期的PLC只能做些开关量的逻辑控制,因而叫PLC,但近年来,PLC采用微 处理器作为中央处理单元,不仅有逻辑控制功能,还有算术运算、模拟量处理甚至通信联网功能,正确应称为PC,但为了与个人计算机有所区别,仍称其为PLC。 2、PLC的特点 1>、灵活、通用 控制功能改变,只要改变软件及少量的线路即可实现。 2>、可靠性高、抗干扰能力强 ①硬件方面:采用微电子技术开关动作由无触点的半导体电路及大规模集成电路完成, CPU与输入输出之间,采用光电隔离措施,隔离了它们之间电的联系。 ②软件方面:有自身的监控程序,对强干扰信号、欠电压等外界环境定期检查,有故障 时,存现状态到存储器,并对其封闭以保护信息;监视定时器WTD,检查程序循环状态,超出循环时间时报警;对程序进行校验,程序有错误进输出报警信息并停止执行。 3>、使用简单 采用自然语言——梯形图语言编程方式,编程容易,更改方便。输入输出接口可以与各种开关、传感器、继电器、接触器、电磁阀连接,接线简单。 4>、功能强、体积小 纵向——PLC不仅可能完成各种条件控制,还能完成模/数、数/模转换并进行数字运算,可以完成对模拟量的控制;横向——可以控制一台至几台设备,还可实现远距离控制;重量轻,体积小,便于安装。 3、PLC控制思路 以前面的星——角起动二次回路为例。 按控制等效电路可分为三个部分:输入部分、输出部分及控制部分。 1>、输入部分: 接收由各种主令电器发出的操作指令及由各种反映设备状态信息的输入元件传来的各种状态信息。PLC的一个输入点单独对应一个内部继电器,当输入点与输入用的公用脚COM接

游戏通信协议设计文档

游戏通信协议设计 1、概述 游戏通信协议包含两种不同的部分:客户端和服务器(C-S)之间的交互协议,游戏内部服务器(S-S)之间的交互协议。前者为了降低延迟,应该尽可能减少报文长度。同时,为了防止外挂,必须作加密处理。相反,后者在服务器之间,通信协议就可以比较灵活。 客户端和服务器的通信经过服务器的网关,经过中转分发到其他类型的服务器上或者分发给客户端。 2、客户端和服务器通信协议 协议采用分层原理,固定长度的报头把字节流分割成报文,除了基本的报文类型,应用相关的报文内容由应用自身决定,比如:对AS写的客户端用AMF编码报文内容。协议自动对报文内容做加密和解密。 Struct header { uint32_t MsgLen; //信息包的长度,不包括固定长度的Header uint16_t MsgSeq; // 该消息的序列号 uint8_t MsgType; //信息的类型 uint8_t MsgVersion; //信息的版本号,当前为0x1 uint16_t MsgCheck; //信息的校验码 uint8_t body[0]; //信息包的内容 }; 校验码的计算:MsgCheck = (uint16_t)( MsgLen+ MsgType+ MsgSeq + MsgVersion ) 网关与客户端传递的消息还需要经过xxtea的加密才可以。 序列号在连接认证的时候是0,以后递增;网关返回给客户端认证成功,序号也是从0开始。如果以后的报文序号发生错误,应该断开连接,让客户端执行重新连接。

网关根据命令类型,分解报文后,把内容转发到相应的服务器。有些报文类型对网关是透明的,网关不需要做特殊处理。有些类型的报文,网关必须知道报文内容的格式,在网关做特殊处理,主要是关系到用户(地图)位置变动的命令,比如: 1、用户连接认证。确认用户登录所在的网关。 2、用户更换房间。 3、用户更换桌子。 3、内部服务器通信 可以用多个key/Value的方式编码,比如:从客户端传过来的报文应该作为一个key/value,网关可以附加上该报文另外的信息:uid(哪个用户),用户所在位置(gateway_id,内部桌子号)。

通信协议书应用举例

//信息头+ 控制卡地址+ 命令字+ 数据区长度+ 数据内容+ 校验码 说明: 1.信息头: 四个字节, 内容依次为: 0x51, 0x44, 0x45, 0x4C 2.控制卡地址: 单字节, 范围为1~255(0为广播地址) 3.命令字: 单字节 ?发送设置屏参的命令字为0xD1 ?发送设置扫描方式的命令字为0xD2 ?发送设置硬件参数的命令字为0xD3 ?发送回读硬件参数的命令字为0xD4 ?发送节目数据的命令字为0xD5 ?发送定时开关机的命令字为0xD6 ?发送校准时间的命令字为0xD7 ?发送显示屏当前节目内容回读的命令字为0xD8 ?发送调节显示屏亮度的命令字为0xD9 ?下位机回送接收状态的命令字为0xDD ⑴发送通信结束的命令字为0xFD 4.数据区长度: 双字节,表示本次发送的数据区长度,但是每次发送的信息内容的长度最大为512字,数据区长度未标明的其值为0 5.数据内容: 主要是上位机将要发给下位机的数据, 需要注意: 数据发送顺序必须严格按照数据协议的规则发送. 6.校验码: 双字节 “信息头+ 控制卡地址+ 命令字+ 信息内容长度+ 信息内容”中的所有数据的每个字依次异最终所得结果再与0x5555异或就是校验码

1. 网口通信采用以太网通信协议80 2.3 2. ARP和IP数据包格式 3. 传输协议采用UDP协议和ICMP协议 4. 网口通信数据区协议格式如下: //信息头+ 控制卡地址+ 命令字+ 数据区长度+ 数据内容+ 校验码 说明: (1) 信息头: 四个字节, 内容依次为: 0x51, 0x44, 0x45, 0x4C (2)控制卡地址: 单字节, 范围为1~255(0为广播地址) (3) 命令字: 单字节 ①发送设置屏参的命令字为0xD1 ②发送设置扫描方式的命令字为0xD2 ③发送设置硬件参数的命令字为0xD3 ④发送回读硬件参数的命令字为0xD4 ⑤发送节目数据的命令字为0xD5 ⑥发送定时开关机的命令字为0xD6 ⑦发送校准时间的命令字为0xD7 ⑧发送显示屏当前节目内容回读的命令字为0xD8 ⑨发送调节显示屏亮度的命令字为0xD9 ⑩下位机回送接收状态的命令字为0xDD ?发送通信结束的命令字为0xFD (4)数据区长度: 双字节,表示本次发送的数据区长度,但是每次发送的信息内容的长度最大为512字,数据区长度未标明的其值为0 (5)数据内容: 主要是上位机将要发给下位机的数据, 需要注意: 数据发送顺序必须严格按照数据协议的规则发送. (6)校验码:

通讯协议设计

精选资料 通信接口协议 2011年6月 可修改编辑

修订控制页

目录 1.概述 (6) 1.1 编写目的 (6) 1.2 缩略语 (6) 1.3 参考资料 (6) 1.4 共享平台机具接口定义 (7) 1.5通信密钥 (8) 2 协议包格式 (8) 2.1 协议分层说明 (8) 2.2 包格式 (8) 2.3 校验字MAC码计算方法 (9) 3.接口报文格式 (11) 3.1 业务应用类 (11) 3.1.1消费流水上传 (11) 3.1.2身份识别流水上传 (13) 3.1.3黑名单下发 (14) 3.1.4身份识别白名单下发 (15) 3.1.5客户代码下发 (16) 3.2 设备管理类 (17)

3.2.1 通信参数下发 (17) 3.2.2 应用密钥下发 (19) 3.2.3时间同步下发 (20) 3.2.4心跳信号上传 (21) 3.2.5 开机密钥下发 (21) 3.3 门禁业务控制类 (23) 3.3.1下发节假日时段和星期节假日信息 (23) 3.3.2下发门设置信息(策略) (25) 3.3.3 启动/停止实时上传 (27) 3.3.4 远程强制控制门的开关 (28) 3.3.5 门禁锁状态查询 (29) 3.3.6 开门密码设置 (29) 3.3.7 多卡开门设置 (30) 3.3.8 协迫开门密码设置 (32) 3.4 考勤业务控制类 ............................................................... 错误!未定义书签。 3.4.1下发设设备工作模式.................................................................... 错误!未定义书签。 3.5 脱机消费业务控制类......................................................... 错误!未定义书签。 3.5.1下发补贴名单............................................................................... 错误!未定义书签。 3.5.2下发充值/存款名单 ...................................................................... 错误!未定义书签。 3.5.3下发消费类别参数 ....................................................................... 错误!未定义书签。 3.5.4下发消费策略............................................................................... 错误!未定义书签。 3.5.5 限制策略下发.............................................................................. 错误!未定义书签。

《网络通信协议分析》课程设计开发实例

网络协议分析课程设计之协议编程 实验一帧封装 实验目的: ?编写程序,根据给出的原始数据,组装一个IEEE 802.3格式的帧(题目)默认的输入文件为二进制原始数据(文件名分别为input1和input2))。 ?要求程序为命令行程序。比如,可执行文件名为framer.exe,则命令行形式如下:framer inputfileoutputfile,其中,inputfile为原始数据文件,outputfile 为输出结果。 ?输出:对应input1和input2得结果分别为output1和output2。 试验要求: ?编写程序,根据给出的原始数据,组装一个IEEE 802.3格式的帧(题目)默认的输入文件为二进制原始数据(文件名分别为input1和input2))。 ?要求程序为命令行程序。比如,可执行文件名为framer.exe,则命令行形式如下:framer inputfileoutputfile,其中,inputfile为原始数据文件,outputfile 为输出结果。 输出:对应input1和input2得结果分别为output1和output2 验设计相关知识: 帧:来源于串行线路上的通信。其中,发送者在发送数据的前后各添加特殊的字符,使它们成为一个帧。Ethernet从某种程度上可以被看作是机器之间的数据链路层连接。 按802.3标准的帧结构如下表所示(802.3标准的Ethernet帧结构由7部 分组成) 802.3标准的帧结构

其中,帧数据字段的最小长度为46B 。如果帧的LLC 数据少于46B ,则应将数据字段填充至46B 。填充字符是任意的,不计入长度字段值中。 在校验字段中,使用的是CRC 校验。校验的范围包括目的地址字段、源地址字段、长度字段、LLC 数据字段。 循环冗余编码(CRC)是一种重要的线性分组码、编码和解码方法,具有简单、检错和纠错能力强等特点,在通信领域广泛地用于实现差错控制。CRC 校验码的检错能力很强,不仅能检查出离散错误,还能检查出突发错误。 利用CRC 进行检错的过程可简单描述如下:在发送端根据要传送的k 位二进制码序列,以一定的规则产生一个校验用的r 位监督码(CRC 码),附在原始信息的后边,构成一个新的二进制码序列(共k+r 位),然后发送出去。在接收端,根据信息码和CRC 码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则在差错控制理论中称为“生成多项式”。 循环冗余校验码的特点:(1)CRC 校验码可检测出所有单个错误。(2)CRC 校验码可检测出所有奇数位错误。(3)CRC 校验码可检测出所有双位的错误(4)CRC 校验码可检测出所有小于、等于校验位长度的突发错误。(5)CRC 校验码可以](1/2)-[11-k 的概率检测出长度为(K+1)位的突发错误 实验分析: ? 填充帧头部字段 要完成一次帧封装的过程,首先要完成的就是帧头部的装入,这一过程只要将签到吗、定界符、目的地址、源地址、长度字段的相应数值按顺序写入就可以了。其中,长度字段的值即为要发送的数据的实际长度。 ? 填充数据字段 在填充数据字段的过程中要注意的主要问题是数据字段的长度。802.3标准

欧姆龙PLC选型手册大全

欧姆龙PLC型号 欧姆龙PLC--CPM1A-V1系列 欧姆龙PLC--CPM1A-V1系列产品型号 1.CPM1A-10CDR-A-V110点CPU单元AC100-220V、6点入,4点继电器输出 (1A是型号代号;10表示输入输出总点数为10点,具体是6点输入,4点输出;C表示是CPU单元;D表示混合型,也就是有输入也有输出;R表示继电器输出型;A表示工作电压为交流电100~240V) 2.CPM1A-10CDR-D-V110点CPU单元DC24V、6点入,4点继电器输出 3CPM1A-10CDT-D-V110点CPU单元DC24V、6点入,4点晶体管输出.漏型 4.CPM1A-20CDR-A-V120点CPU单元AC100-220V12点入,8点继电器输出 5.CPM1A-20CDR-D-V120点CPU单元DC24V12点入,8点继电器输出 6.CPM1A-20CDT-D-V120点CPU单元DC24V12点入,8点晶体管输出.漏型 7.CPM1A-30CDR-A-V130点CPU单元AC100-220V18点入,12点继电器输出 8.CPM1A-30CDR-D-V130点CPU单元DC24V18点入,12点继电器输出 9.CPM1A-30CDT-D-V130点CPU单元DC24V18点入,12点晶体管输出.漏型 10.CPM1A-40CDR-A-V140点CPU单元AC100-220V24点入,16点继电器输出 11.CPM1A-40CDR-D-V140点CPU单元DC24V24点入,16点继电器输出 12.CPM1A-40CDT-D-V140点CPU单元DC24V24点入,16点晶体管输出.漏型 13.CPM1A-40EDR扩展I/O单元40点24点输入16点继电器输出 14.CPM1A-20EDR1扩展I/O单元20点12点入,8点继电器输出 15.CPM1A-8ER扩展输出单元8点继电器输出 16.CPM1A-8ED扩展输入单元8点DC输入 17.CPM1A-40EDT扩展I/O单元40点24点输入16点晶体管输出.漏型 18.CPM1A-20EDT扩展I/O单元20点12点入,8点晶体管输出.漏型 19.CPM1A-8ET扩展输出单元8点晶体管输出.漏型 20.CPM1A-MAD01-NL模拟量模块输出单元2入/1出输入:0~10V,1~5V,4~20毫安 输出:0~10V,-10~+10V,4~20毫安 21.CPM1A-MAD02-CH模拟量输入输出单元4入/1出输入:0~10V,1~5V,4~20毫安 输出:0~10V,-10~+10V,4~20毫安 22.CPM1A-DA001模拟量输出单元2路分辨率1/4000转换速率2.5ms/CH每个输出通道可独立设置量程 输出:-10~10V0~10V0~5V0~20mA1~5V4~20mA 23.CPM1A-DA002模拟量输出单元4路分辨率1/4000转换速率2.5ms/CH每个输出通道可独立设置量程 输出:-10~10V0~10V0~5V0~20mA1~5V4~20mA 24.CPM1A-AD041模拟量输入单元,4路分辨率1/6000 25.CPM1A-DA041模拟量输出单元,4路分辨率1/6000 26.CPM1-CIF01RS232适配器 27.CPM1-CIF11RS422适配器

通讯协议设计

通信接口协议2011年6月

修订控制页

目录 1.概述 (5) 1.1编写目的 (5) 1.2缩略语 (5) 1.3参考资料 (5) 1.4共享平台机具接口定义 (5) 1.5通信密钥 (6) 2协议包格式 (7) 2.1协议分层说明 (7) 2.2包格式 (7) 2.3校验字MAC码计算方法 (8) 3.接口报文格式 (9) 3.1业务应用类 (9) 3.1.1消费流水上传 (9) 3.1.2身份识别流水上传 (10) 3.1.3黑名单下发 (11) 3.1.4身份识别白名单下发 (12) 3.1.5客户代码下发 (13) 3.2设备管理类 (14) 3.2.1通信参数下发 (14) 3.2.2应用密钥下发 (14) 3.2.3时间同步下发 (15) 3.2.4心跳信号上传 (16) 3.2.5开机密钥下发 (16) 3.3门禁业务控制类 (18) 3.3.1下发节假日时段和星期节假日信息 (18) 3.3.2下发门设置信息(策略) (19) 3.3.3启动/停止实时上传 (20) 3.3.4远程强制控制门的开关 (21) 3.3.5门禁锁状态查询 (22) 3.3.6开门密码设置 (22) 3.3.7多卡开门设置 (23) 3.3.8协迫开门密码设置 (24) 3.4考勤业务控制类........................................ 错误!未定义书签。

3.5脱机消费业务控制类.................................... 错误!未定义书签。 3.5.1下发补贴名单 ................................................ 错误!未定义书签。

欧姆龙PLC-NJ501读数据操作手册学习资料

欧姆龙PLC NJ501读数据操作手册 一:使用指令 Trigger 触发 Operating 操作 OperatingEnd 操作结束 RS 复位优先保持 FileOpen 打开文件 FileSeek 查找文件 FileRead 读文件 FileClose 关闭文件 _Card1Ready SD卡准备标志 二:程序原理 用Trigger常开触发RS复位优先保持指令,使用RS指令控制程序读数据的开始与结束。用FileOpen来定义读文件的名,用FileSeek来定义数据读取的开始地址,用FileRead来读数据,当数据读完了触发FileClose,使操作结束。 三:程序解释 内部变量 外部变量 程序

该程序段为停止操作程序,当出现以下情况会触发停止操作指令,使程序停止 1:FileClose_instance.Done写文件完成, 2:FileOpen_instance.Error打开文件产生错误 3:FileSeek_instance.Error 查找文件产生错误 4:FileRead_instance.Error读文件产生错误 5:FileClose_instance.Error关闭文件产生错误 该程序段使用复位优先保持指令触发操作指令,当Trigger产生一个上升沿,并且SD卡准备就绪,RS置位,Operating置1。 该程序段使用FileOpen指令创建一个文件。当Operating置1,打开一个名为32.bin的文件(若已经有一个该文件则直接打开,若没有则创建一个新的),Fid为文件标识符。当FileOpen 指令发生错误,FileOpen_instance.Error置1,然后执行lnline ST(图正方形框),结束错误。 该程序段使用FileSeek指令查找文件读取的地址,当Operating置1,且FileOpen有执行,则找到Fid标识符,写Offset表示读数据的起始字,图中DINT#2表示从第二个字开始读,_SEEK_SET表示从文件开始。当FileSeek指令发生错误,FileSeek_instance.Error置1,然

AS3991通讯协议实例

Building B of Nano Sensor Park, 200 Linghu Ave, Taihu International Science Technology Park, WuXi New District, WuXi, JiangSu, China Tel: X86-510-85387391 Email:sales@https://www.doczj.com/doc/d86224072.html, Commercial invoice Number: SD-110428 Date: April 28th, 2011 Bill To: Ship To: Rep: Ship via Jingfeng Liu UPS Quantity Item Unit Price Total 249 Breakout board bare PCB $0.05 $12.45 49 Breakout board bare PCB for Xbee module $0.05 $2.45 2 USB programmer $6.00 $12.00 10 GPS module $8.00 $80.00 10 Arduino Motor driver PCB $6.00 $60.00 2 ARM9 learning kit $12.00 $24.00 4 video interface board for ARM9 learning kit $4.00 $16.00 5 VGA interface board for ARM9 learning kit $6.00 $30.00 1 Finger print sensor $10.00 $10.00 10 STM32 cortex learning board $5.00 $50.00 1 GPS breakout PCB $4.00 $4.00 1 PCB header board $2.00 $2.00 Attn: Jingfeng Liu CuteDigi 1434 Cannon Mountain Dr Longmont, CO 80503 Tel #:720-949-4932 Attn: Jingfeng Liu CuteDigi 1434 Cannon Mountain Dr Longmont, CO 80503 Tel #:720-949-4932

欧姆龙PLC样本与手册全集

欧姆龙PLC样本与手册全集 小型机) R05-CN-03中文CP1H选型样本() SBCA-C-051D中文CP1H/CP1L 选型样本 (P20E-EN-01CP1L选型样本(英文)中英文选型样本CP1E ) W450-CN5-02 中文CP1H操作手册() W450-E1-01英文CP1H操作手册(W462-CN5-03CP1L 操作手册(中文)W462-E1-06操作手册(英文)CP1L W480-CN5-01 单元软件用户手册(中英文)W480-E1-01 CP1E W479-CN5-01 单元硬件用户手册(中英文)W479-E1-01 CP1E W479-E1-03)单元硬件用户手册(英文)(包含NACP1E 英文) W451-E1-03CP1H/CP1L编程手册(中文)CP1H/CP1L编程手册(中 文)W483-CN5-04CP1E 指令参考手册(CP1E 指令手册(英文) ) P039 E1-11(英文CPM1A-V1 选型样本 W317-E1-4操作手册(英文)CPM1A W353-E1-1编程手册(英文)CPM1/1A/2A/2C/SRM1OMP-ZCO97101B操作手册(中文)CPM1A )中文CPM1A/2A/2AH/2C 编程手册(W262-E1-4操作手册(英文)CPM1) P049-E1-08英文选型样本(CPM2A/2C )中文选型样本(CPM2AH ) .P01Z-CN-01(中文CPM2AH-S 选型样本W352-E1-1CPM2A 操作手册(英文))(中文CPM2AH-S 操作手册)中文CPM2A/CPM2AH 操作手册()英文选型样本(CPM2C W356-E1-08操作手册(英文)CPM2C ) OMP-AD000102A(中文CPM2B 操作手册) W399-E1-1英文CPM2B-S001M-DRT 操作手册(中型机)(中文CJ1系列选型样本SBCE-CN-058D选型样本(中文)CJ2H/CJ2M)中文(选型样本C200HX/C200HG/C200HE W395-C1-01操作手册(中文)CJ1M内置I/O W393-C1-02操作手册(中文)CJ1W340-C1-08编程手册(中文)CJ1W340-E1-1最新编程手册(英文)CJ1W472-CN5-06单元硬件操作手册(中文)CJ2 CPU W472-E1-01操作手册(英文)CJ2W486-E1-01操作手册(英文)CJ2M-MD W473-E1-01编程手册(英文)CJ2W345-C1-05操作手册(中文)CJ1W-AD/DA W396操作手册(中文)CJ1W-TC W368-E1-07操作手册(英文)CJ1W-PTS)OEZ-ZCP97201A中文编程手册(C200HX/HG/HE )OEZ-ZCI96201A(中文C200HE/HG/HX 操作手册OMP-ZCO99406A(中文)C200H 模拟量(AD001/DA001)操作手册W325-E1-04I(AD003/DA003)操作手册(英文)C200H 模拟量 W124-E1-5C200H-TC 温度控制单元操作手册(英文))W130-E3-5(英文C200H 操作手册)安装手册(英文C200HS )C200HS 操作手册(英文)中文CQM1H 选型样本()中文操作手册(CQM1H )中文编程手册(CQM1H 和内装板操作手册(英文) CPU CQM1H 系列和内装板编程手册(英文)系列 CPU CQM1H )(中文CQM1H 特殊I/O单元操作手册手册(英文)特殊I/OCQM1H/CQM1 大型机W368-E1-07模块操作手册(英文)CS1W-PTS过程控制I/O选型样本(中文)CS1-H 选型样本(中文)CS1D) W339-CN5-10(中文CS1可编程控制器操作手册)W340-C1-08中文CS1编程手册(最新编程手册(英文)CS1W405-E1-06CS1D双机操作手册(英文)W345-C1-05操作手册(中文)CS1W-AD/DA W345-E1-11CS1W-AD/DA最新操作手册(英文)W132-E1-3D

Multi-Lab网络通信协议举例说明

Multi-Lab III测试仪表数据通信协议说明 一、概述: Multi-Lab III测试仪表设计上支持LAN(局域网)通信,支持TCP/IP协议,采用socket通信方式。其中Multi-Lab III测试仪表作为客户端,remote viewer 软件或其他相关软件(网络调试助手)作为服务器端。通过局域网,可以远程读到测量的数据,也可以处理这些数据,同时可以更改Multi-Lab III的相关参数。 在网络上,该仪表具有多种功能,它可以提供数据,也可以从选择的站点接收数据。为了达到这个目的,在选择的站点和仪器之间的数据通信需要进行相应的配置。 注意: ●多字节的参数值(word, integer, float, …),低字节先行发送; ●Pstring类型的参数发送时,第一个字节是参数的长度,后续是参数的内容。 二、M ulti-Lab III测试仪表(客户端)的设置如下: 根据现场实际情况,将IP Addr地址设置为服务器的IP地址。本例子为192.168.2.198,端口号为8513。设置完毕后,选中Enable,然后点击Apply触摸按钮。 三、网络调试助手(服务器端)设置如下图所示: 在电脑上开启网络调试助手软件,协议类型选择TCP服务器,本地IP地址设置为192.168.2.198,本地端口号设置为8513,设置完毕后,用鼠标点击连接按钮。如下图所示:

进行完上述设置,并且无误后,即可以接收来自仪器的相关数据。 四、M ulti-Lab III测试仪表发送到服务器的数据 以下一系列的数据报文均为网络调试助手从测试仪器上接收而来,是一个完整的通信过程。这里主要有分析了第一数据报文、第二个数据报文以及最后一个报文。没有分析的数据报文,可以参见第二个数据报文。数据报文的注释为蓝色括弧显示。注释的具体内容可以参见文件《Remote viewer protocol V00.00.03》,该文件给出了各个命令和参数的详细解释。 A0 (Place assignment命令)08(长度) 30 30 2E 30 30 2E 30 33(协议版本,asii码字符串00.00.03) 01(remote) 01(长度) 41 (“A”place name)C3 00 (ChConfig)00(结束) 20 (chnbr=0)00 00 A0 40 (采样率) 21 (chnbr=1)00 00 A0 40(采样率) 22(chnbr=2) 00 00 A0 40 (采样率) 23(chnbr=3) 00 00 A0 40 (采样率) B0 (send axis命令)00(axis 0) 20 20 54 6D 70(axis name“Tmp”) 20 20 20 B0 43(axis unit“℃”)4C (L) 04 08 (minval)07 01(maxval) 20 20 45 6D 66(name=“Emf”) 20 20 20 6D 56(unit=“mV”) D4 FE (minval)2C 01(maxval) FF (Y axis end)0A 00(X axis max value) 10 (sendout curve data chnbr=0)11 BA 0E C5(value of ch0) 00 00(statx)30 (send insulation chnbr=0)80 4F C3 47(value) 11(sendout curve data chnbr=1) A0 B7 0E C5(value of ch1)00 00 (statx)31(send insulation chnbr=1)80 4F C3 47 (value) 10 D8 B8 0E C5 00 00 30 80 4F C3 47 11 2F B5 0E C5 00 00 31 80 4F C3 47 10 67 B6 0E C5 00 00 30 80 4F C3 47 11 BE B2 0E C5 00 00 31 80 4F C3 47 10 67 B6 0E C5 00 00 30 80 4F C3 47 11 67 B6 0E C5 00 00 31 80 4F C3 47 10 2F B5 0E C5 00 00 30 80 4F C3 47 11 67 B6 0E C5 00 00 31 80 4F C3 47 10 D8 B8 0E C5 00 00 30 80 4F C3 47 11 2F B5 0E C5 00 00 31 80 4F C3 47 10 D8 B8 0E C5 00 00 30 80 4F C3 47 11 2F B5 0E C5 00 00 31 80 4F C3 47 10 11 BA 0E C5 00 00 30 80 4F C3 47 11 67 B6 0E C5 00 00 31 80 4F C3 47 10 D8 B8 0E C5 00 00 30 80 4F C3 47 11 2F B5 0E C5 00 00 31 80 4F C3 47 10 11 BA 0E C5 00 00 30 80 4F C3 47 11 67 B6 0E C5 00 00 31 80 4F C3 47 10 A0 B7 0E C5 00 00 30 80 4F C3 47 11 2F B5 0E C5 00 00 31 80 4F C3 47 10 BE B2 0E C5 00 00 30 80 4F C3 47 11 BE B2 0E C5 00 00 31 80 4F C3 47 10 11 BA 0E C5 00 00 30 80 4F C3 47 11 67 B6 0E C5 00 00 31 80 4F C3 47 10 2F B5 0E C5 00 00 30 80 4F C3 47 11 F6 B3 0E C5 00 00 31 80 4F C3 47 10 49 BB 0E C5 00 00 30 80 4F C3 47 11 A0 B7 0E C5 00 00 31 80 4F C3 47 10 F6 B3 0E C5 00 00 30 80 4F C3 47 11 2F B5 0E C5 00 00 31 80 4F C3 47 10 49 BB 0E C5 00 00 30 80 4F C3 47 11 A0 B7 0E C5 00 00 31 80 4F C3 47 10 A0 B7 0E C5 00 00 30 80 4F C3 47 11 2F B5 0E C5 00 00 31 80 4F C3 47 10 D8 B8 0E C5 00 00 30 80 4F C3 47 11 A0 B7 0E C5 00 00 31 80 4F C3 47

相关主题
文本预览
相关文档 最新文档