三菱PLC擴(kuò)展RS485通訊板與51單片機(jī)之間的通訊設(shè)計(jì)
PLC控制系統(tǒng),Programmable Logic Controller,可編程邏輯控制器,專為工業(yè)生產(chǎn)設(shè)計(jì)的一種數(shù)字運(yùn)算操作的電子裝置,它采用一類(lèi)可編程的存儲(chǔ)器,用于其內(nèi)部存儲(chǔ)程序,執(zhí)行邏輯運(yùn)算,順序控制,定時(shí),計(jì)數(shù)與算術(shù)操作等面向用戶的指令,并通過(guò)數(shù)字或模擬式輸入/輸出控制各種類(lèi)型的機(jī)械或生產(chǎn)過(guò)程。是工業(yè)控制的核心部分。
我用了兩個(gè)晚上的時(shí)間查閱一些資料,利用三菱PLC的擴(kuò)展RS485通訊板與其51單片機(jī)連接通訊,可寫(xiě)PLC任意的地址。長(zhǎng)度可達(dá)1000米,看見(jiàn)網(wǎng)上寫(xiě)的都很煩且對(duì)三菱和單片機(jī)不是很熟的朋友來(lái)說(shuō)有一定的閱讀難度,今天將它與大家分享。希望在此基礎(chǔ)上大家能擴(kuò)展出自己想要的功能,過(guò)些時(shí)間有空我在寫(xiě)個(gè)半雙工的程序。
硬件部分:
我用的是天祥單片機(jī)實(shí)驗(yàn)板,由于沒(méi)有RS485接口,我利用ADM485芯片自制了一個(gè)485接口與三菱PLC的擴(kuò)展RS485通訊如圖,但如果要進(jìn)行半雙工通訊,須將P3.0口到下載程序的RS232芯片的線斷開(kāi)可用一個(gè)跳線,用RS485的時(shí)候斷開(kāi)RS232,用RS232的時(shí)候插上跳線帽。硬件連接如圖
PLC程序:
通訊我用單片機(jī)做主機(jī)(只發(fā)送指令),PLC做從機(jī)(只接收指令),單工單向,以便初學(xué)著掌握。
格式:1位啟始,8位數(shù)據(jù),一位停止。
所以PLC寄存器D8120:0C81.
plc程序很簡(jiǎn)單不懂的可以看下三菱PLC的通訊手冊(cè)。如下圖:
三:?jiǎn)纹瑱C(jī)程序:
#include /*單片機(jī)的頭文件*/
unsigned char code tab[]={0x17,0xff};/*PLC輸出的Y點(diǎn)數(shù),PLC輸出Y燈0125678亮*/
sbit led=P1^1; /*將RS485置為發(fā)送數(shù)據(jù)模式*/
unsigned char i;
void init()
{
SCON=0x50; /*串口中斷開(kāi)*/
TMOD=0x20; /*定時(shí)器設(shè)置*/
TH1=0xfd; /*定時(shí)時(shí)間的高位*/
TL1=0xfd; /*定時(shí)時(shí)間的低位,速度為9600BPS*/
TR1=1; /*定時(shí)器開(kāi)*/
EA=1; /*開(kāi)總中斷*/
TI=0; /*復(fù)位串口中斷*/
led=1; /*將RS485置為發(fā)送數(shù)據(jù)模式*/
}
void main()
{
init(); /*調(diào)用子程序*/
for(i=0;i《2;i++)
{
SBUF=tab[i]; /*將數(shù)據(jù)發(fā)送到串口*/
while(!TI); /*等待串口數(shù)據(jù)發(fā)送結(jié)束*/
TI=0; /*復(fù)位串口中斷*/
}
}
四:注意點(diǎn)
1:RS485的線不能接反,否則數(shù)據(jù)將不正確。
2:?jiǎn)纹瑱C(jī)的晶振要選擇11.0592MHZ,否則PLC接收到數(shù)據(jù)也不正確。
3:RS485芯片的電源不能接反,否則要燒壞芯片。