乐发500

FBPRO-8DI八路隔离型数字量输入智能节点的系统设计

乐发500知识 | 2024-08-11| 152

PROFIBUS - DP 从站智能测控节点的系统结构如图所示 。

图1 PROFIBUS - DP 从站智能测控节点系统结构图 下面以 FBPRO -8DI 八路隔离型数字量输入智能节点和 FBPRO -4MV 四通道隔离型毫
伏信号输入智能节点为例, 先容 PROFIBUS - DP 从站智能测控节点的系统设计 。
1. 硬件结构 FBPRO -8DI 八路数字量输入智能节点的硬件框图如图2所示 。 在图2中, 微控制器选用 Philips 公司的 P89C51RD2, 接纳 74HC245 读取从站地点和
数字量的输入状态, 通讯控制器接纳 Siemens 公司的 SPC3, X5045 为 Xicor 公司的串行
E 2 PROM和 WDT 一体化电路, DC - DC 电路选用功率为 2W 的电源 ?, VD1 为状态指示
灯, RS -485 驱动器接纳 TI 公司的 65ALS1176 。 在该智能节点的设计中, 读取数字量输入的口地点为 0DFFFH, SPC3 的起始地点为
1000H, 设定智能节点从站地点号的口地点为 7FFFH 。
2. 数字量输入电路 数字量输入电路如图3所示 。

图 2 FBPRO -8DI 智能节点的硬件框图

图 3 数字量输入电路 当跳线器 JP1 的 1—2 短路, 跳线器 JP2 的 1—2 断开、 2—3 短路时, 输入端 DI + 和
DI - 可以接一干接点信号 。 当跳线器 JP1 的 1—2 断开, 跳线器 JP2 的 1—2 短路、 2—3 断开时, 输入端 DI + 和
DI - 可以接一有源接点 。 在图3中, 数字量输入端所用的电源为 +24V, 也可以是 +15V 或 +5V 电源, 只需
改变电阻 R1 的阻值即可 。
3. 软件设计 从站程序包括 3 个部分: SPC3 的初始化程序、 SPC3 的中止处置惩罚程序和详细的 I/ O 应用
程序 。 程序接纳结构化编程头脑, 以便于以后的功效拓展 。 在 Power_On 状态, 从站能从 2 类主站吸收 Set_Slave_Add 报文来改变它的地点, 然后从
站进入 Wait_Prm 状态, 期待参数化, 此状态从站可以吸收 Get_Cfg 和 Slave_Diag 报文 。 参数
化完成后, 从站进入 Wait_Cfg 状态, 期待 Chk_Cfg 报文 。 另外, 此状态从站可吸收 Slave_
Diag、 Set_Prm 和 Get_Cfg 报文 。 若是 Chk_Cfg 报文吸收完成后, 从站将进入 Data_Exch 状态
举行数据通讯 。 此时, 从站可吸收 Writing_Outputs、 Reading_Inputs、 Global_Control、 Slave_
Diag、 Chk_Diag 和 Get_Cfg 报文 。 若组态和数据交流不乐成, 就会返回到参数化阶段 。 Wait
_Prm 在对从站举行组态时, 必需要编写它的 GSD 文件 。 只有有了 GSD 文件, 在 COM PRO?
FIBUS 组态软件下才华对从站组态, 不然主站无法识别从站 。 从站初始化阶段的顺序如图4所示 。

图4 从站初始化阶段的顺序 从站主程序流程图如图5所示 。 SPC3 初始化包括设置 SPC3 允许的中止, 写入从站识又名和地点, 设置 SPC3 方法寄存
器, 设置诊断缓冲区、 参数缓冲区, 设置诊断缓冲区、 参数缓冲区、 地点缓冲区, 初始化长
度, 并凭证以上初始值求出各个输入、 输出缓冲区的指针及辅助缓冲区的起始地点和规模 。
中止程序流程图如图6所示 。 数据输入和输来由置 (输入、 输出相关于主站而言) 及用户诊断数据输入放在应用程
序循环中 。 在一个应用循环中, 由应用来刷新输入 BUF 中的数据, 以包管所有输入数据是
最新的数据 。 而 SPC3 在吸收到由 PROFIBUS 主站传送的差别输出数据时, 会爆发输出标记
位 (同样位于中止请求字单位), CPU 通过在应用循环中轮循标记位来吸收主站数据 。 关于
特定应用的诊断信息, 需要实时转达到主站 。 主应用程序在应用循环中判断是否有可用的诊
断 BUF 保存, 当有空闲 BUF 时应用程序输入诊断信息, 并请求更新 。 关于实时性要求严酷
的系统, 应接纳中止方法举行输出数据和诊断数据处置惩罚 。
当上位机向从站发送数据后, 在输出缓冲器中可以获得的输出数据 。 在 SPC3 中有 3 个
输出缓冲器, 通过下面的程序段可以确定输出数据缓冲器的起始地点 。

