老铁们,大家好,相信还有很多朋友对于浙江大学自主研发的DCS多串口多协议通讯卡 XP248详细介绍和的相关问题不太懂,没关系,今天就由我来为大家分享分享浙江大学自主研发的DCS多串口多协议通讯卡 XP248详细介绍以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
XP248多串口多协议通讯卡(亦称网关卡是 DCS 系统与其它智能设备(如 PLC 、变频器、称 重仪表等互连的网间连接设备,是 SCnet Ⅱ网络节点之一,在 SCnet Ⅱ网络中处于与主控制卡同等 的地位。其功能是将用户智能系统的数据通过通讯的方式连入 DCS 系统中,通过 SCnet Ⅱ网络实现 数据在 DCS 系统中的共享。
1.1性能说明
¾XP248支持 Modbus 协议、 HostLink 协议以及自定义通讯协议。 支持 Modbus 协议的主机模 式和从机模式。通过 SCControl 功能块实现通讯组态。
¾XP248通讯卡支持 4路串口的并发工作, 每路串口支持 RS-232和 RS-485两种通讯方式。 4个串口可同时运行不同的协议。每一串口可以挂接的设备数量由运行的协议决定,但最多 不超过 32个。
¾XP248具备通道冗余功能及卡件冗余功能,四路串口中 COM0-COM1, COM2-COM3可以 配置为互为冗余的串行通道,并可配合卡件冗余功能实现多种冗余方案。
¾通讯波特率支持(1200~19200 bps ,数据位(5~8位,停止位(1~2位,校验方式:无 校验、偶校验、奇校验、空格校验、标志校验。
¾安装方式:按 I/O卡件安装方式安装于机柜的机笼中,占用两个 I/O槽位;
¾接线方式:接线端子;
¾输入电压:(5.0~5.8 V ;功耗:< 5W;
¾供电方式:机柜内 5V 供电。
¾SCnet Ⅱ通讯:100M 以太网通讯,冗余配置(SCnet Ⅱ A , SCnet Ⅱ B 。支持与操作员站、 服务器的数据交互以及与 Scnet Ⅱ网络其他控制站(IP 地址范围 2~62的站间数据交互。
1.2网络结构
图 1-1 XP248网络结构 2硬件使用说明
2.1结构简图
XP248卡件的外观如下图所示(尺寸:187mm ×145mm :
图 2-1 XP248底板结构图 ¾SW1:卡件地址拨码开关;
¾J3:掉电保护跳线。插上短路块,选择掉电保护功能。
¾BAT2:备用电池,型号 CR2032。
图 2-2 XP248背板结构图
2.2面板指示灯说明
如图 2-1所示 XP248卡件具有 7个 LED 指示灯,各指示灯说明如下表所示。
表 2-1 面板指示灯列表
LED 指示灯 常灭 闪烁 常亮
FAIL (红 故障指示 正常 单网故障 无组态;无监控; 网络交错或全断
RUN (绿 主 CPU 运行指示灯 主 CPU 运行故障 主 CPU 运行正常 —
WORK (绿 工作卡状态指示灯 此卡为备用卡 — 此卡为工作卡 STDBY (绿 备用卡状态指示灯 此卡为工作卡 — 此卡为备用卡 LED-A (绿 网络通讯指示灯
LED-B (绿 网络通讯指示灯
网络已断开 网络已连接 —
SLA VE (绿 通讯 CPU 运行指示灯 通讯 CPU 运行故障 通讯 CPU 运行正常 —
2.3网络连接
在 XP248的面板上有两个互为冗余的 SCnet Ⅱ网络端口,分别为 SCnet Ⅱ A 和 SCnet Ⅱ B : SCnet Ⅱ A :SCnet Ⅱ通讯端口 A ,与冗余网络 SCnet Ⅱ的 A#网络相连;
SCnet Ⅱ B :SCnet Ⅱ通讯端口 B ,与冗余网络 SCnet Ⅱ的 B#网络相连;
2.4地址跳线
如图 2-1所示, XP248底板下方 SW1为拨码地址开关,对应卡件在 SCnet Ⅱ网络中的地址。在 JX-300XP 系统中,本卡件拨码地址范围为 2~63, 即拨码 1和 2应设置为 OFF 状态, 拨码开关状态 与地址对应关系如下表所示。 冗余配置时, 互为冗余的两块卡件拨码地址应为 2n 和 2n+1(n 为 1~31的整数 ;单卡工作时拨码地址应为 2n 。
表 2-2拨码地址列表 拨码开关 SW1 地址
…… …… …… …… …… …… …… …… ……
图 2-3 拨码地址开关
2.5 掉电保护
使用掉电保护功能应确保如下几点:
1、 BAT2电池座内已安装纽扣电池,电池型号为 CR2032、 3V 、 220mAh 的锂电池。
2、 功能选择跳线 J3处已插上短路块。
2.5.1 电池装卸说明
电池安装
1、戴上防静电手腕;
2、取出 XP248卡,平放在桌面上;
3、将锂电池正极朝上放入到电池槽中;
4、用螺丝刀按压电池上方,使电池被电池槽中的卡口卡牢。
电池拆卸
1、戴上防静电手腕;
2、取出 XP248卡,平放在桌面上;
3、用螺丝刀朝外拨动电池槽左边的卡口簧片,直到锂电池从电池槽中弹起;
4、取出锂电池。
2.6 通讯方式跳线
XP248卡件每个通道都支持 RS-232及 RS-485通讯方式,如图 2-2所示,背板上有 4个通讯方 式跳线,可以对通讯方式进行选择。跳线方式与通讯方式对应关系如下图所示。
图 2-4 通讯方式选择跳线举例:第 1、 2路为 RS-232通讯方式,第 3、 4路为 RS-485通讯方式
2.7卡件安装
XP248卡件安装于机笼中,占用相邻的两个 I/O槽位(槽位号为 2n , 2n+1; n 为 0~7的整数 。 2.8冗余方式
XP248卡件配合 XP526端子板使用,支持通道冗余和卡件冗余,因此可以实现多种冗余方案。 以下列举其中三种冗余方式,具体接线方法见《 XP526使用手册》 。
单卡通道冗余:
XP248卡件的 COM0与 COM1通道、 COM2与 COM3通道可配置成互为冗余通道(配置方法 见“组态配置”一节 ,冗余方式如图 2-5所示。
图 2-5 单卡通道冗余
双卡冗余:
XP248卡件提供双卡冗余功能,在主控制卡组态界面将冗余功能选项勾选上即可,如图 2-6所 示。
图 2-6 设置双卡冗余功能
图 2-7 双卡冗余方式
双卡通道冗余
在如图 2-5所示的单卡通道冗余基础上,按如图 2-7所示方式配置双卡冗余,即可实现双卡通 道冗余。
3组态配置
XP248通过 SCControl 图形化编程软件进行通讯组态。 SCControl 软件中已经集成了通讯设置功 能块以及 Modbus RTU功能块、 HostLink 功能块等。利用 SCControl 软件提供的数值或逻辑运算功 能块, XP248可以根据需要将智能模块输出的数据实现复杂的转换。 (不支持 SCControl 中的 I/O功 能块以及 PID 控制算法功能块。
XP248组态主要由几个部分:
首先是 SCnet 组态。 由于 XP248与主控制卡都挂接在 SCnet Ⅱ网络上, 所以也占用 SCnet Ⅱ网络 的 IP 地址。 XP248的组态方法与主控制卡相同,设置 IP 地址(拨码 、控制周期默认为 500ms 。卡 件冗余方式由用户选择。
其次是自定义位号组态。从下挂设备读出或要写入下挂设备的数据都存放在自定义位号中, XP248通过这些自定义位号与控制系统的操作员站 /服务器进行数据交互。
最后是通讯组态。通讯组态也分为三个部分,一是对串口的通讯参数组态,包括波特率、校验 方式等;二是命令组态,包括具体的 Modbus 通讯协议,例如读线圈、写寄存器等;三是读数或置 数模块,将命令执行后的数据读到自定义位号或将自定义位号的数据写到命令的数据缓冲区。该部
分组态必须按照先组串口,然后组命令,最后组取数或置数模块的顺序进行。请注意,串口设置以 及通讯命令设置模块的输入引脚只在组态时有效, 在运行时不可改变, 具体请参考模块的相关说明。 另外,如果从智能设备取得的数据需要再进行处理,可以直接在 SCControl 软件中利用各种丰 富的功能函数进行再次计算。
为方便现场调试, SCControl 软件还提供了串口和命令诊断函数进行通讯诊断, 通过这些功能块 可以在 SCControl 软件的调试环境中,获取串口的收、发次数,命令的收、发次数,命令的通讯质 量码等信息。
以下两节为 SCControl 软件内置的 XP248功能块说明以及文中可能涉及的名词解释。
3.1名词解释
¾AltTim
命令间隔时间, 串口设置模块中包含该参数, 表示两条命令之间需要插入的等待时间。 某些 PLC 或智能设备不允许在执行完一条命令后紧接着执行下一条命令,需要等待一段时间后才能响应。兼 顾一般情况,可以将该参数设置为 10ms 。设置时间过长将使得命令执行周期加大。
¾Cycle
命令执行周期,命令置模块中包含该参数,表示该命令是否被周期执行以及执行周期为多长。 只有周期地执行通讯命令,才能将智能设备中的数据读入到 XP248卡。 Cycle 的单位是 ms 。
读智能设备数据命令。 XP248卡按照设置的 Cycle 时间周期性地执行命令,当 Cycle 等于 0时, 表示该命令不是周期命令 ,只在组态启动时执行一次。所以一般情况下,该值可以设置为与 XP248卡的控制周期相同。对于某些采样时间没有严格要求的数据命令,放大 Cycle 时间,可以在通讯量 比较大的场合下,提高其他命令的执行速度。
写读智能设备数据命令。有两种触发方式:一是数据有变化才写(更新写 ,二是定时写(即周 期写 。将 Cycle 设置为 0则表示有变化才写;将 Cycle 设置为定时时间则表示定时写方式,但当发 现需要下写的数据有更新时, XP248卡仍会立刻执行该条写命令; XP248卡启动时,自动地认为数 据没有变化,避免在启动时将不需要的数据写到智能设备中。所以一般情况下,建议配置为更新写, 即设置 Cycle 为 0。
¾AckTim
命令超时时间,单位 ms 。设置为 0时, XP248卡内部自动调整。 XP248卡发送命令给智能设备 后,某些智能设备并不会立刻回应,而需要等待一定时间后才回应。 XP248卡发出命令后,会启动 一个超时定时器, 定时时间为 AckTim ,当规定时间到达仍没有收到智能设备的响应, 则认为通讯超 时,退出本次通讯,本次通讯错误。当用户将 AckTim 设置为 0时,则 XP248卡会在(0~200 ms 内自动调整。当用户将 AckTim 设置为非 0时,按用户实际设置的数据设置从机的应答超时时间。 一般情况下,可以设置为 0,让 XP248卡自动修正(为了保证不错过返回的数据,可以把 AckTim 数值设置得大一些 。
3.2SCControl 内置的 XP248功能块说明
3.2.1GW_SETCOM功能块
功能块 :GW_SETCOM
功能 :串口通讯参数设置模块
输入 :
ComId: BYTE (串口号 0~3
Baud: DWORD (波特率
DataBit: BYTE (数据位 5, 6, 7, 8
StopBit:
BYTE
(停止位 1, 2
Verify: BYTE (0:无校验; 1:偶校验; 2:奇校验; 3:SPACE 空格; 4:MARK 标志
AltTim: WORD (两条命令之间的间隔时间,单位 ms ,当该串口用于从机模式时, 该值应该置为 0。
Duplex: BOOL (OFF :非冗余通道 ON:冗余通道
注意 :功能块引脚输入在运行时不能改变。 (奇校验和偶校验位跟在一个字节之后,说明一个字 节信息的特性;具体传输时,先从低到高位传信息字节,再传校验位
3.2.2GW_MODBUS_RTU功能块
功能块 :
GW_MODBUS_RTU
功能 :MODBUS_RTU主机模块
输入 :
CmdId: BYTE (命令号 0~255, 要求每条命令不能重复。通道冗余情况下,占连续两 个命令号,组态时只组偶数命令号
ComId: BYTE (串口号 0~3
Cycle: WORD (执行周期,单位 ms
AckTim: WORD (命令最大的超时时间,单位 ms ,一般取 200ms
Slave: BYTE (Modbus 从机地址
Func: BYTE (功能号,支持 1, 2, 3, 4, 5, 6, 15, 16号命令 Modbus 的命令
Start: WORD
(数据起始编号 1~65535
Num: WORD
(该命令操作的寄存器或线圈等的个数, Modbus 协议对位变量(线 圈或输入状态 ,一次最多可以存取 2040个;对 16位寄存器,一次最多可以存取 127个。具体应用 的实际限制参见 5.9节
注意 :功能块引脚输入在运行时不能改变。每一条命令的 Comdld 都对应一个缓存区,由此命 令发出或收到的数据必然会在此缓存区内保留。串口作为主设备,其下挂设备的设备号就是 Slave 值。
3.2.3GW_MODBUS_SLAVE 功能块
功能块 :GW_MODBUS_SLA
VE
功能 :MODBUS_SLAVE 从机模块
输入 :
CmdId: BYTE (命令号 0~255,要求每条命令不能重复。通道冗余情况下,占连续 两个命令号,组态时只组偶数命令号
ComId: BYTE (串口号 0~3
Add: BYTE
(本机在串口总线的从机地址号
注意 :功能块引脚输入在运行时不能改变。 Add 值就是此串口作为从设备的设备号,从机模式 的 Add 要与主机方的 Slave 值一致。
3.2.4GW_HOSTLINK功能块
功能块 :
GW_HOSTLINK
功能 :欧姆龙 PLC 的 HOSTLINK 命令模块(主机模式
输入参数:
CmdId: BYTE (命令号 0~255,要求每条命令不能重复。通道冗余情况下,占连续 两个命令号,组态时只组偶数命令号
ComId: BYTE (串口号 0~3
Cycle:
WORD
(执行周期,单位 ms ,等于 0时为非周期命令,只执行一次 AckTim: WORD (命令最大的超时时间,单位 ms ,一般取 200ms
WoR: BYTE
(1:从 PLC 中读数据; 128:向 PLC 写数据
Slave: BYTE (HOSTLINK 从机地址
DataType: BYTE(存取的 PLC 数据类型,相当于功能号
测试命令:0 可读, WORD (0:不通过; 1:通过 IR 寄存器:1 可读可写, WORD
HR 寄存器:2 可读可写, WORD
AR 寄存器:3 可读可写, WORD
LR 寄存器:4 可读可写, WORD
TC 状态:5 可读可写, BOOL , (ON=0xFF, OFF=0x00 DM 数据:6 可读可写, WORD
ERROR 错误信息: 7 可读, WORD
STATUS 信息:8 可读可写, WORD
TC 数据:9 可读可写, WORD
取消强迫命令:10 需要用 ST_STARTCMD手动触发执行
设置强迫命令:128 + (IR 或 HR、 AR 、 LR 只写,
BOOL , ON=0xFF, OFF=0x00
StartWord: WORD(起始 WORD 号
BitOfWord: BYTE (WORD 中位标号 0~15, 用于 Forced set/reste 命令
WordNum: BYTE(需要操作的 Word 数量
HOSTLINK 协议支持对 IR/HR/AR/LR寄存器的读写;支持对 TC 的状态读写和计数值读写;支 持强迫和取消强迫命令。 DataType 引脚设置需要读写的数据类型, WoR 引脚设置为 1表示读, WoR 设置为 128 表示写,例如,当 DataType 为 1, WoR 为 1表示读 IR 寄存器。
对于 FORCED CANCEL取消强迫命令,需要用手动方式触发,即组态好一条命令后,用 GW_STARTCMD(命令号函数手动触发,上位机可以用变量控制该函数是否执行。
注意 :功能块引脚输入在运行时不能改变。 hostlink 功能块传输的数据为 ASCII 码, 不是十六进 制数。
3.2.5GW_GETCOMINFO功能块
功能块 :
GW_GETCOMINFO
功能 :获取串口诊断数据
输入 :
ComId: BYTE (串口号 0~3
输出 :
SndCnt: WORD (发送次数
RcvCnt: WORD(接收次数
SndBuf: ULONG (发送缓冲区地址
RcvBuf: ULONG (接收缓冲区地址
3.2.6GW_GETCMDINFO功能块
功能块 :
GW_GETCMDINFO
功能 :获取命令诊断数据
输入 :
CmdId: BYTE (命令号 0~255
输出 :
DataQuality: BYTE
(数据质量码 1:正常 0:异常
FailCnt:
BYTE
(通讯连续失败次数
NormalCnt:
BYTE
(通讯连续成功次数
SndCnt:
BYTE
(发送次数
RcvCnt: BYTE
(接收次数
当连续通讯三次都出现故障的情况(FailCnt>=3 ,数据质量码 DataQuality 置 0,表示数据失效 (当前数据是三次通讯前的某次正确数据 ,当连续三次通讯正常(NormalCnt>=3 ,数据质量码 DataQuality 置 1,表示数据有效。
特别地,当该串口配置为冗余串口时,即便此时该命令在这个串口执行错误(FailCnt>=3 ,只 要该命令在另一个冗余串口能正常通讯,则数据质量码仍置 1,表示当前该命令的数据有效。 3.2.7GW_GETBYTE功能块
功能块 :
GW_GETBYTE
功能 :从命令的数据缓冲区读指定数据
输入 :
CmdId: BYTE (命令号 0~255
Serial: WORD (欲读取数据在命令的数据块中的 BYTE 类型顺序(从 0开始 输出 :
Data: BYTE (读出数据
3.2.8GW_GETBOOL功能块
功能块:
GW_GETBOOL
功能 :从命令的数据缓冲区读指定数据
输入 :
CmdId: BYTE (命令号 0~255
Serial: WORD (欲读取数据在命令的数据块中的 BOOL 类型顺序(从 0开始 输出 :
Data: BOOL (读出数据
3.2.9GW_GETUINT功能块
功能块 :
GW_GETUINT
功能 :从命令的数据缓冲区读指定数据
输入 :
CmdId: BYTE (命令号 0~255
Serial: WORD (欲读取数据在命令的数据块中的 UINT 类型顺序(从 0开始 输出 :
Data: UINT (读出数据
3.2.10GW_GETULONG功能块
功能块 :
GW_GETULONG
功能 :从命令的数据缓冲区读指定数据
输入 :
CmdId: BYTE (命令号 0~255
Serial: WORD (欲读取数据在命令的数据块中的 ULONG 类型顺序(从 0开始 输出 :
Data: ULONG (读出数据
3.2.11GW_GETFLOAT功能块
功能块 :
GW_GETFLOAT
功能 :从命令的数据缓冲区读指定数据
输入 :
CmdId: BYTE (命令号 0~255
Serial: WORD (欲读取数据在命令的数据块中的 FLOAT 类型顺序(从 0开始 输出 :
Data: FLOAT (读出数据
3.2.12GW_GETMORE功能块
功能块 :
GW_GETMORE
功能 :将命令数据缓冲区中一批数据连续写到自定义变量区域,方便操作。
输入 :
CmdId: BYTE(命令号
Serial: WORD(数据在命令数据缓冲区块中的顺序(从 0开始
DataType: BYTE (自定义变量类型:1:自定义 1字节 2:自定义 2字节
4:自定义 4字节 8:自定义 8字节
VarId: UNIT(自定义变量 ID 号
Num: UNIT(连续存取个数
输出 :无
3.2.13GW_SETBYTE功能块
功能块 :GW_SETBYTE
功能 :设置命令的数据缓冲区中指定数据
输入 :
CmdId: BYTE (命令号 0~255
Serial: WORD (欲设置数据在命令的数据块中的字节类型顺序(从 0开始 Data: BYTE (欲设置数据
输出 :无
3.2.14GW_SETBOOL功能块
功能块 :
GW_SETBOOL
功能 :设置命令的数据缓冲区中指定数据
输入 :
CmdId: BYTE (命令号 0~255
Serial: WORD (欲设置数据在命令的数据块中的 BOOL 类型顺序(从 0开始 Data: BOOL (欲设置数据
输出 :无
3.2.15GW_SETUINT功能块
功能块 :
GW_SETUINT
功能 :设置命令的数据缓冲区中指定数据
输入 :
CmdId: BYTE (命令号 0~255
Serial: WORD (欲设置数据在命令的数据块中的 UINT 类型顺序(从 0开始 Data: UINT (欲设置数据
输出 :无
3.2.16GW_SETULONG功能块
功能块 :
GW_SETULONG
功能 :设置命令的数据缓冲区中指定数据
输入 :
CmdId: BYTE (命令号 0~255
Serial: WORD (欲设置数据在命令的数据块中的 ULONG 类型顺序(从 0开始 Data: ULONG (欲设置数据
输出 :无
3.2.17GW_SETFLOAT功能块
功能块 :
GW_SETFLOAT
功能 :设置命令的数据缓冲区中指定数据
输入 :
CmdId: BYTE (命令号 0~255
Serial: WORD (欲设置数据在命令的数据块中的 FLOAT 类型顺序(从 0开始 Data: FLOAT (欲设置数据
输出 :无
3.2.18GW_SETMORE功能块
功能块 :
GW_SETMORE
功能 :将自定义变量区域中一批数据写到命令数据缓冲区
输入 :
CmdId: BYTE(命令号
Serial: WORD(数据在命令数据缓冲区块中的顺序(从 0开始
DataType: BYTE (自定义变量类型:1:自定义 1字节 2:自定义 2字节
4:自定义 4字节 8:自定义 8字节
VarId: UNIT(自定义变量 ID 号
Num: UNIT(连续存取个数
输出 :无
3.2.19GW_SNDMSG功能块
功能块 :
GW_SNDMSG
功能 :串口发送命令。将 SndBuf 指定的发送缓冲区地址和 SndLen 长度数据发送出去。
输入 :
CmdId: BYTE (命令号 0~255
ComId: BYTE (串口号 0~3
SndBuf:
ULONG(发送缓冲区指针,一般由 GW_DEFSNDBUF(UINT Size定义函 数定义
SndLen: UINT
(发送长度
3.2.20GW_RCVMSG功能块
功能块 :
GW_RCVMSG
功能 :串口接收命令。将收到的一帧数据存放到 RcvBuf 指定的缓冲区地址。
输入 :
CmdId: BYTE (命令号 0~255
ComId: BYTE (串口号 0~3
RcvBuf: ULONG
(接收缓冲区指针 , 一般由 GW_DEFRCVBUF(UINT Size定义函 数定义
注意 :功能块引脚输入在运行时不能改变。
3.2.21GW_SNDRCV功能块
功能块 :GW_SNDRCV
功能 :实现串口的发送和接收功能。 首先将 SndBuf 缓冲区的数据发送出去后, 然后将接收到的 数据存放到 RcvBuf 缓冲区。
输入 :
CmdId: BYTE (命令号 0~255,要求每条命令不能重复。通道冗余情况下,占连续 两个命令号,组态时只组偶数命令号
ComId: BYTE (串口号 0~3
Cycle:
UINT
(执行周期,单位 ms ,等于 0时为非周期命令,只执行一次
AckTim: UINT (命令最大的超时时间,单位 ms ,一般取 100ms
SndBuf: ULONG (发送缓冲区指针
SndLen: UINT (发送长度
RcvBuf: ULONG
(接收缓冲区指针
注意 :功能块引脚输入在运行时不能改变。
4自定义协议编程
XP248提供标准的通讯协议,例如 Modbus RTU、 HostLink 等,基本可以支持大部分的通讯应 用, 但是对于某些采用了非标准通讯协议的特殊设备, 则需要利用 SCControl 软件提供的 ST 语言对 XP248进行通讯协议编程,以适应设备的通讯协议。
XP248提供了 GW_SNDMSG( 、 GW_RCVMSG( 、 GW_SNDRCV(三个功能块实现串 口的发送、接收、发送 /接收功能。这些通讯功能块的基本作用是将指定的数据串发送出去,并接收 来自智能设备的返回数据串。数据串的具体内容由用户在 ST 语言中进行读写。
发送和接收的数据串需要存储在数组中,由于 XP248的通讯组态是在 SCControl 软件中进行, 而 SCControl 功能块的引脚不支持数组作为参数输入。 所以 XP248提供了 GW_DEFSNDBUF(Size 、 GW_DEFRCVBUF(Size 两个函数为每条命令定义发送和接收缓冲区,缓冲区大小由 Size 决定。 缓冲区一旦创建后将不能被修改,除非再次下载组态。两个函数返回一个 ULONG 类型的数据用来 指向创建的缓冲区,称为缓冲区指针。
XP248提供 GW_WRITEBUF(MsgBuf, Serial, Char和 GW_READBUF(MsgBuf, Serial两个 函数用来对创建的缓冲区进行读或写操作。其中, MsgBuf 为缓冲区的指针, Serial 是缓冲区中的数 据位置,对缓冲区的读写操作不会越过缓冲区边界。
GW_SNDMSG( 、 GW_RCVMSG(和 GW_SNDRCV(三个功能块其实与 Modbus 功能 块类似,只是定义了一条通讯任务,具体的通讯操作并不在这些函数中实现,而是由 XP248卡内部 的调度程序完成。
XP248提 供 了 GW_GETRCVLEN(CmdId 函 数 用 来 获 取 接 收 到 的 数 据 长 度 ; GW_GETRCVMSG(CmdId, MsgBuf函数将接收到的数据拷贝到 MsgBuf 指向的缓冲区。
此外, XP248提供一些辅助函数,例如:GW_CRC16(MsgBuf, Len对数据串进行 CRC 检验; GW_STARTCMD(CmdId 函数强制执行一条命令; GW_FIRSTRUN(判断 XP248卡当前是否是 启动组态后的第一次运行。
自定义协议目前暂不支持冗余。
下面是以上函数的详细说明:
/*********************************************************************
功能块: GW_DEFSNDBUF
描述:定义命令的发送缓冲区
输入:
Size: UINT (缓冲区大小,最大不超过 1024
输出:ULONG (缓冲区指针
**********************************************************************/
ULONG GW_DEFSNDBUF( UINT Size
/*********************************************************************
功能块:GW_DEFRCVBUF
描述:定义命令的接收缓冲区
输入:
Size: UINT (缓冲区大小,最大不超过 1024
输出:ULONG (缓冲区指针
**********************************************************************/
ULONG GW_DEFRCVBUF( UINT Size
/*********************************************************************
功能块:GW_WRITEBUF
描述:向缓冲区写入一个元素
输入:
MsgBuf:
ULONG
(缓冲区指针
Serial: UINT (写入位置
Char: BYTE (写入数据
输出:
无 , (注:如果 Serial 越限,则放弃操作
**********************************************************************/
void GW_WRITEBUF( ULONG MsgBuf, UINT Serial, BYTE Char
/********************************************************************* 功能块: GW_READBUF
描述:从缓冲区读入一个元素
输入:
MsgBuf:
ULONG
(缓冲区指针
Serial: UINT
(写入位置
输出:
BYTE (返回数组内指定位置数据,如果 Serial 越限,则返回 0 **********************************************************************/ BYTE GW_READBUF(ULONG MsgBuf, UINT Serial
/********************************************************************* 功能块:GW_ISCMDFINSHED
功能:判断命令是否执行完毕
输入:
CmdId:
BYTE
(命令号 0~255
输出:BYTE
0:正在执行
1:正常结束
2:异常结束
**********************************************************************/ BYTE GW_ISCMDFINSHED( BYTE CmdId
/********************************************************************* 功能块: GW_GETRCVLEN
功能:取得接收长度
输入:
CmdId: BYTE (命令号 0~255
输出: UINT(返回接收到信息的长度
**********************************************************************/ UINT GW_GETRCVLEN(BYTE CmdId
/*********************************************************************
功能块: GW_GETRCVMSG
描述:拷贝接收到的数据到指定缓冲区
输入:
CmdId: BYTE (命令号 0~255
输出:ULONG (接收数据区指针
**********************************************************************/ ULONG GW_GETRCVMSG( BYTE CmdId
/******************************************************************** 功能块:GW_CRC16
描述:对缓冲区中指定长度元素进行 CRC 检验
输入:
MsgBuf:
ULONG
(缓冲区指针
Len: WORD (指定长度
输出:WORD (16位的 CRC 校验
*********************************************************************/ WORD GW_CRC16(ULONG MsgBuf, WORD Len
/********************************************************************* 功能块:GW_STARTCMD
功能:手动启动命令执行
输入:
CmdId: BYTE (命令号 0~255
输出:无
**********************************************************************/ void GW_STARTCMD(BYTE CmdId
/******************************************************************** 功能块:GW_FIRSTRUN
描述:判断是否首次运行
输入:
Any
: BYTE 任何数
输出:BYTE (0:非首次运行, 1:首次运行
*********************************************************************/ BYTE GW_FIRSTRUN(BYTE Any
5工程应用说明举例
5.1XP248与 SCnet Ⅱ网络接口
XP248通讯卡向上挂接在 SCnet Ⅱ网络上,占用控制站地址,可以用 SCKey 组态软件对通讯卡 进行组态和下载,操作方法和内部机制与 JX-300XP 系列主控制卡相同,支持两块 XP248的冗余配 置。网络地址的设置同主控制卡,拨号范围 2~63,但地址不能与系统中的主控制卡冲突。
5.2通信协议
XP248卡支持标准的 Modbus RTU协议(主机或从机模式以及 HostLink 协议(主机模式 , 其他的通讯协议可以用自定义协议解决。
5.3数据采集周期
XP248通信周期(智能设备的循环采样的周期与它所连接的智能设备数量、通信波特率、通 信数据量、智能设备的特性、通信协议等都密切相关。其数据采集周期最短为 2ms 。
5.4命令执行时间以及 Cycle 设置说明
一般情况下,可以将命令的 Cycle 设置为与 XP248组态时的控制周期一致。确定控制周期的依 据主要是通讯量以及通讯速率,以下进行简单的说明。
一条命令的执行时间 Tcmd = T1(命令发送时间 + T2(智能设备响应时间 + T3(智能设 备数据回送时间 。
T1:以 9600bps , 1位停止位, 1位起始位,数据位 8位为例,收发 1个字节的时间约为 1ms 。 Modbus 命令的帧头根据不同的命令具有不同的长度,但一般可以计算为 6个字节,再加上 CRC检 验,共 8个字节。因此,命令发送时间至少为 8ms 。
T2:智能设备的响应时间, 表示自命令发出后,智能设备开始发送回应数据的时间。不同的设 备有不同的相应时间,一般取 50ms 计算。
T3:智能设备数据回送时间。回应的数据帧长度也按 8个字节计算。 Modbus 的线圈占 1位, 8个 bit 合成一个字节,超过部分也占用 1个字节; Modbus 的寄存器占 2个字节。对线圈、状态等按 Bit 操作的命令,占用时间=8+(n/8+1 (ms ,其中 n 为线圈或状态的个数。寄存器由于占 2个字 节, 所以命令占用时间=8+ 2*n (ms , 其中 n 为寄存器个数。 注意, 以上估计均以波特率为 9600bps 计算。
XP248有 4路串口, 每路串口都可以接若干设备, 对一个设备也可以有多条命令进行操作。 XP248的 4路串口可以同时工作,但同一路串口下命令必须逐条执行。因此,对一路串口来说,所有命令 都执行一遍的时间为:
Tc(所有命令执行时间 = Tcmd1 + Tcmd2+….+ Tcmdn + n*Talt
其中, Tcmd1为命令 1的执行时间, Tcmdn 为第 n 条命令的执行时间, Talt 是设置的两条命令 间隔时间 AltTim 。 Tc 则是该串口所有命令执行一遍的最小时间。
因此,设置命令的执行周期 Cycle 时,必须大于以上计算的 Tc 。如果设置的 Cycle 时间小于实
际运行时间 Tc , 那么, XP248卡将以最短的 Tc 时间运行,每条命令的周期则被自动拉长,但所有 通讯仍会被执行且运行正常,只不过每条命令的实际周期执行时间要比设置的大一些。因此,虽然 Cycle 设置过小不会引起 XP248卡工作异常, 但是此时的 Cycle 已经失真, 故设置 Cycle 时需要考虑 命令的执行时间。
当 Cycle 设置为 0时,命令不是周期命令,不会被周期执行。如果是读命令,则只在启动组态 后执行一次;如果是写命令,则需要在数据有变化后才触发命令执行。
5.5单块 XP248可连接设备数量
XP248在 RS-485方式下,每个串口最多可以驱动 32台设备。但实际连入设备时,还需考虑数 据通讯量和数据刷新时间(命令执行周期 ,设置合适的命令周期,如果实际的命令周期不能满足需 要,则需要减少挂接的设备,或将设备移到其他串口。
因此,与多台智能设备相连时,每路串口配置的智能设备数量受以下两方面影响:(1通讯数 据量:数据量越大, 所带的智能设备越少。 (2 数据刷新时间:数据刷新时间即命令的执行周期 Cycle , 要求的刷新时间越短,在其它条件相同的情况下所带的智能设备数量就会越少。
5.6使用 Modbus 进行通讯的组态示例
XP248的组态基本上分为三个步骤,首先是用 GW_SETCOM功能块对所有使用串口进行组态, 然后组态通讯命令,最后用取数模块(如 GW_GETBOOL或置数模块(如 GW_SETBOOL将自 定义位号与命令关联。
对于命令较多的组态,可以将一个串口所有组态(包括串口参数组态、命令组态安排在一个 FBD 段落中,每个串口一个段落,增强可读性。下面是一个具体的例子。
COM0组态为不冗余方式,波特率 9600bps , 1位停止位, 8位数据位,无检验。
串口 COM0下的 0号命令,读 1#PLC中从 00001开始的 16个触点状态,并将 00003号触点状 态写到自定义变量 BOOL1中。 所有命令的 AckTim 响应超时时间设为 0, 表示由 XP248卡自动设置。 2号命令则读 10001号线圈到自定义 1字节位号 BOOL2,由于 Cycle 设置为 0,故只在组态启 动后运行一次。 4号命令将 BOOL3写到 PLC 的 10001号线圈, 由于 Cycle 设置为 0, 故只有在 BOOL3变化后才将数据写到 PLC 。
图 5-1使用 Modbus 进行通讯的组态示例
5.7运行调试
组态经过编译下载后,可以利用 SCControl 软件的调试功能进行在线调试。工程组态中,对 0号命令(CmdId=0利用 GW_GETCMDINFO功能块进行了诊断。调试变量画面显示了调试数据, 其中 BYTE6是诊断命令的命令号, BYTE1是该命令的数据质量码, 0表示通讯故障数据失效, 1表 示通讯正常。 BYTE2是通讯连续错误次数, BYTE3是通讯连续正常次数, BYTE4、 BYTE5分别表 示该命令发送了几次,收到了几次回应。
通过以上数据的实时变化,可以判断通讯的情况。如果 SndCnt 发送次数在不断累加,则说明该 命令被不断执行, 如果此时 RcvCnt 没有变化, 说明命令发出后没有收到回应。 如果 RcvCnt 和 FailCnt 不断累加则说明虽然能收到数据,但收到的是错误的回应数据或命令不能被正常执行,此时,需要 检查组态是否正确。当 NormalCnt 开始累加到 3次以后,表明已经连续 3次通讯正常,此时的数据 质量码 DataQuality 变为 1,表示数据有效。
实际应用时, GW_GETCOMINFO 的引脚 ComId 和 GW_GETCMDINFO的引脚 CmdId 可以用 一个自定义变量代替,当在线调试时,可以修改变量的值使之指向不同的串口或命令,方便各串口 或命令的调试,整个项目只需要各用一个 GW_GETCOMINFO 和 GW_GETCMDINFO功能块。 需要获取命令的质量码时可以用 GW_GETCMDINFO的 DataQuality 引脚获取, 可以将数据和质 量码通过 SCnet Ⅱ网络传播到网络其他节点,用于其他高级应用。
5.8编写自定义协议
以下是用 ST 语言编写程序的方法实现 Modbus 协议中的读线寄存器命令。
编写自定义协议,一般分为两步:
第一步:编写 ST 段落,该段落先用 GW_DEFSNDBUF和 GW_DEFRCVBUF函数定义发送和 接收缓冲区(由于缓冲区大小一旦定义完后不能被改变,所以缓冲区应该大小合适,既要适合最大 通讯长度又要避免不必要的浪费 。缓冲区定义完后,可以用 GW_WRITEBUF函数写入需要发送的 命令数据,利用 GW_CRC函数对输入的数据进行 CRC 检验,并把校验后的数据写到发送数据的末 尾。
将该 ST 段落的输出管脚 (发送缓冲区指针、 接收缓冲区指针、 发送长度 连接到 GW_SNDRCV功能块的输入引脚。
第二步:编写 ST 段落,用 GW_GETRCVLEN函数检测串口是否有接收到数据,如果有,则 用 GW_GETRCVMSG函数将接收到的数据拷贝到接收数据缓冲区 RcvBuf 。然后对接收缓冲区中的 数据进行解析。 此处是先用 GW_CRC功能块进行校验, 如果校验正确, 则逐个读出缓冲区数据并作 为模块的输出。该段落的输出是一个 2字节模拟量。
图 5-2自定义协议的编写示例
以下是 ST 段落 GW_CMD1_SETMSG的代码:
XP248(V3.0)使用手册 先按照 Modbus 的数据结构,安排每个字节的内容。 进行 CRC 校验,再把数据发到缓冲区。 Modbus slave 是将计算机模拟成 PLC,按照 Modbus 协议的格式解析数据。此模块中,模仿它 的格式,替代 Modbus_RTU 模块。 以下是 ST 段落 ST_CMD1_GETMSG 的代码: 26
XP248(V3.0)使用手册 读出缓冲区的数据,进行 CRC 校验。 若正确,则输出值 OUT1。 若没有这个模块,不影响发送和接受数据 自定义协议是针对非标准协议而言,是设备方遵守的特定协议。我们是根据其协议格式组模块, 即第几个字节写什么,具体“什么”的含义由设备方所遵守的协议制定。 设备对数据进行解析,用自身所带的协议的格式,而不管数据的内容。 5.9 应用注意事项 在使用功能块 GW_MODBUS_RTU 时 Num 的最大值如下表所示: 命令号 最大值(个) 1 255 2 255 3 127 4 127 5 1 6 1 15 255 16 123 在使用功能块 GW_MODBUS_SLAVE 时,本卡件对主机模块协议能响应的读取数据的最大 值如下表所示: 27
用户评论
这款浙大中控 DCS 多串口多协议通讯卡 XP248 感觉很实用!我最近一直在找寻一款可以支持多种协议的通讯卡,这下不用再纠结了。支持Modbus、PROFIBUS 等常用协议真是太棒了!
有10位网友表示赞同!
买了一块 XP248 来试试,用在自动化控制系统中还不错。连接稳定,数据传输速度也比较快。不过有些设置参数还是有点复杂,需要稍微花点时间调试
有11位网友表示赞同!
终于找到能解决我工程需求的通讯卡!这个XP248支持多串口和多种协议,可以同时连接数台设备真是太方便了!省去很多麻烦
有20位网友表示赞同!
这款浙大中控DCS 多串口多协议通讯卡 XP248 价格还是比较实惠的,性能也很稳定。对于我这种经常需要调试各种设备的小团队来说性价比很高!
有6位网友表示赞同!
买了XP248后简直感叹浙江大学搞得真好!功能丰富,配置多样,而且手册也写得很清晰易懂,非常适合像我这种硬件小白。
有14位网友表示赞同!
用这款 XP248 来连接PLC的时候出现了一些连接问题。不知道是不是驱动的问题,还是要查阅官方文档看看有没有解决方案。
有10位网友表示赞同!
浙大中控这个品牌质量很不错,之前用的别的型号也很满意。这次买了XP248 期待它能继续给我带来高效的通讯体验!
有9位网友表示赞同!
在官网上看介绍说支持多种协议,我需要PROFIBUS 和Modbus 都是必要的协议,希望实际使用时也能正常发挥作用!
有10位网友表示赞同!
这款XP248可以接多种串口,对我来说太完美了!以前总是因为设备数量多而导致接口不够使用。现在终于不用担心这个烦恼了!
有19位网友表示赞同!
对于工程项目开发来说,一个稳定可靠的通讯卡至关重要。希望这个 XP248 能符合我的需求,帮助我更快更便捷地完成开发工作。
有12位网友表示赞同!
之前一直用的其他品牌的通讯卡,性能不太理想,经常出问题。这次决定尝试这款浙大中控XP248,希望它能给我带来更好的体验!
有11位网友表示赞同!
感觉这个XP248的配置挺完善的,支持多协议、多串口。不过价格稍微有点偏高,性价比还要再评估一下。
有19位网友表示赞同!
我的应用场景需要同时连接多台设备进行数据交互。这款 XP248 应该能满足我的需求,期待能够实现稳定的连接!.
有20位网友表示赞同!
最近在学习工业自动化技术,很多资料都提到浙大中控的 DCS 多协议通讯卡。想了解一下XP248的用户体验分享,有哪些需要注意的地方?
有20位网友表示赞同!
对于像我这种入门水平的人来说,这款 XP248 的操作是否比较简单易懂?是否有详细的教程或者官方支持?
有19位网友表示赞同!
这个XP248 是否支持远程访问和控制的功能?如果支持,那么具体的操作方式是什么呢?
有5位网友表示赞同!
我需要一款可以实现实时数据采集与传输的通讯卡。这个 XP248 支持否满足这些需求?请给我详细介绍一下它的性能参数和功能特点吧!
有6位网友表示赞同!
这款 XP248 针对的是哪些类型的应用场景?是否适用于我的项目,有其他类似的产品推荐吗?
有19位网友表示赞同!