mcgs脚本驱动

更新时间:2024-01-09 11:48:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

北京昆仑通态自动化软件科技有限公司

脚本驱动V2.0使用指导手册

版本号:0.1

- 1 -

北京昆仑通态自动化软件科技有限公司 第一章 新脚本驱动说明

一. 脚本驱动适用范围

1. 脚本驱动适用的版本

A. MCGS嵌入式组态软件;

版本号:6.5(01.0010)注:此版本以上为新版本,以下为旧版本 B. MCGS通用版的定制版组态软件 C. MCGS网络版的定制版组态软件

2. 脚本驱动适用的设备

A. 独立板卡设备 B. 串口通信设备

3. 脚本驱动适用的协议

二. 脚本驱动兼容性

1. 旧版本脚本驱动兼容新版本组态软件

2. 新版本脚本驱动不兼容旧版本的组态软件,旧版本组态软件无法识别新版本脚本驱

三. 脚本驱动新增内容

1. 脚本驱动新增功能

新增加生成向导功能,具体参照第三章内容。

2. 脚本驱动新增函数

(1) 数据解析函数

1.!SvrGetByteFromByteArr(ByRef ByteArr, start, ByRef n, Flag) 2.!SvrGetShortFromByteArr(ByRef ByteArr, start, ByRef n, Flag) 3.!SvrGetIntFromByteArr(ByRef ByteArr, start, ByRef n, Flag) 4.!SvrGetSingleFromByteArr(ByRef ByteArr, start, ByRef x, Flag) 5.!SvrGetByteFromHexStr(str, ByRef n, Flag) 6.!SvrGetShortFormHexStr(str, ByRef n, Flag) 7.!SvrGetIntFromHexStr(str, ByRef n, Flag) 8.!SvrGetSingleFromHexStr(str, ByRef x, Flag)

(2) 数据校验函数

1.!SvrByteArraySum(ByRef ByteArr, start, length) 2.!SvrStrSum(str, Flag)

3.!SvrByteArrayXOR(ByRef ByteArr, start, length) 4.!SvrStrXOR(str, Flag)

5.!SvrStrModbusCRC(ByRef ByteArr, start, length) 6.!SvrStrModbusLRC(str, start, length)

- 2 -

北京昆仑通态自动化软件科技有限公司

7.!OpenLog() 8.!CloseLog()

(3) 字节数组操作函数

1.!HStr2HByre(str, arByte) 2.!HByte2HStr(arByte, str)

- 3 -

北京昆仑通态自动化软件科技有限公司 第二章 基础概念讲解

一. 通讯协议

1. ACSII码通讯协议(字符型协议)

通讯信息按照ASCII码方式解析得到的参数信息称为ASCII码通讯。比如:主站接收到从站发送的4个字符:0x31 0x34 0x2E 0x36,用ASCII码表示为14.6。

2. HEX通讯协议(字节数组协议)

通讯信息按照十六进制方式解析得到的参数信息称为十六进制通讯。比如:主站接收到从站发送的4个字符:0x31 0x34 0x2E 0x36, 用HEX表示为0x31342E36

3. ASCII码通讯与HEX通讯的区别

1) ASCII码通讯传送的字符能清楚的了解发送命令和接收信息,但是传送的信息速度量少;十

六进制通讯发送的字符信息速度量大,但是发送命令和接收信息不明了。

2) ASCII码的通讯帧1个字占4个字符,而HEX的通讯帧1个字占2个字符。如:发送0x1427

信息,ASCII码发送4个字符:0x31 0x34 0x32 0x37,而HEX只需要发送2个字符:0x14 0x27。

二.

- 4 -

北京昆仑通态自动化软件科技有限公司 第三章 向导使用说明

一. 完全适用向导的协议

1. ASCII码协议,多条命令通讯示例

1.1 步骤1:协议分析

通讯命令1:模仿ADAM4018协议,协议格式如下: 发送命令:#xx\\r

帧头:长1个字符,固定为# 地址:固定长2个字符 帧尾:长1个字符,为回车

接收命令:#+xxx.xx+xxx.xx+xxx.xx+xxx.xx+xxx.xx+xxx.xx+xxx.xx+xxx.xx\\r

帧头:长1个字符,固定为#

数据体:共8个数据体,每个数据体固定长7个字符,按ASCII码方式解析 帧尾:长1个字符,为回车

模拟数据:

