wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

標(biāo)題: 我的ModBus主機(jī)-任務(wù)篇 [打印本頁]

作者: qinlu123    時(shí)間: 2021-11-15 13:27
標(biāo)題: 我的ModBus主機(jī)-任務(wù)篇
任務(wù)篇是建立在協(xié)議篇之上的。以我的項(xiàng)目為例,我有兩個(gè)從機(jī)設(shè)備,一個(gè)是EPC(控制器控制電磁閥開度使電磁閥出口處的氣壓保持恒定)需要主機(jī)設(shè)定出口處氣壓和定時(shí)讀取出口處實(shí)際氣壓;另一個(gè)是溫濕壓傳感器變送器需要定時(shí)讀取溫濕度壓數(shù)據(jù)。
我的理念是不管主機(jī)掛載幾個(gè)從機(jī)設(shè)備,而是主機(jī)有幾個(gè)任務(wù)。以上文為例,主機(jī)一共有三個(gè)任務(wù),一是設(shè)定EPC出口處氣壓(寫保持寄存器);二是讀取EPC出口處氣壓(讀輸入寄存器);三是讀取溫濕壓數(shù)據(jù)(讀輸入寄存器)。我們首先要建立這三個(gè)任務(wù)。我們根據(jù)從機(jī)名稱來創(chuàng)建4個(gè)文件分別是"EPC.c"、"EPC.h"、"THP.c"和"THP.h"。按照慣例我們先來看"EPC.h"和"THP.h"。
  1. #ifndef __EPC_H
  2. #define __EPC_H

  3. #include "Header.h"
  4. #include "UartDebug.h"
  5. #include "Modbus_Master.h"
  6. #include "Delay.h"

  7. struct EpcPre
  8. {
  9.         struct ModbusMasterDevice *MMD;
  10.         uint8_t DeviceAddr;
  11.         int16_t P_Fb,P_Sta;
  12.         uint16_t Pset;
  13.         uint8_t S_P_En,R_En;
  14.         uint8_t DataUpdate;
  15.         uint8_t SetSuccess;
  16. };

  17. extern struct EpcPre EPC1;

  18. void EPCInit(void);
  19. uint8_t ReadEPC(void *Para);
  20. void ReadEPFEnable(struct EpcPre *EPF);
  21. uint8_t SetPreVal(void *Para);
  22. void SetPreValEnable(struct EpcPre *EPC,uint16_t Pre);

  23. #endif
復(fù)制代碼
  1. #ifndef __THP_H
  2. #define __THP_H

  3. #include "Header.h"
  4. #include "UartDebug.h"
  5. #include "Modbus_Master.h"
  6. #include "Delay.h"

  7. struct TemHumPre
  8. {
  9.         struct ModbusMasterDevice *MMD;
  10.         uint8_t DeviceAddr;
  11.         float AirTemp;
  12.         float AirHun;
  13.         float AirPre;
  14.         uint8_t Enable;
  15.         uint8_t DataUpdate;
  16. };

  17. extern struct TemHumPre THP1;

  18. void THPInit(void);
  19. uint8_t ReadTHP(void *Para);
  20. void ReadTHPEnable(struct TemHumPre *THP);

  21. #endif
