redrock99
级别: 家园常客
精华主题: 0
发帖数量: 320 个
工控威望: 554 点
下载积分: 3735 分
在线时间: 172(小时)
注册时间: 2009-02-04
最后登录: 2024-10-28
查看redrock99的 主题 / 回贴
楼主  发表于: 2011-06-30 23:25
今天用到2个200的热电偶模块231,是K型的,
模块通道信号变换成0-32000的值,变换成实数除以10就是实际温度,但是,若偶断线,变成最高温度或是最低温度是不是
0或32000?有个样例程序,
MAIN
Network 1 // 在S7-200CPU上使用热电偶模块EM231
// 初始化,清除四路热电偶输入映像及存放模块错误信息的字
LD     SM0.1                       // Load SM0.1.
FILL   +0, VW0, 6                  // Clear VW0 to VW10.
FILL   +0, MW0, 1                  // Clear MW0.

Network 2
// 调用子程序THER_CHK,在该子程序中定义了五个输出点,分别与M0.2,M0.3,M0.5,M0.6,M0.7相对应
LD     SM0.0                       // Load SM0.0
CALL   SBR0, 0, M0.2, M0.3, M0.5, M0.7, M0.6 // Call subroutine SBR0.

Network 3 // 无错误
// 如果M0.6置位,说明热电偶模块没有错误。从热电偶0的AIWO开始读取四路模拟量输入值
LD     M0.6                        //Load M0.6.
BMW    AIW0, VW0, 4                //Move good values to new location.

Network 4 // 有错误
// 如果M0.6没有置位,说明热电偶模块有错误,此时,把记录热电偶错误的MB0中的值放到存放错误信息的VB10中。此时有两种选择:一是什么都不做来冻结热电偶信息,二是传送一个常数到热电偶信息中
// 如下是通过将常数0放到VW4和VW6中来清除热电偶2和3的输入映像
LDN    M0.6                        //Load M0.6 as a Normally Closed contact.
MOVB   MB0, VB10                   //Latch error information.
                                   //Freeze Thermocouple0
                                   //Freeze Thermocouple1
MOVW   +0, VW4                     //Clear Thermocouple2.
MOVW   +0, VW6                     //Clear Thermocouple3.
//NETWORK TITLE (single line)
//
//NETWORK COMMENTS
//

Network 5
子程序THER_CHK
TITLE=***SUBROUTINE***  THER_CHK
// 处理错误信息
Network 1
// LB0中存放的是子程序0的输入点。如果LB0为0,则把特殊寄存器SMW8中的值放到LW2中。SMB8是扩展模块0的类型记录,SMB9是扩展模块0的错误记录
LDB=   0, LB0                      //Compare slot number to 0.
MOVW   SMW8, LW2                   //Copy ID and Error info to LW2.

Network 2
// 如果LB0等于1,把特殊寄存字SMW10的值放到LW2中,SMB10中存放的是扩展模块1的类型记录,SMB11是扩展模块1的错误记录
LDB=   1, LB0                      //Compare slot number to 1.
MOVW   SMW10, LW2                  //Copy ID and Error info to LW2.

Network 3
// 如果LB0等于2,把特殊寄存字SMW12的值放到LW2中,SMB12中存放的是扩展模块2的类型记录,SMB13是扩展模块2的错误记录
LDB=   2, LB0                      //Compare slot number to 2.
MOVW   SMW12, LW2                  //Copy ID and Error info to LW2.

Network 4
// 如果LB0等于3,把特殊寄存字SMW14的值放到LW2中,SMB14中存放的是扩展模块3的类型记录,SMB15是扩展模块3的错误记录
LDB=   3, LB0                      //Compare slot number to 3.
MOVW   SMW14, LW2                  //Copy ID and Error info to LW2.

Network 5
// 如果LB0等于4,把特殊寄存字SMW16的值放到LW2中,SMB16中存放的是扩展模块4的类型记录,SMB17是扩展模块4的错误记录
LDB=   4, LB0                      //Compare slot number to 4.
MOVW   SMW16, LW2                  //Copy ID and Error info to LW2.

Network 6
// 如果LB0等于5,把特殊寄存字SMW18的值放到LW2中,SMB18中存放的是扩展模块5的类型记录,SMB19是扩展模块5的错误记录
LDB=   5, LB0                      //Compare slot number to 5.
MOVW   SMW18, LW2                  //Copy ID and Error info to LW2.

Network 7
// 如果LB0等于6,把特殊寄存字SMW20的值放到LW2中,SMB20中存放的是扩展模块6的类型记录,SMB21是扩展模块6的错误记录
LDB=   6, LB0                      //Compare slot number to 6.
MOVW   SMW20, LW2                  //Copy ID and Error info to LW2.

//Check for Module Errors Supported by Thermocouple

Network 8
//  如果L3.2置位,则说明没有使用的电源/模块错误,把L1.0置1(子程序复制L1.0的值,并将其放到子程序第一个输出M0.2中)
LD     L3.2
=      L1.0

Network 9
// 如果L3.3置位,则说明有输出范围错误,把L1.1置1(子程序复制L1.1的值,并将其放到子程序第二个输出M0.3中)
LD     L3.3
=      L1.1

Network 10
// LB2与十六进制数18进行比较,(十六进制数18相当于二进制数00011000。从右至左,这个二进制数与当前扩展模块7到0的标记相符。这些位提供了如下信息:
// 位7=0:说明有模块
// 位6和5=00:模块是非智能I/O模块
// 位4=1:模块是一个模拟量模块
// 位3和2=10:模块有四路模拟量输入
// 位1和0=00:模块没有输出)
// 如果LB2和十六进制数18不相等,说明有模块识别错误。将L1.2置1.(子程序复制L1.2的值,将其放到子程序第三个输出M0.5中)
LDB<>  LB2, 16#18
=      L1.2

Network 11
// 如果L3.7置位,说明有配置错误,将L1.3置位(子程序复制L1.3的值放到子程序的第四个输出M0.7中)
LD     L3.7
=      L1.3

Network 12
// 如果没有以上提到的错误,置位L1.4,子程序复制L1.4的值,将其放到子程序第五个输出M0.6中
LDN    L1.0
AN     L1.1
AN     L1.2
AN     L1.3
=      L1.4

有点看不懂,是不是把问题搞复杂了?
//