標(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)
下載附件
2024-9-8 20:59 上傳
-
歷史.png
(49.82 KB, 下載次數(shù): 7)
下載附件
2024-9-8 20:10 上傳
-
主屏.png
(54.73 KB, 下載次數(shù): 9)
下載附件
2024-9-8 20:08 上傳
-
校正分項(xiàng).png
(141.44 KB, 下載次數(shù): 8)
下載附件
2024-9-8 20:07 上傳
-
狀態(tài).png
(53.14 KB, 下載次數(shù): 8)
下載附件
2024-9-8 20:07 上傳
-
-
modbus485通訊觸摸屏.7z
2024-9-9 01:30 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
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è)置.png (68.27 KB, 下載次數(shù): 9)
下載附件
2024-9-11 15:23 上傳
通訊設(shè)置2 .png (18.87 KB, 下載次數(shù): 12)
下載附件
2024-9-11 15:23 上傳
觸摸屏通訊設(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网站|
日韩国产精品视频
|