PLC主程序
網絡1
// 設置控製方式為自由口通信方式,啟動接收字符中斷 //
PLC首次掃描
自由口通信,波特率為9600,數據位8,停止位1,無校驗
初始化RCV,允許RCV,有結束符,檢查空閑時間
結束符為 A
空閑時間為5MS
一次接收的最大字符為6個
啟動通信口,接收完成中斷
全局允許中斷
接收數據
LD SM0.1
MOVB 16#09, SMB30
MOVB 16#B0, SMB87
MOVB 16#0A, SMB89
MOVB 6, SMB94
ATCH INT_0, 23
ENI
RCV VB199, 0
網絡2
// 檢測溫度送VW0 //
轉換成實際溫度值
從工作站編號送到輸出緩衝區
檢測溫度送輸出緩衝區
LD SM0.0
MOVW AIW0, VW0
/I +54, VW0
MOVW AIW2, VW2
/I +54, VW2
MOVW 1, VW300
MOVW VW0, VW302
MOVW VW2, VW304
網絡3
// 設置溫度控製上限和下限//
LD SM0.0
MOVW +350, VW4
MOVW +450, VW6
網絡4
// 檢測溫度低於下限,則輸出加溫 //
LDW< VW0, VW4
A SM0.5
S Q0.0, 1
網絡5
// 檢測溫度高於上限,則輸出降溫 //
LDW> VW0, VW6
A SM0.5
R Q0.0, 1
網絡6
//準備傳送參數 //
發送字節數據,送VB99
發送檢測溫度數據,送VW100
發送工作站編號數據,送VW102
LD SM0.0
MOVB 6, VB99
MOVW VW300, VW100
MOVW VW302, VW102
MOVW VW304, VW104
網絡7
// 傳送數據 //
LD SM0.5
XMT VB99, 0
中斷程序
網絡1
//通信口接收數據完成後的中斷 //
// SMB86 等於16#20,表示PLC收到結速符 //
收到結束符,把收到的數據傳到VB400
中斷有條件返回
否則繼續接收
LDB= SMB86, 16#20
MOVB VB200, VB400
CRETI
NOT
RCV VB199, 0
//*******************************//
VB源程序
Dim x1, k1, k2
Dim p11, p22 定義變量
Dim aa() As Byte 定義數組
Private Sub Command1_Click() 開始監控,定時器1有效
Timer1.Enabled = True
End Sub
Private S ub Command2_Click() 退事程序,定時器1無效
Timer1.Enabled = False
Cls 清屏
Unload Me
End Sub
Private Sub Form_Load() 初始化
Timer1.Enabled = False 定時器1無效
Timer1.Interval = 100 定時器1時間為0.1S
Timer2.Enabled = True 定時器2有效
Timer2.Interval = 1000 定時器2時間為1S
Picture1.ScaleMode = 0 定義縱橫坐標
MSComm1.CommPort = 1 設定端口號
MSComm1.Settings = "9600,n,8,1" 設定通訊波特率
MSComm1.InputLen = 6 輸入緩衝區為6個字符
MSComm1.InBufferSize = 256 接收緩衝器大小
MSComm1.OutBufferSize = 256 輸出緩衝器大小
MSComm1.InputMode = comInputModeBinary 以二進製傳輸
MSComm1.OutBufferCount = 0   ; 清空發送緩衝區
MSComm1.InBufferCount = 0 清空接收緩衝區
End Sub
Private Sub Timer1_Timer() 定時器1有效,觸發接收事件
MSComm1.PortOpen = True 打開端口
ReDim aa(0 To 5) 定義動態數組
k1 = 0 識別PLC站號,為1
If k1 = 0 Then MSComm1.Output = "1" + Chr(10) + Chr(13) 發送
Do While MSComm1.InBufferCount = 0 準備接收數據
Loop
aa = MSComm1.Input 接收數據存入數組
If aa(0) > 64 Then GoTo xxx:
k2 = Int(aa(0) * 255 + aa(1) * 1)
Select Case k2
Case 1
p11 = Int(aa(2) * 255 + aa(3) * 1)
p22 = Int(aa(4) * 255 + aa(5) * 1)
Case Else
End Select
k1 = k1 + 1
If k1 > 2 Then k1 = 0
xxx:
MSComm1.PortOpen = False
End Sub
Private Sub Timer2_Timer() 繪製各中頻爐的溫度曲線
x1 = x1 + 1 時間增加為1S
Picture1.PSet (x1, p11), VBRed 繪製1#爐的溫度曲線,為紅色
Picture1.PSet (x1, p22), vbBlue 繪製2#爐的溫度曲線,為黃色
Text1.Text = Str(p11) 輸出1#爐溫度值
Text2.Text = Str(p22) 輸出2#爐溫度值
Text3.Text = Str(x1) 輸出監控時間
End Sub