国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于C#和Access數(shù)據(jù)庫(kù)的無(wú)線精準(zhǔn)灌溉系統(tǒng)軟件設(shè)計(jì)

2018-07-05 10:00:00吳鳳嬌孫培欽
節(jié)水灌溉 2018年6期
關(guān)鍵詞:下位上位串口

吳鳳嬌,孫培欽,龍 燕,王 斌

(1. 西北農(nóng)林科技大學(xué)水利與建筑工程學(xué)院,陜西 楊凌 712100;2. 西安交通大學(xué)電氣工程學(xué)院, 陜西 西安 710049;3. 西北農(nóng)林科技大學(xué)機(jī)械與電子工程學(xué)院,陜西 楊凌 712100)

0 引 言

農(nóng)業(yè)一直是我國(guó)賴(lài)以生存的根基行業(yè),隨著目前世界水資源短缺,且我國(guó)人均水資源占有率過(guò)低、水資源利用率低,農(nóng)業(yè)用水面臨空前巨大的壓力[1,2]。節(jié)水灌溉從20世紀(jì)早期就已經(jīng)開(kāi)始發(fā)展,我國(guó)引入較晚,而且設(shè)備的發(fā)展步伐一直遠(yuǎn)遠(yuǎn)落后其他先進(jìn)國(guó)家[3]。目前,我國(guó)節(jié)水灌溉農(nóng)業(yè)不乏滴灌[4]、噴灌[5]等節(jié)水方式,甚至也有一些自動(dòng)化控制的灌溉設(shè)備,但都存在些許不足。如:沒(méi)有采用實(shí)時(shí)監(jiān)測(cè)土壤水分含量,僅進(jìn)行定時(shí)灌溉,造成水源浪費(fèi);農(nóng)田布線十分復(fù)雜且不穩(wěn)定,嚴(yán)重制約了設(shè)備的普及;大部分自動(dòng)化設(shè)備昂貴且操作復(fù)雜,不利于廣大農(nóng)民的使用和學(xué)習(xí)。

所以,節(jié)水灌溉技術(shù)的研究從未停止,特別是在利用無(wú)線ZigBee技術(shù)[6-8]與自動(dòng)灌溉[9,10]相結(jié)合的方面有了很大的進(jìn)步。然而,上述系統(tǒng)存在明顯不足:①無(wú)線數(shù)據(jù)傳輸距離短且信號(hào)易受干擾;②數(shù)據(jù)信號(hào)集中式處理,容易造成系統(tǒng)瓶頸,難以進(jìn)一步提高系統(tǒng)性能。這些因素較大地限制了研究成果在生產(chǎn)實(shí)際中的推廣應(yīng)用。本文是結(jié)合了研究學(xué)者們的寶貴經(jīng)驗(yàn)和發(fā)現(xiàn),并加以自我的研究和探索研制的一款專(zhuān)門(mén)針對(duì)普通農(nóng)民使用的基于C#和Access數(shù)據(jù)庫(kù)的無(wú)線精準(zhǔn)灌溉系統(tǒng)軟件?;趯?duì)CC2530功率放大和無(wú)線傳感器網(wǎng)絡(luò),系統(tǒng)分布式運(yùn)行,具有魯棒性強(qiáng)、易于擴(kuò)充和伸縮性良好等優(yōu)點(diǎn)。

1 系統(tǒng)總體設(shè)計(jì)

系統(tǒng)的總體框圖如圖1所示。系統(tǒng)運(yùn)行首先由用戶在上位機(jī)界面輸入所需維持的土壤墑情范圍和監(jiān)控的溫度范圍,這些數(shù)據(jù)會(huì)經(jīng)由串口通信與無(wú)線CC2530模塊交互,兩塊無(wú)線CC2530完成上、下位機(jī)之間的數(shù)據(jù)通信。在下位機(jī)部分中,將所需監(jiān)測(cè)的土壤中布上土壤墑情傳感器MS10,其為一個(gè)輸出為電壓信號(hào)的傳感器。其輸出信號(hào)經(jīng)過(guò)單片機(jī)的AD模塊進(jìn)行采集,單片機(jī)將信號(hào)轉(zhuǎn)化后將該數(shù)值實(shí)時(shí)顯示在LCD1602屏幕上面。同時(shí),該數(shù)值會(huì)與此前上位機(jī)無(wú)線傳入下位機(jī)的數(shù)據(jù)進(jìn)行比較,并驅(qū)動(dòng)相應(yīng)的執(zhí)行機(jī)構(gòu)或者報(bào)警,以保證土壤墑情維持在一定范圍;另外,下位機(jī)采集到的數(shù)據(jù)會(huì)經(jīng)無(wú)線CC2530模塊傳到上位機(jī)界面中進(jìn)行顯示并儲(chǔ)存,方便用戶實(shí)時(shí)監(jiān)控和查看。

