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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4573|回復: 6
打印 上一主題 下一主題
收起左側

我的ModBus主機-任務篇

  [復制鏈接]
跳轉到指定樓層
樓主
ID:446156 發表于 2021-11-15 13:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
任務篇是建立在協議篇之上的。以我的項目為例,我有兩個從機設備,一個是EPC(控制器控制電磁閥開度使電磁閥出口處的氣壓保持恒定)需要主機設定出口處氣壓和定時讀取出口處實際氣壓;另一個是溫濕壓傳感器變送器需要定時讀取溫濕度壓數據。
我的理念是不管主機掛載幾個從機設備,而是主機有幾個任務。以上文為例,主機一共有三個任務,一是設定EPC出口處氣壓(寫保持寄存器);二是讀取EPC出口處氣壓(讀輸入寄存器);三是讀取溫濕壓數據(讀輸入寄存器)。我們首先要建立這三個任務。我們根據從機名稱來創建4個文件分別是"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
復制代碼
  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
復制代碼
這兩個文件非常相似,下面我們來詳細介紹一下。
略過頭文件我們來看從機結構體。
“struct ModbusMasterDevice *MMD;” 從機掛載到的ModBus主機;
“uint8_t DeviceAddr;” 從機的設備地址;
“int16_t P_Fb,P_Sta;” “float AirTemp;”“float AirHun;”“float AirPre;”數據區,根據從機的需求而定;
“uint8_t S_P_En,R_En;”“uint8_t Enable; ”任務的使能標志,可以看到因為EPC有兩個任務所以它有S_P_En和R_En兩個使能標志,而THP只有一個任務所以它只有一個Enable;
“uint8_t DataUpdate;”讀保持/輸入寄存器成功標志;
“uint8_t SetSuccess;”寫保持寄存器成功標志,THP沒有相對應得任務所以也就沒有該標志。
接下來我們來看具體得任務實現。
  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. }
復制代碼
  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. }
復制代碼
整體來看,每個任務都分為任務主體和任務使能兩個部分,任務主體由下一章要介紹的調度篇來調用,使能由用戶來調用,比如THP需要每隔1S讀取一次那么就使函數“void ReadTHPEnable(struct TemHumPre *THP)”每隔1S執行一次。
  1. static void Task_1000ms(void)
  2. {
  3.         ReadTHPEnable(&THP1);
  4. }
復制代碼
而EPC需要500ms讀取一次氣壓,則使函數“void ReadEPFEnable(struct EpcPre *EPC)”每隔500ms執行一次。
  1. static void Task_500ms(void)
  2. {
  3.         ReadEPFEnable(&EPC1);
  4. }
復制代碼
對于寫保持寄存器相關的任務我們可以順道把要寫的數據放在使能函數里,這樣可以使寫保持寄存器的任務主體函數更加簡潔。
下面我們需要著重講解一下任務主體的實現。
以讀取EPC氣壓為例,任務會首先執行函數“ReadHoldInputReg()”并判斷返回值,根據協議篇可以知道在等待從機應答的那段時間“ReadHoldInputReg()”會返回0,于是“ReadEPC()”也返回0告知上層函數目前正在等待從機應答;若“ReadHoldInputReg()”返回1則說明從機成功應答或者應答超時了,我們怎么知道到底是應答了還是超時了呢?這就需要讀取變量RIR_Update,若為1則說明應答成功我們就需要把讀到的數據進行保存和處理,RIR_Update也完成了它的使命所以將其置0,并將DataUpdate置1告知上層函數數據讀取成功。從機無論是應答還是超時都需要將R_En置0并返回1這點至關重要。
所有的任務必須嚴格按照該格式來實現,否則會影響上層的調度工作。
至此任務篇就介紹完畢了。





評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂1 踩
回復

使用道具 舉報

無效樓層,該帖已經被刪除
板凳
ID:654585 發表于 2022-4-18 11:03 | 只看該作者
教程很好,學習學習,感謝!
回復

使用道具 舉報

無效樓層,該帖已經被刪除
5#
無效樓層,該帖已經被刪除
6#
ID:27536 發表于 2023-5-12 16:43 | 只看該作者
crc沒看到,
回復

使用道具 舉報

7#
ID:50577 發表于 2024-7-10 15:32 | 只看該作者
這是哪個系類單片機的呢
回復

