在PLC上应用一线总线技术
Application of 1-wire bus Technique on PLC
沈阳市多值电子技术研究所
Shenyang Multivalue Electronic Tech Institute
贺为人、刘春兰、王雨
He Weiren、Liu Chunlan、Wang Yu
摘 要:可编程控制器(PLC)是一种灵活、方便应用极广的工业现场控制单元,但在非线性信号的识别处理方面受到编程语言、系统资源、人机对话方式等因素的限制,一线总线指令卡可以很好地处理这些问题。
Abstract:The Programable Logic Controller (PLC) is a control unit widely used industrial field. but , It is confined to those aspect such as program language , system resources and dialogue display when deal with nonlinear signal . These question may be resolved by 1-wire bus instruct card.
关键词:一线总线指令卡、非线性信号。
Key words:1-wire bus instruct card, nonlinear signal .

图一
|
编号 |
元件名称 |
转换器型号 |
分度号 |
测量范围 |
|
0 |
一线温度传感器 |
DS18B20 DS18S20 |
- 55~125℃ |
|
|
1 |
一线温湿度传感器 |
DHIH10C |
- 40~85℃ |
|
|
2 |
镍铬 -镍硅(镍铝)热电偶 |
DZT-1T |
K |
- 250~1200℃ |
|
3 |
铁 -康铜热电偶 |
DZT-1T |
J |
- 200~1100℃ |
|
4 |
镍铬 -康铜热电偶 |
DZT-1T |
E |
- 250~800℃ |
|
5 |
铜 -康铜热电偶 |
DZT-1T |
T |
-250~400℃ |
|
6 |
铂铑 30-铂铑6热电偶 |
DZT-1T |
B |
0~1500℃ |
|
7 |
铜热电阻 |
DZT-Cu50 |
Cu50 |
- 50~150℃ |
|
8 |
铜热电阻 |
DZT-Cu100 |
Cu100 |
- 50~150℃ |
|
9 |
自定义 |
自定义 |
自定义 |
— |
|
10 |
铂热电阻 |
DZT-Pt100 |
Pt100 |
- 200~600℃ |
|
11 |
铂热电阻 |
DZT-Pt1000 |
Pt1000 |
- 200~600℃ |
|
12 |
一线 DAC |
DZT-DAC |
1~5V ,4~20mA(O) |
|
|
13 |
标准仪表 |
DZT-05V |
mA/V |
1~5V ,4~20mA0~5V ,0~10mA(in) |
|
14 |
一线开关(继电器) |
开关量 |
I/O |
— |
|
15 |
自定义 |
自定义 |
自定义 |
— |
表一
//
本程序是一线总线指令卡与西门子S7-200(CPU224)通讯例程//
登记,读温度,删除命令都是以第一通路为例.//
写数据需要接一线控制继电器,本文略去。//
使用分度号为0的一线温度传感器,器件为DS18B20//SBR0:
初始化子程序//SBR1:I0
发送登记第1路命令子程序//SBR2:
发送读第1路温度命令子程序//SBR3:
发送删除第1路命令子程序//INT0:
登记第1路传感器成功,置位Q0.0//INT1:
读取第1路传感器温度值,小于25度置位Q0.6,大于等于25度置位Q0.7//INT2:
删除第1路成功,置位Q0.1*******************************************************************************
//
主程序LD SM0.1 //
首次扫描标志位SM0.1=1CALL SBR_0 //
调用初始化子程序LD SM0.7 //
若在TERM模式,则设置为PPI协议= SM30.0 //
若在RUN模式,则设置为自由口协议DTCH 8 //
禁止字符接收中断********************************************************************************
SBR0
初始化LD SM0.0
MOVB 9, SMB30 //
初始化自由口,9600bps,8位数据位,1位停止位,无奇偶校验MOVD &VB200, VD86 //
接收缓存区起始地址VB200ENI //
允许用户中断MOVB 3,VB30 //
缓冲区的字符计数器,每个传感器的温度均用三字节BCD码表示R Q0.0
,0R Q0.1
,0R Q0.6
,0R Q0.7
,0CALL SBR1 //
发送登记第1路命令子程序CALL SBR2 //
发送读取第1路温度命令子程序********************************************************************************
SBR1
登记第1路命令,把一线温度传感器接在指令卡登记位置上LD I0. 0 //I0.0
接通,执行登记命令.登记完成将其断开.MOVB 2, VB100 //
发送字节数MOVB 16#80, VB101 //
发送命令高字节W1的内容MOVB 16#00, VB102 //
发送命令低字节W2的内容XMT VB100, 0 //
发送命令ATCH INT_0, 8 //
出现接收字符中断时执行INT0********************************************************************************
SBR2
读第1路的温度值命令,把一线温度传感器接在指令卡总线上LBL 1
LD I0.1 //I0.1
接通,反复执行温度读取命令;断开I0.1,停止读温度.MOVB 2, VB100 //
发送字节数MOVB 16#00, VB101 //
发送命令高字节W1的内容MOVB 16#00, VB102 //
发送命令低字节W2的内容XMT VB100, 0 //
发送命令ATCH INT_1, 8 //
出现接收字符中断时执行INT1S M0.1,1 //
读一次温度完成,M0.1=1LD M0.1,1
TON T40, +50 //
循环读取,每隔5秒读一次温度LD T40
R T40, 1
JMP 1
********************************************************************************
SBR3
删除第1路命令LD I0.2 //I0.2
接通,执行删除通路命令.删除完毕将其断开.MOVB 2, VB100 //
发送字节数MOVB 16#E0, VB101 //
发送命令高字节W1的内容MOVB 16#00, VB102 //
发送命令低字节W2的内容XMT VB100, 0 //
发送命令ATCH INT_2, 8
*********************************************************************************
INI0 //
登记第1通路命令成功,置位Q0.0LD SM0.0
AB= SMB2, 16#80 //
若返回码是80H,登记成功= Q0.0 //
置位Q0.0********************************************************************************
INI1 //
读第1通路温度值,返回值放在以VB200为首的三个单元里LD SM0.0
AB= SMB2, 16#00 //
第1路分度号为0MOVB SMB2, *VD86 //
接收到的字符存入指针变量所指的地址INCD VD86 //
接收缓冲区指针加1DECB VB30 //
数据字节数减1LD SM1.0 //
若零标志SM1.0=1,表示VB30=0,三个字节接收完成
//
设置温度区间的判断范围LDW< VW201,16#0190
= Q0.6 //
若返回温度值小于25℃,置位Q0.6,复位Q0.7R Q0.7,0
NOT
= Q0.7 //
若返回温度值大于等于25℃,置位Q0.7,复位Q0.6R Q0.6,0
CRETI
*********************************************************************************
INI2 //
删除命令完成,置位Q0.1LD SM0.0
AB= SMB2, 16#80 //
若返回码是80H,删除成功= Q0.1 //
置位Q0.1********************************************************************************
参考文献
:1.
王雨、贺为人 一线总线技术方案 《仪器仪表与传感器》 2003.08 P47-482.
王雨、贺为人 1-wire bus 指令卡的应用 《中国仪器仪表》 2003.10 P44-47