久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: STM32f103單片機(jī)與威綸通觸摸屏modbus485通訊兼容上位機(jī)PLC程序 [打印本頁(yè)]

作者: guobaox1981    時(shí)間: 2024-9-8 20:24
標(biāo)題: STM32f103單片機(jī)與威綸通觸摸屏modbus485通訊兼容上位機(jī)PLC程序
     最近在改一個(gè)數(shù)控電源。主板保留有485通訊端口,無(wú)顯示屏 主控stm32f103rc,沒(méi)有原通訊協(xié)議,就依照電路重寫了程序,加裝oled顯示器和時(shí)鐘芯片,編碼器,實(shí)現(xiàn)數(shù)字控制和庫(kù)侖計(jì),通訊,電源各種保護(hù)。調(diào)試中初期沒(méi)寫菜單系統(tǒng)相當(dāng)頭大。于是就利用modbus485通訊接觸摸屏或串口助手調(diào)試。原機(jī)485部分為隔離式,使用485方便調(diào)試也保證了安全。電源完整代碼暫時(shí)不公布。先公布modbus部分與觸摸屏部分。程序可直接使用。程序兼容工控上位機(jī),觸摸屏,PLC。
    觸摸屏例子程序太難找,對(duì)初學(xué)者很不友好。觸摸屏我是一邊學(xué)一邊做,本程序包含一般項(xiàng)目完整功能。主屏顯示,IO狀態(tài),系統(tǒng)設(shè)置,趨勢(shì)圖記錄,
報(bào)警記錄,密碼項(xiàng)目,快捷分組,宏指令。可做簡(jiǎn)易模板使用,只有UI設(shè)計(jì)不盡如意。拋磚引玉。觸摸屏細(xì)節(jié)我會(huì)在工控區(qū)另開(kāi)一貼詳細(xì)說(shuō)明
   接線較簡(jiǎn)單可以使用串口轉(zhuǎn)485模塊,1-2元的模塊很多。485模塊A B 接威綸通觸摸屏 com2的1,2孔   
   我非專業(yè)人士用到的知識(shí)都是大多來(lái)源與論壇,回饋論壇。
    完整單片機(jī)代碼在最后
    部分代碼:
    #ifndef _modbus_
#define _modbus_
//發(fā)送使能DE 接受使能RE 可短接使用一條線,也可使用2線,
//雙工模塊可不接使能只使用VDD GND RXD TXD


