📄 mc.bas
字号:
'--------------------------------------------------------------
' (c) 2003-2004 MC Electronics
'--------------------------------------------------------------
' file: MC.BAS
' 2004.10.20
'--------------------------------------------------------------
'$sim
'note : tested in PIN mode with 4-bit
'使用AT90S8515芯片
'PA0~PA7用于驱动LCD;
'PB0~PB7用于接受检测信号;
'PD0~PD7用于接受按键输入;
'PC0~PC7用于驱动电或用于LED。
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Rem with the config lcdpin statement you can override the compiler settings
Config Lcd = 16 * 4 'Configure Lcd Screen
Config Portb = Output , Portd = Input
Config Portc = Output
Config Watchdog = 2048 'reset after 2048 mSec
'定义PB0~7用于接受现场采样输入:
'Pinb.0-缺板信号1; 信号来自生产线入口光电开关触点1
'Pinb.1-缺板信号2; 信号来自生产线入口光电开关触点2
'Pinb.2-310母液缸下限液位; 信号来自310母液缸下限液位开关触点
'Pinb.3-ORP高/低值; 信号来自ORP控制器高/低报警开关触点3
'Pinb.4-酸储罐液位; 信号来自HCL储罐下限液位开关触点
'Pinb.5-电导低值; 信号来自电导率控制器低报警开关触点3
'Pinb.6-母液比重高值; 信号来自比重控制器高报警开关触点3
'Pinb.7-采样管入口流量; 信号来自采样管流量检测开关触点
'定义PD0~7用于接受按键输入:
'Pind.0-加水启动; 信号来自本机按钮开关触点WATER
'Pind.1-加酸启动; 信号来自本机按钮开关触点HAC
'Pind.2-报警应答; 信号来自本机报警应答按钮开关触点ACK(INT0)
'Pind.3-手/自动选择; "1"--AUTO;"0"--MAN.信号来自手/自动选择按钮(INT1);
'Pind.4-加氧化剂启动; 信号来自本机按钮开关触点OXG及ORP控制器开关触点
'Pind.5-自动加水控制; 信号来自离子浓度控制器副开关触点2
'Pind.6-自动加酸控制; 信号来自电导率控制器副开关触点2
'Pind.7-自动加氧化剂控制;信号来自ORP控制器副开关触点2
'定义PC0~7用于控制输出:
'Pinc.0-加水联锁控制; 串联于比重控制器主开关触点接相端
'Pinc.1-加酸联锁控制; 串联于电导率控制器主开关触点接相端
'Pinc.2-加OXG联锁控制; 串联于ORP控制器主开关触点接相端
'Pinc.3-手动加水控制; 并联于比重控制器主开关触点1
'Pinc.4-手动加酸控制; 并联于电导率控制器主开关触点1
'Pinc.5-手动加氧化剂控制;并联于ORP控制器主开关触点1
'Pinc.6-报警控制; 切短总报警线(另接)
'Pinc.7-空
'Portb = &HFF '置上拉电阻有效
Portd = &HFF '置上拉电阻有效
'程序词典:1.逻辑"0"对应低电平0~2V,RESET设置; 逻辑"1"对应高电平3~5V,SET设置;
' 2.所有继电器线圈在低电平(0~2V)时得电;在高电平(3~5V)时失电.
Declare Sub Updatalcd '定义LCD口扫描子程序
Declare Sub Oklcd '定义LCDOK赋值子程序
Declare Sub Ooflcd '定义LCDOOF赋值子程序
Declare Sub Creatlcd '定义LCD制表子程序
Declare Sub Ackalarm '定义系统报警扫描子程序
'定义各全局变量
Dim Si As Byte , Ctl As Byte , I As Byte , Chkbox As Byte , Point As Byte , Ackdelay As Byte
'SI输入口状态变量;Ctl:控制输入口状态变量;I:全局中间变量;
'CHKBOX:输入口位状态变量;POINT:输入口状态检测指针;ackdelay:系统报警应答延时计数器
Dim Alarm As Byte , Lalarm As Byte '
'Alarm:新报警字;"1"时系统报警;Lalarm:原报警字;"1"时系统报警;0~7:
Dim Automan As Bit , Inlock1 As Bit , Inlock2 As Bit , Inlock3 As Bit , Amkey As Byte , 8cake As Byte
'AUTOMAN:操作模式标志"0"为手动;
'INLOCK1:联锁有效操作标志,"1"时联锁,锁定H2O;
'INLOCK2:联锁有效操作标志,"1"时联锁;锁定HAC;
'INLOCK3:联锁有效操作标志,"1"时联锁;锁定OXG;
'AMKEY:操作模式按钮除颤标志,"0"为模式可变;
'8cake:
Dim Cnv As String * 2 '定义电导率显示内容变量
Dim Hac As String * 4 '定义酸显示内容变量
Dim Th As String * 2 '定义酸罐液位显示内容变量
Dim Orp As String * 2 '定义ORP显示内容变量
Dim Oxg As String * 4 '定义氧化剂显示内容变量
Dim Tx As String * 2 '定义中限液位显示内容变量
Dim Sg As String * 2 '定义310罐液位显示内容变量
Dim H2o As String * 4 '定义水泵状态显示内容变量
Dim F1 As String * 2 '定义PCB供板显示内容变量1
Dim Am As String * 2 '定义手/自动显示内容变量
Dim Flw As String * 4 '定义检测液流量显示内容变量
Dim F2 As String * 2 '定义PCB供板显示内容变量2
'所有显示变量赋值长度必须在串长之内.
Config Lcd = 20 * 4 'configure lcd screen
Start Watchdog 'start the watchdog timer
'主程序开始
Flw = "OK "
Automan = 1 '置为自动
Am = "A"
Amkey = 0
Set Portc.6 '停报警,报警控制位置"1"
Lalarm = 0
Call Creatlcd '建立屏幕列表
Call Oklcd '显示变量赋值
Call Ooflcd
Call Updatalcd '完成显示
Do
Reset Watchdog
Alarm = 0 '停报警
If Inlock1 = 0 Then '如上周期连锁标志清零
Reset Portc.0 '预切除连锁,常开闭合,允许H2O投料 '
If Inlock2 = 0 Then '如上周期连锁标志清零
Reset Portc.1 '预切除连锁,常开闭合,允许HCL投料
End If
If Inlock3 = 0 Then '如上周期连锁标志清零
Reset Portc.2 '预切除连锁,常开闭合,允许YH310投料
End If
End If
Inlock1 = 0 '清H2O连锁标志,常开闭合,允许投料
Inlock2 = 0 '清HCL连锁标志,常开闭合,允许投料
Inlock3 = 0 '清OXG连锁标志,常开闭合,允许投料
Si = Pinb And &HFF '读入现场信号,被置"0"位即有输入
If Si.7 = 0 Then '采样管无流量
Set Alarm.0
Inlock1 = 1 '设H2O联锁标记
Inlock2 = 1 '设HCL联锁标记
Inlock3 = 1 '设OXG联锁标记
Set Portc.0 '连锁失电,常开断开,禁止H20投料
Set Portc.1 '连锁失电,常开断开,禁止HCL投料
Set Portc.2 '连锁失电,常开断开,禁止YH310投料
Flw = "Brk" '文字报警
Else
Reset Alarm.0
Flw = "OK " '文字报警
End If
If Si.6 = 0 Then '离子浓度过高
Set Alarm.1
Sg = "Hi" '置报警
Else
Reset Alarm.1
Sg = "OK" '停报警
End If
If Si.5 = 0 Then '电导率过高
Set Alarm.2 '置报警
Cnv = "Hi"
Else
Reset Alarm.2 '停报警
Cnv = "OK"
End If
If Si.4 = 0 Then 'HCL储罐液位低
Set Alarm.3 '置报警
Th = "Lw"
Inlock2 = 1 '置连锁标志,禁止HCL投料
Set Portc.1 '连锁失电,常开断开,禁止投料
Else
Reset Alarm.3 '停报警
Th = "OK"
End If
Reset Watchdog
If Si.3 = 0 Then 'ORP过高
Set Alarm.4 '置报警
Orp = "Hi"
Else
Reset Alarm.4 '停报警
Orp = "OK"
End If
If Si.2 = 0 Then 'YH310储罐液位低
Set Alarm.5
Set Portc.2
Inlock3 = 1 '置连锁标志,禁止YH310投料
Tx = "Lw" '连锁失电,常开断开,禁止YH310投料
Else
Reset Alarm.5
Tx = "OK"
End If
If Si.1 = 0 Then 'PCB缺板检测1
If Si.0 = 0 Then 'PCB缺板检测2
If 8cake = 0 Then
Set Portc.2 'PCB断供,连锁失电,常开断开,禁止加310
Inlock3 = 1 '置连锁标志,禁止YH310投料
Else
Waitms 300 '延时
Decr 8cake
End If
F2 = "Br"
Else
F2 = "OK"
8cake = &HFF
End If
F1 = "Br"
Else
F1 = "OK"
If Si.0 = 0 Then
F2 = "Br"
Else
F2 = "OK"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -