<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于調(diào)制解調(diào)器與VB的PLC遠(yuǎn)程通訊系統(tǒng)設(shè)計(jì)

          基于調(diào)制解調(diào)器與VB的PLC遠(yuǎn)程通訊系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2016-12-19 來源:網(wǎng)絡(luò) 收藏

          4 PC端程序設(shè)計(jì)

          4.1 撥號(hào)程序設(shè)計(jì)

          PC端將以VB6.0所帶的通信控件MSCOMM進(jìn)行通信軟件的開發(fā),利用該控件控制串口實(shí)現(xiàn)對(duì)MODEM的控制。控制步驟如下:

          一.通信參數(shù)設(shè)置

          設(shè)置串口端口號(hào),波特率,數(shù)據(jù)位,停止位,奇偶校驗(yàn)位及設(shè)置硬件握手協(xié)議,然后向MODEM發(fā)出DTR(已準(zhǔn)備好)信號(hào)一便接管MODEM,程序如下:

          If MSComm1.PortOpen Then

          MSComm1.DTREnable = True

          Else

          MSComm1.DTREnable = False

          End If

          二.對(duì)MODEM初始化

          發(fā)出一些命令來設(shè)置參數(shù),其中S0=n(n>=1)自動(dòng)應(yīng)答.n為響鈴次數(shù);E0/E1關(guān)閉/打開命令字符回應(yīng);Q0/Q1設(shè)置MODEM返回/不返回結(jié)果碼;M0/M1關(guān)閉/打開MODEM揚(yáng)聲器;Ln(n>=0)設(shè)置MODEM揚(yáng)聲器音量;P/T設(shè)置MODEM脈沖/音頻撥號(hào);程序如下:

          If MSComm1.PortOpen Then

          Do While Not MSComm1.CTSHolding: Loop

          TXD= "ATS0=1E1Q0M1L2T" + Chr(13)

          MSComm1.Output = TXD

          End If

          三.進(jìn)行撥號(hào)

          向MODEM發(fā)出ATD命令,程序如下:

          MSComm1.Output="ATD" & "05925998499"+Chr(13)

          當(dāng)發(fā)送“ATD”+ 電話號(hào)碼 + Chr(13)時(shí),MODEM就開始撥號(hào),撥號(hào)需要一定的時(shí)間,在撥號(hào)的過程中可以不斷讀取MODEM的CD指示燈的狀態(tài),當(dāng)電話撥通后CD指示燈會(huì)點(diǎn)亮。并返回“CONNECT + 波特率”的信息。如果MODEM向PC的回應(yīng)字符串中含有"Connect"或CDHolding屬性值變?yōu)門rue(檢測(cè)出載波),則表示已與遠(yuǎn)方MODEM連機(jī)了,此時(shí)可以傳輸數(shù)據(jù)。

          當(dāng)電話撥通后,MODEM不再接收AT指令,要使其回到命令狀態(tài),則必須發(fā)送“+++”信息,使MODEM回到命令狀態(tài),然后發(fā)送“ATH”+ Chr(13)則可以掛斷電話,程序如下:

          MSComm1.Output="ATH" +Chr(13)

          4.2 通訊程序設(shè)計(jì)

          一.永宏P(guān)LC通訊協(xié)議

          ⑴.開頭字符(STX):ASCI I碼之開始字符STX。

          ⑵.從站號(hào)碼:為兩位數(shù)之16進(jìn)制數(shù)值。

          ⑶.命令號(hào)碼:為兩位數(shù)之16 進(jìn)制數(shù)值,為由主系統(tǒng)要求從系統(tǒng)所執(zhí)行之動(dòng)作類別。

          ⑷.本文資料:本文數(shù)據(jù)可為0(無本文數(shù)據(jù))~500個(gè)ASCII字符。

          ⑸.偵誤值(CHECKSUM): 偵誤值系將前述~將各ASCII字符之16進(jìn)制數(shù)碼值(8位長(zhǎng)度)從頭至尾依序相加,但不考慮進(jìn)位,因此最終結(jié)果為偵誤值。

          ⑹.結(jié)尾字符(ETX):ASCI I碼之結(jié)尾字符ETX之16進(jìn)制數(shù)碼為03H。。

          二.讀數(shù)寫數(shù)

          本系統(tǒng)操作PLC的關(guān)鍵數(shù)據(jù)主要是水位的設(shè)定值PV=R0和當(dāng)前值CV=R1,即要對(duì)暫存器R0進(jìn)行寫操作,R1進(jìn)行讀操作;

          依照協(xié)議VB設(shè)計(jì)的通訊程序必須指定一個(gè)命令碼,向PLC請(qǐng)求數(shù)據(jù)讀取,查的該命令碼為“46”,解釋為:連續(xù)多個(gè)緩存器之?dāng)?shù)據(jù)讀取。讀取R1的PC命令的ASCII碼寫法為:

          “STX+ 01(站號(hào))+46(命令碼)+01(連續(xù)數(shù)據(jù)個(gè)數(shù))+R00001(數(shù)據(jù)開始地址)+LRC(偵誤值)+ETX”

          依照協(xié)議VB設(shè)計(jì)的通訊程序必須指定一個(gè)命令碼,對(duì)PLC緩存器數(shù)據(jù)寫入,查的該命令碼為“47”,解釋為:連續(xù)多個(gè)緩存器之?dāng)?shù)據(jù)寫入。寫入R0的PC命令的ASCII碼寫法為:

          “STX+ 01(站號(hào))+47(命令碼)+01(連續(xù)數(shù)據(jù)個(gè)數(shù))+R00000(數(shù)據(jù)開始地址)+XXXX(寫入的數(shù)據(jù)資料,16進(jìn)制)+LRC(偵誤值)+ETX”

          讀取當(dāng)前值CV=R1,程序如下

          Private Sub Timer1_Timer()

          MSComm1.Output= Chr(2)+ “014601R00001”+ Lrc(“014601R00001”)+Chr(3)

          Delay (10) //延時(shí)

          CV = Val("&H" + Mid(MSComm1.Input, 7, 4)) //數(shù)據(jù)處理,R0放于CV

          CV.Text = CV

          End Sub

          寫入設(shè)定值PV=R0,程序如下

          Private Sub Command1_Click()

          If Len(Hex(PV.Text)) = 4 Then PV = Hex(PV.Text)

          If Len(Hex(PV.Text)) = 3 Then PV = "0" + Hex(PV.Text

          If Len(Hex(PV.Text)) = 2 Then PV = "00" + Hex(PV.Text)

          If Len(Hex(PV.Text)) = 1 Then PV = "000" + Hex(PV.Text) //10進(jìn)制轉(zhuǎn)換16進(jìn)制

          MSComm1.Output=Chr(2)+ “014701R00000”+ PV + +Lrc(“014701R00000” & PV)+Chr(3)

          End Sub

          三.偵誤值(CHECKSUM)計(jì)算

          為VB的編程方便,把該計(jì)算做成單獨(dú)一個(gè)子程序,依所有數(shù)據(jù)累加,舍棄進(jìn)位的規(guī)則VB的LRC編程如下:

          Private Function Lrc(Dats) As String

          Dim i

          Dim Sum

          Sum =2

          For i = 1 To Len(Dats)

          Sum = Sum + Asc(Mid(Dats, i, 1))

          Next i

          Lrc = Right("0" + Hex(Sum + 2), 2)

          End Function

          5結(jié)束語

          采用基于MODEM通訊的設(shè)計(jì)極方便地實(shí)現(xiàn)該小電站生廠調(diào)度,在這種只需短時(shí)間連接控制的系統(tǒng)應(yīng)用上可以大幅度地減小通訊成本,具有一定的推廣價(jià)值。另外,通過MODEM的連接,利用永宏編程軟件可以實(shí)現(xiàn)該設(shè)備的遠(yuǎn)程程序調(diào)試修改,通過兩個(gè)MODEM還可以實(shí)現(xiàn)兩臺(tái)遠(yuǎn)程PLC的CPU連接通訊等。


          上一頁 1 2 下一頁

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();