发送命令1:#01\\r

接收命令1:#+11.111+22.222+33.333+44.444+55.555+66.666+77.777+88.888\\r

通讯命令2:自己定义,解析数据非等长通讯协议,分两种情况:数据长度已知;数据长度未知。下面以数据长度未知,数据之间用分隔符分离的协议,协议格式如下: 发送命令:#xxxxxx\\r

帧头:长1个字符,固定为#,参与校验 地址:固定长2个字符,参与校验 校验:长2个字符,累加和校验 结束符号:长1个字符,固定为回车

接收命令:#xxAA,BBB,CCCC,DDDDD,EEEE,FFF,GG,HHHHxx\\r

帧头:长1个字符,固定为# 数据体:8个数据体,以“,”分隔 校验:长2个字符,累加和校验 结束符号:长1个字符,固定为回车

模拟数据:

发送命令:#0184\\r

接收命令:#11,222,3333,44444,5555,666,77,8888E3\\r

- 5 -

北京昆仑通态自动化软件科技有限公司

1.2 步骤2:新建工程进入向导

新建工程后进入新建工程模式,如图3-1-1-1所示。

图3-1-1-1

1. 选择“使用向导新建工程”,则进入向导界面,如图3-1-1-2所示。 2. 选择“不使用向导新建工程”,流程和原来一样,直接生成示例脚本。

整个脚本配置分为4个步骤,前一个步骤不执行,不允执行下个步骤

图3-1-1-2

设置脚本驱动的名称和注释内容 - 6 -

北京昆仑通态自动化软件科技有限公司

1.3 步骤3:配置驱动属性

图3-1-1-3

1. 添加属性,添加除“设备地址”和“通讯延时”以外的属性,当所添加属性的数据类型选择枚举型时,属性范围处填写枚举量,并用“;”隔开,如图3-1-1-4所示。

2. 删除属性,对多余的属性进行删除,其中“设备地址”和“通讯延时”为默认属性,不允许删除。 3. 设置属性,修改设置已添加的属性。

图3-1-1-4

- 7 -

北京昆仑通态自动化软件科技有限公司

1.4 步骤4:配置通道

图3-1-1-5

1. 添加通道,可进行批量添加操作。

2. 删除通道,对多余的通道进行删除,可批量删除(按住Ctrl键,选择要删除的通道,点击“删除通

道”按钮即可),其中“通讯状态”为默认通道,不允许删除。

3. 设置通道,修改设置已添加的通道,设置通道中不能修改通道个数。

- 8 -

北京昆仑通态自动化软件科技有限公司

1.5 步骤5:配置通讯帧

图3-1-1-6

5.1 添加收发通讯帧

根据协议分析知,2组通讯帧结构信息配置分别如图3-1-1-7,图3-1-1-8所示。

图3-1-1-7

- 9 -

北京昆仑通态自动化软件科技有限公司

图3-1-1-8

- 10 -

北京昆仑通态自动化软件科技有限公司

5.2 设置收发通讯帧

1. 进入设置数据属性画面,设置每个数值的属性 2. 设置过的选项,将显示设置内容和相应的属性 3. 命令预浏功能,直观的查看收发命令的格式

图3-1-1-9

对于ASCII码通讯帧的数据体设置主要有以下几种情况:

1. 无特别属性,数据内容为可见ASCII字符,如图图3-1-1-10所示。

数据类型:ASCII字符数据 数据长度:1字符 数据内容:# 数据属性:无 当此数据体参与校验时,需要选择。

图3-1-1-10

- 11 -

北京昆仑通态自动化软件科技有限公司

2. 无特别属性,数据内容为不可见ASCII字符,如图图3-1-1-11所示。

数据类型:字节数据[HEX格式] 数据长度:1字节,用2个字符表示 数据内容:0D,注意一定以HEX格式填写,无空格 数据属性:无 注释:提供ASCII表,可以方便的直接选择不可见的ASCII字符 对于相同的数据体,设置好一个后,其他可选择默认设置,设置与前一个相同的参数

图3-1-1-11

3.数值不确定的数据体,配置“设备属性”中的某个属性获得其值,如图图3-1-1-12所示。

数据类型:ASCII字符数据 数据长度:2字符 数据内容:无 数据属性:设备属性中的设备地址

图3-1-1-12

- 12 -

北京昆仑通态自动化软件科技有限公司

4. 数据解析

