必博Bibo

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

必博Bibo知识 | 2024-08-11| 75

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 手艺的焦点装备是署理

必博Bibo知识 88 2024-08-11
PROFIBUS-DP主站?樵谛滦虳CS系统中的应用

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

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

必博Bibo知识 60 2024-08-11
DeviceNet的特征

DeviceNet的特征

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

必博Bibo知识 67 2024-08-11
FBPRO-8DI八路隔离型数字量输入智能节点的系统设计

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

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

必博Bibo知识 75 2024-08-11
PROFIBUS-DP的用户层

PROFIBUS-DP的用户层

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

必博Bibo知识 66 2024-08-11
电力二极管的结构

电力二极管的结构

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

必博Bibo知识 60 2024-08-11
PROFIBUS-DP用户接口

PROFIBUS-DP用户接口

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

必博Bibo知识 79 2024-08-11
PROFIBUS-DP的数据链路层

PROFIBUS-DP的数据链路层

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

必博Bibo知识 83 2024-08-11
电力二极管伏安特征及应用

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

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

必博Bibo知识 58 2024-08-11
Rockwell的3层网络结构

Rockwell的3层网络结构

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

必博Bibo知识 55 2024-08-11
【网站地图】【sitemap】