圖1 系統(tǒng)的總體框圖

2 系統(tǒng)總體軟件設(shè)計(jì)

基于C#和Access數(shù)據(jù)庫(kù)的無(wú)線精準(zhǔn)灌溉系統(tǒng)軟件流程圖如圖2所示。首先,用戶從電腦登錄上位機(jī)軟件并給下位機(jī)上電,整個(gè)系統(tǒng)為啟動(dòng)狀態(tài)。然后,用戶在上位機(jī)軟件的監(jiān)控主界面中打開(kāi)串口通道,并設(shè)置相應(yīng)的串口參數(shù),之后用戶將自己所需設(shè)定的上、下限值輸入相應(yīng)的文本框中,點(diǎn)擊確認(rèn)之后數(shù)據(jù)便會(huì)經(jīng)由串口和無(wú)線通信通道傳送至單片機(jī)中,單片機(jī)接收這些數(shù)據(jù)并存儲(chǔ)且顯示這些設(shè)定數(shù)據(jù)在LCD1602屏幕上。用戶若想使下位機(jī)開(kāi)始監(jiān)控,需從上位機(jī)軟件中的監(jiān)控主界面上按下開(kāi)啟監(jiān)控按鈕,下位機(jī)接收命令后開(kāi)啟定時(shí)采集并將采集到的數(shù)據(jù)實(shí)時(shí)顯示在LCD1602屏幕上。同時(shí),采集到的數(shù)據(jù)會(huì)與之前傳送至單片機(jī)中的設(shè)定數(shù)據(jù)進(jìn)行比較,從而判斷是否驅(qū)動(dòng)執(zhí)行機(jī)構(gòu)和報(bào)警裝置而且采集到的數(shù)據(jù)也會(huì)經(jīng)由串口和無(wú)線通信通道發(fā)送回上位機(jī)監(jiān)控主界面中供用戶觀察并儲(chǔ)存。

圖2 無(wú)線精準(zhǔn)灌溉系統(tǒng)軟件流程圖

若用戶想停止監(jiān)控或關(guān)閉系統(tǒng),可在上位機(jī)監(jiān)控主界面中點(diǎn)擊停止監(jiān)控,此時(shí)下位機(jī)便會(huì)停止,如圖3所示。若想繼續(xù)可再次點(diǎn)擊開(kāi)啟監(jiān)控即可,若不想則點(diǎn)擊退出系統(tǒng)即可關(guān)閉系統(tǒng)。

圖3 停止監(jiān)控流程圖

3 下位機(jī)軟件設(shè)計(jì)

下位機(jī)中主要的關(guān)鍵程序部分是定時(shí)中斷采集和串口接收中斷函數(shù)。在定時(shí)中斷采集中分別涉及兩個(gè)部分,一部分是溫度傳感器的數(shù)據(jù)采集,另一部分是對(duì)土壤墑情傳感器MS10的AD數(shù)模轉(zhuǎn)換函數(shù),兩者的數(shù)據(jù)處理完之后,數(shù)據(jù)會(huì)儲(chǔ)存在兩個(gè)全局變量中并退出定時(shí)采集中斷,然后回至主函數(shù)進(jìn)行實(shí)時(shí)顯示和判斷比較數(shù)據(jù)以及發(fā)送回上位機(jī)主界面。下位機(jī)定時(shí)采集中斷函數(shù)以及串口接收中斷函數(shù)如下:

void exter1() interrupt 1 ∥定時(shí)采集中斷

{

ES=0; ∥關(guān)閉串口中斷

TR0=0;∥關(guān)閉定時(shí)器0

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;∥重裝初值

tt++;

if(tt==1000)∥設(shè)定2秒采集一次

{

ReadTemperature();∥采集溫度

Data_is_read=1; ∥溫度采集完成標(biāo)志

ISendByte(PCF8591,0x02);

ADC_Data=IRcvByte(PCF8591)*330/256; ∥AD數(shù)模轉(zhuǎn)換

tt=0;∥時(shí)間重新歸0

}

TR0=1;∥重新開(kāi)啟定時(shí)器0

ES=1;∥重新開(kāi)啟串行中斷

}

void ser() interrupt 4 ∥串行中斷函數(shù)

{

aa = SBUF; ∥aa存儲(chǔ)數(shù)據(jù)

RI=0; ∥清除接收中斷標(biāo)志

if(Uart_state) {Uart_state++;}

if(RF2530_state) {RF2530_state++;}

is_serial_onebit=1; ∥標(biāo)志接收了一個(gè)字節(jié)數(shù)據(jù)

}

4 上位機(jī)軟件設(shè)計(jì)

上位機(jī)軟件為本文系統(tǒng)中的人機(jī)交互界面,整個(gè)軟件以C#語(yǔ)言為設(shè)計(jì)基礎(chǔ),輔助以Access數(shù)據(jù)庫(kù),完成例如對(duì)用戶注冊(cè)信息的管理、采集數(shù)據(jù)的儲(chǔ)存。本文的上位機(jī)軟件總共有五個(gè)界面構(gòu)成,分別為歡迎界面、登錄界面、管理員身份驗(yàn)證界面、新用戶注冊(cè)界面、系統(tǒng)監(jiān)測(cè)與控制主界面。

4.1 歡迎界面

軟件歡迎界面如圖4所示,本界面的目的主要有兩個(gè)。一個(gè)是起到類(lèi)似“商標(biāo)”作用,注明設(shè)計(jì)者的名稱(chēng)和設(shè)計(jì)單位以及該軟件名稱(chēng);另一個(gè)作用主要帶著緩沖作用,避免像普通軟件在執(zhí)行的時(shí)候由于程序內(nèi)容過(guò)大而導(dǎo)致開(kāi)啟時(shí)等待過(guò)久,造成用戶電腦使用不便。

圖4 歡迎界面

4.2 登錄界面

用戶鼠標(biāo)點(diǎn)擊歡迎界面之后便會(huì)進(jìn)入如圖5所示的登錄界面。該登錄界面是利用C#與Access數(shù)據(jù)庫(kù)相結(jié)合制作的,可以準(zhǔn)確地驗(yàn)證該用戶是否為本軟件允許用戶,一旦驗(yàn)證成功便會(huì)進(jìn)入到系統(tǒng)監(jiān)測(cè)與控制主界面,否則將會(huì)跳出錯(cuò)誤提示框。同時(shí),在界面的左下方有注冊(cè)新用戶按鈕,若使用者為新用戶便可點(diǎn)擊該按鈕進(jìn)入到管理員身份驗(yàn)證界面。

圖5 登錄界面

4.3 管理員身份驗(yàn)證界面

管理員身份驗(yàn)證界面如圖6所示,起到的是一個(gè)“把關(guān)”的作用,為了防止非正常允許的工作人員私自亂注冊(cè)系統(tǒng)使用的賬號(hào),在系統(tǒng)安裝時(shí)會(huì)告知用戶一個(gè)管理員賬號(hào),使用者若需注冊(cè)新賬號(hào)則應(yīng)在管理員身份驗(yàn)證界面中輸入正確的管理員信息方可進(jìn)入到注冊(cè)界面,否則會(huì)跳出錯(cuò)誤提示框。

圖6 管理員身份驗(yàn)證界面

4.4 新用戶注冊(cè)界面

