專利名稱::主動型plc智能液晶顯示器的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種用于PLC上的人機(jī)接口設(shè)備,尤其涉及一種主動型PLC智能液晶顯示器。
背景技術(shù):
:隨著工業(yè)自動化的發(fā)展,基于PLC的自動化設(shè)備幾乎遍布所有自動化控制領(lǐng)域。在PLC的應(yīng)用過程中,操作人員經(jīng)常需要親臨現(xiàn)場檢查設(shè)備的運(yùn)行狀態(tài),對機(jī)器進(jìn)行故障的預(yù)防、分析和檢修,同時根據(jù)現(xiàn)場狀況隨時修改PLC的某些繼電器的狀態(tài)或數(shù)值從而達(dá)到優(yōu)化現(xiàn)場生產(chǎn)過程的目的。但現(xiàn)場情況復(fù)雜,面對數(shù)量眾多的各種型號的設(shè)備,操作人員根本無法及時地獲取各臺設(shè)備的運(yùn)行狀況或數(shù)據(jù),也不可能在緊急時刻對設(shè)備做出迅速的反應(yīng),更不可能有效地預(yù)防PLC可能出現(xiàn)的各種故障,同時在出現(xiàn)故障的情況下檢修的工作量非常大、效率非常低,因此(1)如何能系統(tǒng)、全面、方便、準(zhǔn)確、主動地了解、改變實時的現(xiàn)場狀況;(2)如何能高效、智能地進(jìn)行故障預(yù)防、分析和排除以及現(xiàn)場保護(hù),其中不但需要診斷現(xiàn)場工作設(shè)備的故障,還需要診斷PLC自身的故障,都是目前亟需解決的問題。針對問題(l)目前解決此問題的方法有a、被動接收PLC發(fā)回的數(shù)據(jù);b、向PLC申請獲取顯示數(shù)據(jù)。a方法的原理是由PLC決定需要顯示哪些繼電器的數(shù)據(jù)或狀態(tài),并發(fā)給顯示設(shè)備,顯示設(shè)備再做相應(yīng)的顯示。此方法中顯示設(shè)備只是被動接收數(shù)據(jù),PLC的CPU既要控制現(xiàn)場設(shè)備又得向顯示設(shè)備傳遞數(shù)據(jù),這樣一方面PLC的負(fù)擔(dān)過重,無法保證傳遞數(shù)據(jù)的實時性,另一方面操作人員也無法通過顯示設(shè)備控制、調(diào)整現(xiàn)場的參數(shù),互動性、實時性都比較差。b方法的原理是顯示設(shè)備和PLC進(jìn)行互動通訊,首先由顯示設(shè)備發(fā)出更新數(shù)據(jù)請求,PLC將相應(yīng)的繼電器地址、數(shù)據(jù)、占用字節(jié)數(shù)等相關(guān)信息整合處理后以規(guī)定的格式傳送給顯示設(shè)備,顯示設(shè)備再按照用戶的組態(tài)要求進(jìn)行顯示。數(shù)據(jù)的整合處理過程將占用PLC的CPU的大量工作時間,并且CPU也只能在控制現(xiàn)場設(shè)備的空閑間隙做通訊應(yīng)答工作,這樣就不能保證獲取數(shù)據(jù)的實時性,也可能造成數(shù)據(jù)的丟失,可靠性、實時性都比較弱。針對問題(2)目前解決此問題的方法有a、人工憑經(jīng)驗檢修;b、查專業(yè)的手冊資料;c、請教相關(guān)專家;d、借助故障診斷儀。a方法只有經(jīng)驗豐富的專業(yè)技術(shù)人員才能做到,面對復(fù)雜的現(xiàn)場設(shè)備,不同的專業(yè)技術(shù)人員可能會有不同的判斷,再加上人的能力、精力有限,不可能做到面面俱到,容易出現(xiàn)誤操作。此方法的專業(yè)性要求過高,故障診斷時間長且準(zhǔn)確度低,很難滿足工業(yè)現(xiàn)場的要求。b方法中當(dāng)設(shè)備出現(xiàn)故障時,專業(yè)技術(shù)人員通過檢査PLC的相關(guān)狀態(tài),對應(yīng)地査看相關(guān)的技術(shù)手冊,然后進(jìn)行相應(yīng)的處理,此方法的專業(yè)性要求也過高,效率也比較低。c方法則更耽誤時間,需要與專家聯(lián)系進(jìn)行處理,這樣故障的診斷、處理時間都不能保證。d方法是借助于專業(yè)的故障診斷儀給出合理的診斷與分析結(jié)果,幫助操作人員快速解決故障,此方法需要購買高額費(fèi)用的診斷儀,且現(xiàn)場設(shè)備眾多,不可能每臺設(shè)備都配置一臺診斷儀,這樣一方面費(fèi)用比較高,另一方面也無法同時對多臺機(jī)器進(jìn)行故障的預(yù)防與分析。上述幾種方法都沒有實現(xiàn)在緊急情況下對現(xiàn)場設(shè)備進(jìn)行應(yīng)急保護(hù)從而避免更大損失的功能。
發(fā)明內(nèi)容本發(fā)明的目的是提供一種主動型PLC智能液晶顯示器,其不占用PLC的主控程序資源,可靠性和實時性提高,并且操作人員可以實時調(diào)整繼電器信息,提高了交互性。為解決上述技術(shù)問題,本發(fā)明包括液晶顯示器,液晶顯示器前設(shè)置觸摸屏,液晶顯示器和觸摸屏連接CPU,CPU連接內(nèi)存儲器、程序存儲器和輸出通訊接口。本發(fā)明利用PLC內(nèi)部共用存儲區(qū)的雙向數(shù)據(jù)讀寫功能,在不占用PLC的主控程序資源的前提下,通過PLC的通訊模塊并根據(jù)共用存儲區(qū)的地址從而定時地直接成批地獲取共用存儲區(qū)內(nèi)的數(shù)據(jù)內(nèi)容,其中包括現(xiàn)場原始數(shù)據(jù)以及PLC內(nèi)部運(yùn)行狀態(tài)、故障代碼等,對讀取到的原始數(shù)據(jù)自動進(jìn)行分析、運(yùn)算等處理,然后按照用戶的組態(tài)要求進(jìn)行顯示,對故障代碼等數(shù)據(jù)進(jìn)行解析從而對PLC進(jìn)行故障的預(yù)防與排除,具備主動控制功能,在實時獲取現(xiàn)場數(shù)據(jù)的同時又減輕了PLC的工作負(fù)擔(dān);操作人員通過顯示設(shè)備就可以監(jiān)控現(xiàn)場各設(shè)備的參數(shù),互動性、可操作性較強(qiáng);具備智能故障診斷、排除功能,當(dāng)PLC出現(xiàn)故障或處于危險狀態(tài)時,本發(fā)明會自動報警提醒并給出診斷結(jié)果,幫助操作人員及時發(fā)現(xiàn)隱患、排除故障,提高了現(xiàn)場的維護(hù)性、安全性;當(dāng)出現(xiàn)緊急情況時,本發(fā)明會根據(jù)現(xiàn)場狀況自動進(jìn)行設(shè)備的切換、暫停等保護(hù)動作,安全性較強(qiáng);豐富的智能圖文顯示功能進(jìn)一步提高了顯示PLC設(shè)備時的多樣性、直觀性、實時性、生動性、多層次性,同時以仿真現(xiàn)場設(shè)備運(yùn)行情況的動態(tài)畫面形象地展示現(xiàn)場狀態(tài)。圖l為本發(fā)明的第一種實施方式的硬件系統(tǒng)框圖。圖2為本發(fā)明的第一種實施方式軟件系統(tǒng)結(jié)構(gòu)圖。圖3為本發(fā)明的第一種實施方式組態(tài)處理軟件程序流程圖。圖4為本發(fā)明的第二種實施方式組態(tài)處理軟件中數(shù)據(jù)處理部分的程序流程圖。圖5為本發(fā)明的第二種實施方式故障分析應(yīng)用程序的程序流程圖。具體實施方式本發(fā)明的第一種實施方式如圖1所示本發(fā)明采用液晶顯示器,液晶顯示器前設(shè)置觸摸屏,液晶顯示器和觸摸屏連接CPU,CPU連接SDRAM內(nèi)存儲器、FLASHR0M程序存儲器和輸出通訊接口,CPU采用ARM9系列核心模塊;液晶顯示屏采用彩色高分辨率TFT;觸摸屏配備4線電阻式觸摸屏;輸出通訊接口采用RS232接口與PLC實時通訊。CPU與內(nèi)存儲器以及程序存儲器的連接電路為現(xiàn)有技術(shù),輸出通訊接口電路也為現(xiàn)有技術(shù)。液晶顯示器和觸摸屏與CPU的連接電路為現(xiàn)有技術(shù)。如圖2所示本發(fā)明的軟件部分結(jié)構(gòu),硬件驅(qū)動程序為現(xiàn)有技術(shù),由硬件廠商提供。專用嵌入式操作系統(tǒng),采用現(xiàn)有的WinCE或Linux操作系統(tǒng)。采用VC編寫組態(tài)軟件,組態(tài)軟件采用面向?qū)ο蠓椒?,通過調(diào)用動態(tài)鏈接庫文件,支持PLC各種通訊協(xié)議如Modbus、hostlink-fins等,并對各PLC廠家的共用存儲區(qū)的統(tǒng)一接口定義,使得本發(fā)明兼容市場上主流的廠家的各種型號的PLC;采用多線程技術(shù)使數(shù)據(jù)讀寫、畫面顯示等多項任務(wù)滿足實時需求;利用組件對象模型使用戶可以方便地進(jìn)行畫面的編輯;豐富的圖形元件庫增強(qiáng)了顯示界面的實用性與美觀性。如圖3組態(tài)軟件固化在液晶屏顯示器的程序存儲器中其步驟如下(1)CPU通過輸出通訊接口,請求PLC將PLC存儲器中共用存儲區(qū)中的所有設(shè)備數(shù)據(jù)一次不中斷的傳回內(nèi)存儲器;(2)根據(jù)預(yù)先定義的內(nèi)存分配表構(gòu)造設(shè)備鏈表,并根據(jù)設(shè)備鏈表將各設(shè)備記錄的設(shè)備數(shù)據(jù)存入設(shè)備鏈表;(3)將顯示設(shè)備映射表和控制設(shè)備映射表中各設(shè)備記錄的當(dāng)前數(shù)據(jù)項,根據(jù)設(shè)備鏈表的相應(yīng)設(shè)備記錄的數(shù)據(jù)項進(jìn)行更新,構(gòu)造成完整的顯示設(shè)備映射表和控制設(shè)備映射表;(4)在CPU的控制下將顯示設(shè)備映射表傳給顯示模塊,同時將控制設(shè)備映射表傳給控制模塊;(5)顯示模塊調(diào)用液晶顯示器驅(qū)動在液晶顯示器上,顯示代表各設(shè)備的圖元和圖元對應(yīng)設(shè)備映射表中的設(shè)備記錄的當(dāng)前數(shù)據(jù)項;每隔90ms由CPU控制重復(fù)(1)_(5)的上述步驟;和(a)當(dāng)用戶通過觸摸屏修改液晶顯示器上顯示代表特定設(shè)備的圖元時,修改后的新設(shè)備信息通過觸摸屏驅(qū)動程序傳給控制模塊,控制模塊更新控制設(shè)備映射表中圖元對應(yīng)的設(shè)備記錄的當(dāng)前數(shù)據(jù)項,再根據(jù)新控制設(shè)備映射表更新設(shè)備鏈表,然后在CPU的控制下將新設(shè)備鏈表通過輸出通訊接口,傳回給PLC存儲器中共用存儲區(qū)。PLC存儲器內(nèi)的設(shè)備鏈表為現(xiàn)有技術(shù)中已經(jīng)公開的數(shù)據(jù)結(jié)構(gòu)。1.顯示設(shè)備映射表中各記錄的數(shù)據(jù)格式如下:<table>tableseeoriginaldocumentpage6</column></row><table>2.控制設(shè)備映射表中各記錄的數(shù)據(jù)格式如下:<table>tableseeoriginaldocumentpage6</column></row><table>圖元為在顯示器上用于代表設(shè)備和設(shè)備狀態(tài)以及設(shè)備狀態(tài)調(diào)整的圖片、表格、文字表達(dá)形式。圖元通過鏈表與設(shè)備鏈表間建立對應(yīng)關(guān)系,使圖元與PLC現(xiàn)場設(shè)備間建立對用關(guān)系,同時通過對圖元屬性的設(shè)置也可實現(xiàn)對設(shè)備的控制。圖元的表示形式便于用戶直觀的了解PLC控制的設(shè)備的狀態(tài),以及方便對設(shè)備進(jìn)行必要的控制。如圖4中,內(nèi)存分配表為預(yù)先定義的記錄與PLC連接的各種設(shè)備的在PLC地址的數(shù)據(jù)庫。內(nèi)存分配表中記錄的數(shù)據(jù)格式為設(shè)備名、地址、占用字節(jié)數(shù)。設(shè)備鏈表中記錄的數(shù)據(jù)格式為設(shè)備名、地址、占用字節(jié)數(shù)、數(shù)據(jù)。本發(fā)明的第二種實施方式第二種實施方式的硬件結(jié)構(gòu)與第一種實施方式相同,只是在第一種實施方式的組態(tài)程序中加入故障分析應(yīng)用程序,如圖3、圖4和圖5其步驟如下(1)CPU通過輸出通訊接口,請求PLC將PLC存儲器中共用存儲區(qū)中的設(shè)備鏈表一次不中斷的傳回內(nèi)存儲器;(2)根據(jù)預(yù)先定義的內(nèi)存分配表構(gòu)造設(shè)備鏈表,并根據(jù)設(shè)備鏈表將各設(shè)備記錄的設(shè)備數(shù)據(jù)存入設(shè)備鏈表;(3)將顯示設(shè)備映射表和控制設(shè)備映射表中各設(shè)備記錄的當(dāng)前數(shù)據(jù)項,根據(jù)設(shè)備鏈表的相應(yīng)設(shè)備記錄的數(shù)據(jù)項進(jìn)行更新,構(gòu)造成完整的顯示設(shè)備映射表和控制設(shè)備映射表;同時,(I)根據(jù)設(shè)備鏈表更新內(nèi)存儲器上存儲的設(shè)備運(yùn)行狀態(tài)映射表中對應(yīng)的設(shè)備記錄的當(dāng)前數(shù)據(jù)項;(II)將設(shè)備的記錄當(dāng)前數(shù)據(jù)項與其預(yù)先設(shè)定的正常范圍上限項和下限項進(jìn)行比較,如果設(shè)備記錄當(dāng)前數(shù)據(jù)項小于下限的30%,則產(chǎn)生故障代碼等于l,如果設(shè)備記錄當(dāng)前數(shù)據(jù)項大于下限的1.7倍,則產(chǎn)生故障代碼等于2,如果設(shè)備記錄當(dāng)前數(shù)據(jù)項大于下限的30%并且小于等于下限的70%,則產(chǎn)生故障代碼等于3,如果設(shè)備記錄當(dāng)前數(shù)據(jù)項大于上限的1.3倍并且小于等于上限的1.7倍,則產(chǎn)生故障代碼等于4,如果設(shè)備記錄當(dāng)前數(shù)據(jù)項大于下限的70%并且小于下限,則產(chǎn)生故障代碼等于5,如果設(shè)備記錄當(dāng)前數(shù)據(jù)項大于上限并且小于等于上限的1.3倍,則產(chǎn)生故障代碼等于6,將故障設(shè)備的故障代碼與故障對應(yīng)代碼表進(jìn)行對比,如果故障碼為1或2位為高等級故障,則將故障對應(yīng)代碼表中故障設(shè)備記錄中的緊急動作數(shù)據(jù)項的數(shù)值,通過輸出通訊接口改變PLC存儲器中公用存儲區(qū)設(shè)備鏈表相應(yīng)設(shè)備的數(shù)據(jù)項進(jìn)行智能保護(hù),如果不是高等級故障,則顯示故障內(nèi)容和檢修方法;依次對設(shè)備運(yùn)行狀態(tài)映射表中的每一設(shè)備記錄進(jìn)行步驟(II)的操作。(4)在CPU的控制下將顯示設(shè)備映射表傳給顯示模塊,同時將控制設(shè)備映射表傳給控制模塊;(5)顯示模塊調(diào)用液晶顯示器驅(qū)動在液晶顯示器上,顯示代表各設(shè)備的圖元和圖元對應(yīng)設(shè)備映射表中的設(shè)備記錄的當(dāng)前數(shù)據(jù)項;每隔100ms由CPU控制重復(fù)(1)-(5)的上述步驟;禾口(a)當(dāng)用戶通過觸摸屏修改液晶顯示器上顯示代表特定設(shè)備圖元時,修改后的新設(shè)備信息通過觸摸屏驅(qū)動程序傳給控制模塊,控制模塊更新控制設(shè)備映射表中圖元對應(yīng)的設(shè)備記錄的當(dāng)前數(shù)據(jù)項,再根據(jù)新控制設(shè)備映射表更新設(shè)備鏈表,然后在CPU的控制下將新設(shè)備鏈表通過輸出通訊接口,傳回給PLC存儲器中共用存儲區(qū)。3.設(shè)備運(yùn)行狀態(tài)映射表各記錄的數(shù)據(jù)格式如下:<table>tableseeoriginaldocumentpage8</column></row><table>4.故障代碼對應(yīng)表的格式如下:<table>tableseeoriginaldocumentpage8</column></row><table>本發(fā)明的第三種實施方式第三種實施方式的硬件結(jié)構(gòu)與第一種實施方式相同,只是在第三種實施方式的組態(tài)程序中加入故障分析應(yīng)用程序,如圖3、圖4和圖5其步驟如下(1)CPU通過輸出通訊接口,請求PLC將PLC存儲器中共用存儲區(qū)中的設(shè)備鏈表一次不中斷的傳回內(nèi)存儲器;(2)根據(jù)預(yù)先定義的內(nèi)存分配表構(gòu)造設(shè)備鏈表,并根據(jù)設(shè)備鏈表將各設(shè)備記錄的設(shè)備數(shù)據(jù)存入設(shè)備鏈表;(3)將顯示設(shè)備映射表和控制設(shè)備映射表中各設(shè)備記錄的當(dāng)前數(shù)據(jù)項,根據(jù)設(shè)備鏈表的相應(yīng)設(shè)備記錄的數(shù)據(jù)項進(jìn)行更新,構(gòu)造成完整的顯示設(shè)備映射表和控制設(shè)備映射表;同時,(I)根據(jù)設(shè)備鏈表更新內(nèi)存儲器上存儲的設(shè)備運(yùn)行狀態(tài)映射表中對應(yīng)的設(shè)備記錄的當(dāng)前數(shù)據(jù)項;(II)將設(shè)備運(yùn)行狀態(tài)映射表進(jìn)行備份;(III)將設(shè)備的記錄當(dāng)前數(shù)據(jù)項與其預(yù)先設(shè)定的正常范圍上限項和下限項進(jìn)行比較,如果設(shè)備記錄當(dāng)前數(shù)據(jù)項小于下限的30%,則產(chǎn)生故障代碼等于l,如果設(shè)備記錄當(dāng)前數(shù)據(jù)項大于下限的1.7倍,則產(chǎn)生故障代碼等于2,如果設(shè)備記錄當(dāng)前數(shù)據(jù)項大于下限的30%并且小于等于下限的70%,則產(chǎn)生故障代碼等于3,如果設(shè)備記錄當(dāng)前數(shù)據(jù)項大于上限的1.3倍并且小于等于上限的1.7倍,則產(chǎn)生故障代碼等于4,如果設(shè)備記錄當(dāng)前數(shù)據(jù)項大于下限的70%并且小于下限,則產(chǎn)生故障代碼等于5,如果設(shè)備記錄當(dāng)前數(shù)據(jù)項大于上限并且小于等于上限的1.3倍,則產(chǎn)生故障代碼等于6,將故障設(shè)備的故障代碼與故障對應(yīng)代碼表進(jìn)行對比,如果故障碼為1或2位為高等級故障,則將故障對應(yīng)代碼表中故障設(shè)備記錄中的緊急動作數(shù)據(jù)項的數(shù)值,通過輸出通訊接口改變PLC存儲器中公用存儲區(qū)設(shè)備鏈表相應(yīng)設(shè)備的數(shù)據(jù)項進(jìn)行智能保護(hù),如果不是高等級故障,則顯示故障內(nèi)容和檢修方法,并調(diào)用聲卡驅(qū)動程序發(fā)出報警聲;依次對設(shè)備運(yùn)行狀態(tài)映射表中的每一設(shè)備記錄進(jìn)行步驟(III)的操作。(4)在CPU的控制下將顯示設(shè)備映射表傳給顯示模塊,同時將控制設(shè)備映射表傳給控制模塊;(5)顯示模塊調(diào)用液晶顯示器驅(qū)動在液晶顯示器上,顯示代表各設(shè)備的圖元和圖元對應(yīng)設(shè)備映射表中的設(shè)備記錄的當(dāng)前數(shù)據(jù)項;每隔95ms由CPU控制重復(fù)(1)-(5)的上述步驟;和(a)當(dāng)用戶通過觸摸屏修改液晶顯示器上顯示代表特定設(shè)備的圖元時,修改后的新設(shè)備信息通過觸摸屏驅(qū)動程序傳給控制模塊,控制模塊更新控制設(shè)備映射表中圖元對應(yīng)的設(shè)備記錄的當(dāng)前數(shù)據(jù)項,再根據(jù)新控制設(shè)備映射表更新設(shè)備鏈表,然后在CPU的控制下將新設(shè)備鏈表通過輸出通訊接口,傳回給PLC存儲器中共用存儲區(qū)。本發(fā)明在運(yùn)行組態(tài)應(yīng)用程序前,通過電腦連接本發(fā)明,并通過現(xiàn)有技術(shù)中后臺軟件編輯組態(tài)應(yīng)用程序的界面和對內(nèi)存儲器中的各數(shù)據(jù)表進(jìn)行初始化負(fù)值。在本發(fā)明在工作過程中定時主動讀取PLC共用存儲區(qū)的原始數(shù)據(jù),組態(tài)應(yīng)用程序則對讀取到的原始數(shù)據(jù)進(jìn)行分析、運(yùn)算、轉(zhuǎn)換等處理,使數(shù)據(jù)與用戶定義的設(shè)備相關(guān)聯(lián),將結(jié)果以圖表、動畫、文字等界面的方式在TFTLCD上顯示出來,并且把這些數(shù)據(jù)進(jìn)行存貯,以備日后查看。操作人員通過觸摸屏進(jìn)行操作可以對現(xiàn)場參數(shù)進(jìn)行優(yōu)化。智能分析程序?qū)⒆詣佑涗浽O(shè)備運(yùn)行參數(shù),發(fā)現(xiàn)設(shè)備存儲區(qū)的數(shù)據(jù)有變化或根據(jù)數(shù)據(jù)庫判定有異常情況時,以聲、光,圖、文本等方式發(fā)出視覺、聽覺警告,通知操作人員及時處理,確保操作人員及設(shè)備的安全,當(dāng)出現(xiàn)故障時,智能分析程序?qū)⒔o出可能的故障點(diǎn)以及解決方案,幫助操作人員快速準(zhǔn)確地找到病癥,節(jié)約了時間,降低了成本;當(dāng)出現(xiàn)緊急情況時,本程序?qū)⒆詣舆M(jìn)行一些暫停、設(shè)備切換、斷電等操作,并以形象的方式通知操作人員,從而避免更大的事故和損失。權(quán)利要求1.一種主動型PLC智能液晶顯示器,包括液晶顯示器,液晶顯示器前設(shè)置觸摸屏,液晶顯示器和觸摸屏連接CPU,CPU連接內(nèi)存儲器、程序存儲器,其特征在于CPU連接輸出通訊接口。專利摘要本實用新型涉及一種用于PLC上的人機(jī)接口設(shè)備,尤其涉及一種主動型PLC智能液晶顯示器。它包括液晶顯示器,液晶顯示器前設(shè)置觸摸屏,液晶顯示器和觸摸屏連接CPU,CPU連接內(nèi)存儲器、程序存儲器和輸出通訊接口,程序存儲器中固化組態(tài)軟件,組態(tài)軟件定時主動讀取PLC共用存儲區(qū)的原始數(shù)據(jù)對其進(jìn)行分析、運(yùn)算、轉(zhuǎn)換等處理,其不占用PLC的主控程序資源,可靠性和實時性提高,并且操作人員可以實時調(diào)整繼電器信息,提高了交互性。文檔編號G05B19/05GK201355436SQ200920088750公開日2009年12月2日申請日期2009年2月27日優(yōu)先權(quán)日2009年2月27日發(fā)明者劉文敬,吳曉北申請人:鄭州紫辰科技開發(fā)有限公司