⑴ 下位機怎麼給上位機的資料庫發數據
還是我來告訴你吧!下位機是ARM的系統,那麼串口和網路理論上都是可以。關鍵還是要看你的這個ARM系統到底支持哪個?或者兩個都支持?串口的話必須要單獨遵守ARM與上位機的通訊協議,一般都是一種專用協議的;如果是網路介面,那麼也有專用協議(一些自定義的通訊協議),也可以是遵守網路的通訊協議,例如tcp/ip等的標准網路通信協議。具體還是要遵守下位機的標准來看,因為上位機一般都支持一些開放的、通用的協議,而下位機一般都有一些專用的、特殊的協議。
⑵ 上位機為PC機,下位機為工控機,下位機如何通過無線網傳輸數據給上位機
1.若兩台機器不是很遠,為啥不直接用網線通過路由連接在一起,省事省力,用無線多不穩定啊!
2.若兩台機器的距離不遠能用wifi解決,你又不想連線,也就是說DLINK 802.11n型無線接入點的方案,那麼你的工控機則有無線模塊才能行,鑒於穩定性問題,一般採用PCI介面或mini-PCI的網卡,而不用USB的網卡。工控機若是那種嵌入式無風扇那種,基本都會留有mini-PCI介面的,你去買一個mini-PCI網卡就行了,天線比較難弄的,怎麼弄出來就看你方法了,若是那些大的4U工控機,你直接買一個PCI無線網卡的就行了。若是不好安裝,那麼就試一下買好一點的USB無線網卡吧? 上位機PC直接連上Dlink路由就行了。
⑶ 【上下位機通信】:下位機(STM32)通過網口(DM9000之類的.)向上位機PC發送數據。求上位機例子程序~
用socket 類 udp tcp 我這給你個 最簡單的例子 udp
伺服器端
ImportsSystem.Net.Sockets
ImportsSystem.Net
Molesocketsever
Submain()
startserver()
EndSub PrivateSubstartserver()
'創建伺服器端的socket
DimsServerAsNewSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp)
DimmyipAsIPAddress
'制訂本地迴路的ip地址
myip=IPAddress.Parse("10.13.115.105")
'設置伺服器埠號
DimsServerepAsNewIPEndPoint(myip,2001)
'設置客戶端的埠號
DimclientepAsNewIPEndPoint(myip,2002)
'將埠與socket綁定
sServer.Bind(sServerep)
WhileTrue
Try
Dimbytes(100)AsByte
'等待客戶端的請求
sServer.ReceiveFrom(bytes,clientep)
DimstrAsString=System.Text.Encoding.ASCII.GetString(bytes)
'將字元轉化成大寫
str=str.ToUpper
bytes=System.Text.Encoding.ASCII.GetBytes(str)
'返回結果
sServer.SendTo(bytes,clientep)
CatcheAsSocketException
EndTry
EndWhile
EndSub
EndMole客戶端
界面 和程序
ImportsSystem.Net.Sockets
ImportsSystem.Net
PublicClassForm1
InheritsSystem.Windows.Forms.Form
PrivateSubbsend_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handlesbsend.Click
'創建客戶端的socket
DimcClientAsNewSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp)
'指定本地迴路的ip地址
Dimmyip,myip1AsIPAddress
myip=IPAddress.Parse("10.13.115.105")
myip1=IPAddress.Parse("10.13.115.136")
'設置伺服器埠號
DimServerepAsNewIPEndPoint(myip1,2001)
'設置客戶端的埠號
DimclientepAsNewIPEndPoint(myip,2002)
'將埠與socket綁定
cClient.Bind(clientep)
Try
DimstrAsString=Textinput.Text
Dimbytes()AsByte=System.Text.Encoding.ASCII.GetBytes(str)
'向伺服器發出請求
cClient.SendTo(bytes,Serverep)
Dimbytes2(100)AsByte
'接受伺服器的響應結果
cClient.ReceiveFrom(bytes2,Serverep)
str=System.Text.Encoding.ASCII.GetString(bytes2)
'將結果顯示在文本框中
Textdisplay.Text=Textdisplay.Text&vbNewLine&str
CatcherAsSocketException
MsgBox(er.ToString)
EndTry
cClient.Close()
EndSub
EndClass
⑷ 上位機與下位機通訊方式的比較
這要看哪種單片機,常用的是串口遠距離是rs485,有一些高檔的單片機也用CAN匯流排通信,這種方式汽車上常用。
http://www.ca800.com/apply/html/2007-12-7/n25043.html
上位機與下位機通信的設計初步
1 引言
現代化集中管理需要對現場數據進行統計、分析、製表、列印、繪圖、報警等,同時,又要求對現場裝置進行實時控制,完成各種規定操作,達到集中管理的目的。加之單片機的計算能力有限,難以進行復雜的數據處理。因此在功能比較復雜的控制系統中,通常以PC機為上位機,單片機為下位機,由單片機完成數據的採集及對裝置的控制,而由上位機完成各種復雜的數據處理及對單片機的控制。
2 PC機與單片機8051之間的通信特點
在工業控制系統中,各種數據的採集和執行機構的控制都是由下位機或探測站來完成。由於單片機具有體積小、價格低廉、可應用於惡劣工業環境的特點,在分布式控制系統中大多採用單片機作為下位機來進行數據採集和現場控制。在這些應用中,單片機只是直接面向被控對象底層。而對採集到的數據進行進一步分析和處理的工作是由功能強大的主控PC機來完成的。因此,PC機和單片機之間就有著大量的數據交換。
3 PC機與單片機8051通信的硬體設計
通常PC機和單片機之間的通信是通過串列匯流排RS-232實現的。因此採用一種以MAX232為核心的通信介面電路。該介面電路適用於由一台PC機與多個8051單片機串列通信的設計,其原理和方法同樣適用於PC機與其它單片機之間的串列數據通信。其原理框圖見圖1:
圖1 單片機與PC機通信原理框圖
該框圖中,起著重要作用的是RS-232C通信介面電路。它是上位機和下位機之間信息傳遞的樞紐,一切數據的傳輸必需由它完成,上位機直接利用它的RS-232串列口,為此,採用了RS-232串列通信來接收或上傳數據和指令。但RS-232信號的電平和單片機串口信號的電平不一致,必須進行二者之間的電平轉換。在此電路中,採用MAX232實現TTL邏輯電平和RS-232電平之間的相互轉換。 MAX232由單一的+5V電源供電,只需配接5個高精度10μF/50V的鉭電容即可完成電平轉換。因此,避免了用1488和1489時必需兩路電源的麻煩。轉換後的串列信號TXD、RXD直接與PC機的串列口連接。如此設計,既可發揮出PC機強大的計算和顯示功能,又可以體現出單片機靈活的控制功能,有利於對現場信號的實時採集、處理和監控。
3.1 8051與PC機之間的通信協議
在許多場合的測控系統中,約定PC機和8051單片機的通信協議為:
Number+Command+Length+Data+Check
Number:下位機的機號,若設計中有3台下位機,即Number 取01H,02H,03H,分別代表:#1,#2,#3號下位機;
Command:本次命令的代碼;Length:本次發送數據段的位元組數;
Data:要發送的數據段;
Check:1位元組的校驗碼。
本設計只考慮一個8051單片機,故可對上述通信協議進行簡化。
3.2 8051和PC機之間通信的軟體設計
VB提供了串列埠控制項Mscomm方便應用程序實現串列通訊,該控制項屏蔽了通信過程中的底層操作,程序員應用時只需設置、監視Mscomm控制項的屬性和事件即可完成對串列口的初始化和數據的輸入、輸出工作。匯編語言是一種執行效率高、可讀性強的語言。為實現通訊正常,PC機與單片機約定如下:
波特率:2400bps;
信息格式:1個起始位,8位數據位,1個停止位,無奇偶校驗位;
串列口操作模式:標准非同步串列通信,串列口模式1;
傳送方式:PC機採用查詢方式接收數據,8051單片機採用中斷方式接收信息。
(1) 總體功能設計
通過綜合分析,本系統至少應具備如下功能:
PC機與單片機8051都可發送和接收數據,進行可以非同步串列通信;
PC機鍵盤輸入發送給單片機8051,單片機接收PC機發來的數據並送LED顯示;
單片機8051鍵盤的每次輸入以BCD碼送給單片機的LED顯示,單片機發送的數據由四次按鍵的BCD碼組成,發送時作為一個隊列發送,PC機接收單片機發送來的數據並送窗口顯示;
上位機程序即PC端程序採用VB6.0製作,人機界面友好,界面簡潔,功能完善,下位機程序即單片機端採用匯編語言進行開發。
系統功能模塊圖見圖2和圖3。
圖2 上位機模塊
圖3 下位機模塊
(2) 通訊流程圖
主程序
實現下位機即單片機8051系統的初始化,8255初始化,設置單片機串列口控制寄存器SCON,電源控制寄存器PCON,定時器T1初始化,開中斷。
系統不停的對鍵盤和RxD線進行監測,當通過掃描發現有按鍵輸入時,經過按鍵處理後就啟動該模塊向上位機PC端發送所檢測到的鍵碼;當單片機8051監測到RxD線上有數據到時就啟動該子程序對PC發來的數據進行接收,同時經過BCD轉換送單片機系統的LED進行顯示以方便和PC機發送的數據進行比較,以確認通信是否正確。流程圖見圖4。
圖4 主程序流程圖
圖5 數據隊列發送流程圖
數據隊列發送子程序
當單片機8051鍵盤已有4次輸入時,就啟動該模塊向上位機PC端發送所檢測到的鍵碼。流程圖見圖5。
鍵碼發送子程序
當單片機8051檢測到鍵盤有輸入時,就通過按鍵處理啟動該模塊向上位機PC端發送所檢測到的鍵碼。流程圖見圖6。
圖6 鍵碼發送流程圖
圖7 數據接收流程圖
圖8 BCD轉換流程圖
數據接收子程序
當8051監測到RxD線有數據到時就啟動子程序對PC發來的數據進行接收。流程圖見圖7。
BCD碼轉換子程序
該程序通過把#DATABUF中的十進制數值除以100(64H),得到的商就是百位數的BCD碼,然後把余數除以10(0AH)便可以得到十位和個位的BCD碼,從而得到相應的三位BCD碼。在該子程序中進行雙位元組無符號二進制數的除法時要用到前面介紹的多位元組無符號二進制數的除法演算法,由於原理相似,在此不再重述。流程圖見圖8。在此程序中因原來的接收數據存在於#DATABUF附近,為防止發生信息覆蓋故使用了暫存單元來暫時寄存除法計算的中間值。
LED顯示子程序
該子程序實現對接收數據進行BCD碼轉換並輸出到LED,採用動態顯示的方式進行顯示。流程圖見圖9:
圖9 LED顯示流程圖
4 結束語
上位機與下位機通訊是一個應用性廣,適用性強的基礎設計,可以應用在變頻器上。要真正做好一個具有良好人機界面及交互性,使上位機和下位機能正常高效的通訊,需要設計人員具有很強的VB和單片機匯編語言的駕馭能力。同時,需要相當程度的設計經驗,這樣才能對設計中出現的問題採取行之有效的解方案。本文的研究對以後進一步深入奠定了基礎。
參考文獻
[1> 楊恢先,黃輝先. 單片機原理及應用. 長沙:國防科技大學出版社,2003.
[2> 白 鵬,莫衛東等. VB6.0高級編程技巧. 西安:西安交通大學出版社,2002.
作者簡介
朱建林(1943-) 男 教授/博士生導師 研究方向為交流調速系統與電力電子技術,計算機控制技術。
郭有貴(1968-) 男 博士生 研究方向為交流調速系統與電力電子裝置,計算機控制技術。