復(fù)制代碼
這兩個(gè)文件非常相似,下面我們來詳細(xì)介紹一下。
略過頭文件我們來看從機(jī)結(jié)構(gòu)體。
“struct ModbusMasterDevice *MMD;” 從機(jī)掛載到的ModBus主機(jī);
“uint8_t DeviceAddr;” 從機(jī)的設(shè)備地址;
“int16_t P_Fb,P_Sta;” “float AirTemp;”“float AirHun;”“float AirPre;”數(shù)據(jù)區(qū),根據(jù)從機(jī)的需求而定;
“uint8_t S_P_En,R_En;”“uint8_t Enable; ”任務(wù)的使能標(biāo)志,可以看到因?yàn)镋PC有兩個(gè)任務(wù)所以它有S_P_En和R_En兩個(gè)使能標(biāo)志,而THP只有一個(gè)任務(wù)所以它只有一個(gè)Enable;
“uint8_t DataUpdate;”讀保持/輸入寄存器成功標(biāo)志;
“uint8_t SetSuccess;”寫保持寄存器成功標(biāo)志,THP沒有相對(duì)應(yīng)得任務(wù)所以也就沒有該標(biāo)志。
接下來我們來看具體得任務(wù)實(shí)現(xiàn)。
  1. #include "EPC.h"

  2. struct EpcPre EPC1;

  3. void EPCInit(void)
  4. {
  5.         EPC1.MMD = &MMDPort1;
  6.         EPC1.DeviceAddr = 0x01;
  7. }
  8. uint8_t ReadEPC(void *Para)
  9. {
  10.         struct EpcPre *EPC;
  11.        
  12.         EPC = (struct EpcPre *)Para;
  13.         if(ReadHoldInputReg(EPC->MMD,EPC->DeviceAddr,0x04,0,4) != 0)
  14.         {
  15.                 if(EPC->MMD->RIR_Update)
  16.                 {
  17.                         EPC->MMD->RIR_Update = 0;
  18.                         EPC->DataUpdate = 1;
  19.                         EPC->P_Fb = EPC->MMD->Input_Reg[0];
  20.                         EPC->P_Sta = EPC->MMD->Input_Reg[1];
  21.                 }
  22.                 EPC->R_En = 0;
  23.                 return 1;
  24.         }
  25.         return 0;
  26. }
  27. void ReadEPFEnable(struct EpcPre *EPC)
  28. {
  29.         EPC->R_En = 1;
  30. }
  31. uint8_t SetPreVal(void *Para)
  32. {
  33.         struct EpcPre *EPC;
  34.        
  35.         EPC = (struct EpcPre *)Para;
  36.         if(WriteHoldReg(EPC->MMD,EPC->DeviceAddr,0,1,&EPC->Pset) != 0)
  37.         {
  38.                 if(EPC->MMD->WHR_Success)
  39.                 {
  40.                         EPC->MMD->WHR_Success = 0;
  41.                         EPC->SetSuccess = 1;
  42.                 }
  43.                 EPC->S_P_En = 0;
  44.                 return 1;
  45.         }
  46.         return 0;
  47. }
  48. void SetPreValEnable(struct EpcPre *EPC,uint16_t Pre)
  49. {
  50.         EPC->S_P_En = 1;
  51.         EPC->Pset = Pre;
  52. }
復(fù)制代碼
  1. #include "THP.h"

  2. struct TemHumPre THP1;

  3. void THPInit(void)
  4. {
  5.         THP1.MMD = &MMDPort1;
  6.         THP1.DeviceAddr = 0x03;
  7. }
  8. uint8_t ReadTHP(void *Para)
  9. {
  10.         struct TemHumPre *THP;
  11.        
  12.         THP = (struct TemHumPre*)Para;
  13.         if(ReadHoldInputReg(THP->MMD,THP->DeviceAddr,0x04,0,3) != 0)
  14.         {
  15.                 if(THP->MMD->RIR_Update)
  16.                 {
  17.                         THP->MMD->RIR_Update = 0;
  18.                         if(THP->MMD->Input_Reg[0] != 0xffff)
  19.                         {
  20.                                 THP->AirTemp = (float)(THP->MMD->Input_Reg[0]-10000)/10;
  21.                         }
  22.                         if(THP->MMD->Input_Reg[1] != 0xffff)
  23.                         {
  24.                                 THP->AirHun = (float)THP->MMD->Input_Reg[1]/10;
  25.                         }
  26.                         if(THP->MMD->Input_Reg[2] != 0xffff)
  27.                         {
  28.                                 THP->AirPre = (float)THP->MMD->Input_Reg[2]/10;
  29.                         }
  30.                 }
  31.                 THP->Enable = 0;
  32.                 return 1;
  33.         }
  34.         return 0;
  35. }
  36. void ReadTHPEnable(struct TemHumPre *THP)
  37. {
  38.         THP->Enable = 1;
  39. }