新用戶注冊(cè)界面如圖7所示。其主要由三個(gè)文本框?yàn)橹黧w構(gòu)建而成。這三個(gè)文本框分別為新用戶名,用戶密碼以及核對(duì)密碼三部分構(gòu)成。當(dāng)用戶在新用戶名文本框輸入完畢之后,可按下驗(yàn)證賬號(hào)按鈕,便可以實(shí)現(xiàn)對(duì)在Access數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的之前注冊(cè)的用戶信息進(jìn)行核對(duì),若發(fā)現(xiàn)重復(fù)便跳出錯(cuò)誤提示框并清空新用戶名文本框,同時(shí)該按鈕還具有正則表達(dá)式驗(yàn)證功能,可以規(guī)范用戶的注冊(cè)用戶名,避免用戶名出現(xiàn)混亂。若三個(gè)文本框填寫(xiě)完畢,可點(diǎn)擊注冊(cè)按鈕,該按鈕同時(shí)也具備驗(yàn)證賬號(hào)規(guī)范用戶名格式及驗(yàn)證兩個(gè)密碼文本框是否一致的功能。現(xiàn)將該按鈕的事件如下所示:

private void NewUserRegister_Click(object sender, EventArgs e)

{

if (!zhuce_pbyj()) ∥判斷文本框是否為空

{ return;}

∥驗(yàn)證用戶名格式

string Regextest = @"^[a-zA-Z0-9]{7,15}$";

if (!Regex.IsMatch(textBox1.Text, Regextest))

{

MessageBox.Show("請(qǐng)輸入由字母和數(shù)字組成的賬號(hào),數(shù)目在8個(gè)到16字節(jié)之間!", "格式錯(cuò)誤", MessageBoxButtons.OK, MessageBoxIcon.Error);

return; }∥格式不正確跳出提示框

if (!UserRepeat())∥如果用戶名重復(fù)

{return; }

∥驗(yàn)證密碼格式

if (!Regex.IsMatch(textBox2.Text, Regextest))

{

MessageBox.Show("請(qǐng)輸入由字母和數(shù)字組成的密碼,數(shù)目在8個(gè)到16字節(jié)之間!", "格式錯(cuò)誤", MessageBoxButtons.OK, MessageBoxIcon.Error);

return; }

if (!PasswordRight())

{return;}

name = this.textBox1.Text;

pwd = this.textBox2.Text;

string CommandString = string.Format("INSERT INTO [UserList]([UserName],[Password]) values('{0}','{1}')", name, pwd);

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=login_data.accdb");

conn.Open();

OleDbCommand cmd = new OleDbCommand(CommandString, conn);

if (cmd.ExecuteNonQuery() != 0)

{

MessageBox.Show(" 注冊(cè)成功!","恭喜",MessageBoxButtons.OK);

this.Dispose();

Register register = new Register();

register.Show();

}

else

{MessageBox.Show("注冊(cè)失敗");}

conn.Close();

return;

}

圖7 新用戶注冊(cè)界面

4.5 系統(tǒng)監(jiān)測(cè)與控制主界面

用戶在登錄界面登錄成功之后,便可以進(jìn)入到系統(tǒng)監(jiān)測(cè)與控制主界面,如圖8所示。整個(gè)主界面分為四大塊:菜單欄、監(jiān)控信息、串口設(shè)置、控制設(shè)置臺(tái),現(xiàn)將其一一簡(jiǎn)單介紹。在菜單欄中共設(shè)置6個(gè)功能性按鈕:

(1)開(kāi)啟監(jiān)控和停止監(jiān)控用于上位機(jī)無(wú)線遙控下位機(jī)的定時(shí)采集開(kāi)啟或停止;

(2)輸出數(shù)據(jù)可直接開(kāi)啟數(shù)據(jù)存儲(chǔ)所在的數(shù)據(jù)庫(kù);

(3)使用說(shuō)明主要是介紹界面的使用方法;

(4)切換用戶是跳回登錄界面更換用戶;

(5)退出系統(tǒng)即退出該軟件。

監(jiān)控信息欄用來(lái)實(shí)時(shí)顯示下位機(jī)通過(guò)傳感器采集到的數(shù)據(jù),便于觀察和判斷。串口設(shè)置欄用來(lái)提供用戶設(shè)置通信串口的具體參數(shù)。控制設(shè)置臺(tái)提供用戶輸入所需的大氣溫度、土壤墑情上、下限并且可人為控制電磁閥的開(kāi)、關(guān)。