//4810通訊電源主控通訊芯片接線
//   收發(fā)芯片為             ADM2483
//  USART1_TXD  PA9    Pin6 TXD
//  USART1_RXD  PA10  Pin3 RXD
//   USART1_DE  PA0   Pin5 DE
//   USART1_RE  PA2      Pin4 RE
#include "stm32f10x_conf.h"
#define RS485_DE_1 GPIO_SetBits  (GPIOA, GPIO_Pin_0)     //DE:驅(qū)動(dòng)使能,高電平使能發(fā)送功能。
#define RS485_DE_0 GPIO_ResetBits(GPIOA, GPIO_Pin_0)   //
#define RS485_RE_1 GPIO_SetBits  (GPIOA, GPIO_Pin_2)     //RE*:接收使能,低電平使能接收功能。
#define RS485_RE_0 GPIO_ResetBits(GPIOA, GPIO_Pin_2)     //
#define RS485_RT_0  RS485_RE_0; RS485_DE_0;
#define RS485_RT_1  RS485_RE_1; RS485_DE_1;
typedef struct
{
u8 myadd;//本設(shè)備的地址
u8 rcbuf[256]; //MODBUS接收緩沖區(qū)
u16 timout;//MODbus的數(shù)據(jù)斷續(xù)時(shí)間

通訊測(cè)試.png (94.51 KB, 下載次數(shù): 10)

通訊測(cè)試.png

歷史.png (49.82 KB, 下載次數(shù): 7)

歷史.png

主屏.png (54.73 KB, 下載次數(shù): 9)

主屏.png

校正分項(xiàng).png (141.44 KB, 下載次數(shù): 8)

校正分項(xiàng).png

狀態(tài).png (53.14 KB, 下載次數(shù): 8)

狀態(tài).png

modbus485通訊觸摸屏.7z

11.33 MB, 下載次數(shù): 30, 下載積分: 黑幣 -5


作者: donglw    時(shí)間: 2024-9-10 16:07
沒(méi)有看到通訊協(xié)議的內(nèi)容:例如幀頭、幀尾、校驗(yàn)方式等信息。
作者: guobaox1981    時(shí)間: 2024-9-11 15:37
void Modbud_fun6()  //6號(hào)功能碼處理
{
  u16 Regadd;
        u16 val;
        u16 i,crc,j;
        i=0;
  Regadd=modbus.rcbuf[2]*256+modbus.rcbuf[3];  //獲取要修改的寄存器地址
        val=modbus.rcbuf[4]*256+modbus.rcbuf[5];     //獲取修改后的值
        Reg[Regadd]=val;  //修改本設(shè)備相應(yīng)的寄存器
       
        //以下為回應(yīng)主機(jī)
       
        modbus.Sendbuf[i++]=modbus.myadd;//添加本設(shè)備地址到發(fā)送緩沖區(qū)
  modbus.Sendbuf[i++]=0x06;        //添加功能碼到發(fā)送緩沖區(qū)
  modbus.Sendbuf[i++]=Regadd/256;  //添加寄存器地址的高字節(jié)到發(fā)送緩沖區(qū)
        modbus.Sendbuf[i++]=Regadd%256;  //添加寄存器地址的低字節(jié)到發(fā)送緩沖區(qū)
        modbus.Sendbuf[i++]=val/256;     //添加修改后的值的高字節(jié)到發(fā)送緩沖區(qū)
        modbus.Sendbuf[i++]=val%256;     //添加修改后的值的低字節(jié)到發(fā)送緩沖區(qū)
        crc=crc16(modbus.Sendbuf,i);     //計(jì)算CRC校驗(yàn)碼
        modbus.Sendbuf[i++]=crc/256;     //添加CRC校驗(yàn)碼的高字節(jié)到發(fā)送緩沖區(qū)
        modbus.Sendbuf[i++]=crc%256;     //添加CRC校驗(yàn)碼的低字節(jié)到發(fā)送緩沖區(qū)
       
        RS485_RT_1;  //設(shè)置RS485為發(fā)送模式
       
        for(j=0;j<i;j++)  //發(fā)送緩沖區(qū)中的所有數(shù)據(jù)
        {
         RS485_byte(modbus.Sendbuf[j]);
        }
       
        RS485_RT_0;  //設(shè)置RS485為接收模式
}
Modbus協(xié)議中,CRC16校驗(yàn)用于檢測(cè)通信數(shù)據(jù)的完整性。它通過(guò)對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行循環(huán)冗余校驗(yàn)(CRC),生成一個(gè)16位的校驗(yàn)碼,附加到數(shù)據(jù)的末尾,接收方根據(jù)相同算法計(jì)算CRC碼,判斷數(shù)據(jù)是否有誤。
CRC校驗(yàn)方式說(shuō)明:
1. CRC16多項(xiàng)式:采用的是0xA001,即Modbus協(xié)議中常用的CRC16-IBM算法,初始值為0xFFFF。
2. 查表法優(yōu)化:代碼使用了查表法來(lái)提高效率,通過(guò)auchCRCHi[]和auchCRCLo[]兩個(gè)數(shù)組存儲(chǔ)CRC的高位和低位預(yù)計(jì)算值。這樣避免了逐位移位運(yùn)算,減少了處理時(shí)間。
3. 計(jì)算過(guò)程:
初始化高位和低位CRC字節(jié)為0xFF。
遍歷數(shù)據(jù)緩沖區(qū)的每一個(gè)字節(jié),計(jì)算出當(dāng)前CRC字節(jié)與當(dāng)前數(shù)據(jù)字節(jié)異或的索引uIndex。
根據(jù)uIndex在auchCRCHi[]和auchCRCLo[]查找對(duì)應(yīng)的高位和低位CRC值,更新uchCRCHi和uchCRCLo。
4. 結(jié)果組合:最終返回時(shí),將高位字節(jié)uchCRCHi左移8位,與低位字節(jié)uchCRCLo合并,形成最終的16位CRC值。
這個(gè)方法有效地驗(yàn)證Modbus通信中的數(shù)據(jù)完整性,一旦接收方計(jì)算出的CRC值與附加的CRC碼不一致,就說(shuō)明數(shù)據(jù)傳輸過(guò)程中出現(xiàn)了錯(cuò)誤。

在 Modbus 通信協(xié)議中,主機(jī)與設(shè)備之間通常使用 CRC16 校驗(yàn) 來(lái)確保通信數(shù)據(jù)的完整性。因此,主機(jī)與上面代碼通信時(shí),默認(rèn)使用的校驗(yàn)方式也是 CRC16。

具體來(lái)說(shuō),Modbus 協(xié)議有兩種主要的傳輸模式,每種模式的校驗(yàn)方式不同:

1. Modbus RTU 模式:
使用 CRC 校驗(yàn):Modbus RTU(Remote Terminal Unit)是二進(jìn)制通信格式,使用 CRC16 校驗(yàn)。如上代碼所示,發(fā)送數(shù)據(jù)時(shí),會(huì)計(jì)算數(shù)據(jù)的 CRC16 校驗(yàn)值,并將其附加在數(shù)據(jù)幀的末尾。接收方再通過(guò)相同的算法計(jì)算出 CRC 值,驗(yàn)證數(shù)據(jù)是否正確。
2. Modbus ASCII 模式:
使用 LRC 校驗(yàn):在 Modbus ASCII 模式下,校驗(yàn)方式為 LRC(縱向冗余校驗(yàn),Longitudinal Redundancy Check)。這是通過(guò)對(duì)數(shù)據(jù)幀中的每個(gè)字節(jié)進(jìn)行異或運(yùn)算,生成一個(gè)校驗(yàn)字節(jié)。
因此,如果通信采用 Modbus RTU 模式,則使用的是 CRC16 校驗(yàn),這也是上述代碼所實(shí)現(xiàn)的校驗(yàn)方式。如果是 Modbus ASCII 模式,則會(huì)使用 LRC 校驗(yàn)。
總結(jié):
主機(jī)與上述代碼進(jìn)行通信時(shí),通常使用的是 Modbus RTU 模式的 CRC16 校驗(yàn)。



觸摸屏通訊設(shè)置的485通訊參數(shù)波特率,奇/偶/N效驗(yàn),這些都是基本物理傳輸協(xié)議。 與程序中串口設(shè)置對(duì)應(yīng)
        /*USART初始化*/
        USART_InitTypeDef USART_InitStructure;                                        //定義結(jié)構(gòu)體變量
        USART_InitStructure.USART_BaudRate = 115200;                                //波特率
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;        //硬件流控制,不需要
        USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;        //模式,發(fā)送模式和接收模式均選擇
        USART_InitStructure.USART_Parity = USART_Parity_No;                //奇偶校驗(yàn),不需要
        USART_InitStructure.USART_StopBits = USART_StopBits_1;        //停止位,選擇1位
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;                //字長(zhǎng),選擇8位
        USART_Init(USART1, &USART_InitStructure);                                //將結(jié)構(gòu)體變量交給USART_Init,配置USART1


完成物理協(xié)議才是軟件協(xié)議觸摸屏選擇的是 Modbus RTU 模式也就決定了數(shù)據(jù)格式,效驗(yàn)方式為CRC,具體數(shù)據(jù)協(xié)議為標(biāo)準(zhǔn)協(xié)議
按標(biāo)準(zhǔn)寫就行了,具體通訊報(bào)文分析我提供的文檔內(nèi)都有
                           威綸通自由協(xié)議報(bào)文
地址        通訊                       
4x    15      01        03                        00 0F            00 01         B4 09
數(shù)字元件    站號(hào)1、功能碼03 讀多個(gè)寄存器、 地址15 、    數(shù)量1、     效驗(yàn)碼
5x    10      01        03                       00 0A           00 01          A4 08
數(shù)字元件    站號(hào)1、功能碼03 讀多個(gè)寄存器、 地址10 、    數(shù)量1、     效驗(yàn)碼
       






作者: lushui    時(shí)間: 2024-10-26 10:50
請(qǐng)問(wèn),威綸通的觸摸屏,采用Modbus ,每個(gè)功能碼代表著啥意思,你是怎么知道的,以及相應(yīng)的寄存器地址是怎么分配的




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 超碰中文字幕 | 男女操网站 | 国产精品福利在线观看 | 国产成人毛片 | 中文字幕在线免费视频 | 最新日韩在线 | 午夜精品久久久久 | 国产精品入口夜色视频大尺度 | 亚洲成人免费在线观看 | 午夜性影院 | av网站观看 | 狼人久久 | 久久人人爱 | 中文字幕第2页 | 久久久久婷婷 | 人人干人人爽 | 精品久久久久久久 | 美国式禁忌14在线 | 亚洲亚洲人成综合网络 | 成人毛片100免费观看 | 久久综合一区 | 一级片观看 | 国产裸体永久免费视频网站 | 午夜xxx | 国产乱人伦 | 中文字幕在线看片 | 欧美成人三级在线观看 | 玖玖久久 | 天天躁日日躁狠狠很躁 | 精品国产91| 国产永久视频 | 可以免费看的av | 亚洲欧美视频在线观看 | 日韩网站免费观看 | 国产福利小视频 | 欧美亚洲三级 | 日韩字幕 | 久久久久久一区二区 | 精品 | 三级av网站| 日韩国产精品视频 |