1)可知长度的解析,如图3-1-1-13所示。

数据类型:ASCII字符数据 数据长度:7字符 数据内容:无 数据属性:解析数据中的ASCII码数据[可知长度]

图3-1-1-13

2)未知长度的解析,如图3-1-1-14所示。

数据类型:ASCII字符数据 数据长度:1字符,此处数据长度为“解析数据间分隔符号”的长度 数据内容:无 数据属性:解析数据中的ASCII码数据[未知长度],解析数据间分隔符号是“,”。

图3-1-1-14

- 13 -

北京昆仑通态自动化软件科技有限公司

5. 校验,如果命令中的数据都是确定的,那么可以直接计算出校验值,如图3-1-1-15所示。

1. 此处需校验的数据是选择了“是否参与校验”的数据体。 2. 可选框无效,如:即使不选择“帧头”,它也参与校验。

图3-1-1-15

6. 预览功能,命令信息设置完之后,可点击“命令预览”查看命令格式,如图3-1-1-16所示。

图3-1-1-16

7. 对于各属性同前一个的数据体,点击“默认设置”即可。

- 14 -

北京昆仑通态自动化软件科技有限公司

1.6 步骤6:配置预览

在此预览通道和解析数据的匹配关系,并检查配置是否正确,如果正确就可以,完成配置生成驱动,否则不完成配置生成代码。

图3-1-1-17

- 15 -

北京昆仑通态自动化软件科技有限公司

1.7 步骤7:完成配置,进行调试

1.代码的生成与编译。

(1)配置都正确后,可以“完成配置”直接生成脚本代码,如图3-1-1-18所示。

图3-1-1-18

组建命令帧 发送命令帧并接收数据,对接收数据进行校验 对接收的数据进行解析,并设置通道值 (2)编译生成的代码。选择“调试”? “检查整个驱动”,若没有问题输出窗口会提示“设备

编辑检查通过”,如图3-1-1-19所示。

图3-1-1-19

2. 配置“串口参数”。

(1)创建虚拟串口,如图3-1-1-20所示,串口COM2和COM3虚拟串口。

- 16 -

北京昆仑通态自动化软件科技有限公司

图3-1-1-21

图3-1-1-20

(2)配置脚本驱动中的串口参数

选择“设置”? “串口父设备配置”,配置串口参数,如图3-1-1-21所示。

(3)设置串口转发工具SmartCom.exe。

首先,设置串口,如图3-1-1-22所示。

图3-1-1-22

1. 除串口号外,其他需要与脚本驱动中串口参数一致 2. 数据格式选择ASCII - 17 -

北京昆仑通态自动化软件科技有限公司

其次,设置模拟设备,串口设置完后,打开串口,选择“使能”,添加收发帧,如图3-1-1-23所示。

图3-1-1-23

然后,将2组命令帧的模拟数据分别添加进去,选择启动,如图3-1-1-24所示。

3. 进行调试。

在脚本驱动中,选择“调试”? “定时通道采集”进行调试,如图3-1-1-26所示。

图3-1-1-25

- 18 -

北京昆仑通态自动化软件科技有限公司

图3-1-1-26

- 19 -

北京昆仑通态自动化软件科技有限公司

2. HEX码协议,单条命令通讯示例

2.1 步骤1:协议分析

通讯命令:模仿ModbusRTU协议,协议格式如下:

发送命令: 从4区寄存器地址0开始,连续读8个16位无符号二进制

地址:长1BYTE,内容从属性“设备地址”中获得 命令码:长1BYTE,固定为0x03 起始地址:长2BYTE,固定为0x0000 连续元件个数:长2BYTE,固定为0x0008 校验:长2BYTE,CRC校验 接收命令:

地址 :长1BYTE,内容不重要 命令码长1BYTE,内容预计为0x03 回收字节长度:长1BYTE,内容预计为0x10

数据体00:长2BYTE,内容由回收数据解析获得,解析方式为 16位无符号二进制数据 数据体01:长2BYTE,内容由回收数据解析获得,解析方式为16位无符号二进制数据 数据体02:长2BYTE,内容由回收数据解析获得,解析方式为16位无符号二进制数据 数据体03:长2BYTE,内容由回收数据解析获得,解析方式为16位无符号二进制数据 数据体03:长2BYTE,内容由回收数据解析获得,解析方式为16位无符号二进制数据