图5 主程序流程图                                                                            图 6 中止程序流程图  ; 更新输出数据指针, 效果放到 USER_OUT_PTR 中      ADROUT:     MOV   DPTR,#NEW_DOUT_BUFFER_CMD MOVX A,@ DPTR JB ACC. 3,ADEND JNB ACC. 2,ADEND ANL A,#03H ADD A,#1AH MOV DPL,A CLR A ADDC A,#SPC3_HIGH       ;盘算输出缓冲区指针 MOV DPH,A MOVX A,@ DPTR MOV B,#08H MUL AB MOV R6,A MOV A,B ADDC A,#SPC3_HIGH MOV USER_OUT_PTR,A MOV USER_OUT_PTR +1,R6 ADEND: RET 有 3 个输入缓冲器用于数据输入, 当向上位机发送数据时, 首先应盘算输入数据缓冲器
的起始地点, 盘算要领如下:  ; 更新输入数据指针, 效果放到 USER_IN_PTR 中      ADRIN:     MOV   DPTR,#NEW_DIN_BUFFER_CMD MOVX A,@ DPTR MOV DPTR,#DIN_BUFFER_SM MOVX A,@ DPTR RRC A RRC A RRC A RRC A ANL A,#03H CJNE A,#00H,ADRIN1 LJMP INRET ADRIN1:ADD A,#1EH MOV DPL,A CLR A ADDC A,#SPC3_HIGH     ;盘算输入缓冲区指针 MOV DPH,A MOV A,@ DPTR MOV B,#08H MUL AB MOV R6,A MOV A,B ADDC A,#SPC3_HIGH MOV USER_IN_PTR,A MOV USER_IN_PTR +1,R6 INRET: RET FBPRO -8DI 八通道隔离型数字量输入智能节点程序清单如下, 其中数据名堂为 8 个字
节输出, 4 个字节输入, 第一个字节为地点, 第二个字节为功效码, 第三个字节为字节长
度, 第四个字节为开关状态 。 (1) P89C51RD2 内部单位界说      UPSETDATA         EQU  0B0H     ;存储主站输出数据 COUNT EQU 30H T20MS EQU 31H NUM EQU 32H USER_IN_PTR EQU 50H  ;存放 SPC3 输入数据缓冲区的指针 USER_OUT_PTR EQU 55H  ;存放 SPC3 输出数据缓冲区的指针 (2) 常数界说      SPC3 EQU 1000H  ;SPC3 片选信号 SPC3_LOW EQU 00H  ;SPC3 片选信号低字节 SPC3_HIGH EQU 10H  ;SPC3 片选信号高字节 REAL_NO_ADD_CHG EQU 1  ;1 = 不允许地点改变,0 = 允许地点改变 (3) SPC3 内部单位界说 1) 00H ~15H 可读的寄存器单位 。      IR_LOW EQU SPC3 +02H  ;中止寄存器低字节单位 IR_HIGH EQU SPC3 +03H  ;中止寄存器高字节单位 STATUS_REG_LOW EQU SPC3 +04H  ;状态寄存器低字节单位 STATUS_REG_HIGH EQU SPC3 +05H  ;状态寄存器高字节单位 DIN_BUFFER_SM EQU SPC3 +08H NEW_DIN_BUFFER_CMD EQU SPC3 +09H  ;批注目今可用的输入缓冲区 DOUT_BUFFER_SM EQU SPC3 +0AH NEW_DOUT_BUFFER_CMD EQU SPC3 +0BH  ;批注目今可用的输出缓冲区 DIAG_BUFFER_SM EQU SPC3 +0CH NEW_DIAG_PUFFER_CMD EQU SPC3 +0DH  ;批注目今可用的诊断缓冲区 USER_PRM_DATA_OK EQU SPC3 +0EH  ;参数化数据准确 USER_PRM_DATA_NOK EQU SPC3 +0FH  ;参数化数据不准确 USER_CFG_DATA_OK EQU SPC3 +10H  ;设置数据准确 USER_CFG_DATA_NOK EQU SPC3 +11H  ;设置数据不准确 SSA_BUFFERFREE_CMD EQU SPC3 +14H  ;使新的 SSA 缓冲区可用 2) 00H ~15H 可写的寄存器单位 。      IRR_LOW EQU SPC3 +00H IRR_HIGH EQU SPC3 +01H IAR_LOW EQU SPC3 +02H  ;中止响应寄存器低字节单位 IAR_HIGH EQU SPC3 +03H  ;中止响应寄存器高字节单位 IMR_LOW EQU SPC3 +04H  ;中止屏障寄存器低字节单位 IMR_HIGH EQU SPC3 +05H  ;中止屏障寄存器高字节单位 MODE_REG0 EQU SPC3 +06H  ;方法寄存器 0 MODE_REG0_S EQU SPC3 +07H  ;方法寄存器 0_S MODE_REG1_S EQU SPC3 +08H  ;方法寄存器 1_S MODE_REG1_R EQU SPC3 +09H  ;方法寄存器 1_R WD_BAUD_CTRL_VAL EQU SPC3 +0AH MINTSDR_VAL EQU SPC3 +0BH 3) 00H ~15H 可写的寄存器的值 。      D_IMR_LOW EQU 0F1H  ;中止屏障寄存器低字节单位的值 D_IMR_HIGH EQU 0F0H  ;中止屏障寄存器高字节单位的值 D_MODE_REG0 EQU 0C0H  ;方法寄存器 0 的值 D_MODE_REG0_S EQU 05H  ;方法寄存器 0_S 的值 D_MODE_REG1_S EQU 20H  ;方法寄存器 1_S 的值 D_MODE_REG1_R EQU 00H  ;方法寄存器 1_R 的值 D_WD_BAUD_CTRL_VAL EQU 1EH D_MINTSDR_VAL EQU 00H 4) 16H ~3DH 单位 。      R_TS_ADR EQU SPC3 +16H  ;从站地点单位 R_FDL_SAP_LIST_PTR EQU SPC3 +17H R_USER_WD_VALUE_LOW EQU SPC3 +18H  ;SPC3 内部看门狗低字节单位 R_USER_WD_VALUE_HIGH EQU SPC3 +19H  ;SPC3 内部看门狗高字节单位 R_LEN_DOUT_BUF EQU SPC3 +1AH  ;输出数据缓冲区长度单位 R_DOUT_BUF_PTR1 EQU SPC3 +1BH  ;输出数据缓冲区 1 指针单位 R_DOUT_BUF_PTR2 EQU SPC3 +1CH  ;输出数据缓冲区 2 指针单位 R_DOUT_BUF_PTR3 EQU SPC3 +1DH  ;输出数据缓冲区 3 指针单位 R_LEN_DIN_BUF EQU SPC3 +1EH  ;输入数据缓冲区长度单位 R_DIN_BUF_PTR1 EQU SPC3 +1FH  ;输入数据缓冲区 1 指针单位 R_DIN_BUF_PTR2 EQU SPC3 +20H  ;输入数据缓冲区 2 指针单位 R_DIN_BUF_PTR3 EQU SPC3 +21H  ;输入数据缓冲区 3 指针单位 R_LEN_DDBOUT_PUF EQU SPC3 +22H R_DDBOUT_BUF_PTR EQU SPC3 +23H R_LEN_DTAG_BUF1 EQU SPC3 +24H  ;诊断缓冲区 1 长度单位 R_LEN_DIAG_BUF2 EQU SPC3 +25H  ;诊断缓冲区 2 长度单位 R_DIAG_PUF_PTR1 EQU SPC3 +26H  ;诊断缓冲区 1 指针单位 R_DIAG_PUF_PTR2 EQU SPC3 +27H  ;诊断缓冲区 2 指针单位 R_LEN_CNTRL_PBUF1 EQU SPC3 +28H R_LEN_CNTRL_BPUF2 EQU SPC3 +29H R_AUX_PUF_SEL EQU SPC3 +2AH  ;批注使用哪一个辅助缓冲区单位 R_AUX_BUF_PTR1 EQU SPC3 +2BH  ;辅助缓冲区 1 指针单位 R_AUX_BUF_PTR2 EQU SPC3 +2CH  ;辅助缓冲区 2 指针单位 R_LEN_SSA_DATA EQU SPC3 +2DH  ;SSA 缓冲区长度单位 R_SSA_BUF_PTR EQU SPC3 +2EH  ;SSA 缓冲区指针单位 R_LEN_PRM_DATA EQU SPC3 +2FH  ;参数缓冲区长度单位 R_PRM_BUF_PTR EQU SPC3 +30H  ;参数缓冲区指针单位 R_LEN_CFG_DATA EQU SPC3 +31H  ;设置缓冲区长度单位 R_CFG_BUF_PTR EQU SPC3 +32H  ;设置缓冲区指针单位 R_LEN_READ_CFG_DATA EQU SPC3 +33H R_READ_CFG_BUF_PTR EQU SPC3 +34H R_LENDDB_PRM_DATA EQU SPC3 +35H R_DDB_PRM_BUF_PTR EQU SPC3 +36H R_SCORE_EXP_BYTE EQU SPC3 +37H R_SOCRE_ERROR_BYTE EQU SPC3 +38H R_REAL_NO_ADD_CHANGE EQU SPC3 +39H  ;从站的地点是否可变 R_IDENT_LOW EQU SPC3 +3AH  ;标识号低字节单位 R_IDENT_HIGH EQU SPC3 +3BH  ;标识号高字节单位 R_GC_COMMAND EQU SPC3 +3CH  ;GC 下令单位 R_LEN_SPEC_PRM_BUF EQU SPC3 +3DH  ;特殊缓冲区的指针单位 5) 16H ~3DH 寄存器单位填充的数据 。      D_TS_ADR EQU 06H  ;地点数据 D_FDL_SAP_LIST_PTR EQU 79H D_USER_WD_VALUE_LOW EQU 20H  ;看门狗参数 D_USER_WD_VALUE_HIGH EQU 4EH (4) 设置输入输出数据的长度      D_LEN_DOUT_BUF EQU 8  ;8 个字节输出,输出数据缓冲区 D_DOUT_BUF_PTR1 EQU 08H D_DOUT_BUF_PTR2 EQU 09H D_DOUT_BUF_PTR3 EQU 0AH D_LEN_DIN_PUF EQU 8  ;8 个字节输入,输入数据缓冲区 D_DIN_BUF_PTR1 EQU 0BH R_DIN_BUF_PTR2 EQU 1FH R_DIN_BUF_PTR3 EQU 33H D_LEN_DDBOUT_BUF EQU 00H D_DDBOUT_BUF_PTR EQU 00H D_LEN_DIAG_BUF1 EQU 08H D_LEN_DIAG_BUF2 EQU 08H D_DIAG_PUF_PTR1 EQU 47H D_DIAG_PUF_PTR2 EQU 48H D_LEN_CNTRL_PBUF1 EQU 18H D_LEN_CNTRL_PBUF2 EQU 18H D_AUX_PUF_SEL EQU 00H D_AUX_BUF_PTR1 EQU 49H D_AUX_BUF_PTR2 EQU 4CH D_LEN_SSA_DATA EQU 10H D_SSA_BUF_PTR EQU 4FH D_LEN_PRM_DATA EQU 10H D_PRM_BUF_PTR EQU 51H D_LEN_CFG_DATA EQU 10H D_CFG_BUF_PTR EQU 53H D_LEN_READ_CFG_DATA EQU 08H D_READ_CFG_BUF_PTR EQU 55H D_LENDDB_PRM_DATA EQU 00H D_DDB_PRM_BUF_PTR EQU 00H D_SCORE_EXP_BYTE EQU 00H D_SOCRE_ERROR_BYTE EQU 00H D_REAL_NO_ADD_CHANGE EQU 0FFH D_IDENT_LOW EQU 08H D_IDENT_HIGH EQU 00H D_GC_COMMAND EQU 00H D_LEN_SPEC_PRM_BUF EQU 00H (5) 程序最先           ORG   0000               LJMP MAIN ORG 0003H LJMP INTEX0 ORG 000BH JMP TIMER0 ORG 100H MAIN: MOV SP,#60H CPL P1. 6 MOV COUNT,#10 MOV TMOD,#01H MOV TH0,#0B1H MOV TL0,#0DFH  ;准时 20ms SETB P1. 7  ;SPC3 复位 LCALL D20M CLR P1. 7 CLR EX0  ;关中止 SETB EX0  ;设置优先级 LCALL CLEAR LCALL SPC3_RESET  ;挪用 SPC3 初始化 DATA_EX: SETB EX0 SETB EA SETB TR0 SETB ET0 LCALL ADROUT LCALL ADRIN (6) 主循环程序      START_LOOP: CPL P1. 0 CPL P1. 0 MOV DPTR,#MODE_REG1_S  ;触发 SPC3 看门狗 MOV A,#20H MOVX @ DPTR,A MOV A,T20MS CJNE A,#01H,LOOP1 MOV T20MS,#00H LCALL DATAEX LOOP1: MOV DPTR,#IRR_HIGH  ;诊断转变 MOVX A,#DPTR JNB ACC. 4,END_LOOP MOV DPTR,#IAR_HIGH MOV A,#10H MOVX @ DPTR,A END_LOOP: JMP START_LOOP (7) SPC3 复位程序      SPC3_RESET: MOV DPTR,#IMR_LOW  ;设置 SPC3 内部中止 MOV A,#D_IMR_LOW MOVX @ DPTR,A INC DPTR MOV A,#D_IMR_HIGH MOVX @ DPTR,A MOV DPTR,#R_USER_WD_VALUE_LOW  ;设置看门狗参数 MOV A,#D_USER_WD_VALUE_LOW MOVX @ DPTR,A INC DPTR MOV A,#D_USER_WD_VALUE_HIGH MOVX @ DPTR,A MOV DPTR,#R_IDENT_LOW  ;设置本 ?樘逑趾 MOV A,#D_IDENT_LOW MOVX @ DPTR,A MOV DPTR,#7FFFH  ;设置从站地点并生涯 MOVX A,@ DPTR MOV DPTR,#R_TS_ADR MOV A,#D_TS_ADR MOVX @ DPTR,A MOV NUM,A MOV DPTR,#MODE_REG0  ;将节点号放入 NUM 中 MOV A,#D_MODE_REG0  ;设置 SPC3 方法寄存器 MOVX @ DPTR,A INC DPTR MOV A,#D_MODE_REGO_S MOVX @ DPTR,A MOV A,#REAL_NO_ADD_CHG  ;不允许从站地点改变 MOV DPTR,#R_REAL_NO_ADD_CHANGE CJNE A,#1,RR1 MOV A,#0FFH MOVX @ DPTR,A JMP RJ2 RR1: MOV A,#0 MOVX @ DPTR,A MOV R6,#00H RJ2: MOV DPTR,@ STRTUS_REG_LOW  ;SPC3 是否离线 MOVX A,@ DPTR ANL A,#01H RR3: JZ RR4 DJNZ R6,RR2 LJMP MAIN RR4: MOV DPTR,#R_DIAG_PUF_PTR1  ;若是 SPC3 离线,初始化 SPC3 MOV A,#D_DIAG_PUF_PTR1 MOVX @ DPTR,A INC DPTR MOV A,#D_DIAG_PUF_PTR2 MOVX @ DPTR,A MOV DPTR,#R_CFG_BUF_PTR MOV A,#D_CFG_BUF_PTR MOVX @ DPTR,A MOV DPTR,#R_READ_CFG_BUF_PTR MOV A,#D_READ_CFG_BUF_PTR MOVX @ DPTR,A MOV DPTR,#R_PRM_BUF_PTR MOV A,#D_PRM_BUF_PTR MOVX @ DPTR,A MOV DPTR,#R_AUX_BUF_PTR1 MOV A,#D_AUX_BUF_PTR1 MOVX @ DPTR,A INC DPTR MOV A,#D_AUX_BUF_PTR2 MOVX @ DPTR,A MOV DPTR,#R_LEN_DIAG_BUF1 MOV A,#D_LEN_DIAG_BUF1 MOVX @ DPTR,A INC DPTR MOV A,#D_LEN_DIAG_BUF2 MOVX @ DPTR,A MOV DPTR,#R_LEN_CFG_DATA MOV A,#D_LEN_CFG_DATA MOVX @ DPTR,A MOV DPTR,#R_LEN_PRM_DATA MOV A,#D_LEN_PRM_DATA MOVX @ DPTR,A MOV DPTR,#R_LEN_CNTRL_PBUF1 MOV A,#D_LEN_CNTRL_PBUF1 MOVX @ DPTR,A MOV DPTR,#R_LEN_READ_CFG_DATA MOV A,#D_LEN_READ_CFG_DATA MOVX @ DPTR,A MOV DPTR,#R_FDL_SAP_LIST_PTR MOV A,#D_FDL_SAP_LIST_PTR MOVX @ DPTR,A MOV DPTR,#R_LEN_DOUT_BUF  ;输出数据缓冲区长度和指针 MOV A,#D_LEN_DOUT_BUF MOVX @ DPTR,A MOV DPTR,#R_DOUT_BUF_PTR1 MOV A,#D_DOUT_BUF_PTR1 MOVX @ DPTR,A INC DPTR MOV A,#D_DOUT_BUF_PTR2 MOVX @ DPTR,A INC DPTR MOV A,#D_DOUT_BUF_PTR3 MOVX @ DPTR,A MOV DPTR,#R_LEN_DIN_BUF  ;输入数据缓冲区长度和指针 MOV A,#D_LEN_DIN_BUF MOVX @ DPTR,A MOV DPTR,#R_DIN_BUF_PTR1 MOV A,#D_DIN_BUF_PTR1 MOVX @ DPTR,A INC DPTR MOV A,#D_DIN_BUF_PTR2 MOVX @ DPTR,A INC DPTR MOV A,#D_DIN_BUF_PTR3 MOVX @ DPTR,A MOV DPTR,@ WD_BAUD_CTRL_VAL  ;设置 SPC3 看门狗准时器的值 MOV A,#D_WD_BAUD_CTRL_VAL MOVX @ DPTR,A MOV DPTR,@ MODE_REG1_S  ;启动 SPC3 MOVX A,@ DPTR ORL A,#01H MOVX @ DPTR,A RET (8) 延时子程序      D20M: MOV R7,#20H D20M1: MOV R6,#00H D20M2: DJNZ R6,D20M2 DJN Z R7,D20M1 RET (9) SPC3 中止断子程序      INTEX0: PUSH ACC PUSH B PUSH DPH PUSH DPL PUSH PSW SETB RS0 SETB RS1 MOV DPTR,#IR_LOW  ;参数化 MOVX A,@ DPTR JNB ACC. 1,INTE1 MOV A,#02H MOVX @ DPTR,A INTE1: MOV DPTR,#IAR_HIGH MOVX A,@ DPTR JNB ACC. 0,INTE2 MOV A,#01H MOVX @ DPTR,A INTE2: MOV DPTR, #IAR_HIGH  ;参数化 MOVX A, @ DPTR JNB ACC. 3,INTE3 INTE2_1: MOV DPTR,#USER_PRM_DATA_OK MOVX A,@ DPTR MOV R7,A CJNE R7,#01H,INTE3 JMP INTE2_1 INTE3: MOV DPTR,#IAR_HIGH MOVX A,@ DPTR JNB ACC. 2,INTE4 INTE3_1: MOV DPTR,#USER_CFG_DATA_OK MOVX A,@ DPTR MOV R7,A CJNE R7,#01H,INTE4 JMP INTE3_1 INTE4: MOV DPTR,#IAR_HIGH MOVX A,@ DPTR JNB ACC. 1,INTE5 MOV A,#02H MOVX @ DPTR,A INTE5: MOV DPTR,#IR_LOW MOVX A,@ DPTR JNB ACC. 3,INTE6 LCALL wd_dp_mode_timeout_function MOV DPTR,#IR_LOW MOV A,#08H MOVX @ DPTR,A INTE6: MOV DPTR,#IR_LOW MOVX A,@ DPTR JNB ACC. 4,INTE7 MOV A,#10H MOVX @ DPTR,A INTE7: MOV DPTR,#IR_LOW MOVX A,@ DPTR JNB ACC. 2,INTE8 MOV A,#04H MOVX @ DPTR,A INTE8: MOV DPTR,#1008H  ;中止竣事 MOV A,#02H MOVX @ DPTR,A CLR RS0 CLR RS1 POP PSW POP DPL POP DPH POP B POP ACC RETI (10) 更新输入数据缓冲区指针      ADRIN: MOV DPTR,#NEW_DIN_BUFFER_CMD MOVX A,@ DPTR MOV DPTR,#DIN_BUFFER_SM MOVX A,@ DPTR RRC A RRC A RRC A RRC A ANL A,#03H CJNE A,#00H,ADRIN1 LJMP INRET ADRIN1: ADD A,#1EH MOV DPL,A CLR A ADDC A,#SPC3_HIGH MOV DPH,A MOVX A,#DPTR MOV B,#08H MUL AB MOV R6,A MOV A,B ADDC A,#SPC3_HIGH MOV USER_IN_PTR,A MOV USER_IN_PTR +1,R6 INRET: RET (11) 更新输出数据指针并将效果放到 USER_OUT_ PRT 中      ADROUT: MOV DPTR,#NEW_DOUT_BUFFER_CMD MOVX A,@ DPTR JB ACC. 3,ADEND JNB ACC. 2,ADEND ANL A,#03H ADD A,#1AH MOV DPL,A CLR A ADDC A,#SPC3_HIGH MOV DPH,A MOVX A,@ DPTR MOV B,#08H MUL AB MOV R6,A MOV A,B ADDC A,#SPC3_HIGH MOV USER_OUT_PTR,A MOV USER_OUT_PTR +1,R6 MOV A,COUNT DEC A MOV COUNT,A JNZ ADEND cpl P1. 6 MOV COUNT,#10 ADEND: RET (12) 扫除 SPC3 内部的 RAM      CLEAR: MOV DPTR,#R_TS_ADR MOV A,#00H CLEAR1: MOVX @ DPTR,A INC DPTR MOV R7,DPL CJNE R7,#00H,CLEAR1 MOV R7,DPH CJNE R7,#16H,CLEAR1 RET DATAEX: LCALL ADROUT MOV DPH,USER_OUT_PTR MOV DPL,USER_OUT_PTR +1 MOV R1,#UPSETDATA  ;上位机输出数据暂存 MOV B,#8 MOVD: CLR C MOVX A,#DPTR MOV @ R1,A INC DPTR INC R1 DJNZ B,MOVD DATA_IN: LCALL ADRIN MOV DPTR,#0DFFFH       ;8DI 数据,读取八路开关量输入数据 MOVX A,@ DPTR CPL A MOV B,A MOV DPH,USER_IN_PTR MOV DPL,USER_IN_PTR +1 MOV A,NUM MOVX @ DPTR,A INC DPTR MOV A,#02H MOVX @ DPTR,A INC DPTR MOV A,#5 MOVX @ DPTR,A INC DPTR MOV A,B MOVX @ DPTR,A INC DPTR RET TIMER0: PUSH ACC MOV TH0,#0B1H MOV TL0,#0DFH  ;准时 20ms MOV A,T20MS MOV A,#01H MOV T20MS,A POP ACC RETI (13) wd_ dp_ mode_ timeout_ function 子程序      wd_dp_mode_timeout_function: MOV DPTR,#SPC3 +04H  ;状态寄存器地点 MOVX A,@ DPTR  ;读状态寄存器 SWAP A RRC A RRC A ANL A,#03H MOV DPTR,#SPC3 +0CH  ;DIAG_Buffer_SM 地点 MOVX A,@ DPTR  ;读 DIAG_Buffer_SM MOV R7,A ANL A,#03H MOV R6,A CJNE R6,#01H,DP_DIAG1 MOV R6,#06H MOV DPTR,#SPC3 +024H  ;诊断缓冲区 1 的长度地点 MOV A,R6 MOVX @ DPTR,A  ;诊断缓冲区 1 的长度为 6 MOV R4,#00H MOV R7,A SJMP DP_DIAG3 DP_DIAG1: MOV A,R7 ANL A,#0CH MOV R7,A CJNE R7,#04H,DP_DIAG2 MOV R7,#06H MOV DPTR,#SPC3 +025H  ;诊断缓冲区 2 的长度地点 MOV A,R7 MOVX @ DPTR,A  ;诊断缓冲区 2 的长度为 6 SJMP DP_DIAG3 DP_DIAG2: MOV R7,#0FFH DP_DIAG3: MOV DPTR,#SPC3 +0CH  ;状态寄存器地点 MOVX A,@ DPTR  ;读状态寄存器 ANL A,#03H MOV R7,A CJNE R7,#01H,DP_DIAG4 MOV R4,#00H MOV DPTR,#SPC3 +026H  ;诊断缓冲区 1 的段基址地点 MOVX A,@ DPTR  ;读诊断缓冲区 1 的段基址 MOV B,#08H MUL AB ADD A,#LOW(SPC3)  ;加 SPC3 的低字节 MOV R7,A MOV A,B ADDC A,#HIGH(SPC3)  ;加 SPC3 的高字节 MOV DPL,R7 MOV DPH,A MOV A,R4 MOVX @ DPTR,A  ;清诊断缓冲区 1 MOV R7,A MOV R6,A SJMP DP_DIAG6 DP_DIAG4: MOV DPTR,#SPC3 +0CH  ;状态寄存器地点 MOVX A,@ DPTR  ;读状态寄存器 ANL A,#0CH MOV R7,A CJNE R7,#04H,DP_DIAG5 MOV R4,#00H MOV DPTR,#SPC3 +027H  ;诊断缓冲区 2 的段基址地点 MOVX A,@ DPTR  ;读诊断缓冲区 2 的段基址 MOV B,#08H MUL AB ADD A,#LOW(SPC3)  ;加 SPC3 的低字节 MOV R7,A MOV A,B ADDC A,#HIGH(SPC3)  ;加 SPC3 的高字节 MOV DPL,R7 MOV DPH,A MOV A,R4 MOVX @ DPTR,A  ;清诊断缓冲区 2 MOV R7,A MOV R6,A SJMP DP_DIAG6 DP_DIAG5: MOV R6,#0FFH MOV R7,#0FFH DP_DIAG6: MOV DPTR,#SPC3 +0DH  ;New_DIAG_Buffer_Cmd 地点 MOVX A,@ DPTR  ;读 New_DIAG_Buffer_Cmd ANL A,#03H ADD A,#0FEH JZ DP_DIAG7 INC A JNZ DP_DIAG9 MOV DPTR,#SPC3 +026H  ;目今诊断缓冲区为 Diag_Buf1 SJMP DP_DIAG8 DP_DIAG7: MOV DPTR,#SPC3 +027H  ;目今诊断缓冲区为 Diag_Buf2 DP_DIAG8: MOVX A,@ DPTR  ;读诊断缓冲区 1 或 2 的段基址 MOV B,#08H MUL AB ADD A,#LOW(SPC3) MOV R7,A MOV A,B ADDC A,#HIGH(SPC3) MOV R6,A  ;取得诊断缓冲区为 Diag_Buf1 或 Diag_Buf2 的地点 RET DP_DIAG9: CLR A  ;没有获得诊断缓冲区 MOV R6,A MOV R7,A RET END

