欧姆龙plc与其它仪表或设备通讯(无论是omron仪表或第三方仪表),要用带协议宏的串口通讯模块或模板,根据仪表或设备的通讯协议作相应的程序,建立相应的连通通道,就可对仪表进行读和写。
笔者曾为客户作过plc与第三方温度仪表的通讯,现呈给各位,请指正。
所用plc为omronc200he-cpu42,配通讯模块c200hw-com06,使用其a口(rs485)与温度表ttm-120通讯。
1、所用温度仪表“神王”ttm-120通讯协议:
eia标准:rs485
通讯:站1~31
传输:半双工
通讯码:ascll7位(bcc除外)8位(msd位=0)
接口方式:2线制
通讯速度:1200,2400,4800,9600
通讯距离:500mmax
字符:启动位:1位
停止位:1/2位
数据:7/8位
校验:无/奇/偶
bcc校验:预先/不选择
通讯地址:1~99
通讯格式:
读数据:stx(02h起始码)+地址(2位)+r+标识码(3位)+etx(03h结束码)
仪表返回:stx(02h起始码)+地址(2位)+ack(06h响应)+标识码(3位)+数据(5位)+etx(03h结束码)
写数据:stx(02h起始码)+地址(2位)+w+标识码(3位)+数据(5位)+etx(03h结束码)
仪表返回:stx(02h起始码)+地址(2位)+ack(06h响应)+etx(03h结束码)
错误信息响应:stx(02h起始码)+地址(2位)+nak(15h错误响应)+错误格式(1位)+etx(03h结束码)
2、用协议宏软件cx-protocol作协议宏程序
可用用cx-protocol中现有的系统标准协议copy到新建的程序中,再作修改,当然也可重新编制。
在新建的程序的devices中选择所用的plc型号,
通讯口a参数设置方式为:protocolmacro;并以仪表的通讯格式设置波特率等参数。
协议宏程序中有若干内容:主要是发送信息列表;接受信息列表;这两个表是协议宏的基本程序。再有就是具体的发送形式和接受形式,其它功能的读写形式,仪表的其它功能的读写形式。
我作了四种,根据仪表协议中的各个格式,编制宏程序,如下:
发送信息列表:
①写数据:sd(01)_1
<h>:stx
<t>:etx
数据形式:变量格式($(r(2),5))
地址格式:ascll变量格式($(r(1),2)
"w":写请求
标识符(仪表功能参数:写入设定值)“空格sv”
数据格式:<h>+<a>+"w"+"sv"+($(r(2),5))+<t>
②读请求:sd(02)_1
地址格式:ascll变量格式($(r(1),2)
"r":读请求
标识符(仪表功能参数:读入过程值)“pv1”
数据格式:<h>+<a>+"r"+"pv1"+<t>
接受信息列表:
①接受响应:rv(01)_1
"ack":响应接受
数据格式:<h>+<a>+"ack"+<t>
②接受数据:rv(02)_1
数据形式:变量格式(&(w(1),*))存入plc指定的接收数据
数据格式:<h>+(&(w(1),*))+<t>
写入命令设置:
编号:050
命令:发送&接受
发送命令:sd(01)_1
接收命令:rv(01)_1
读入命令设置:
编号:051
命令:发送&接受
发送命令:sd(02)_1
接收命令:rv(02)_1
编制设置完成,下装到plc中。
3、用cx-programmer作通讯程序
程序用协议宏指令pmcr完成与仪表的通讯:
三个操作数:一:控制字:端口+协议宏序列号
二:发送数据首址占2/3个字,首字是指令字数;下一字为仪表地址;
对于写命令要多一个字为设定值
三:接收数据首址占4个字,首字是命令字数;下两字是接收的5位数据。
对于写命令该操作数为虚设字,没有实际意义
读指令:pmcr#1051端口=1序列号051(读出)
dm0000dm0000=#0002dm0001=#0001
dm0030dm0030=#0004dm0031~dm0033=数据
写指令:pmcr#1050端口=1序列号050(写入)
dm0020dm0020=#0003dm0021=#0001dm0022=设置值
dm0040(虚设)
协议宏执行标志:端口一(a):α机为ir289.08cqm1h为ir207.08
端口二(b):α机为ir289.12cqm1h为ir207.12
当这变量=0时,方可执行pmcr命令
每个端口只能执行一个通信序列,可以不同的时间段产生pmcr指令的执行脉冲。
4、对于若干个仪表,每表设置不同的站号,就可由程序分别对其作读写操作,只有地址相符的仪表才能响应。