数据体05:长2BYTE,内容由回收数据解析获得,解析方式为16位无符号二进制数据 数据体06:长2BYTE,内容由回收数据解析获得,解析方式为16位无符号二进制数据 数据体07:长2BYTE,内容由回收数据解析获得,解析方式为16位无符号二进制数据 校验:长2BYTE,内容不重要

- 20 -

北京昆仑通态自动化软件科技有限公司

2.2 步骤2:新建工程进入向导

新建工程后进入新建工程模式,如图3-1-2-1所示。

图3-1-2-1

1. 选择“使用向导新建工程”,则进入向导界面,如图图3-1-2-2所示。 2. 选择“不使用向导新建工程,流程和原来一样,直接生成示例脚本。

图3-1-2-2

- 21 -

北京昆仑通态自动化软件科技有限公司

2.3 步骤3:配置驱动属性

图3-1-2-3

1. 添加属性,添加除“设备地址”和“通讯延时”以外的属性,当所添加属性的数据类型选择枚

举型时,属性范围处填写枚举量,并用“;”隔开,如图3-1-2-4所示。

2. 删除属性,对多余的属性进行删除,其中“设备地址”和“通讯延时”为默认属性,不允许删

除。

3. 设置属性,修改设置已添加的属性。

图3-1-2-4

- 22 -

北京昆仑通态自动化软件科技有限公司

2.4 步骤4:配置通道

图3-1-2-5

1. 添加通道,可进行批量添加。

2. 删除通道,对多余通道进行删除,可批量删除,其中“通讯状态”为默认通道,不允许删除。 3. 设置通道,修改设置已添加的通道,设置通道中不能修改通道个数。

- 23 -

北京昆仑通态自动化软件科技有限公司

2.5 步骤5:配置通讯帧

图3-1-2-6

5.1 添加收发通讯帧

根据协议分析知,通讯帧结构信息配置分别如图3-1-2-7所示。

图3-1-2-7

- 24 -

北京昆仑通态自动化软件科技有限公司

5.2 设置收发通讯帧

图3-1-2-8

对于HEX格式命令帧的数据体设置主要有以下几种情况:

(注释:对于HEX格式的命令帧,其各帧数据体的数据类型均为字节数据[HEX格式])

1. 无特别属性,如图3-1-2-9所示。

图3-1-2-9

2.数值不确定的数据体,配置“设备属性”中的某个属性获得其值,如图3-1-2-10所示。

- 25 -

北京昆仑通态自动化软件科技有限公司

图3-1-2-10

3. 解析属性数据,数据内容为不需要填写,由回收数据解析获得,如图3-1-2-11所示。

图3-1-2-11

4. 校验,如果命令中的数据都是确定的,那么可以直接计算出校验值,如图3-1-2-12所示。

- 26 -

北京昆仑通态自动化软件科技有限公司

图3-1-2-12

5. 预览功能,命令信息设置完之后,可点击“命令预览”查看命令格式,如图3-1-2-13所示。

图3-1-2-13

- 27 -

北京昆仑通态自动化软件科技有限公司

2.6 步骤6:配置预览

在此预览通道和解析数据的匹配关系,并检查配置是否正确,如果正确就可以,完成配置生成驱动,否则不完成配置生成代码。

图3-1-2-14

- 28 -

北京昆仑通态自动化软件科技有限公司

2.7 步骤7:完成配置

1.代码的生成与编译。

(1)配置都正确后,可以“完成配置”直接生成脚本代码,如图3-1-2-15所示。

图3-1-2-15

组建命令帧 发送命令帧并接收数据,对接收数据进行校验 对接收的数据进行解析,并设置通道值 (2)编译生成的代码。选择“调试”? “检查整个驱动”,若没有问题输出窗口会提示“设备编辑检查通过”,如图3-1-2-16所示。

- 29 -

图3-1-2-16

2. 配置“串口参数”。

(1)创建虚拟串口,如图3-1-2-17所示,串口COM2和COM3虚拟串口。

北京昆仑通态自动化软件科技有限公司

图3-1-2-19

图3-1-2-18

图3-1-2-17

(2)配置脚本驱动中的串口参数

选择“设置”? “串口父设备配置”,配置串口参数,如图3-1-2-18所示。

(3)设置Modbus串口转发工具mbslave.exe

A. 打开mbslave.exe,选择“Connection”? “Connect”进行设置,如图3-1-2-19所示。