復(fù)制代碼
整體來看,每個(gè)任務(wù)都分為任務(wù)主體和任務(wù)使能兩個(gè)部分,任務(wù)主體由下一章要介紹的調(diào)度篇來調(diào)用,使能由用戶來調(diào)用,比如THP需要每隔1S讀取一次那么就使函數(shù)“void ReadTHPEnable(struct TemHumPre *THP)”每隔1S執(zhí)行一次。
  1. static void Task_1000ms(void)
  2. {
  3.         ReadTHPEnable(&THP1);
  4. }
復(fù)制代碼
而EPC需要500ms讀取一次氣壓,則使函數(shù)“void ReadEPFEnable(struct EpcPre *EPC)”每隔500ms執(zhí)行一次。
  1. static void Task_500ms(void)
  2. {
  3.         ReadEPFEnable(&EPC1);
  4. }
復(fù)制代碼
對(duì)于寫保持寄存器相關(guān)的任務(wù)我們可以順道把要寫的數(shù)據(jù)放在使能函數(shù)里,這樣可以使寫保持寄存器的任務(wù)主體函數(shù)更加簡(jiǎn)潔。
下面我們需要著重講解一下任務(wù)主體的實(shí)現(xiàn)。
以讀取EPC氣壓為例,任務(wù)會(huì)首先執(zhí)行函數(shù)“ReadHoldInputReg()”并判斷返回值,根據(jù)協(xié)議篇可以知道在等待從機(jī)應(yīng)答的那段時(shí)間“ReadHoldInputReg()”會(huì)返回0,于是“ReadEPC()”也返回0告知上層函數(shù)目前正在等待從機(jī)應(yīng)答;若“ReadHoldInputReg()”返回1則說明從機(jī)成功應(yīng)答或者應(yīng)答超時(shí)了,我們?cè)趺粗赖降资菓?yīng)答了還是超時(shí)了呢?這就需要讀取變量RIR_Update,若為1則說明應(yīng)答成功我們就需要把讀到的數(shù)據(jù)進(jìn)行保存和處理,RIR_Update也完成了它的使命所以將其置0,并將DataUpdate置1告知上層函數(shù)數(shù)據(jù)讀取成功。從機(jī)無論是應(yīng)答還是超時(shí)都需要將R_En置0并返回1這點(diǎn)至關(guān)重要。
所有的任務(wù)必須嚴(yán)格按照該格式來實(shí)現(xiàn),否則會(huì)影響上層的調(diào)度工作。
至此任務(wù)篇就介紹完畢了。






作者: LH4492    時(shí)間: 2022-4-18 11:03
教程很好,學(xué)習(xí)學(xué)習(xí),感謝!
作者: qhp777    時(shí)間: 2023-5-12 16:43
crc沒看到,
作者: linlin1    時(shí)間: 2024-7-10 15:32
這是哪個(gè)系類單片機(jī)的呢
作者: linlin1    時(shí)間: 2024-7-10 15:32
只是什么系列的單片機(jī)呢
作者: qinlu123    時(shí)間: 2024-10-30 16:58
qhp777 發(fā)表于 2023-5-12 16:43
crc沒看到,

CRC在協(xié)議篇里
作者: qinlu123    時(shí)間: 2024-10-30 16:59
linlin1 發(fā)表于 2024-7-10 15:32
只是什么系列的單片機(jī)呢

這些代碼不分單片機(jī),底層應(yīng)用層分離的只需要修改一點(diǎn)點(diǎn)接口代碼就行