菜單欄的開(kāi)啟監(jiān)控按鈕和關(guān)閉監(jiān)控按鈕程序如下所示:

∥************該函數(shù)用來(lái)開(kāi)啟監(jiān)控

private void OpenSystem_Button_Click(object sender, EventArgs e)

{

if (sp.IsOpen == false)∥驗(yàn)證串口開(kāi)啟?

{

MessageBox.Show("請(qǐng)打開(kāi)串口", "田間精準(zhǔn)灌溉測(cè)控系統(tǒng)", MessageBoxButtons.OK, MessageBoxIcon.Warning);

return;}

if (button5.Enabled == true || button8.Enabled == true)

{

MessageBox.Show("請(qǐng)?jiān)O(shè)置所需要的參數(shù)", "田間精準(zhǔn)灌溉測(cè)控系統(tǒng)", MessageBoxButtons.OK,MessageBoxIcon.Warning);

return;}

if (OpenCloseSystem == false)

{

string OpenStr1 = CombinStr('#', '&');∥發(fā)送控制單片機(jī)開(kāi)啟監(jiān)控的數(shù)據(jù)

SendCommand(OpenStr1 + '$');

groupBox4.Enabled = false; ∥關(guān)掉串口的設(shè)置界面,除非停止監(jiān)控方能重能打開(kāi)

groupBox6.Enabled = false;

groupBox7.Enabled = false;∥關(guān)掉溫度和土壤上限的控制

OpenSystem_Button.Enabled = false;

CloseSystem.Enabled = true;

OpenCloseSystem = true;

ReceiveInit();∥初始化接收部分的程序

return;}

}

∥*****該函數(shù)用來(lái)關(guān)閉監(jiān)控********

private void CloseSystem_Click(object sender, EventArgs e)

{

if(OpenCloseSystem == true)

{

string CloseStr1 = CombinStr('#', '*');∥發(fā)送控制單片機(jī)開(kāi)啟監(jiān)控的數(shù)據(jù)

SendCommand(CloseStr1 + '$');

sp.Close();∥關(guān)閉串口

OpenClose_SerialPorts.Text = "開(kāi)啟";

groupBox4.Enabled = true; ∥開(kāi)啟串口的設(shè)置界面,除非停止監(jiān)控方能重能打開(kāi)

groupBox6.Enabled = true;

groupBox7.Enabled = true;∥開(kāi)啟溫度和土壤上限的控制

OpenSystem_Button.Enabled = true;

CloseSystem.Enabled = false;

OpenCloseSystem = false;}

return;

}

圖8 系統(tǒng)監(jiān)測(cè)與控制主界面

5 結(jié) 語(yǔ)

本系統(tǒng)設(shè)計(jì)主要目的為的是構(gòu)建一個(gè)用于控制土壤墑情值能在一定范圍內(nèi)時(shí)同時(shí)具有大氣溫度檢測(cè)功能的簡(jiǎn)易灌溉控制器,并且通過(guò)大功率無(wú)線CC2530模塊實(shí)現(xiàn)無(wú)線數(shù)據(jù)傳輸,節(jié)約布線成本同時(shí)提高環(huán)境的適應(yīng)能力?;贑#和Access數(shù)據(jù)庫(kù)設(shè)計(jì)的無(wú)線精準(zhǔn)灌溉系統(tǒng)實(shí)現(xiàn)了該所需功能。其利用串口通信和無(wú)線通信構(gòu)建了一個(gè)上位機(jī)與下位機(jī)通信的橋梁,使上、下位機(jī)之間的數(shù)據(jù)能夠互通有無(wú)。而且作為人機(jī)交互界面的上位機(jī)軟件的功能也十分實(shí)用豐富,包括了:歡迎界面、登錄界面、管理員身份驗(yàn)證界面、新用戶注冊(cè)界面以及系統(tǒng)監(jiān)測(cè)與控制主界面。設(shè)計(jì)的無(wú)線精準(zhǔn)灌溉系統(tǒng)中上位機(jī)界面友好,操作簡(jiǎn)單,運(yùn)行穩(wěn)定,為無(wú)線精準(zhǔn)灌溉系統(tǒng)的設(shè)計(jì)提供了參考。