- 30 -

北京昆仑通态自动化软件科技有限公司

图3-1-2-20

B. 选择“Setup”? “Slave Definition”进行设置,如图3-1-2-20所示。

C. 选择“Connection”? “Quick connect”运行,并设置各地址数据。

3. 进行调试。

图3-1-2-22

在脚本驱动中,选择“调试”? “定时通道采集”进行调试,如图3-1-2-22所示。

- 31 -

北京昆仑通态自动化软件科技有限公司

二. 不完全适用向导

1. 步骤1:协议分析

设备命令:模仿三菱Q系列串口协议,协议格式如下:

发送命令:从D寄存器地址0开始,连续读8个16位无符号二进制

帧头:长1个字符,固定为ENQ即0x05 帧识别号:长2个字符,固定为FB

本地站号:长2个字符,内容从设备属性中获得

上位站号(即设备地址):长2个字符,内容从设备属性中获得 命令码:长1个字符,固定为2 寄存器地址:长2个字符,固定为D* 起始地址:长6个字符,固定为000000 软元件个数:长4个字符,固定为0008 累加和校验:长2个字符,通过自动计算获得 接收命令:

帧头:长1个字符,内容不重要 帧识别号:长2个字符,内容不重要 本地站号:长2个字符,内容不重要 上位站号:长2个字符,内容不重要

数据体00~07:长4个字符,内容由回收数据解析获得,解析方式为 16位无符号二进制数据 帧尾:长1个字符,内容不重要 校验:长2个字符,内容不重要

分析:

由协议格式所知,脚本驱动向导无法生成此协议格式,但是此协议可以由脚本驱动实现,因此,我们

先通过脚本驱动向导生成框架,然后在生成的代码中修改即可。

- 32 -

北京昆仑通态自动化软件科技有限公司

2. 步骤2:根据向导生成模板

向导使用步骤在此不在介绍,主要说明需注意的几部分: 1. 配置属性

由协议知,本地站号也需要通过设备属性获得,因此设备属性添加“本地站号”,如图3-2-1所示。

图3-2-1

2. 配置通讯帧

A. 配置通讯帧结构信息,如图3-2-2所示。

图3-2-2

- 33 -

北京昆仑通态自动化软件科技有限公司

图3-2-3

注释:

1. 由于“本地站号”用向导无法生成,因此需要在代码中修改;

帧识别号是固定值,可在向导中添加(合在帧头中),也可在代码中修改。 2. 由于接收命令只需要各部分的数据长度,

因此:帧头为帧头+帧识别号;

地址为本地站号+设备地址

B. 设置收发通讯帧,如图3-2-3所示。

- 34 -

北京昆仑通态自动化软件科技有限公司

3. 步骤3:修改向导生成的代码

1. 根据向导生成的代码如下所示。

2. 根据步骤2所知,组帧部分代码需要修改,添加“本地站号”和“帧识别号”,修改完代码如下所示。

- 35 -

北京昆仑通态自动化软件科技有限公司

4. 步骤4:进行调试

调试过程与ASCII码协议的调试相同,此处不再介绍。

- 36 -

北京昆仑通态自动化软件科技有限公司 第四章 新增函数使用说明

一. 数据解析函数

1.!SvrGetByteFromByteArr(ByRef ByteArr, start, ByRef n, Flag)

函数意义:将字节数组ByteArr中从start位置开始的内容输出到变量n中,输出格式为1个字节整数,字节数组位置计数从1开始。

返 回 值:整型,判断输出是否正常。

实 A=1。

数:

ByteArr:传址型,字节型数组。 start:整型,输出的首位置,从1开始。 n:传址型,长整型。

Flag:长整型,解析方式[0:8位无符号;1:8位有符号;2:8位BCD码]。 0:正常

小于0:错误,具体意义如下:

-1:起始索引start小于1; -2:起始索引start大于数组上限; -3:字节数组长度不足; -4:n不是整型变量; -5:其他错误。

例: !SvrGetByteFromByteArr(BA, 2, A, 1),字节数组为:00 01 02 03 04 05 06 07 08 09 00,则

2.!SvrGetShortFromByteArr(ByRef ByteArr, start, ByRef n, Flag)

函数意义:将字节数组ByteArr中从start位置开始的内容输出到变量n中,输出的格式为2字节整型,字节数组位置计数从1开始。

返 回 值:整型,判断是输出是否正常:

0:正常;

小于0:错误,具体意义如下:

-1:启始索引start小于1; -2:启始索引start大于数组上限; -3:字节数组长度不足; -4:n 不是整型变量; -5:其他错误。

数:

ByteArr:传址型,字节型数组。 start:整型,输出的首位置,从1开始。 n:传址型,长整型。

Flag:长整型,解析方式[0:16位无符号;1:16位有符号;2:16位BCD码]。

实 A=513。

- 37 -

例:!SvrGetByteFromByteArr (BA, 2, A, 1),字节数组为:00 01 02 03 04 05 06 07 08 09 00 00,则

北京昆仑通态自动化软件科技有限公司

3.!SvrGetIntFromByteArr(ByRef ByteArr, start, ByRef n, Flag)

函数意义:将字节数组ByteArr中从start位置开始的内容输出到变量n中,输出的格式为4字节整型,字节数组位置计数从1开始。

返 回 值:整型,判断是输出是否正常:

0:正常;

小于0:错误,具体意义如下:

-1:启始索引start小于1; -2:启始索引start大于数组上限; -3:字节数组长度不足; -4:n 不是整型变量; -5:其他错误。

参 数:

ByteArr:传址型,字节型数组。 start:整型,输出的首位置,从1开始。 n:传址型,长整型。

Flag:长整型,解析方式[0:32位无符号;1:32位有符号;2:32位BCD码]。

实 例:!SvrGetByteFromByteArr (BA, 2, A, 1),字节数组为:00 01 02 03 04 05 06 07 08 09 00 00,则A=513。

4.!SvrGetSingleFromByteArr(ByRef ByteArr, start, ByRef x, Flag)

函数意义:将字节数组ByteArr中从start位置开始的内容输出到变量x中,输出的格式为4字节数值型,字节数组位置计数从1开始。

返 回 值:整型,判断是输出是否正常:

0:正常;

小于0:错误,具体意义如下:

-1:启始索引start小于1; -2:启始索引start大于数组上限; -3:字节数组长度不足; -4:n 不是浮点型变量; -5:其他错误。

参 数:

ByteArr:传址型,字节型数组。 start:整型,输出的首位置,从1开始。 n:传址型,长整型。

Flag:长整型,对应4种解码次序[0:“”;1:“”;2:“”;3:“”]。

实 例:!SvrGetByteFromByteArr (BA, 1, x, 3),字节数组为:00 00 08 40 04 05 06 07 08 09 00 00,则A=4.0

5.!SvrGetByteFromHexStr(str, ByRef n, Flag)

函数意义:获得将HEX表示的字符数据的内容输出到变量x中,输出的格式为1字节数值型,从头取

- 38 -

北京昆仑通态自动化软件科技有限公司

2个字符转换成一个字节HEX值

返 回 值:整型,判断是输出是否正常:

0:正常;

小于0:错误,具体意义如下:

-1:解析字符长度不足,至少长度为2字符 -2:解析字符长度一定为偶数个

-3:解析字符长度大于2个,只取左边2字符解析 -4:变量类型,不是整形 -5:其他错误

参 数:

str,字符数据。 n,传址型,长整型;

Flag, 长整型,解析方式[0:8位无符号;1:8位有符号;2:8位BCD码]

实 例:! SvrGetByteFromHexStr (str,n,0),str为:“0102030405060708” 则n = 1

6.!SvrGetShortFormHexStr(str, ByRef n, Flag)

函数意义:获得将HEX表示的字符数据的内容输出到变量x中,输出的格式为2字节数值型,从头取4个字符转换成2个字节短整型值

返 回 值:整型,判断是输出是否正常:

0:正常;

小于0:错误,具体意义如下:

-1:解析字符长度不足,至少长度为2字符 -2:解析字符长度一定为偶数个

-3:解析字符长度大于2个,只取左边2字符解析 -4:变量类型,不是整形 -5:其他错误

参 数:

str,字符数据。 n,传址型,长整型;

Flag, 长整型,解析方式[0:16位无符号;1:16位有符号;2:16位BCD码]

实 例:!SvrGetShortFromHexStr (str,n,0),str为:“0102030405060708” 则n = 513

7.!SvrGetIntFromHexStr(str, ByRef n, Flag)

函数意义:获得将HEX表示的字符数据的内容输出到变量x中,输出的格式为4字节数值型,从头取8个字符转换成4个字节整型值