相关推荐相关推荐

PROFINET的网络结构

PROFINET的网络结构

   PROFINET 可以接纳星形结构、 树形结构、 总线型结构和环形结构 (冗余) 。    PROFINET 的系统结构如图所示 。 可以看到, PROFINET 手艺的焦点装备是署理

乐发500知识 188 2024-08-11
PROFIBUS-DP主站?樵谛滦虳CS系统中的应用

PROFIBUS-DP主站 ?樵谛滦虳CS系统中的应用

   山东大学为顺应网络手艺的生长, 特殊是 Internet、 Web、 opc 手艺的生长而研发了基于

乐发500知识 138 2024-08-11
DeviceNet的特征

DeviceNet的特征

    1. DeviceNet 的物理/ 介质特征    DeviceNet 具有如下物理/ 介质特征:    ● 主干线 - 分支线结构 。    ● 最多可支持 64 个节点 。    ● 无需中止网络即可扫除节点 。    ● 同时支持网 ...

乐发500知识 172 2024-08-11
FBPRO-8DI八路隔离型数字量输入智能节点的系统设计

FBPRO-8DI八路隔离型数字量输入智能节点的系统设计

PROFIBUS - DP 从站智能测控节点的系统结构如图所示 。 图1 PROFIBUS - DP 从站智能测控节点系统结构图 下面以 FBPRO -8DI 八路隔离型数字量输入智能节点和 FBPRO -4MV 四通道隔离型毫 伏信号输入智能节点为例, 先容 PROFIBUS - DP 从站智能测控节点 ...

