无锡信捷电气股份有限公司
资料编号 HC083 20120924 2C6
1 概述 ................................................................................................................................................................. 3 2 协议设置 ......................................................................................................................................................... 4
2-1 了解协议设备对象 ................................................................................................................................ 4 2-2 注册及创建协议文件 ............................................................................................................................ 5 2-3 编写协议文件 ........................................................................................................................................ 7
2-3-1 简介 ............................................................................................................................................... 7 2-3-2 在哪里编写协议代码 ................................................................................................................... 7 2-3-3 协议代码的结构 ........................................................................................................................... 8 2-3-4 设置步骤 ....................................................................................................................................... 8
■ 什么叫自定义通讯协议?
自定义通讯协议的意思就是:借助触摸屏自定义协议方式,编写协议驱动文件,以实现与触摸屏软件中不支持设备的通讯。
■ 为什么要使用自定义通讯协议?
通信协议又称通信规程,是指通信双方对数据传送控制的一种约定。约定中包括对数据格式,同步方式,传送速度,传送步骤,检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。也就是说触摸屏与设备之间的沟通必须讲述相同的语言,才能互相传输信息。
在触摸屏编辑软件Touchwin里,已自带了市面上主流PLC,变频器和仪表等设备的通讯协议,用户只需要针对自己的设备在触摸屏里选择相应的协议即可实现通讯。
图示:设备列表
但是如果用户的设备不在通讯设备选择列表中,请先阅读该设备所支持的通讯协议,因为该设备的协议可能与设备列表中已存在的设备协议相同,例如被广泛使用的modbus协议。
如果确认在设备列表中没有支持该设备的协议,这种情况,就必须借助触摸屏自定义协议方式,编写协议驱动文件。
2-1 了解协议设备对象
为了更好的理解自定义协议的制作过程,这里我们以仪表V900(注:V900是一个虚构的名称) 的自由格式通讯协议的编写过程为例:
仔细阅读仪表V900的通讯协议,确定需要发送和接受的代码信息。根据用户的要求,需要在触摸屏 上显示“当前重量”,“流量”显示 和“目标量”。
V900的站号设置为1,波特率设为9600,偶校验,8位数据位,1位停止位。根据上表中V900的通讯格式,下面枚举了“发送数据帧内容”及“回应的格式”。
1、读当前重量 :H01 H03 H42 sumcheck; 回复:01 (回复内容高字节)(回复内容低字节) sumcheck;
2、读流量: H01 H03 H43 sumcheck; 回复:01 (回复内容高字节)(回复内容低字节) sumcheck;
3、读目标量: H01 H03 H44 sumcheck; 回复:01 (回复内容高字节)(回复内容低字节) sumcheck;
2-2 注册及创建协议文件
■ 简介
在编辑软件的设备列表中注册V900的选项,并且建立协议的载体文件。
■ 步骤
1、打开Touchwin软件安装的根目录:
2、在根目录里找到 custom.dat 的文件并用记事本打开,在文件的末尾加“V900= V900仪表” ,“=”左边为配置文件名称,“=”右边为设备列表中显示的名称;设置完成后保存并退出。(注:如果无法保存,请将该dat文件属性中的保密属性去掉)
3、在根目录下找到Device 的文件夹,打开该文件夹,找到并用记事本打开配置文件Device.ini,在原文中找到:
[option] number = n
在该例中,n=41,因为要新增一个项目V900,那么n+1该值变成42;
4、在配置文件Device.ini中,将滑动条拖移到底部,在最后位置增加两行文字:
[sequence42] filename = V900
输入结束后,保存文件并退出。
5、在根目录下找到并打开Device文件夹,新建一个名称为V900的文件夹,并在该文件夹里建立下面两个文件。(注:简便的方法是从别的设备文件夹中复制粘贴过来,然后将ini配置文件的名称修改为
V900)
6、双击打开Touchwin软件,在设备列表中你可以看到V900已经被列入到选型列表之中。到此,注册及创建协议文件的过程就结束了。
2-3 编写协议文件
2-3-1 简介
在上一节中已经完成注册及创建协议的过程,那么根据设备的通讯要求我们需要在协议文件里编写协议的代码。
2-3-2 在哪里编写协议代码
经过上一章的创建之后,在根目录下找到并打开Device文件夹下的 V900文件夹,再双击打开V900.ini 配置文件,然后在这个配置文件中输入自定义协议的代码。
2-3-3 协议代码的结构
这些协议的代码就是触摸屏进行通讯运作的规则。依照先后顺序协议共分成以下几大部分: ● 文件描述
● 缺省通讯参数设定 ● 缺省站号设定 ● 数据对象描述 ● 通讯规则 ● 对象优化
2-3-4 设置步骤
● Descript 文件描述
在V900.ini文件中编写以下内容。其为固定格式,套用即可。“文件描述”代码内容 如下:
[descript]
DeviceModelCode=22
FirmwareName=UserDefine
DownLoadDll = \Device\UserDefine\DownLoad.dll SpecInfoDll = \Device\UserDefine\DownLoad.dll DeviceType = 100
● Communication 缺省通讯参数设定
在软件中选择设备时其缺省的通讯参数。如下图:
“缺省通讯参数设定”代码内容:
[Communication]
BaudRate=9600 ;波特率 DataBits=8 ;数据位
Parity=2 ;奇偶校验 0-None, 1-Odd, 2-Even StopBits=0 ;停止位 0-1 bit, 1-1.5 bits, 2-2 bits
● StationNo 缺省站号设定
两部分分成屏的站号和设备站号。代码内容如下:
[StationNo]
PanelWithStationNo=0 ;0:屏站号不可设置 1:可设置 【注1】 PanelDefaultStationNo= ;屏缺省站号 本例屏的站号为不可设置,则此空。 PanelMinStationNo= ;屏最小站号 本例屏的站号为不可设置,则此空。 PanelMaxStationNo= ;屏最大站号 本例屏的站号为不可设置,则此空。 DeviceWithStationNo=1 ;0:设备站号不可设置 1:可设置 【注1】 DeviceDefaultStationNo=1 ;设备缺省站号为1
DeviceMinStationNo=0 ;设备可设置的最小站号 DeviceMaxStationNo=255 ;设备可设置的最大站号
注释: 【注1】:触摸屏作为通讯从机的时候,PanelWithStationNo=1,如下图,在设备列表的下面显示器站号变为可设。当PanelWithStationNo=0,此处即无此设置。DeviceWithStationNo的功能类此。
● Object 数据对象描述
要读取V900的当前重量,那么就要描述“当前重量”所占用的空间大小,所对应通讯规则等。代码内容入下:
[Object]
ObjectNum=13 ; 所描述的总的数据对象个数。 [Object1] ; 第一个数据对象 CanAct=1 ; 数据对象占用空间基本单位 0-位, 1-寄存器, 2-寄存器组 【注1】 IDSymbol=当前重量 ; 在软件部件里的选项名称 【注2】 TypeNo=0 ; 其对应的“对象优化”号 bitlength = 16 ; 位长度,“当前重量”占用了16个位 DescripNum=1 ; 对象描述的段数 【注3】
CanSelectType=4 ; 数据类型的可选择种类(0000 0100);5-3 bytes,4-n Regs,3-dword, 2-word,1-byte,0-bit【注4】 ReadWord = 1 ; 读寄存器调用通讯规则号
[Object1Descrip1] ;对象描述第一段 Caption= ;固定格式
Type=0 ;软件中数据输入对应类型:
0-Number,1-(0-7),2-(00-07),3-(0-15),4-(00-15),
5-(0-F),6-(00-0F),7-(0-31) 【注5】 DefaultNumber=0 ;软件中数据输入缺省数据 MinNumber=0 ;软件中数据输入最小限制 MaxNumber=0 ;软件中数据输入最大限制 format=10 ; 软件中数据输入的进制 NumberStep=1 ; 固定格式
注释: 【注1】:Touchwin软件将根据该选项来区分位,寄存器及寄存器组。如果在这里选择位,那么在软件中的按钮,指示灯等位操作部件对象类型选项里出现这些对象名称。如果在这里选择寄存器,那么在软件中的数据输入,数据显示等字操作部件对象类型选项里出现这些对象名称。如果在这里选择寄存器组,那么在软件中的字符显示,中文输入等寄存器组操作部件对象类型选项里出现这些对象名称。
【注2】:如下图在对象类型的选项框里包含了当前重量这个选项。
【注3】:对象描述的段数,在上例中段数为1,也即在对象类型名称后只有一个描述值。如上图。但在某些设备协议里,需要两段描述值。在欧姆龙PLC的描述协议里,对象D的位操作,如D100B,其特殊之处在其数字值最后一位的范围在0-F,而其它的位则为十进制格式。在代码的描述中,我们将把100与B作为两段分开描述,代码如下:A部分为最后一位之前的值 格式的描述,B部分为最后一位值格式的描述。效果如下图。
[Object9] CanAct=0 IDSymbol=D TypeNo=0
bitlength = 16
DescripNum=2
CanSelectType=1
ReadBit=16
SetBitOn=23
SetBitOff=23
[Object9Descrip1] A部分 ;
Caption=
Type=0
DefaultNumber=0
MinNumber=0
MaxNumber=99999
format=10
NumberStep=1
[Object9Descrip2] B部分
Caption=.
Type=3
DefaultNumber=0
【注4】:数据类型的可选择种类 ,选择数据种类由8位二进制数组成, 第5位-3 bytes,第4位-n Regs,第3位-dword,第2位-word,第1位-byte,第0位-bit,如果需要字和双字可选,组成二进制数为00001100,那么转换成十进制则为12,CanSelectType=12,效果如下图。
5】:软件中地址输入对应类型:
在地址类型为 0-F 时
【注
● CommuRule 通讯规则
屏在同设备通讯时所发送数据帧的具体格式。这一步是协议的核心部分,要求对设备协议有详细的了解。代码如下:
[CommuRule]
CommuRuleNum = 19 ; 通讯规则的个数
IsUseASC = 0 ; 是否使用asc码转化 0:No use ASC, 1: usc ASC as Transmit Data
LowBitToASC = 0 ; 是否忽略高位 0:NO, 1:YES 【注1】
IsHightBitNext = 0 ; 使用asc转化前提下,在字节中高位在前还是低位在前 0:NO, 1:YES
【注2】
IsHightByteNext = 0 ; 基本单位为字,高字节在前还是低字节在前 0:No, 1:YES
IsHightWordNext = 0 ; 基本单位为双字,高字在前还是低字在前 0:NO, 1:YES
[CommuRule1]
IsInherit = 0 ; 该通讯规则是派生还是原生 原生=0 派生=1 【注3】
GroupNum = 2 ; 发送和接受块数,通讯过程中一般都是一发一回的过程,所以该值一般为2
Group1Type= 0 ; 第一组定义为发送数据帧
Group1Blocks = 4 ; 第一组块数为4
Group2Type = 1 ; 第二组定义为接受数据帧
Group2Blocks = 3 ; 第一组块数为3
Group1Block1 = 4 ; 第一组第一块数据:设备站号 【注4】
Group1Block2 = 5 ; 第一组第二块数据:命令码 【注4】
Group1Block2_CmdNo = 3
Group1Block3 = 1 ; 第一组第三块数据: 静态数据块 【注4】
Group1Block3_StaticValue = 0x42 ;
Group1Block4 = 11 ; 第一组第四块数据: 校验码 【注4】
Group1Block4_StartBlock = 1
Group1Block4_EndBlock = 3
Group1Block4_SelectMethod = 1
Group2Block1 = 4 ; 第二组第一块数据:设备站号 【注4】
Group2Block2 = 10 ; 第二组第二块数据:数据区 【注4】
Group2Block2_DataAreaType = 1
Group2Block3 = 11 ; 第二组第三块数据:校验码 【注4】
Group2Block3_StartBlock = 1
Group2Block3_EndBlock = 2
Group2Block3_SelectMethod = 1
[CommuRule2]
IsInherit = 1 ; 该通讯规则是派生还是原生 原生=0 派生=1
注释:
【注1】:在使用ASC转换,举例:0x56 ASC转化后为0x35,0x36,对具体的块可指定只表示低位忽略高位,如果IsHightBitNext = 1,那么0x56 ASC转化后即为0x36。
【注2】:高低字节倒置,在使用ASC转换,举例:0x56 ASC转化后为0x35,0x36,如果IsHightBitNext = 1,那么0x56 ASC转化后即为0x36,0x35。
【注3】:
原生:通讯规则中对于每个块都有定义。
派生:通讯规则与指定的某条原生通讯规则类似,在编写派生通讯规则,只需要枚举出需要重新定义的块即可。
【注4】:在大多数的通讯协议中,也就是在一个通讯数据帧,都会包含几个内容:目标站号,功能代码,数据区,数据个数,校验码等。那么在Twin自定义协议中,是怎样来对这些内容进行区分定义的呢? 下面代码是对“效验码”的一个描述:
Group1Block4 = 11
Group1Block4_StartBlock = 1
Group1Block4_EndBlock = 3
Group1Block4_SelectMethod = 1
Group1Block4 = 11是对第一组第4块内容的一个职能定义,代号11即指定该功能块为校验码。Group1Block4_StartBlock ,Group1Block4_EndBlock,Group1Block4_SelectMethod都是对第一组第4块的校验码的扩展定义。可以看出,每个块的组成一般包含两部分:职能定义 和 扩展定义。对于某些内容简单的职能块,“扩展定义”是没有的,比如:Group1Block1 = 4,即定义为设备站号。
数据区的描述比较复杂(职能定义号为10),其结构图如下:
● ObjectType : 数据对象优化
优化的作用是整合通讯规则,在达到同样通讯效果的前提下极力减少数据的通讯量。比如:在触摸屏里,如果在一个画面有地址连续的5个寄存器,没有通讯优化,触摸屏每次扫描都需要发送5次读指令数据帧,有通讯优化,触摸屏就会自动选择多个字内容读数据帧,一次性将5个寄存器读回来。下面内容是描写数据优化的一串完整代码。
[ObjectType]
ObjectTypeNum = 2 ;题头 :优化对象类型的个数
[ObjectType0] ;优化对象类型1 【注1】
IsConvert = 0 ;需要转化为别的对象类型?(0:不需要 1:需要)
Regs = 1 ;该对象类型所选用第几条通讯规则,例子中选择的是第一条通讯规则 MaxLength = 32 ;【注2】
BitLength = 16 ;该对象类型的位长个数
[ObjectType1] ;优化对象类型2 【注3】
IsConvert = 1 ;需要转化为别的对象类型?(0:不需要 1:需要)
ToObjectType = 0 ;转化成第几号对象类型,例子中右边的值为0,代表将当前ObjectType1转
化为ObjectType0
TargetAddress = H+0x3000 ;目标地址的转化公式 , BitLength = 16 ;该对象类型的位长个数
注释: 【注1】:在上节内容“Object对象类型”描述中,我们知道,每个对象都对应于一个对象优化的描述,如下例: [Object1] CanAct=1 IDSymbol=D
其对应的“对象优化”号,在这里其对应优化对象ObjectType0; bitlength = 16 DescripNum=1 CanSelectType=12
【注2】:在进行通讯优化的过程中,最大读取对象的个数,这里不宜设的过大,因为很多通讯设备的地址不够,或者不允许单次这么大的通讯量,设的过大,会造成设备之间通讯不上等影响。如果触摸屏的通讯负担不多不至于影响操作使用,可以将其设置成1。
【注3】:大家很容易理解优化类型 ObjectType0 的结构,而对ObjectType1的描述就感觉很奇怪,为什么要将ObjectType1转化成ObjectType0?这里以信捷XC PLC中的一段协议作为例程。
[Object1] CanAct=1 bitlength = 16;
DescripNum=1 CanSelectType=12 ReadWord = 1 ReadDWord = 1 WriteWord = 47 WriteDWord = 8
[Object2] CanAct=1 bitlength = 16; DescripNum=1 CanSelectType=12 ReadWord = 2 ReadDWord = 2 WriteWord = 9 WriteDWord = 9
--------------中间代码省略----------------- [ObjectType]
ObjectTypeNum = 2
[ObjectType0] IsConvert = 0 Regs = 1
MaxLength = 32 BitLength = 16
[ObjectType1] IsConvert = 1 BitLength = 16
注意:对于带有下划线的红色代码内容,普通寄存器D对应优化类型0,而存储时间数据的寄存器TD对应优化类型1。首先,TD和D这两种寄存器在PLC 程序应用中的作用是有区别的,但是从物理空间上来看,他们的地位是完全相同的。参看信捷《XC系列可编程控制器用户手册》中的《Modbus 通讯功能》一章,通讯地址:寄存器D的Modbus地址空间是从0开始的,D0对应地址4x0,而TD的Modbus地址空间是从4x3000开始的,也就是说D0对应地址4x0,TD0对应地址4x3000,而且D、TD 在被进行读写的时候,通讯帧的格式是完全一样的,也就是说,在和外部设备通讯,交换数据的层面上,D和TD没有任何的区别,只是地址不一样。那么在通讯优化的时候,经过类型的转化,可以达到更好的优化效果。
■ 表达式
举例:0x1600+N/8
用到的算术符号:+,-,*,/,%,(,),>,&,| 数字表达:无符号十进制数( 123 );
十六进制数( 0xe1;0XE1 )
注:不支持负数的表达,如‘-123’非法 特殊符号:N(读写元件第一段描述值);
M(读写元件第二段描述值); R(寄存器组数); P(“数据区”中返回的数据)
注:表达式中不分大小写。 算术符号的运算级别( 高->低 ):第一级:( 第二级:* 第三级:+ 第四级:
)
/ , -
>>
% ,,,,
无锡信捷电气股份有限公司江苏省无锡市蠡园开发区 创意产业园7号楼四楼 邮编: 214072 电话: (0510)85134136 传真: (0510)85111290
Xinje Electronic Co., Ltd.
4th Floor Building 7,Orignality Industry park, Liyuan Development Zone, Wuxi City, Jiangsu Province 214072
Tel: (510)85134136 Fax: (510)85111290
无锡信捷电气股份有限公司
资料编号 HC083 20120924 2C6
1 概述 ................................................................................................................................................................. 3 2 协议设置 ......................................................................................................................................................... 4
2-1 了解协议设备对象 ................................................................................................................................ 4 2-2 注册及创建协议文件 ............................................................................................................................ 5 2-3 编写协议文件 ........................................................................................................................................ 7
2-3-1 简介 ............................................................................................................................................... 7 2-3-2 在哪里编写协议代码 ................................................................................................................... 7 2-3-3 协议代码的结构 ........................................................................................................................... 8 2-3-4 设置步骤 ....................................................................................................................................... 8
■ 什么叫自定义通讯协议?
自定义通讯协议的意思就是:借助触摸屏自定义协议方式,编写协议驱动文件,以实现与触摸屏软件中不支持设备的通讯。
■ 为什么要使用自定义通讯协议?
通信协议又称通信规程,是指通信双方对数据传送控制的一种约定。约定中包括对数据格式,同步方式,传送速度,传送步骤,检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。也就是说触摸屏与设备之间的沟通必须讲述相同的语言,才能互相传输信息。
在触摸屏编辑软件Touchwin里,已自带了市面上主流PLC,变频器和仪表等设备的通讯协议,用户只需要针对自己的设备在触摸屏里选择相应的协议即可实现通讯。
图示:设备列表
但是如果用户的设备不在通讯设备选择列表中,请先阅读该设备所支持的通讯协议,因为该设备的协议可能与设备列表中已存在的设备协议相同,例如被广泛使用的modbus协议。
如果确认在设备列表中没有支持该设备的协议,这种情况,就必须借助触摸屏自定义协议方式,编写协议驱动文件。
2-1 了解协议设备对象
为了更好的理解自定义协议的制作过程,这里我们以仪表V900(注:V900是一个虚构的名称) 的自由格式通讯协议的编写过程为例:
仔细阅读仪表V900的通讯协议,确定需要发送和接受的代码信息。根据用户的要求,需要在触摸屏 上显示“当前重量”,“流量”显示 和“目标量”。
V900的站号设置为1,波特率设为9600,偶校验,8位数据位,1位停止位。根据上表中V900的通讯格式,下面枚举了“发送数据帧内容”及“回应的格式”。
1、读当前重量 :H01 H03 H42 sumcheck; 回复:01 (回复内容高字节)(回复内容低字节) sumcheck;
2、读流量: H01 H03 H43 sumcheck; 回复:01 (回复内容高字节)(回复内容低字节) sumcheck;
3、读目标量: H01 H03 H44 sumcheck; 回复:01 (回复内容高字节)(回复内容低字节) sumcheck;
2-2 注册及创建协议文件
■ 简介
在编辑软件的设备列表中注册V900的选项,并且建立协议的载体文件。
■ 步骤
1、打开Touchwin软件安装的根目录:
2、在根目录里找到 custom.dat 的文件并用记事本打开,在文件的末尾加“V900= V900仪表” ,“=”左边为配置文件名称,“=”右边为设备列表中显示的名称;设置完成后保存并退出。(注:如果无法保存,请将该dat文件属性中的保密属性去掉)
3、在根目录下找到Device 的文件夹,打开该文件夹,找到并用记事本打开配置文件Device.ini,在原文中找到:
[option] number = n
在该例中,n=41,因为要新增一个项目V900,那么n+1该值变成42;
4、在配置文件Device.ini中,将滑动条拖移到底部,在最后位置增加两行文字:
[sequence42] filename = V900
输入结束后,保存文件并退出。
5、在根目录下找到并打开Device文件夹,新建一个名称为V900的文件夹,并在该文件夹里建立下面两个文件。(注:简便的方法是从别的设备文件夹中复制粘贴过来,然后将ini配置文件的名称修改为
V900)
6、双击打开Touchwin软件,在设备列表中你可以看到V900已经被列入到选型列表之中。到此,注册及创建协议文件的过程就结束了。
2-3 编写协议文件
2-3-1 简介
在上一节中已经完成注册及创建协议的过程,那么根据设备的通讯要求我们需要在协议文件里编写协议的代码。
2-3-2 在哪里编写协议代码
经过上一章的创建之后,在根目录下找到并打开Device文件夹下的 V900文件夹,再双击打开V900.ini 配置文件,然后在这个配置文件中输入自定义协议的代码。
2-3-3 协议代码的结构
这些协议的代码就是触摸屏进行通讯运作的规则。依照先后顺序协议共分成以下几大部分: ● 文件描述
● 缺省通讯参数设定 ● 缺省站号设定 ● 数据对象描述 ● 通讯规则 ● 对象优化
2-3-4 设置步骤
● Descript 文件描述
在V900.ini文件中编写以下内容。其为固定格式,套用即可。“文件描述”代码内容 如下:
[descript]
DeviceModelCode=22
FirmwareName=UserDefine
DownLoadDll = \Device\UserDefine\DownLoad.dll SpecInfoDll = \Device\UserDefine\DownLoad.dll DeviceType = 100
● Communication 缺省通讯参数设定
在软件中选择设备时其缺省的通讯参数。如下图:
“缺省通讯参数设定”代码内容:
[Communication]
BaudRate=9600 ;波特率 DataBits=8 ;数据位
Parity=2 ;奇偶校验 0-None, 1-Odd, 2-Even StopBits=0 ;停止位 0-1 bit, 1-1.5 bits, 2-2 bits
● StationNo 缺省站号设定
两部分分成屏的站号和设备站号。代码内容如下:
[StationNo]
PanelWithStationNo=0 ;0:屏站号不可设置 1:可设置 【注1】 PanelDefaultStationNo= ;屏缺省站号 本例屏的站号为不可设置,则此空。 PanelMinStationNo= ;屏最小站号 本例屏的站号为不可设置,则此空。 PanelMaxStationNo= ;屏最大站号 本例屏的站号为不可设置,则此空。 DeviceWithStationNo=1 ;0:设备站号不可设置 1:可设置 【注1】 DeviceDefaultStationNo=1 ;设备缺省站号为1
DeviceMinStationNo=0 ;设备可设置的最小站号 DeviceMaxStationNo=255 ;设备可设置的最大站号
注释: 【注1】:触摸屏作为通讯从机的时候,PanelWithStationNo=1,如下图,在设备列表的下面显示器站号变为可设。当PanelWithStationNo=0,此处即无此设置。DeviceWithStationNo的功能类此。
● Object 数据对象描述
要读取V900的当前重量,那么就要描述“当前重量”所占用的空间大小,所对应通讯规则等。代码内容入下:
[Object]
ObjectNum=13 ; 所描述的总的数据对象个数。 [Object1] ; 第一个数据对象 CanAct=1 ; 数据对象占用空间基本单位 0-位, 1-寄存器, 2-寄存器组 【注1】 IDSymbol=当前重量 ; 在软件部件里的选项名称 【注2】 TypeNo=0 ; 其对应的“对象优化”号 bitlength = 16 ; 位长度,“当前重量”占用了16个位 DescripNum=1 ; 对象描述的段数 【注3】
CanSelectType=4 ; 数据类型的可选择种类(0000 0100);5-3 bytes,4-n Regs,3-dword, 2-word,1-byte,0-bit【注4】 ReadWord = 1 ; 读寄存器调用通讯规则号
[Object1Descrip1] ;对象描述第一段 Caption= ;固定格式
Type=0 ;软件中数据输入对应类型:
0-Number,1-(0-7),2-(00-07),3-(0-15),4-(00-15),
5-(0-F),6-(00-0F),7-(0-31) 【注5】 DefaultNumber=0 ;软件中数据输入缺省数据 MinNumber=0 ;软件中数据输入最小限制 MaxNumber=0 ;软件中数据输入最大限制 format=10 ; 软件中数据输入的进制 NumberStep=1 ; 固定格式
注释: 【注1】:Touchwin软件将根据该选项来区分位,寄存器及寄存器组。如果在这里选择位,那么在软件中的按钮,指示灯等位操作部件对象类型选项里出现这些对象名称。如果在这里选择寄存器,那么在软件中的数据输入,数据显示等字操作部件对象类型选项里出现这些对象名称。如果在这里选择寄存器组,那么在软件中的字符显示,中文输入等寄存器组操作部件对象类型选项里出现这些对象名称。
【注2】:如下图在对象类型的选项框里包含了当前重量这个选项。
【注3】:对象描述的段数,在上例中段数为1,也即在对象类型名称后只有一个描述值。如上图。但在某些设备协议里,需要两段描述值。在欧姆龙PLC的描述协议里,对象D的位操作,如D100B,其特殊之处在其数字值最后一位的范围在0-F,而其它的位则为十进制格式。在代码的描述中,我们将把100与B作为两段分开描述,代码如下:A部分为最后一位之前的值 格式的描述,B部分为最后一位值格式的描述。效果如下图。
[Object9] CanAct=0 IDSymbol=D TypeNo=0
bitlength = 16
DescripNum=2
CanSelectType=1
ReadBit=16
SetBitOn=23
SetBitOff=23
[Object9Descrip1] A部分 ;
Caption=
Type=0
DefaultNumber=0
MinNumber=0
MaxNumber=99999
format=10
NumberStep=1
[Object9Descrip2] B部分
Caption=.
Type=3
DefaultNumber=0
【注4】:数据类型的可选择种类 ,选择数据种类由8位二进制数组成, 第5位-3 bytes,第4位-n Regs,第3位-dword,第2位-word,第1位-byte,第0位-bit,如果需要字和双字可选,组成二进制数为00001100,那么转换成十进制则为12,CanSelectType=12,效果如下图。
5】:软件中地址输入对应类型:
在地址类型为 0-F 时
【注
● CommuRule 通讯规则
屏在同设备通讯时所发送数据帧的具体格式。这一步是协议的核心部分,要求对设备协议有详细的了解。代码如下:
[CommuRule]
CommuRuleNum = 19 ; 通讯规则的个数
IsUseASC = 0 ; 是否使用asc码转化 0:No use ASC, 1: usc ASC as Transmit Data
LowBitToASC = 0 ; 是否忽略高位 0:NO, 1:YES 【注1】
IsHightBitNext = 0 ; 使用asc转化前提下,在字节中高位在前还是低位在前 0:NO, 1:YES
【注2】
IsHightByteNext = 0 ; 基本单位为字,高字节在前还是低字节在前 0:No, 1:YES
IsHightWordNext = 0 ; 基本单位为双字,高字在前还是低字在前 0:NO, 1:YES
[CommuRule1]
IsInherit = 0 ; 该通讯规则是派生还是原生 原生=0 派生=1 【注3】
GroupNum = 2 ; 发送和接受块数,通讯过程中一般都是一发一回的过程,所以该值一般为2
Group1Type= 0 ; 第一组定义为发送数据帧
Group1Blocks = 4 ; 第一组块数为4
Group2Type = 1 ; 第二组定义为接受数据帧
Group2Blocks = 3 ; 第一组块数为3
Group1Block1 = 4 ; 第一组第一块数据:设备站号 【注4】
Group1Block2 = 5 ; 第一组第二块数据:命令码 【注4】
Group1Block2_CmdNo = 3
Group1Block3 = 1 ; 第一组第三块数据: 静态数据块 【注4】
Group1Block3_StaticValue = 0x42 ;
Group1Block4 = 11 ; 第一组第四块数据: 校验码 【注4】
Group1Block4_StartBlock = 1
Group1Block4_EndBlock = 3
Group1Block4_SelectMethod = 1
Group2Block1 = 4 ; 第二组第一块数据:设备站号 【注4】
Group2Block2 = 10 ; 第二组第二块数据:数据区 【注4】
Group2Block2_DataAreaType = 1
Group2Block3 = 11 ; 第二组第三块数据:校验码 【注4】
Group2Block3_StartBlock = 1
Group2Block3_EndBlock = 2
Group2Block3_SelectMethod = 1
[CommuRule2]
IsInherit = 1 ; 该通讯规则是派生还是原生 原生=0 派生=1
注释:
【注1】:在使用ASC转换,举例:0x56 ASC转化后为0x35,0x36,对具体的块可指定只表示低位忽略高位,如果IsHightBitNext = 1,那么0x56 ASC转化后即为0x36。
【注2】:高低字节倒置,在使用ASC转换,举例:0x56 ASC转化后为0x35,0x36,如果IsHightBitNext = 1,那么0x56 ASC转化后即为0x36,0x35。
【注3】:
原生:通讯规则中对于每个块都有定义。
派生:通讯规则与指定的某条原生通讯规则类似,在编写派生通讯规则,只需要枚举出需要重新定义的块即可。
【注4】:在大多数的通讯协议中,也就是在一个通讯数据帧,都会包含几个内容:目标站号,功能代码,数据区,数据个数,校验码等。那么在Twin自定义协议中,是怎样来对这些内容进行区分定义的呢? 下面代码是对“效验码”的一个描述:
Group1Block4 = 11
Group1Block4_StartBlock = 1
Group1Block4_EndBlock = 3
Group1Block4_SelectMethod = 1
Group1Block4 = 11是对第一组第4块内容的一个职能定义,代号11即指定该功能块为校验码。Group1Block4_StartBlock ,Group1Block4_EndBlock,Group1Block4_SelectMethod都是对第一组第4块的校验码的扩展定义。可以看出,每个块的组成一般包含两部分:职能定义 和 扩展定义。对于某些内容简单的职能块,“扩展定义”是没有的,比如:Group1Block1 = 4,即定义为设备站号。
数据区的描述比较复杂(职能定义号为10),其结构图如下:
● ObjectType : 数据对象优化
优化的作用是整合通讯规则,在达到同样通讯效果的前提下极力减少数据的通讯量。比如:在触摸屏里,如果在一个画面有地址连续的5个寄存器,没有通讯优化,触摸屏每次扫描都需要发送5次读指令数据帧,有通讯优化,触摸屏就会自动选择多个字内容读数据帧,一次性将5个寄存器读回来。下面内容是描写数据优化的一串完整代码。
[ObjectType]
ObjectTypeNum = 2 ;题头 :优化对象类型的个数
[ObjectType0] ;优化对象类型1 【注1】
IsConvert = 0 ;需要转化为别的对象类型?(0:不需要 1:需要)
Regs = 1 ;该对象类型所选用第几条通讯规则,例子中选择的是第一条通讯规则 MaxLength = 32 ;【注2】
BitLength = 16 ;该对象类型的位长个数
[ObjectType1] ;优化对象类型2 【注3】
IsConvert = 1 ;需要转化为别的对象类型?(0:不需要 1:需要)
ToObjectType = 0 ;转化成第几号对象类型,例子中右边的值为0,代表将当前ObjectType1转
化为ObjectType0
TargetAddress = H+0x3000 ;目标地址的转化公式 , BitLength = 16 ;该对象类型的位长个数
注释: 【注1】:在上节内容“Object对象类型”描述中,我们知道,每个对象都对应于一个对象优化的描述,如下例: [Object1] CanAct=1 IDSymbol=D
其对应的“对象优化”号,在这里其对应优化对象ObjectType0; bitlength = 16 DescripNum=1 CanSelectType=12
【注2】:在进行通讯优化的过程中,最大读取对象的个数,这里不宜设的过大,因为很多通讯设备的地址不够,或者不允许单次这么大的通讯量,设的过大,会造成设备之间通讯不上等影响。如果触摸屏的通讯负担不多不至于影响操作使用,可以将其设置成1。
【注3】:大家很容易理解优化类型 ObjectType0 的结构,而对ObjectType1的描述就感觉很奇怪,为什么要将ObjectType1转化成ObjectType0?这里以信捷XC PLC中的一段协议作为例程。
[Object1] CanAct=1 bitlength = 16;
DescripNum=1 CanSelectType=12 ReadWord = 1 ReadDWord = 1 WriteWord = 47 WriteDWord = 8
[Object2] CanAct=1 bitlength = 16; DescripNum=1 CanSelectType=12 ReadWord = 2 ReadDWord = 2 WriteWord = 9 WriteDWord = 9
--------------中间代码省略----------------- [ObjectType]
ObjectTypeNum = 2
[ObjectType0] IsConvert = 0 Regs = 1
MaxLength = 32 BitLength = 16
[ObjectType1] IsConvert = 1 BitLength = 16
注意:对于带有下划线的红色代码内容,普通寄存器D对应优化类型0,而存储时间数据的寄存器TD对应优化类型1。首先,TD和D这两种寄存器在PLC 程序应用中的作用是有区别的,但是从物理空间上来看,他们的地位是完全相同的。参看信捷《XC系列可编程控制器用户手册》中的《Modbus 通讯功能》一章,通讯地址:寄存器D的Modbus地址空间是从0开始的,D0对应地址4x0,而TD的Modbus地址空间是从4x3000开始的,也就是说D0对应地址4x0,TD0对应地址4x3000,而且D、TD 在被进行读写的时候,通讯帧的格式是完全一样的,也就是说,在和外部设备通讯,交换数据的层面上,D和TD没有任何的区别,只是地址不一样。那么在通讯优化的时候,经过类型的转化,可以达到更好的优化效果。
■ 表达式
举例:0x1600+N/8
用到的算术符号:+,-,*,/,%,(,),>,&,| 数字表达:无符号十进制数( 123 );
十六进制数( 0xe1;0XE1 )
注:不支持负数的表达,如‘-123’非法 特殊符号:N(读写元件第一段描述值);
M(读写元件第二段描述值); R(寄存器组数); P(“数据区”中返回的数据)
注:表达式中不分大小写。 算术符号的运算级别( 高->低 ):第一级:( 第二级:* 第三级:+ 第四级:
)
/ , -
>>
% ,,,,
无锡信捷电气股份有限公司江苏省无锡市蠡园开发区 创意产业园7号楼四楼 邮编: 214072 电话: (0510)85134136 传真: (0510)85111290
Xinje Electronic Co., Ltd.
4th Floor Building 7,Orignality Industry park, Liyuan Development Zone, Wuxi City, Jiangsu Province 214072
Tel: (510)85134136 Fax: (510)85111290