參考文獻(xiàn):

[1] 中華人民共和國(guó)水利部. 2012全國(guó)水利發(fā)展統(tǒng)計(jì)公報(bào)[M]. 北京: 中國(guó)水利水電出版社, 2013:13.

[2] 佟金萍, 馬劍峰, 王慧敏,等. 農(nóng)業(yè)用水效率與技術(shù)進(jìn)步: 基于中國(guó)農(nóng)業(yè)面板數(shù)據(jù)的實(shí)證研究[J]. 資源科學(xué), 2014,36(9):1 765-1 772.

[3] 金宏智, 嚴(yán)海軍, 錢(qián)一超. 國(guó)外節(jié)水灌溉工程技術(shù)發(fā)展分析[J]. 農(nóng)業(yè)機(jī)械學(xué)報(bào), 2010,41:59-63.

[4] 郭 霖, 白 丹, 王新端, 等. 雙向?qū)_流滴灌灌水器水力性能與消能效果[J]. 農(nóng)業(yè)工程學(xué)報(bào), 2016,32(17):77-82.

[5] 劉柯楠, 吳普特, 朱德蘭, 等. 太陽(yáng)能驅(qū)動(dòng)噴灌機(jī)組行走動(dòng)力和光伏功率匹配設(shè)計(jì)與試驗(yàn)[J]. 農(nóng)業(yè)工程學(xué)報(bào), 2017,33(16):96-103.

[6] 紀(jì)建偉, 丁 皓, 李征明, 等. 基于無(wú)線傳輸?shù)牡咎锕喔缺O(jiān)控系統(tǒng)[J]. 農(nóng)業(yè)工程學(xué)報(bào), 2013,29(1):52-58.

[7] 張?jiān)隽? 郁曉慶. 土壤水分無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)計(jì)與測(cè)試[J]. 中國(guó)農(nóng)村水利水電, 2012,(12):5-8.

[8] 于海業(yè), 羅 瀚, 任 順, 等. ZigBee技術(shù)在精準(zhǔn)農(nóng)業(yè)上的應(yīng)用進(jìn)展與展望[J]. 農(nóng)機(jī)化研究, 2012,(8):1-6.

[9] 劉 濤, 趙計(jì)生. 基于ZigBee技術(shù)的農(nóng)田自動(dòng)節(jié)水灌溉系統(tǒng)[J]. 測(cè)控技術(shù), 2008,27(2):95-99.

[10] 張亞鋒. 基于ZigBee技術(shù)的農(nóng)田土壤溫濕度監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J]. 節(jié)水灌溉, 2014,(9):80-83.

猜你喜歡
下位上位串口
淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
發(fā)射機(jī)房監(jiān)控系統(tǒng)之下位機(jī)
特斯拉 風(fēng)云之老阿姨上位
車(chē)迷(2018年12期)2018-07-26 00:42:22
“三扶”齊上位 決戰(zhàn)必打贏
基于ZigBee和VC上位機(jī)的教室智能監(jiān)測(cè)管理系統(tǒng)
景洪電廠監(jiān)控系統(tǒng)下位機(jī)數(shù)據(jù)傳輸網(wǎng)絡(luò)改造
圍觀黨“下位”,吐槽帝“登基”
USB接口的多串口數(shù)據(jù)并行接收方法探索
基于藍(lán)牙串口適配器的GPS接收機(jī)與AutoCAD的實(shí)時(shí)無(wú)線通信
以新思路促推現(xiàn)代農(nóng)業(yè)上位
新丰县| 麻栗坡县| 和静县| 信丰县| 中西区| 呼伦贝尔市| 延川县| 普安县| 大丰市| 荆州市| 北安市| 大埔县| 宁晋县| 集贤县| 会东县| 哈密市| 抚宁县| 宁安市| 吴江市| 报价| 乌拉特中旗| 陵川县| 克东县| 壶关县| 屯门区| 武山县| 栾城县| 桐柏县| 昭通市| 新干县| 中宁县| 邳州市| 广水市| 阿勒泰市| 丰宁| 阜新市| 开阳县| 新田县| 黄梅县| 淅川县| 潍坊市|