乐发500知识 152 2024-08-11
PROFIBUS-DP的用户层

PROFIBUS-DP的用户层

   1. 概述    用户层包括 DDLM 和用户接口/ 用户 (User Interface/ User) 等, 它们在通讯中实现种种 应用功效 (在 PROFIBUS - DP 协议中没有界说第 7 层 (应用层), 而是在用户接口中形貌其 应用) 。 DDLM 是预先界说的直 ...

乐发500知识 167 2024-08-11
电力二极管的结构

电力二极管的结构

    电力 二极管 (又称功率二极管) 由一个 PN 结加上相 应的电极引线和管壳组成, 由 P 区引出的电极称为阳极或 正极, 用字母 A 体现; 由 N 区引出的电极称为阴极或负 极, 用字母 K 体现 。    电力二极管由一个面积较大的 PN 结和 ...

乐发500知识 138 2024-08-11
PROFIBUS-DP用户接口

PROFIBUS-DP用户接口

    1. 1 类主站的用户接口    1 类主站用户接口与用户之间的接口包括数据接口和效劳接口 。 在该接口上处置惩罚与 DP 从站通讯的所有信息交互 。 1 类主站的用户接口如图所示 。    (1) 数据接口    数据接口包括 ...

乐发500知识 143 2024-08-11
PROFIBUS-DP的数据链路层

PROFIBUS-DP的数据链路层

   凭证 OSI 参考模子, 数据链路层划定总线存取控制、 数据清静性以及传输协媾和报

乐发500知识 152 2024-08-11
电力二极管伏安特征及应用

电力二极管伏安特征及应用

    电力 二极管的伏安特征曲线如图所示 。 曲线中横 轴是电压 (U), 即加到二极管南北极引脚之间的电压, 正 电压体现二极管正极电压高于负极电压, 负电压体现二极 管正极电压低于负极电压 。 纵轴是电流 (I), 即流过二 极管的电流, 正偏向体现 ...

乐发500知识 118 2024-08-11
Rockwell的3层网络结构

Rockwell的3层网络结构

   DeviceNet 将基本工业装备 (如限位开关、 光电 传感器、 阀组、 电念头启动器、 历程传

乐发500知识 118 2024-08-11
【网站地图】【sitemap】