返 回 值:整型,判断是输出是否正常:

0:正常;

小于0:错误,具体意义如下:

-1:解析字符长度不足,至少长度为2字符 -2:解析字符长度一定为偶数个

- 39 -

北京昆仑通态自动化软件科技有限公司

-3:解析字符长度大于2个,只取左边2字符解析 -4:变量类型,不是整形 -5:其他错误

参 数:

str,字符数据。 n,传址型,长整型;

Flag, 长整型,解析方式[0:32位无符号;1:32位有符号;2:32位BCD码]

实 例:! SvrGetIntFromHexStr (str,n,0),str为:“10200000030405060708” 则n = 513

8.!SvrGetSingleFromHexStr(str, ByRef x, Flag)

函数意义:获得将HEX表示的字符数据的内容输出到变量x中,输出的格式为4字节数值型,从头取8个字符转换成4个字节单精度浮点值

返 回 值:整型,判断是输出是否正常:

0:正常;

小于0:错误,具体意义如下:

-1:解析字符长度不足,至少长度为2字符 -2:解析字符长度一定为偶数个

-3:解析字符长度大于2个,只取左边2字符解析 -4:变量类型,不是浮点型变量 -5:其他错误

参 数:

str,字符数据。 x,传址型,数值型;

Flag, 长整型,对应4种解码次序[0:“”;1:“”;2:“”;3:“”]

实 例:! SvrGetSingleFromHexStr (str,x,3),str为:“000008400102030405060708” 则x = 4.0

二. 数据校验函数

1.!SvrByteArraySum(ByRef ByteArr, start, length)

函数意义:从数组中start索引开始,连续length个字节,按求和方式计算返回校验结果 返 回 值:整型,返回正确的校验值/判断是输出是否正常:

>=0:校验结果;

小于0:错误,具体意义如下:

-1:启始索引start小于1 -2:启始索引start大于数组上限 -3:校验数组长度小于等于零 -4:字节数组长度不足 -5:其他错误

参 数:

ByteArr,传址型,字节型数组。

start,长整型,检验数据的启始字节在数组中

- 40 -

北京昆仑通态自动化软件科技有限公司

length, 长整型,连续校验数据的个数

实 例:n = !SvrByteArraySum(ByteArr,1,4) ByteArr为:00 01 02 03 04 05 06 07 则n = 6

2.!SvrStrSum(str, Flag)

函数意义:

返 回 值:字符型,返回正确的校验值/判断是输出是否正常:

错误返回值:

-1:校验字符串长度为0

-2:校验的字符串长度必须为偶数

参 数:

str,字符型,需要校验数据

Flag,长整型,0:按2个字符形成1BYTE HEX值进行校验;

1:直接按ASCII字符值进行校验。

实 例:strRe = !SvrStrSum(str,0) str为:“0001020304050607”则strRe = “06”

3.!SvrByteArrayXOR(ByRef ByteArr, start, length)

函数意义:从数组中start索引开始,连续length个字节,按异或方式计算返回校验结果 返 回 值:整型,返回正确的校验值/判断是输出是否正常:

>=0:校验结果;

小于0:错误,具体意义如下: -1:启始索引start小于1 -2:启始索引start大于数组上限 -3:校验数组长度小于等于零 -4:字节数组长度不足 -5:其他错误

参 数:

ByteArr,传址型,字节型数组。

start,长整型,检验数据的启始字节在数组中 length, 长整型,连续校验数据的个数

实 例:n = !SvrByteArraySum(ByteArr,1,4) ByteArr为:00 01 02 03 04 05 06 07则n = 0

4.!SvrStrXOR(str, Flag)

函数意义:

返 回 值:字符型,返回正确的校验值/判断是输出是否正常:

错误返回值:

-1:校验字符串长度为0

-2:校验的字符串长度必须为偶数

参 数:

str,字符型,需要校验数据

Flag,长整型,0:按2个字符形成1BYTE HEX值进行校验;

1:直接按ASCII字符值进行校验

- 41 -

北京昆仑通态自动化软件科技有限公司

实 例:strRe = !SvrStrSum(str,0) str为:“0001020304050607”则strRe = “00”

5.!SvrStrModbusCRC(ByRef ByteArr, start, length)

函数意义: 从数组中start索引开始,连续length个字节,按异或方式计算返回校验结果 返 回 值:整型,返回正确的校验值/判断是输出是否正常:

