【工控老马】ABB AC500 系列PLC与WEST 8100+系列仪表的ASCII通讯指南
一、硬件设置
仪表设定:
在P8100 的组态级(Configuration Mode)中
设置好以下几个参数:
1.通讯协议(Prot):
请改为ASC I (ASC II 通讯协议)
2.通讯速率(bAud):
1.2/2.4/4.8/9.6/19.2kbps 可选,
此处设为19.2kbps
3.设备地址(Addr):
1 – 99 可选,默认为1
4.通讯写入功能(CoEn):
r_o(只读)或r_W(可读可写),默认为r_W
PLC设定:
在CoDeSys软件中的硬件配置页面中将AC500 PLC的COM1端口设置为“ASCII”自由口模式,并设定好以下参数:
1.RTS control: telegram
2.baudrate: 19200
3.parity: even
4.Date bits: 7
5.Stop bits: 1
通讯接线采用485模式接线方式。
二、通讯程序
仪表ASCII方式指令格式:
ASCII通讯协议采用半双工通讯,所有的通讯动作都由上位机开始。上位机给指定地址的控制器发出一命令或要求,控制器对上位机的命令作出应答或发回上位机要求的信息,所有的通讯信息包括以下内容:
A)1 位信息起始字符;
B)1 位或2 位地址字符;
C)1 个命令或数据字符串;
D)1 位信息停止字符。
从上位机发出的信息可以是下列4 种形式之一:
一类指令:L{N}??*
确认从站状态正常返回信息: L{N}?A 表示可用
二类指令:L {N} {P} {C}*
查询/修改从站的某参数正常返回信息: L{N}{P}{DATA}A*
三类指令:L {N} {P} #{DATA}*
设置从站的某参数正常返回信息: L{N}{P}{DATA}I*表示:数据和参数有效
四类指令:L {N} {P}I *
在指令3 之后发送给同一从站, 如果指令3 中的数据和参数有效, 从站收到此指令后执行参数设置。正常返回信息: L{N}{P}{DATA}A*
所有字符皆为ASCII 码,且:
L: 信息开始位;
{N}: 为控制器地址(1—99),1~9 可以用一位或两位(如:7 和07 皆 可);
{P}: 为参数代码
{C}: 指令
#: 表示接下来为{DATA}
{DATA}:是ASCII 码组成字符串
* : 信息截止字位
{DATA}内容格式如下:
{DATA}内容 |
小数点及正负 |
abcd0 |
+abcd |
abcd1 |
+abc.d |
abcd2 |
+ab.cd |
abcd3 |
+a.bcd |
abcd5 |
-abcd |
abcd6 |
-abc.d |
abcd7 |
-ab.cd |
abcd8 |
-a.bcd |
AC500 PLC ASCII指令的收发:
AC500 PLC在 ASCII 方式下的指令收发是通过ABB ASCII通讯库中的功能块来完成的,功能块具体介绍如下:
- COM_REC
通过一个"自由模式"的串行接口接收数据,高电平触发。
功能块参数:
- COM_SEND
通过一个"自由模式"的串行接口发送数据,上升沿触发。
功能块参数:
DATA通过ADR模块可直接连接双字类型的地址(如:%MD0.100),也可以连接STRING类型的内部字符串变量(如后面例子中用到的“send_ascii”)。连接字符串变量时,仪表指令将直接以字符形式输入及显示;连接双子类型的地址时,输入和显示的将是组成仪表指令的字符的16进制代码。
程序实例:
根据仪表命令格式,我们来做一个通过ASCII功能块实现仪表设定值的查询及修改的例子。
首先,通过一个COM_SENG模块来发送设定值查询指令:“L1S?*”。其中“S”为仪表设定值的参数代码,其它各参数设置如下图所示,其中“send_ascii”为string类型的内部字符串变量,将指令“L1S?*” 赋予变量后,将“%MX1.0.1”置一,指令发出。
同时,接收模块“COM_REC”(参数设置如下)将收到仪表应答指令“L1S02771A*”,表示当前设定值为27.7,1位小数。
然后通过发送指令“L1S#02341*”修改设定值为23.4。
仪表返回指令“L1S02341I*”表示参数和数据没有问题。
再次发送确认指令“L1SI*”确认修改设置。
仪表返回指令“L1S02341A*”表示仪表设定值修改成功。
至此,ABB AC500系列PLC 与WEST 8100+系列仪表的通讯成功实现。
附件
WEST 8100系列仪表的参数代码表
参数 |
代码 |
说明 |
输入参数: |
||
过程值 |
M |
只读参数(二类指令),命令为:L{N}M?* 超量程时{DATA}为<??>0, 欠量程时{DATA}为<??>5。 |
过程值偏置 |
V |
可以查询(二类指令)、修改(三类/四类指令串); 命令为:L{N}V?*,L{N}V#{DATA}*/L{N}VI*; 修正输入值,修正的过程值=实际值+过程值偏差,修正的过程值要在量程范围内,可供显示、报警、记录仪输出使用。此参数应小心选择,否则会造成显示的过程值和测量过程值的不一致。 |
量程上限 |
G |
仅适用于直流线性输入,可用二类指令查询或三/四类指令串修改,小数点位置同输入范围。 命令为:L{N}G?*,L{N}G#{DATA}*/L{N}GI*。 |
量程下限 |
H |
仅适用于直流线性输入,可用二类指令查询或三/四类指令串修改,小数点位置同输入范围。 命令为:L{N}H?*,L{N}H#{DATA}*/L{N}HI*; |
输入小数点位置 |
Q |
仅适用于直流线性输入,可用二类指令查询或三/四类指令串修改,确定小数点位置:0=abcd 1=abc.d 2=ab.cd 3=a.bcd。 命令为:L{N}H?*,L{N}H#{DATA}*/L{N}HI*。 |
数字滤波时间 |
m |
用二类指令查询或三/四类指令串修改。 命令为:L{N}m?*,L{N}m#{DATA}*/L{N}mI* |
输出参数: |
||
输出功率 |
W |
自动状态时,用二类指令查询;手动状态时,用二类指令查询或三/四类指令串修改。 命令为:L{N}W?*,L{N}W#{DATA}*/L{N}WI |
输出1 功率限幅 |
B |
用二类指令查询或三/四类指令串修改。 命令为:L{N}B?*,L{N}B#{DATA}*/L{N}BI* |
输出1 控制周期 |
N |
用二类指令查询或三/四类指令串修改。 命令为:L{N}N?*,L{N}N#{DATA}*/L{N}NI* |
输出2 控制周期 |
O |
用二类指令查询或三/四类指令串修改。 命令为:L{N}O?*,L{N}O#{DATA}*/L{N}OI* |
变送输出上限 |
[ |
用二类指令查询或三/四类指令串修改,小数点位置与输入一致。 命令为:L{N}[?*,L{N}[#{DATA}*/L{N}[I* |
变送输出下限 |
\ |
用二类指令查询或三/四类指令串修改,小数点位置与输入一致。 命令为:L{N}\?*,L{N}\#{DATA}*/L{N}\I* |
设定值参数: |
||
设定值 |
S |
用二类指令查询或三/四类指令串修改,在设定范围内任意取值。 命令为:L{N}S?*,L{N}S#{DATA}*/L{N}SI* |
设定值斜率 |
^ |
用二类指令查询或三/四类指令串修改,设置范围为1~9999/小时,{DATA}=00000 时为OFF,小数点位置和输入相同。 命令为:L{N}^?*,L{N}^#{DATA}*/L{N}^I* |
设定值上限 |
A |
用二类指令查询或三/四类指令串修改。出厂值为量程上限。 命令为:L{N}A?*,L{N}A#{DATA}*/L{N}AI* |
设定值下限 |
T |
用二类指令查询或三/四类指令串修改。出厂值为量程下限。 命令为:L{N}T?*,L{N}T#{DATA}*/L{N}TI* |
报警值参数: |
||
报警1 值 |
C |
用二类指令查询或三/四类指令串修改,小数点位置与输入一致。 命令为:L{N}C?*,L{N}C#{DATA}*/L{N}CI* |
报警2 值 |
E |
用二类指令查询或三/四类指令串修改,小数点位置与输入一致。 命令为:L{N}E?*,L{N}E#{DATA}*/L{N}EI* |
控制参数: |
||
微分时间常数 |
D |
用二类指令查询或三/四类指令串修改,格式为:mm.ss。单位为分钟.秒 命令为:L{N}D?*,L{N}D#{DATA}*/L{N}DI* |
积分时间常数 |
I |
用二类指令查询或三/四类指令串修改,格式为:mm.ss。单位为分钟.秒 命令为:L{N}I?*,L{N}I#{DATA}*/L{N}II* |
手动积分 |
J |
用二类指令查询或三/四类指令串修改,小数点位置与输入 一致。 |
ON/OFF 动作回差 |
F |
用二类指令查询或三/四类指令串修改,1 位小数点。 命令为:L{N}F?*,L{N}F#{DATA}*/L{N}FI* |
死区 |
K |
用二类指令查询或三/四类指令串修改,无小数点。 命令为:L{N}K?*,L{N}K#{DATA}*/L{N}KI* |
比例带1 |
P |
用二类指令查询或三/四类指令串修改,设置范围0.5%~~999.9%或0.0(ON/OFF 动作),1 位小数点。 命令为:L{N}P?*,L{N}P#{DATA}*/L{N}PI* |
比例带2 |
U |
用二类指令查询或三/四类指令串修改,设置范围0.5%~~999.9%或0.0(ON/OFF 动作),1 位小数点。 命令为:L{N}U?*,L{N}U#{DATA}*/L{N}UI* |
扫描左侧的二维码可以任意下载无限个程序源码或技术文档~
工控老马资料窝,中国两大专业工控技术文档及程序源码免费下载微信小程序之一!
找技术文档及程序源码,就上工控老马资料窝~