使用道具 舉報

8#
ID:50577 發表于 2024-7-10 15:32 | 只看該作者
只是什么系列的單片機呢
回復

使用道具 舉報

9#
ID:446156 發表于 2024-10-30 16:58 | 只看該作者

CRC在協議篇里
回復

使用道具 舉報

10#
ID:446156 發表于 2024-10-30 16:59 | 只看該作者
linlin1 發表于 2024-7-10 15:32
只是什么系列的單片機呢

這些代碼不分單片機,底層應用層分離的只需要修改一點點接口代碼就行
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
石原莉奈一区二区三区高清在线| 里番精品3d一二三区| 欧美乱大交xxxxx另类| 亚洲a在线观看| 日韩欧美中文字幕一区| 欧美韩国一区二区| 高清一区二区中文字幕| 你懂的免费在线观看| 日韩xxx视频| 成人三级做爰av| 一区二区三区国产福利| 亚洲精美色品网站| 亚洲成人综合视频| 成人动漫一区二区| 99在线精品视频在线观看| 国产成人在线中文字幕| 中出福利视频| 国产精品久久久久久久牛牛 | 原千岁中文字幕| 欧美最猛性xxxxx喷水| 亚洲中文字幕无码爆乳av | 久久精品国产一区二区三区免费看| 亚洲婷婷丁香| 欧美free嫩15| 黄色成人影院| 在线播放的av| 中文字幕你懂得| 91肉色超薄丝袜脚交一区二区| 国产不卡在线观看视频| 中文字幕国产免费| 国产精品久久久久久久久久久久 | 午夜免费一区二区| 国产精品草莓在线免费观看 | 97人人在线| 成年人羞羞的网站| 色视频免费在线| 欧美一级片黄色| 白嫩少妇丰满一区二区| 好吊色这里只有精品| 九九九热999| 亚洲人成电影网站色| 欧美午夜精品免费| 国产福利一区二区三区视频在线 | 欧美午夜片在线看| **网站欧美大片在线观看| 岛国精品在线观看| 奇米影视一区二区三区| 欧美日韩亚洲一区三区| 国产精品毛片久久| 午夜先锋成人动漫在线| 久久精品资源| jizz国产视频| 在线观看日本网站| 久久久精品国产sm调教| 国产伦精品一区二区三区四区免费| 欧美成人自拍视频| 亚洲一级片在线看| 精品福利一二区| 国产在线播放一区二区三区| 亚洲第一黄网| 国产精品99一区二区三区| 一区二区美女| 国产在线播放精品| 白白在线精品| 日韩福利视频一区| 久草成人在线| 欧美色999| 在线日韩影院| 日韩欧美少妇| 日韩一区二区三区免费| 成人免费无遮挡| 中文字幕一区久| av一区在线播放| 国产亚洲人成a在线v网站| 国产原创一区| 9国产精品午夜| 日韩aaa久久蜜桃av| 青青草原在线亚洲| 欧美色图激情小说| 国产高清久久| 国产日韩欧美高清免费| 日韩高清在线不卡| 国产白丝精品91爽爽久久| 91欧美激情一区二区三区成人| 久久精品夜色噜噜亚洲a∨| 中文字幕一区二区三区四区不卡| 久久99国产精品麻豆| 国产精品自拍在线| 亚洲承认在线| 免费看日韩精品| 国产盗摄视频一区二区三区| 久久众筹精品私拍模特| 久久99精品久久久久婷婷| 国产黄色91视频| 国产欧美日韩三区| 欧美日韩国产色| 欧美精品在线视频| 国产视频在线观看一区二区| 久久久精品久久| 国产成人精品电影久久久| 99在线视频免费观看| 新呦u视频一区二区| 欧日韩免费视频| 成人高清在线观看视频| jizz日本在线播放| 国产精品自拍第一页| 日韩永久免费视频| 夜夜操夜夜骑| 国产美女自拍| 天天操夜夜操免费视频| 国产在线一二三区| 日韩av成人| 国产一线二线在线观看| 欧美三级一区| 欧美另类女人| 成人毛片老司机大片| 亚洲色欲色欲www在线观看| 国产色一区二区| 一区二区三区在线免费观看| 亚洲免费观看在线视频| 欧美日韩一区二区欧美激情| 一区二区三区高清国产| 国产免费一区二区三区香蕉精| 日韩视频精品| 日韩一区二区三区不卡视频| 一级特黄曰皮片视频| 在线免费一区二区| 欧美成人se01短视频在线看| 传媒在线观看| 午夜影院在线播放| 精品国产aⅴ| 久久99这里只有精品| 亚洲女性喷水在线观看一区| 精品三级av在线| 亚洲国产免费av| 97超视频免费观看| 欧美性在线观看| 欧美日韩无遮挡| 国产视频999| 成人91视频| 国产美女在线一区| 538精品视频| 国产av无码专区亚洲av| 娇小的粉嫩xxx极品| 一级毛片视频在线观看| 影音先锋在线播放| 欧美黑白配在线| 久久99国产乱子伦精品免费| 亚洲h动漫在线| 色妞久久福利网| 国产一区二区精品免费| 欧美性大战久久久久xxx| 天天色影综合网| 久久久久88色偷偷| 触手亚洲一区二区三区| 狼人天天伊人久久| 国产精品一区二区在线观看不卡| 欧美日韩亚洲精品内裤| 久久69精品久久久久久久电影好| 亚洲国产精品久久艾草纯爱| 亚洲色图18p| 好吊色欧美一区二区三区| 日本高清一区二区视频| 性色av一区二区三区四区| 狠狠色henhense| 中文字幕高清在线播放| 亚洲免费大片| 亚洲va国产va欧美va观看| 美女少妇精品视频| 亚洲欧美国产精品桃花| 日韩精品卡通动漫网站| 欧美视频xxx| 国产在线资源| 日韩电影一区| 国产精品成人免费在线| 日韩中文综合网| 色呦呦网站入口| 一起操在线视频| 无码免费一区二区三区| 成人漫画网站免费| 国产视频一区二| 国产激情91久久精品导航 | 国产精品12区| 91精品免费观看| 成人高清在线观看| 国产一级伦理片| 五月婷婷在线播放| www.狠狠色.com| 成人av三级| 日韩不卡一二三区| 欧美人妖巨大在线| 成人h视频在线观看| 国产高清自拍视频| 特级西西444www高清大视频| 麻豆免费网站| 啪啪国产精品| 综合婷婷亚洲小说| 91国产精品视频在线| 国产喷水theporn| 性生活免费网站| 精精国产xxxx视频在线| 亚洲一级网站| 欧美色图一区二区三区| 国产99视频精品免费视频36| 久久99精品久久久久久青青日本| 国产白丝袜美女久久久久| 日日噜噜噜噜人人爽亚洲精品| 免费女人黄页| 国产一区福利| 亚洲欧美中日韩| 欧美在线一级va免费观看| www.黄色网址.com| 视频一区二区免费| 欧美一区二区成人| 亚洲欧美日韩久久久久久| 欧美资源一区| 久久一二三四区| 三级短视频在线| 亚洲国产欧美国产第一区| 99久久99久久精品国产片果冻| 国产亚洲精品久久久久久| 最新精品视频| 无码人妻精品一区二区50| 国产午夜在线观看| 亚洲综合二区| 欧美精品色综合| 欧美日韩美女在线观看| 久久99热精品这里久久精品| 91激情视频在线| 亚洲精品久久久蜜桃动漫 | 国产真实生活伦对白| 日韩中文字幕无砖| 日韩毛片精品高清免费| 国产91|九色| 中文字幕第66页| 久热中文字幕精品视频在线 | 91成人在线视频观看| 亚洲成人第一网站| 九色蝌蚪在线| 蜜乳av一区二区| 最近中文字幕日韩精品| 伊人国产在线视频| 国产乱人视频免费播放| 日韩av影院| 一本大道久久a久久综合| 精品国产福利| 五月婷婷色丁香| 日本中文字幕伦在线观看| 蜜臀av一区二区| 久久天天躁日日躁| v天堂中文在线| 美女露隐私免费网站| 亚洲人成免费| 中文字幕日韩欧美在线视频| 91精品999| 狠狠色噜噜狠狠狠狠黑人| 91成人精品| 亚洲视频一区二区免费在线观看| 成人免费网站在线| 久久综合色综合| 国产素人视频在线观看| 本田岬高潮一区二区三区| 国产aaa精品| 久久久精品人妻一区二区三区四 | 欧美日本韩国国产| 亚洲中文字幕在线观看| 高清不卡亚洲| 亚洲精品国产a久久久久久| 奇米影视首页 狠狠色丁香婷婷久久综合 | 国产美女在线免费观看| 伊人成年综合电影网| 最近2019中文字幕在线高清| 亚洲自拍偷拍精品| 欧美13~18sex性hd| 六月丁香综合在线视频| 欧美亚洲免费电影| 九九九在线视频| 成人国产电影在线观看| 一二三四社区欧美黄| 先锋在线资源一区二区三区| 亚洲第一色网| 精品国产91| 亚洲视频国产视频| 熟女俱乐部一区二区视频在线| 日韩av地址| 91网站最新网址| 精品日韩美女| 深爱五月激情五月| 亚州综合一区| 精品视频偷偷看在线观看| 日本道中文字幕| 欧美一区二区视频| 久久久久久久久岛国免费| 国产亚洲欧美一区二区三区| 国精产品乱码一区一区三区四区| 美女视频免费精品| 精品小视频在线| 国产一二三四五区| 黄色在线观看网站| 亚洲精品高清视频在线观看| 国产在线观看欧美| 18free性欧美另类hd| 免费视频一区二区三区在线观看| 97视频在线观看成人| 国产在线观看黄色| 97人人澡人人爽91综合色| 亚洲电影在线看| 人成免费在线视频| av蜜臀在线| 久久综合久久综合亚洲| 免费看国产精品一二区视频| 在线成人综合色一区| 中文在线播放一区二区 | 欧美黑人经典片免费观看| 综合免费一区二区三区| 自拍日韩欧美| 久久久伊人欧美| 白白色免费视频| 欧美黑人xx片| 在线欧美小视频| wwwww在线观看| 精品黄色免费中文电影在线播放| 亚洲综合色成人| 无码少妇一区二区三区芒果| 在线视频你懂| 国产精品正在播放| 精品免费二区三区三区高中清不卡| 亚洲国产视频在线观看| 久久久xxx| 国产伦精品一区二区三毛| 性xxxxxxxxx18欧美| 亚洲永久网站| 成人在线免费网站| 蜜桃91在线| 国产成人自拍网| 亚洲午夜久久久影院伊人| 可以免费观看av的网站| 99久久免费精品高清特色大片| 91在线中文字幕| 免费永久在线观看黄网| 久久亚洲精品伦理| 国产精品一区二区免费看| 高清国产免费| 成人一区二区三区在线观看| 好色先生视频污| 九草视频在线观看| 亚洲午夜精品网| 久久免费精品国产| 一区二区乱码| 日韩av影视在线| 国产乡下妇女做爰视频| 欧美美乳视频| 国产精品青青在线观看爽香蕉 | 蜜臀久久精品久久久用户群体| 精品国产乱码一区二区三区| 俺去亚洲欧洲欧美日韩| 在线观看中文字幕av| 自拍偷拍欧美| 国产高清精品一区二区| 狠狠色噜噜狠狠狠狠8888| 欧美韩国日本综合| 久久久久久久久久一区| 麻豆免费在线| 亚洲偷熟乱区亚洲香蕉av| 久久精品视频2| 在线观看一区视频| 久久大片网站| 国产视频三区| 精品久久久中文| 青青青手机在线视频| 偷拍精品福利视频导航| 国产精品国内视频| 91caopron| 中文字幕一区二区在线观看| 欧美久久久久久久久久久| 国产精品久久久久久妇女| 欧美成人午夜激情在线| 中文字幕国语官网在线视频| 99国内精品久久| 一区二区在线免费看| 成人免费短视频| 成年无码av片在线| 中文字幕在线久热精品| 99re免费视频精品全部| 五月天视频在线观看| 欧美黄页在线免费观看| 97在线精品国自产拍中文| 国产精品视频第一区二区三区| 国产调教视频一区| 国产免费一区二区三区最新6| 日韩高清在线观看一区二区| 国产精品黄视频| 可以免费观看av的网站| 色狠狠桃花综合| 日韩精品在线免费看| 国产精品女主播一区二区三区| 中文字幕99| 色网在线观看| 欧美日韩黄色影视| 91香蕉在线视频|