>=0:校验结果;

小于0:错误,具体意义如下:

-1:启始索引start小于1 -2:启始索引start大于数组上限 -3:校验数组长度小于等于零 -4:字节数组长度不足 -5:其他错误

参 数:

ByteArr,传址型,字节型数组。

start,长整型,检验数据的启始字节在数组中 length, 长整型,连续校验数据的个数

实 例:n = ! SvrStrModbusLRC (ByteArr,1,4) ByteArr为:010300000008则n = 0x0c44

6.!SvrStrModbusLRC(str, start, length)

函数意义:

返 回 值:字符型,返回正确的校验值/判断是输出是否正常:

错误返回值:

-1:启始索引start小于1 -2:启始索引start大于数组上限 -3:校验数组长度小于等于零 -4:字节数组长度不足

参 数:

str,字符型,需要校验数据

start,长整型,检验数据的启始字节在数组中 length, 长整型,连续校验数据的个数

实 例:strRe = !SvrStrModbusLRC (str,2,12) str为:“:010300000004”则strRe = “F8”

7.!OpenLog()

函数意义:启动日志功能,PC上自动在C盘根目录生成LOG文件,TPC上自动在HARDDISK盘根目录生成LOG文件。

返 回 值:开关型,0:成功 -1失败 参 数:无 实 例:!OpenLog()

8.!CloseLog()

函数意义:关闭日志功能

返 回 值:开关型,0:成功 -1失败

- 42 -

北京昆仑通态自动化软件科技有限公司

参 数:无 实 例:!CloseLog()

三. 字节数组操作函数

1.!HStr2HByre(str, arByte)

函数意义: 将字符串转为字符数组 返 回 值:

>=0:转换字节个数

小于0:错误,具体意义如下:

-1:没有定义数组arByte -2:arByte不是数组类型 -3:str 必须为偶数个 -4:转换错误

参 数:

str,字符型,需要校验数据 arByte,经过转换后的字节数组

实 例:!HStr2Hbyte(str,arByte), str = ”123456” 则转换后 arByte值分别为 0x31 0x32 0x33 0x34 0x35 0x36

2.!HByte2HStr(arByte, str)

函数意义: 将字符串转为字符数组

返 回 值:字符型,返回正确的校验值/判断是输出是否正常:

正确:返回校验值 错误:返回空字符串

参 数:

str,字符型,需要校验数据 arByte,经过转换后的字节数组

实 例:!Hbyte2HStr(arByte,str), arByte值分别为 0x35 0x36 0x37 0x38 0x39 , 则转换后str = ”56789”

- 43 -

北京昆仑通态自动化软件科技有限公司 第五章 故障分析

一. 无法通讯

1. 检查串口父设备参数是否正确 2. 检查串口是否被其他程序占用 3. 检查通讯电缆是否正确连接

4. 检查设备,使用厂家测试程序确保通讯正常 5. 检查设备属性设置是否与实际设备属性一致 6. 适当延长“通讯等待时间” 7. 读取地址是否超出范围

二. 通讯有跳变

1. 检查父设备串口校验位是否正确 2. 适当延长“通讯等待时间” 3. 设备断电,重新上电,使初始化设备 4. 通讯电缆太长,做短距离测试 5. 现场干扰太大,避免周围环境干扰 6. 通讯信号变弱,使用有源RS232/485模块

7. 读取数据超出范围(添加某通道后,导致通讯状态变为非0)

三. 通讯正常,数据不正确

1. 新建工程测试驱动 2. 检测通道是否连接变量 3. 检测工程是否对数据进行处理

四. 检测驱动

出现上述错误都无法解决,则需要检测驱动是否正确。 1. 截获数据帧查看是否与协议相同 i. ii. iii. i. ii. i. ii. iii.

检查帧结构是否与命令一致

对于需要校验的协议,检查是否不参与校验的数据体参与了校验 对于不完全适用向导的协议,检查修改后的代码组帧是否正确 检查接收的数据长度是否正确 检查结束符是否正确

检查接收的数据长度是否与读写函数中的相同 检查结束符是否与读写函数中的相同 若自己额外添加校验函数,则检查是否正确

2. 检查读写串口函数是否正确

3. 检查校验部分是否正确

4. 检查数据解析部分是否正确

- 44 -

本文来源:https://www.bwwdw.com/article/7uco.html

Top