歡迎光臨 (http://www.izizhuan.cn/bbs/) Powered by Discuz! X3.1
ga∨成人网| 亚洲va在线| japanesexxxx在线播放| 日韩精品久久久久久免费| 青青草av网站| 精品国产乱码久久久久| 亚洲男人的天堂网站| 亚洲一区二区综合| 国产成人精品影院| 中文字幕免费精品| 久久国内精品| 国产大学生校花援交在线播放| 一区二区三区小视频| 久久久久久激情| 波多野结衣网页| 男人添女人下部视频免费| 成人有码在线播放| 欧美插天视频在线播放| 911国产精品| ...中文天堂在线一区| 日本美女一区二区三区| 国模精品一区| 91精品一区| 黄色免费在线观看| 青柠在线影院观看日本| 国产95在线|亚洲| 高h调教冰块play男男双性文| 欧美成人手机视频| 波多野结衣影院| 日本人视频jizz页码69| 中文字幕久久一区| 国产一区二区不卡视频在线观看| 国内免费精品永久在线视频| 亚洲成人久久电影| 欧美亚洲丝袜传媒另类| 亚洲激情自拍偷拍| 久久尤物电影视频在线观看| 欧美a级理论片| 红桃视频国产精品| 久久av电影| 国产亚洲字幕| 欧亚一区二区| 色呦呦在线看| 久久日韩视频| 成人欧美亚洲| 日本视频在线观看一区二区三区| 中文字幕高清20页| 黄色免费视频| 天堂网www在线网| 精品久久九九| 欧美乱妇18p| 天天干天天干天天干| 亚洲视频在线观看一区二区| 日韩精品在线免费看| 国产精品视频一区二区三| 受虐m奴xxx在线观看| 人妻精品久久久久中文字幕69| 欧美日韩在线免费播放| 日韩av在线第一页| 国产精品专区在线| 免费看又黄又无码的网站| 福利网在线观看| 中文字幕免费在线不卡| 亚洲国产高清国产精品| 日韩一区二区电影在线观看| 日韩成人在线资源| 亚洲激情一区二区三区| 婷婷五月色综合| 在线国产精品网| 亚洲一区二区在线免费观看| 亚洲精品国产精品国自产| 欧洲av一区| 影音先锋欧美在线| 六月婷婷激情网| 岛国大片在线播放| www.中文字幕在线| 国产成人无码一二三区视频| 国产成人无码一二三区视频| av免费网站观看| 成人不卡免费视频| 精品伦一区二区三区| 麻豆av免费看| 中文字幕在线看高清电影| 久久日免费视频| 久青草免费视频| 波多野结衣二区三区| 亚洲手机在线观看| 色窝窝无码一区二区三区| 日韩成人黄色片| 国产精选在线视频拍拍拍| 尤物视频网站| av网站免费观看| 在线视频中文字幕久| 国产在线播放av| 欧美性爽视频| 成人福利一区二区| 国产精品网站在线看| 日韩欧美不卡| 性欧美videos另类喷潮| 另类调教123区| 91色在线porny| 夜夜揉揉日日人人青青一国产精品| 欧美色欧美亚洲高清在线视频| 7777精品伊人久久久大香线蕉的 | 丁香综合五月| 色播在线视频| 国产黄网站在线观看| 超碰91在线观看| 国产精品亚洲四区在线观看| 亚洲日产av中文字幕| 亚洲色图88| 九九在线精品视频| 日本一区二区三区免费乱视频| 一区2区3区在线看| 这里只有精品99re| 久久精品国产电影| 国产日韩欧美影视| 亚洲精品一区二区三区av| 女人帮男人橹视频播放| 在线免费黄色小视频| 黑人操日本美女| 一级特黄aaa大片在线观看| 男人的天堂视频网站| 2色视频网站| 91社区在线观看播放| 成人性生活av| 欧美中文一区二区| 久久精品久久久精品美女| 欧美激情一二三区| 在线综合亚洲欧美在线视频| 日韩亚洲欧美成人| 91aaaa| 日韩精品在线观看av| 国产a级黄色片| 日韩精品在线免费视频| 区二区三区在线| 浪潮av在线| 成人av影院在线观看| 国产精品传媒| 免播放器亚洲一区| 又紧又大又爽精品一区二区| 亚洲第一精品电影| 国产成人在线一区| 欧美日韩亚洲国产成人| 黑森林av导航| 中文字幕精品在线观看| 摸bbb搡bbb搡bbbb| 午夜av在线播放| 欧美军人男男激情gay| 黄色资源网久久资源365| 一级做a爱片久久| 亚洲欧美综合精品久久成人| 成人情趣片在线观看免费| www.夜夜爱| 欧美激情视频二区| 五月天丁香视频| 国产91精品一区| 国产在线观看不卡一区二区三区| 欧美美女色图| www.丝袜精品| 精品一区二区三区在线播放| 午夜精品久久久久久久久久| 最近2019中文免费高清视频观看www99 | 欧美亚洲第一页| 欧美日韩在线一区二区三区| 亚洲第一区第二区第三区| 欧美成人精品欧美一级乱黄| 天堂在线中文网| 中文字幕在线观看第一页| 2020国产精品小视频| 日韩在线卡一卡二| 欧美日韩国产影院| 午夜精品久久久久久久白皮肤 | 日韩一级毛片| 国产亚洲成aⅴ人片在线观看| 精品日韩99亚洲| 成人做爰66片免费看网站| 亚洲精品mv在线观看| 成人午夜精品视频| aaaaa毛片| 日本在线成人| 国产精品18久久久久久久网站| 欧美日韩精品专区| 91在线看国产| 在线播放/欧美激情| 欧亚精品在线观看| 亚洲高清在线免费观看| 久久精品国产亚洲AV无码麻豆| 国产精品在线| 国产美女情趣调教h一区二区| 天天做天天爱天天综合网2021| 国产精品久久久久久久裸模| 日韩最新中文字幕电影免费看| 国产精品香蕉视屏| av男人的天堂av| 欧美四级剧情无删版影片| sese一区| 五月婷婷六月综合| 亚洲欧美日韩综合aⅴ视频| 欧美极品少妇xxxxⅹ喷水| 国内少妇毛片视频| 中文天堂在线资源| 黄色在线免费观看大全| 888久久久| 亚洲va中文字幕| 国产精品久久久久久久久久新婚 | 日韩在线卡一卡二| 日韩欧美高清在线| 日本一区不卡| 久久免费播放视频| 国产网红在线| 日韩av自拍| 天天综合色天天综合色h| 国产精品色悠悠| 中文字幕一区二区三区人妻不卡| 国产一线天粉嫩馒头极品av| 久久青草视频| 国产网站一区二区三区| 久久久久久久久国产| 韩国日本美国免费毛片| www.久久伊人| 国产精品va在线观看视色| 国产精品普通话对白| 欧美综合亚洲图片综合区| 成人精品久久久| 亚洲精品国产一区黑色丝袜| 欧美另类极品videosbest视频| 99只有精品| 美女精品一区二区| 一区二区三区精品99久久| 日本三日本三级少妇三级66| www欧美在线| 午夜黄色在线观看| 欧美日本三区| 精品久久国产字幕高潮| 久久av喷吹av高潮av| 亚洲视频中文字幕在线观看| 18+激情视频在线| 国产一区二区你懂的| 亚洲国产欧美久久| 久久观看最新视频| 一级黄色小视频| 久久av色综合| av福利精品| 成人三级视频| 欧美日韩欧美一区二区| 精品久久精品久久| 久久中文字幕在线观看| 手机看片福利在线观看| 亚洲午夜91| 日韩亚洲欧美在线| 91制片厂免费观看| 免费av网站观看| 激情久久免费视频| 婷婷久久综合九色综合绿巨人 | 91在线看黄| 国产中文一区二区三区| 久久精品久久精品亚洲人| 亚洲av无一区二区三区久久| 成年人福利网站| 中文无码久久精品| 亚洲欧洲一区二区三区在线观看| 亚洲国产高清av| 成年女人免费v片| 亚洲国产一区二区三区a毛片| 亚洲视频综合网| 免费黄视频在线观看| 一插菊花综合| 午夜在线视频观看日韩17c| 色偷偷偷亚洲综合网另类| 日本黄色www| 婷婷色播视频| 久久一综合视频| 欧美激情成人在线视频| 欧美激情亚洲色图| 国产三区四区在线观看| 成熟亚洲日本毛茸茸凸凹| 日本亚洲欧美三级| 久久狠狠高潮亚洲精品| 久热在线观看视频| 亚洲激情在线激情| 日韩欧美国产一二三区| 国产成人无码一二三区视频| 一分钟免费观看视频播放www | 精品国产乱码久久久久久夜甘婷婷| 啊啊啊一区二区| 一个人看的www视频免费观看 | 美女福利精品视频| 色噜噜噜噜噜噜| 日韩专区在线| 欧美国产欧美亚州国产日韩mv天天看完整 | 日本韩国欧美一区| 99爱视频在线| 小次郎av收藏家| 奇米亚洲午夜久久精品| 日本一欧美一欧美一亚洲视频| 欧美国产在线看| 欧美电影免费观看| 色欲综合视频天天天| 红桃av在线播放| 日本aⅴ中文| av不卡在线播放| 快播亚洲色图| 手机看片日韩| 一区二区亚洲| 日本五十熟hd丰满| 无码人妻久久一区二区三区不卡| 国产精品三级一区二区| 亚洲精品午夜视频| 在线观看av的网站| 亚洲欧洲国产日本综合| 一区二区三区四区欧美日韩| 麻豆精品免费视频入口| 欧美破处大片在线视频| 26uuu另类亚洲欧美日本老年| 欧美激情亚洲综合| 一区视频网站| 亚洲欧美国产一区二区三区| 免费看的黄色网| 忘忧草在线影院两性视频| 在线视频国产一区| 69久久精品无码一区二区| 国产二区视频在线观看| 亚洲一区二区视频在线| 中文字幕日本最新乱码视频| 韩国97影院| 中文字幕久久午夜不卡| 超碰免费在线公开| 免费观看视频www| 久久夜色精品国产欧美乱极品| 神马影院午夜我不卡| 日日干天夜夜| 国产成人午夜99999| 日韩欧美视频一区二区| 欧洲毛片视频| 99在线精品免费| 老司机午夜网站| 91午夜在线| 亚洲综合免费观看高清完整版在线 | 一区二区av在线| 日本少妇bbwbbw精品| 亚洲天堂中文字幕在线观看| 一区二区三区亚洲| 成年人视频在线免费看| 欧美日一区二区| 日本视频久久久| 亚洲人成影院77777| 久久一区欧美| 色大师av一区二区三区| 国产成人综合美国十次| 欧美高清在线精品一区| 国产日韩成人内射视频| 麻豆视频在线播放| 欧美久久高跟鞋激| 日韩欧美在线视频播放| 色999久久久精品人人澡69 | 亚洲国产视频直播| 四虎国产精品永久免费观看视频| 日本高清成人vr专区| 欧美成人乱码一区二区三区| 国产精品白嫩白嫩大学美女| 人体久久天天| 国产精品av在线播放| 国产一区二区三区四区尤物| 成人一区在线观看| 大肉大捧一进一出好爽视频| 欧美18hd| 精品乱人伦一区二区三区| 国产精品成人久久| 91亚洲成人| 国产在线观看一区| 欧美成人影院在线播放| 亚洲成人激情av| 在线观看免费小视频| 欧美激情极品| 欧美孕妇与黑人孕交| 欧美激情福利视频在线观看免费| 国产成a人亚洲| 蜜臀av午夜一区二区三区| 污视频在线看网站| 亚洲天堂av综合网| 99久久久国产精品无码免费| 日韩精品一卡二卡三卡四卡无卡| 一区二区三区欧美成人| 成年人视频在线免费观看| 91精品国产黑色紧身裤美女| 日本一区二区三区四区五区| 亚洲国产一区二区三区在线播放 | 蜜臀久久99精品久久久久久宅男| 人妻偷人精品一区二区三区| 精油按摩中文字幕久久| www.国产亚洲| 青春草视频在线| 中文字幕不卡在线视频极品| 精品人妻无码一区二区| 国产精品一区二区在线观看网站| 中文字幕欧美人妻精品一区| yw.尤物在线精品视频| 欧美性受xxxx黑人猛交| 天堂网www天堂在线网|