當前位置:商標查詢大全網 - 培訓招生 - 找壹個plc和單片機通信的例子。

找壹個plc和單片機通信的例子。

大部分PLC都提供了MODBUS方便指令,可以直接調用,只需要簡單設置幾個特殊寄存器就ok了。大部分編譯工作還是在單片機上。MODBUS通信有兩種通信格式:1)ASCII 2)RTU。

1.ASCII模式當控制器設置為在Modbus網絡上以ASCII(美國信息交換標準代碼)模式通信時,消息中的每個8位字節都作為ASCII代碼(兩個十六進制字符)發送。這種方法的主要優點是字符發送的時間間隔可以達到1秒而不出錯。十六進制代碼系統,ASCII字符0...9,a...f消息中的每個ASCII字符是壹個十六進制字符,由每個字節的位、1個起始位和7個數據位組成。最低有效位首先與1個奇偶校驗位壹起發送,沒有1個停止位沒有校驗(有校驗時)。2位(無校驗)錯誤檢測域LRC(垂直冗余檢測)2。RTU模式當控制器設置為在Modbus網絡上以RTU(遠程終端設備)模式通信時,消息中的每個8位字節包含兩個4位十六進制字符。這種方法的主要優點是在相同的波特率下,可以比ASCII傳輸更多的數據。代碼系統8位二進制,十六進制數0...9,中的每個8位字段...f消息是每個字節的1個起始位和8個數據位的壹個位。最低有效位首先發送1個奇偶校驗位,如果沒有校驗,則沒有1個停止位(有校驗時)和2個位(無校驗時),它由傳輸設備計算並添加到消息中。接收設備重新計算接收消息的CRC,並將其與接收CRC字段中的值進行比較。如果兩個值不同,則存在錯誤。CRC是先調用壹個值全為“1”的16位寄存器,然後調用壹個過程處理報文中連續8位字節的每個當前寄存器中的值。每個字符中只有8-8位數據對CRC有效,起始位、停止位和奇偶校驗位無效。在CRC生成過程中,每個8位字符與寄存器的內容進行異或運算,結果移向最低有效位,最高有效位用零填充。提取並檢測LSB。如果LSB為1,寄存器將單獨復位為預設值。如果LSB為0,則不會執行。整個過程會重復八次。最後壹位(位8)完成後,下壹個8位字節單獨或與寄存器的當前值相加。最終寄存器中的值是執行完消息中的所有字節後的CRC值。將CRC添加到消息中時,首先添加低位字節,然後添加高位字節。CRC的簡單函數如下:unsigned short CRC 16(puch msg,US data len)unsigned char * puch msg;/*要進行CRC校驗的消息*/unsigned short us datalen;/*消息中的字節數*/{ unsigned charuchchi = 0x ff;/*高CRC字節初始化*/unsigned charuchrclo = 0x ff;/*低CRC字節初始化*/unsigned uIndex;/* CRC循環中的索引* */ while (usDataLen - ) /* *傳輸消息緩沖區*/{ uindex = uchirchi * puchmsgg++;/* Calculate CRC */uchirchi = uchirclo auchrchi[ui index];uchCRCLo = auchrclo[ui index];} return((uchCRCHi & lt;& lt8)| uchCRCLo);} /* CRC高字節值表*/靜態無符號char auchcchi [] = {0x00,0xc1,0x81,0x40,0x 01,0xc0,0x80,0x41。0x41,0x00,0xC1,0x81,0x40,0x01,0x0,0x80,0x41,0x81,0x40,0x00,0xC1,0x81,0x40,0x81,0x40,0x00/* CRC低位字節值表*/static char auchrclo[]= { 0x 00,0xc0,0xc1,0x01,0xc3,0x03,0x02,0xc2,0xc6,0x06,0x07,0xc7,0x05,0xC5。0x0D,0xCD,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,0x08,0xC8,0xD8,0x18,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,0x 654444