From bcd3024235d04c926f8a915500927232435137a7 Mon Sep 17 00:00:00 2001 From: zhyinch <zhyinch@gmail.com> Date: 星期日, 23 一月 2022 13:07:59 +0800 Subject: [PATCH] 增加modbus功能,待测试 --- 源码/核心板/MDK-ARM/Project.uvguix.zhyin | 118 ++++-- 源码/核心板/MDK-ARM/Project.uvprojx | 5 源码/核心板/Src/application/modbus.c | 604 +++++++++++++++++++++++++++++++++++ 源码/核心板/MDK-ARM/Project.uvoptx | 96 +++-- 源码/核心板/Src/OnChipDevices/Usart.c | 140 +++++++ 源码/核心板/Src/application/modbus.h | 34 ++ 源码/核心板/Src/application/dw_app.c | 4 7 files changed, 897 insertions(+), 104 deletions(-) diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvguix.zhyin" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvguix.zhyin" index 5dc7e8c..da59d0a 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvguix.zhyin" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvguix.zhyin" @@ -6,7 +6,7 @@ <Header>### uVision Project, (C) Keil Software</Header> <PrjGuiSettings> - <LastAddFilePath></LastAddFilePath> + <LastAddFilePath>E:\GIT\UWB_SmallModule\婧愮爜\鏍稿績鏉縗Src\application</LastAddFilePath> </PrjGuiSettings> <ViewPool/> @@ -15,17 +15,17 @@ <View> <WinId>38003</WinId> <ViewName>Registers</ViewName> - <TableColWidths>198 199</TableColWidths> + <TableColWidths>145 145</TableColWidths> </View> <View> <WinId>346</WinId> <ViewName>Code Coverage</ViewName> - <TableColWidths>770 304</TableColWidths> + <TableColWidths>770 160</TableColWidths> </View> <View> <WinId>204</WinId> <ViewName>Performance Analyzer</ViewName> - <TableColWidths>696 139 139 100</TableColWidths> + <TableColWidths>930</TableColWidths> </View> </SECTreeCtrl> @@ -101,17 +101,17 @@ <yPos>-1</yPos> </MaxPosition> <NormalPosition> - <Top>-874</Top> - <Left>-757</Left> - <Right>790</Right> - <Bottom>-39</Bottom> + <Top>-6</Top> + <Left>-6</Left> + <Right>1541</Right> + <Bottom>829</Bottom> </NormalPosition> </WindowPosition> <MDIClientArea> <RegID>0</RegID> <MDITabState> - <Len>904</Len> - <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000800000001000000010000002D453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C64775F6170702E63000000000864775F6170702E6300000000FFDC7800FFFFFFFF41453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C676C6F62616C5F706172616D2E63000000000E676C6F62616C5F706172616D2E6300000000BECEA100FFFFFFFF46453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C73657269616C5F61745F636D645F6170702E63000000001373657269616C5F61745F636D645F6170702E6300000000F0A0A100FFFFFFFF41453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C676C6F62616C5F706172616D2E68000000000E676C6F62616C5F706172616D2E6800000000BCA8E100FFFFFFFF47453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C5263635F4E7669635F5379737469636B2E6300000000125263635F4E7669635F5379737469636B2E63000000009CC1B600FFFFFFFF3C453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C55736172742E63000000000755736172742E6300000000F7B88600FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C64775F6170702E68000000000864775F6170702E6800000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000046FDFFFF2EFCFFFF960300004BFEFFFF</Data> + <Len>1074</Len> + <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000A00000001000000010000002D453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C64775F6170702E63000000000864775F6170702E6300000000FFDC7800FFFFFFFF41453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C676C6F62616C5F706172616D2E63000000000E676C6F62616C5F706172616D2E6300000000BECEA100FFFFFFFF46453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C73657269616C5F61745F636D645F6170702E63000000001373657269616C5F61745F636D645F6170702E6300000000F0A0A100FFFFFFFF41453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C676C6F62616C5F706172616D2E68000000000E676C6F62616C5F706172616D2E6800000000BCA8E100FFFFFFFF47453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C5263635F4E7669635F5379737469636B2E6300000000125263635F4E7669635F5379737469636B2E63000000009CC1B600FFFFFFFF3C453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C4F6E43686970446576696365735C55736172742E63000000000755736172742E6300000000F7B88600FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C64775F6170702E68000000000864775F6170702E6800000000D9ADC200FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C6D6F646275732E6300000000086D6F646275732E6300000000A5C2D700FFFFFFFF3B453A5C4749545C5557425F536D616C6C4D6F64756C655CD4B4C2EB5CBACBD0C4B0E55C5372635C6170706C69636174696F6E5C6D6F646275732E6800000000086D6F646275732E6800000000B3A6BE00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000030010000660000000006000007020000</Data> </MDITabState> </MDIClientArea> <ViewEx> @@ -134,7 +134,7 @@ </RectRecentDocked> <RectRecentFloat> <Len>16</Len> - <Data>DAFCFFFF2EFCFFFF860000009CFCFFFF</Data> + <Data>C40000006600000070040000D4000000</Data> </RectRecentFloat> </Window> <Window> @@ -150,7 +150,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000660000002901000053020000</Data> + <Data>030000006600000029010000D7010000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -170,7 +170,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000660000002901000053020000</Data> + <Data>030000006600000029010000D7010000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -450,7 +450,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000660000002901000053020000</Data> + <Data>030000006600000029010000D7010000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -470,7 +470,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000660000002901000053020000</Data> + <Data>030000006600000029010000D7010000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -490,7 +490,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000870200007D070000CD030000</Data> + <Data>030000000B020000FD050000F5020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -526,11 +526,11 @@ <IsActivated>0</IsActivated> <MRUWidth>32767</MRUWidth> <PinState>0</PinState> - <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentFrameAlignment>32768</RecentFrameAlignment> <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000870200007D070000CD030000</Data> + <Data>030000000B020000FD050000F5020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1150,7 +1150,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000066000000290100005B030000</Data> + <Data>03000000660000002901000053020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1166,11 +1166,11 @@ <IsActivated>0</IsActivated> <MRUWidth>32767</MRUWidth> <PinState>0</PinState> - <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentFrameAlignment>32768</RecentFrameAlignment> <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000870200007D070000C5020000</Data> + <Data>030000000B0200007D07000051030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1186,11 +1186,11 @@ <IsActivated>0</IsActivated> <MRUWidth>32767</MRUWidth> <PinState>0</PinState> - <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentFrameAlignment>32768</RecentFrameAlignment> <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000870200007D070000C5020000</Data> + <Data>030000000B0200007D07000051030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1246,11 +1246,11 @@ <IsActivated>0</IsActivated> <MRUWidth>32767</MRUWidth> <PinState>0</PinState> - <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentFrameAlignment>32768</RecentFrameAlignment> <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000870200007D070000C5020000</Data> + <Data>030000000B0200007D07000051030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1266,11 +1266,11 @@ <IsActivated>0</IsActivated> <MRUWidth>32767</MRUWidth> <PinState>0</PinState> - <RecentFrameAlignment>4096</RecentFrameAlignment> + <RecentFrameAlignment>32768</RecentFrameAlignment> <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000870200007D070000C5020000</Data> + <Data>030000000B0200007D07000051030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1730,7 +1730,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>00000000E603000080070000F9030000</Data> + <Data>000000000E0300000006000021030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1799,14 +1799,14 @@ </Window> <DockMan> <Len>3312</Len> - <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFC4000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000DAFCFFFF2EFCFFFF860000009CFCFFFFC40000004F00000070040000BD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFAC0300004F000000B0030000A5010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000C6FFFFFF2EFCFFFF8600000084FDFFFFB00300004F00000070040000A501000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF2C0100004F000000300100006C0200000100000002000010040000000100000042FFFFFFB7060000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000016FCFFFF2EFCFFFF42FDFFFF53FFFFFF000000004F0000002C0100006C0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000016FCFFFF74FDFFFF86000000F6FDFFFF0000000095010000700400001702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000006C020000800700007002000001000000010000100400000001000000E0FCFFFF6C000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000016FCFFFF57FFFFFF96030000C5FFFFFF000000007002000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data> + <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFC4000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000C40000006600000070040000D4000000C40000004F00000070040000BD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFAC0300004F000000B0030000A5010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000B00300006600000070040000BC010000B00300004F00000070040000A501000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF2C0100004F00000030010000F00100000100000002000010040000000100000042FFFFFFB7060000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000000000000660000002C01000083020000000000004F0000002C010000F00100000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000AC010000700400002E0200000000000095010000700400001702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000F001000000060000F401000001000000010000100400000001000000FFFDFFFFB3000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000008702000080070000FD03000000000000F4010000000600000E0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data> </DockMan> <ToolBar> <RegID>59392</RegID> <Name>File</Name> <Buttons> - <Len>2894</Len> - <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000C5741525F4A44515F54494D459600000000000000140011675F636F6D6D61705F616E7464656C61790A414E545F4C454E4754480C5741525F4A44515F54494D4508616E7464656C61790C7265635F616E7464656C617911675F73746172745F73656E645F666C61670A45555F3438355F50494E0A4750494F5F50494E5F37104750494F422C4750494F5F50494E5F3705636C6F736513554450436C69656E745F55706C6F61644750530C6C5F617538436D64427566660E52544B436C69656E745F496E69740E544350436C69656E745F496E69740B675F5265737474696D65720C7577625F6170705F696E69740C50726F6772616D5F496E6974104457545F5354535F4D4F44455F5344430844495343504F4C4C0A75736172745F73656E640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data> + <Len>2898</Len> + <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000C4C49533344485F436865636B960000000000000014000C7374617274526567416464720C4C49533344485F436865636B0E4C49533344485F526561645265670F4C49533344485F57726974655265670B7461676C6973745F706F7309675F546167646973740A52656C6179325461736B0B5553415254315F496E697407524547504F4C4C09455F4442474D6F64650C4442475F4D4F44455F4750530844495343504F4C4C12416E63686F725F5265634E656172506F6C6C12616E637265635F6E65617262617365706F731B44454C41595F4245545745454E5F54574F5F4652414D455F5555530849646C655461736B0841504C5F506F6C6C0B757762706F6C6C7461736B11675F73746172745F73656E645F666C61670C7577625F6170705F706F6C6C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data> </Buttons> <OriginalItems> <Len>1423</Len> @@ -1822,7 +1822,7 @@ <Name>Build</Name> <Buttons> <Len>970</Len> - <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000553544D3332960000000000000001000553544D3332000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data> + <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000553544D3332960000000000000001000553544D3332000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data> </Buttons> <OriginalItems> <Len>583</Len> @@ -1838,7 +1838,7 @@ <Name>Debug</Name> <Buttons> <Len>2373</Len> - <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data> + <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data> </Buttons> <OriginalItems> <Len>898</Len> @@ -3606,18 +3606,18 @@ <ActiveTab>1</ActiveTab> <Doc> <Name>..\Src\main.c</Name> - <ColumnNumber>0</ColumnNumber> - <TopLine>73</TopLine> - <CurrentLine>82</CurrentLine> + <ColumnNumber>17</ColumnNumber> + <TopLine>82</TopLine> + <CurrentLine>91</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> </Doc> <Doc> <Name>..\Src\application\dw_app.c</Name> - <ColumnNumber>23</ColumnNumber> - <TopLine>997</TopLine> - <CurrentLine>1017</CurrentLine> + <ColumnNumber>36</ColumnNumber> + <TopLine>1016</TopLine> + <CurrentLine>1031</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> @@ -3625,8 +3625,8 @@ <Doc> <Name>..\Src\application\global_param.c</Name> <ColumnNumber>0</ColumnNumber> - <TopLine>16</TopLine> - <CurrentLine>48</CurrentLine> + <TopLine>1</TopLine> + <CurrentLine>6</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> @@ -3642,9 +3642,9 @@ </Doc> <Doc> <Name>..\Src\application\global_param.h</Name> - <ColumnNumber>22</ColumnNumber> - <TopLine>31</TopLine> - <CurrentLine>54</CurrentLine> + <ColumnNumber>0</ColumnNumber> + <TopLine>1</TopLine> + <CurrentLine>6</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> @@ -3652,7 +3652,7 @@ <Doc> <Name>..\Src\OnChipDevices\Rcc_Nvic_Systick.c</Name> <ColumnNumber>0</ColumnNumber> - <TopLine>166</TopLine> + <TopLine>186</TopLine> <CurrentLine>209</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> @@ -3660,18 +3660,36 @@ </Doc> <Doc> <Name>..\Src\OnChipDevices\Usart.c</Name> - <ColumnNumber>15</ColumnNumber> - <TopLine>280</TopLine> - <CurrentLine>310</CurrentLine> + <ColumnNumber>0</ColumnNumber> + <TopLine>1</TopLine> + <CurrentLine>4</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> </Doc> <Doc> <Name>..\Src\application\dw_app.h</Name> + <ColumnNumber>19</ColumnNumber> + <TopLine>1</TopLine> + <CurrentLine>5</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name>..\Src\application\modbus.c</Name> + <ColumnNumber>60</ColumnNumber> + <TopLine>501</TopLine> + <CurrentLine>518</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name>..\Src\application\modbus.h</Name> <ColumnNumber>0</ColumnNumber> - <TopLine>47</TopLine> - <CurrentLine>62</CurrentLine> + <TopLine>4</TopLine> + <CurrentLine>13</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx" index eaf116f..2ccb392 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx" @@ -413,6 +413,18 @@ <RteFlg>0</RteFlg> <bShared>0</bShared> </File> + <File> + <GroupNumber>1</GroupNumber> + <FileNumber>5</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\Src\application\modbus.c</PathWithFileName> + <FilenameWithoutPath>modbus.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> </Group> <Group> @@ -423,7 +435,7 @@ <RteFlg>0</RteFlg> <File> <GroupNumber>2</GroupNumber> - <FileNumber>5</FileNumber> + <FileNumber>6</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -435,7 +447,7 @@ </File> <File> <GroupNumber>2</GroupNumber> - <FileNumber>6</FileNumber> + <FileNumber>7</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -455,7 +467,7 @@ <RteFlg>0</RteFlg> <File> <GroupNumber>3</GroupNumber> - <FileNumber>7</FileNumber> + <FileNumber>8</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -467,7 +479,7 @@ </File> <File> <GroupNumber>3</GroupNumber> - <FileNumber>8</FileNumber> + <FileNumber>9</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -487,7 +499,7 @@ <RteFlg>0</RteFlg> <File> <GroupNumber>4</GroupNumber> - <FileNumber>9</FileNumber> + <FileNumber>10</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -499,7 +511,7 @@ </File> <File> <GroupNumber>4</GroupNumber> - <FileNumber>10</FileNumber> + <FileNumber>11</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -511,7 +523,7 @@ </File> <File> <GroupNumber>4</GroupNumber> - <FileNumber>11</FileNumber> + <FileNumber>12</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -531,7 +543,7 @@ <RteFlg>0</RteFlg> <File> <GroupNumber>5</GroupNumber> - <FileNumber>12</FileNumber> + <FileNumber>13</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -543,7 +555,7 @@ </File> <File> <GroupNumber>5</GroupNumber> - <FileNumber>13</FileNumber> + <FileNumber>14</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -555,7 +567,7 @@ </File> <File> <GroupNumber>5</GroupNumber> - <FileNumber>14</FileNumber> + <FileNumber>15</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -575,7 +587,7 @@ <RteFlg>0</RteFlg> <File> <GroupNumber>6</GroupNumber> - <FileNumber>15</FileNumber> + <FileNumber>16</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -587,7 +599,7 @@ </File> <File> <GroupNumber>6</GroupNumber> - <FileNumber>16</FileNumber> + <FileNumber>17</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -599,7 +611,7 @@ </File> <File> <GroupNumber>6</GroupNumber> - <FileNumber>17</FileNumber> + <FileNumber>18</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -611,7 +623,7 @@ </File> <File> <GroupNumber>6</GroupNumber> - <FileNumber>18</FileNumber> + <FileNumber>19</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -623,7 +635,7 @@ </File> <File> <GroupNumber>6</GroupNumber> - <FileNumber>19</FileNumber> + <FileNumber>20</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -635,7 +647,7 @@ </File> <File> <GroupNumber>6</GroupNumber> - <FileNumber>20</FileNumber> + <FileNumber>21</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -655,7 +667,7 @@ <RteFlg>0</RteFlg> <File> <GroupNumber>7</GroupNumber> - <FileNumber>21</FileNumber> + <FileNumber>22</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -667,7 +679,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>22</FileNumber> + <FileNumber>23</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -679,7 +691,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>23</FileNumber> + <FileNumber>24</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -691,7 +703,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>24</FileNumber> + <FileNumber>25</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -703,7 +715,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>25</FileNumber> + <FileNumber>26</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -715,7 +727,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>26</FileNumber> + <FileNumber>27</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -727,7 +739,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>27</FileNumber> + <FileNumber>28</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -739,7 +751,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>28</FileNumber> + <FileNumber>29</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -751,7 +763,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>29</FileNumber> + <FileNumber>30</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -763,7 +775,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>30</FileNumber> + <FileNumber>31</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -775,7 +787,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>31</FileNumber> + <FileNumber>32</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -787,7 +799,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>32</FileNumber> + <FileNumber>33</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -799,7 +811,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>33</FileNumber> + <FileNumber>34</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -811,7 +823,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>34</FileNumber> + <FileNumber>35</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -823,7 +835,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>35</FileNumber> + <FileNumber>36</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -835,7 +847,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>36</FileNumber> + <FileNumber>37</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -847,7 +859,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>37</FileNumber> + <FileNumber>38</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -859,7 +871,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>38</FileNumber> + <FileNumber>39</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -871,7 +883,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>39</FileNumber> + <FileNumber>40</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -883,7 +895,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>40</FileNumber> + <FileNumber>41</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -895,7 +907,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>41</FileNumber> + <FileNumber>42</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -907,7 +919,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>42</FileNumber> + <FileNumber>43</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -919,7 +931,7 @@ </File> <File> <GroupNumber>7</GroupNumber> - <FileNumber>43</FileNumber> + <FileNumber>44</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -939,7 +951,7 @@ <RteFlg>0</RteFlg> <File> <GroupNumber>8</GroupNumber> - <FileNumber>44</FileNumber> + <FileNumber>45</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -951,7 +963,7 @@ </File> <File> <GroupNumber>8</GroupNumber> - <FileNumber>45</FileNumber> + <FileNumber>46</FileNumber> <FileType>1</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> @@ -963,7 +975,7 @@ </File> <File> <GroupNumber>8</GroupNumber> - <FileNumber>46</FileNumber> + <FileNumber>47</FileNumber> <FileType>2</FileType> <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx" index ed1ce1a..07cc204 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx" @@ -402,6 +402,11 @@ <FileType>1</FileType> <FilePath>..\Src\application\dw_app.c</FilePath> </File> + <File> + <FileName>modbus.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\application\modbus.c</FilePath> + </File> </Files> </Group> <Group> diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.c" index e208c34..cb7716c 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.c" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.c" @@ -1,6 +1,7 @@ #include "Usart.h" #include <string.h> #include <stdio.h> +#include "modbus.h" //数据发送队列变量 EUART_Frame m_EUART_TxFrames[EUART_TX_FRM_SIZE]; //数据发送帧队列 @@ -10,6 +11,8 @@ //DMA数据接收缓存 uint8_t m_EUART_DMA_RXBuf[EUART_RX_BUF_SIZE]; //DMA数据接收缓存 volatile int32_t m_EUART_DMA_RXPtr = 0; //当前数据地址 +int16_t DMA_rxtemp = 0,DMA_rxtemp2 = 0; //当前数据地址缓存 +u16 datadelaycount = 0; //剩余1位数据延时等待处理 //标志变量 volatile uint8_t m_bEUARTPushingFrms = 0; //正在往发送队列存数据 volatile uint8_t m_bEUARTCheckingSend = 0; //正在确认数据发送 @@ -120,12 +123,17 @@ UART_DMAConfiguration(); } - +extern u8 cmd_mode; +u8 overrun_flag=0; +u16 t1,t2,t3,t4; void UART_CheckReceive(void) { int32_t DMACnt = 0; int32_t MaxDataLen = EUART_RX_BUF_SIZE; - + u8 rxbuf_len = 0; + u8 buftemp1 = 0; + u8 buftemp2 = 0; + u8 i = 0; //如果正在往发送队列中添加数据,退出 if(m_bEUARTPushingFrms) return; @@ -138,23 +146,131 @@ m_bEUARTCheckingRec = 0; return; } - DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR); - while( m_EUART_DMA_RXPtr != DMACnt && MaxDataLen > 0) + + DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR);//DMACnt是DMA通道接收到数据总长度,CNDTR是dma剩余未使用数量 + + if(DMACnt!=m_EUART_DMA_RXPtr) { - Usart1ParseDataCallback(m_EUART_DMA_RXBuf[m_EUART_DMA_RXPtr]); + //DMA有未处理数据 + DMA_rxtemp=m_EUART_DMA_RXPtr+1; delay_us(10); - m_EUART_DMA_RXPtr++; - if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE ) + overrun_flag=0; + if( DMA_rxtemp >= EUART_RX_BUF_SIZE ) { - m_EUART_DMA_RXPtr = 0; + DMA_rxtemp = 0; } - DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR); - MaxDataLen--; - } - m_bEUARTCheckingRec = 0; + DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR);//DMACnt是DMA通道接收到数据总长度,CNDTR是dma剩余未使用数量 + if(DMACnt!=DMA_rxtemp&&(cmd_mode==0)) + { + //DMA有超过2位数据未处理 + DMA_rxtemp = 0;//清空数组指针 + datadelaycount = 0;//等待次数清零 + buftemp1 = m_EUART_DMA_RXBuf[m_EUART_DMA_RXPtr]; + buftemp2 = m_EUART_DMA_RXBuf[m_EUART_DMA_RXPtr+1]; + if((buftemp1==0x55)&&(buftemp2==0xAA)) + { + //私有协议 + cmd_mode = 1; + } + else if(buftemp1==RS485_Addr) + { + if((buftemp2==03)||(buftemp2==06)||(buftemp2==16))//功能码正确 + { + //modubs协议 + t1++; + cmd_mode=2; + DMA_rxtemp2=m_EUART_DMA_RXPtr+7; + if( DMA_rxtemp2 >= EUART_RX_BUF_SIZE-1 ) + { + DMA_rxtemp2 -= EUART_RX_BUF_SIZE; + overrun_flag=1; + } + } + else + { + m_EUART_DMA_RXPtr+=2; + if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE ) + { + m_EUART_DMA_RXPtr = 0; + } + } + } + else + { + //无效码,干扰码 + if(cmd_mode==0) + { + m_EUART_DMA_RXPtr+=2; + if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE ) + { + m_EUART_DMA_RXPtr = 0; + } + } + } + } + else + { + //只有1位数据未处理 + if(++datadelaycount > WAITDELAYCOUNT) + { //超出等待次数 + datadelaycount = 0; + cmd_mode=0; + m_EUART_DMA_RXPtr++; + if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE ) + { + m_EUART_DMA_RXPtr = 0; + } + } + } + if(cmd_mode==1) + { + //私有协议 + while( m_EUART_DMA_RXPtr != DMACnt && MaxDataLen > 0) + { + Usart1ParseDataCallback(m_EUART_DMA_RXBuf[m_EUART_DMA_RXPtr]); + m_EUART_DMA_RXPtr++; + if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE ) + { + m_EUART_DMA_RXPtr = 0; + } + DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR); + MaxDataLen--; + } + } + else if(cmd_mode==2) + { + //modbus协议 + delay_ms(10);//等待数据接收完成 + DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR); + if((overrun_flag==0&&DMACnt>DMA_rxtemp2)||(overrun_flag==1&&DMACnt<DMA_rxtemp&&DMACnt>DMA_rxtemp2)) + { while(m_EUART_DMA_RXPtr != DMACnt && MaxDataLen > 0) + { + RS485_RX_BUFF[i] = m_EUART_DMA_RXBuf[m_EUART_DMA_RXPtr]; + m_EUART_DMA_RXPtr++; + if(++i >= EUART_RX_BUF_SIZE)i = 0; + if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE ) + { + m_EUART_DMA_RXPtr = 0; + } + DMACnt = EUART_RX_BUF_SIZE - (EUART_RX_DMA_CH->CNDTR); + MaxDataLen--; + } +// m_EUART_DMA_RXPtr++;//数据指向下一位 +// if( m_EUART_DMA_RXPtr >= EUART_RX_BUF_SIZE ) +// { +// m_EUART_DMA_RXPtr = 0; +// } + t2++; + RS485_Service(); + } + } + } + + m_bEUARTCheckingRec = 0; } + #ifndef EXUART_USE_TXDMA //查询方式发送数据 void UART_CheckSend(void) diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" index 20612af..bd9931b 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" @@ -1,5 +1,6 @@ #include "dw_app.h" #include "ADC.h" +#include "modbus.h" #define TDFILTER enum enumtagstate { @@ -1023,6 +1024,9 @@ memcpy(&usart_send_anc[6+6*anc_report_num],&tagdist_list[taglist_pos],4); anc_report_num++; #endif + Modbus_HoldReg[taglist_pos*4] = tag_id_recv; + Modbus_HoldReg[taglist_pos*4+1] = button<<8|battary; + memcpy(&Modbus_HoldReg[taglist_pos*4+2],&tagdist_list[taglist_pos],4); }else{ // printf("%d",hex_dist); misdist_num[taglist_pos]++; diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c" new file mode 100644 index 0000000..0fd9167 --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c" @@ -0,0 +1,604 @@ +#include "modbus.h" +#include "Rcc_Nvic_Systick.h" +#include "global_param.h" +#include <string.h> +/////////////////////////////////////////////////////////// +//u32 RS485_Baudrate=9600;//通讯波特率 +//u8 RS485_Parity=0;//0无校验;1奇校验;2偶校验 +u8 RS485_Addr=1;//从机地址 +//u16 RS485_Frame_Distance=4;//数据帧最小间隔(ms),超过此时间则认为是下一帧 + +u8 cmd_mode = 0; + +u8 RS485_RX_BUFF[200];//接收缓冲区200字节 +u16 RS485_RX_CNT=0;//接收计数器 +//u8 RS485_FrameFlag=0;//帧结束标记 +u8 RS485_TX_BUFF[200];//发送缓冲区 +u16 RS485_TX_CNT=0;//发送计数器 + +//u8 DATA_RX_BUFF[2048];//接收缓存; +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +//Modbus寄存器和单片机寄存器的映射关系 +vu32 *Modbus_InputIO[100];//输入开关量寄存器指针(这里使用的是位带操作) +vu32 *Modbus_OutputIO[100];//输出开关量寄存器指针(这里使用的是位带操作) +u16 Modbus_HoldReg[MODBUS_SIZE];//保持寄存器指针 +u32 testData1=1201,testData2=1002,testData3=2303,testData4=8204; +void Modbus_RegMap(void) +{ + u16 i; + RS485_Addr=g_com_map[DEV_ID]; + for(i=0;i<MODBUS_SIZE;i++) + { + Modbus_HoldReg[i]=i; + } + //输入开关量寄存器指针指向 +// Modbus_InputIO[0]=(vu32*)&PEin(4);//KEY0 //&PEin(4):取PE4的地址,(vu32*)&PEin(4)将PE4地址强制转换为uw32类型的地址,Modbus_InputIO[0]=(vu32*)&PEin(4); 将转换好的地址送给地址指针Modbus_InputIO[0]; +// Modbus_InputIO[1]=(vu32*)&PEin(3);//KEY1 //*Modbus_InputIO[0] 取出地址中的内容。 +// Modbus_InputIO[2]=(vu32*)&PEin(2);//KEY2 +// Modbus_InputIO[3]=(vu32*)&PAin(0);//KEY3 + + //输出开关量寄存器指针指向 +// Modbus_OutputIO[0]=(vu32*)&PBout(5);//LED0 +// Modbus_OutputIO[1]=(vu32*)&PEout(5);//LED1 + + //保持寄存器指针指向 +// Modbus_HoldReg[0]=(u16*)&testData1;//测试数据1 +// Modbus_HoldReg[1]=(u16*)&testData2;//((u16*)&testData1)+1;//测试数据1 +// Modbus_HoldReg[2]=(u16*)&testData3;//(u16*)&testData2;//测试数据2 +// Modbus_HoldReg[3]=(u16*)&testData4;//((u16*)&testData2)+1;//测试数据2 +// Modbus_HoldReg[4]=(u16*)&testData1; +// Modbus_HoldReg[5]=(u16*)&testData2; +// Modbus_HoldReg[6]=(u16*)&testData3; + +} +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//CRC校验 自己后面添加的 + +const u8 auchCRCHi[] = { +0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, +0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, +0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, +0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, +0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, +0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, +0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, +0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, +0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, +0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, +0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, +0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, +0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40} ; + + +const u8 auchCRCLo[] = { +0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, +0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, +0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, +0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, +0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, +0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, +0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, +0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, +0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, +0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, +0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, +0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, +0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,0x43, 0x83, 0x41, 0x81, 0x80, 0x40} ; + + +u16 CRC_Compute(u8 *puchMsg, u16 usDataLen) +{ + u8 uchCRCHi = 0xFF ; + u8 uchCRCLo = 0xFF ; + u32 uIndex ; + while (usDataLen--) + { + uIndex = uchCRCHi ^ *puchMsg++ ; + uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ; + uchCRCLo = auchCRCLo[uIndex] ; + } + return ((uchCRCHi<< 8) | (uchCRCLo)) ; +}//uint16 crc16(uint8 *puchMsg, uint16 usDataLen) +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//初始化USART2 +void RS485_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; +// USART_InitTypeDef USART_InitStructure; +// NVIC_InitTypeDef NVIC_InitStructure; + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); +// RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); + +// GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//PA2(TX)复用推挽输出 +// GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; + GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; +// GPIO_Init(GPIOA,&GPIO_InitStructure); +// GPIO_SetBits(GPIOA,GPIO_Pin_2);//默认高电平 +// +// GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;//PA3(RX)输入上拉 +// GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //修改原GPIO_Mode_IPU(输入上拉)->GPIO_Mode_IN_FLOATING(浮空输入)///////////////////////////////////////////// +// GPIO_Init(GPIOA,&GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin=RS485_TX_PIN;//修改PG9(RE/DE)通用推挽输出->PB7(RE/DE)通用推挽输出////////////////////////////////////////////////////////////////////// + GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; + GPIO_Init(RS485_TX_GPIO,&GPIO_InitStructure); + GPIO_ResetBits(RS485_TX_GPIO,RS485_TX_PIN);//默认接收状态 + +// USART_DeInit(USART2);//复位串口2 +// USART_InitStructure.USART_BaudRate=RS485_Baudrate; +// USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; +// USART_InitStructure.USART_WordLength=USART_WordLength_8b; +// USART_InitStructure.USART_StopBits=USART_StopBits_1; +// USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//收发模式 +// switch(RS485_Parity) +// { +// case 0:USART_InitStructure.USART_Parity=USART_Parity_No;break;//无校验 +// case 1:USART_InitStructure.USART_Parity=USART_Parity_Odd;break;//奇校验 +// case 2:USART_InitStructure.USART_Parity=USART_Parity_Even;break;//偶校验 +// } +// USART_Init(USART2,&USART_InitStructure); +// +// USART_ClearITPendingBit(USART2,USART_IT_RXNE); +// USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//使能串口2接收中断 +// +// NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn; +// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; +// NVIC_InitStructure.NVIC_IRQChannelSubPriority=2; +// NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; +// NVIC_Init(&NVIC_InitStructure); +// +// USART_Cmd(USART2,ENABLE);//使能串口2 +// RS485_TX_OFF;//默认为接收模式 + +// Timer7_Init();//定时器7初始化,用于监视空闲时间 + Modbus_RegMap();//Modbus寄存器映射 +} + +//定时器7初始化 +//void Timer7_Init(void) +//{ +// TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +// NVIC_InitTypeDef NVIC_InitStructure; + +// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE); //TIM7时钟使能 + +// //TIM7初始化设置 +// TIM_TimeBaseStructure.TIM_Period = RS485_Frame_Distance*10; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 +// TIM_TimeBaseStructure.TIM_Prescaler =7200; //设置用来作为TIMx时钟频率除数的预分频值 设置计数频率为10kHz +// TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim +// TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 +// TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 + +// TIM_ITConfig( TIM7, TIM_IT_Update, ENABLE );//TIM7 允许更新中断 + +// //TIM7中断分组配置 +// NVIC_InitStructure.NVIC_IRQChannel =TIM7_IRQn; //TIM7中断 +// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级2级 +// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级 +// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 +// NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 +//} + + + +////////////////////////////////////////////////////////////////////////////// +//发送n个字节数据 +//buff:发送区首地址 +//len:发送的字节数 +//void RS485_SendData(u8 *buff,u8 len) +//{ +// RS485_TX_ON;//切换为发送模式 +// #ifdef BAUDRATE_19200 +// delay_ms(5); +// #else +// delay_ms(1); +// #endif +// while(len--) +// { +// while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送区为空 +// USART_SendData(USART1,*(buff++)); +// } +// while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);//等待发送完成 +// RS485_TX_OFF;//开启接收模式 +//} + + +///////////////////////////////////////////////////////////////////////////////////// +//void USART2_IRQHandler(void)//串口2中断服务程序 +//{ +// +// u8 res; +// u8 err; +// +// if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET) +// { +// if(USART_GetFlagStatus(USART2,USART_FLAG_NE|USART_FLAG_FE|USART_FLAG_PE)) err=1;//检测到噪音、帧错误或校验错误 +// else err=0; +// //LED0=0; +// res=USART_ReceiveData(USART2); //读接收到的字节,同时相关标志自动清除 +// +// if((RS485_RX_CNT<2047)&&(err==0)) +// { +// RS485_RX_BUFF[RS485_RX_CNT]=res; +// RS485_RX_CNT++; +// +// TIM_ClearITPendingBit(TIM7,TIM_IT_Update);//清除定时器溢出中断 +// TIM_SetCounter(TIM7,0);//当接收到一个新的字节,将定时器7复位为0,重新计时(相当于喂狗) +// TIM_Cmd(TIM7,ENABLE);//开始计时 +// } +// } +//} + +/////////////////////////////////////////////////////////////////////////////////////// +//用定时器7判断接收空闲时间,当空闲时间大于指定时间,认为一帧结束 +//定时器7中断服务程序 +//void TIM7_IRQHandler(void) +//{ +// if(TIM_GetITStatus(TIM7,TIM_IT_Update)!=RESET) +// { +// TIM_ClearITPendingBit(TIM7,TIM_IT_Update);//清除中断标志 +// TIM_Cmd(TIM7,DISABLE);//停止定时器 +// RS485_TX_ON;//停止接收,切换为发送状态 +// RS485_FrameFlag=1;//置位帧结束标记 +// } +//} + +///////////////////////////////////////////////////////////////////////////////////// +//RS485服务程序,用于处理接收到的数据(请在主函数中循环调用) +u16 startRegAddr; +u16 RegNum; +u16 calCRC; +void RS485_Service(void) +{ + u16 recCRC; + //if(RS485_FrameFlag==1) + //{ + if(RS485_RX_BUFF[0]==RS485_Addr)//地址正确 + { + //if((RS485_RX_BUFF[1]==01)||(RS485_RX_BUFF[1]==02)||(RS485_RX_BUFF[1]==03)||(RS485_RX_BUFF[1]==05)||(RS485_RX_BUFF[1]==06)||(RS485_RX_BUFF[1]==15)||(RS485_RX_BUFF[1]==16))//功能码正确 + if((RS485_RX_BUFF[1]==03)||(RS485_RX_BUFF[1]==06)||(RS485_RX_BUFF[1]==16)) + { + startRegAddr=(((u16)RS485_RX_BUFF[2])<<8)|RS485_RX_BUFF[3];//获取寄存器起始地址 + if(startRegAddr<MODBUS_SIZE)//寄存器地址在范围内 + { + if(RS485_RX_BUFF[1]==16) + { + RS485_RX_CNT=RS485_RX_BUFF[6]+9;//接收数据长度 + } + else + { + RS485_RX_CNT = 8;//数据长度 + } + calCRC=CRC_Compute(RS485_RX_BUFF,RS485_RX_CNT-2);//计算所接收数据的CRC + recCRC=RS485_RX_BUFF[RS485_RX_CNT-1]|(((u16)RS485_RX_BUFF[RS485_RX_CNT-2])<<8);//接收到的CRC(低字节在前,高字节在后) + if(calCRC==recCRC)//CRC校验正确 + { + //LED1=0; + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + switch(RS485_RX_BUFF[1])//根据不同的功能码进行处理 + { +// case 2://读输入开关量 +// { +// Modbus_02_Solve(); +// break; +// } + +// case 1://读输出开关量 +// { +// Modbus_01_Solve(); +// break; +// } + +// case 5://写单个输出开关量 +// { +// Modbus_05_Solve(); +// break; +// } +// +// case 15://写多个输出开关量 +// { +// Modbus_15_Solve(); +// break; +// } + + case 03: //读多个寄存器 + { + Modbus_03_Solve(); + break; + } + + case 06: //写单个寄存器 + { + Modbus_06_Solve(); + break; + } + + case 16: //写多个寄存器 + { + Modbus_16_Solve(); + break; + } + + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } + else//CRC校验错误 + { + + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; + RS485_TX_BUFF[2]=0x04; //异常码 + UART_PushFrame(RS485_TX_BUFF,3); + cmd_mode = 0;//协议处理完成 + } + } + else//寄存器地址超出范围 + { + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; + RS485_TX_BUFF[2]=0x02; //异常码 + UART_PushFrame(RS485_TX_BUFF,3); + cmd_mode = 0;//协议处理完成 + } + } + else//功能码错误 + { + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; + RS485_TX_BUFF[2]=0x01; //异常码 + UART_PushFrame(RS485_TX_BUFF,3); + cmd_mode = 0;//协议处理完成 + } + } + + //RS485_FrameFlag=0;//复位帧结束标志 + RS485_RX_CNT=0;//接收计数器清零 + cmd_mode = 0;//协议处理完成 + //} +} + +//Modbus功能码02处理程序/////////////////////////////////////////////////////程序已验证OK -----必须先配置PE4 PE3 PE2 PA0 初始化按键才可以OK KEY_Init(); +//读输入开关量 +void Modbus_02_Solve(void) +{ + u16 ByteNum; + u16 i; + RegNum= (((u16)RS485_RX_BUFF[4])<<8)|RS485_RX_BUFF[5];//获取寄存器数量 + if((startRegAddr+RegNum)<100)//寄存器地址+数量在范围内 + { + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]; + ByteNum=RegNum/8;//字节数 + if(RegNum%8) ByteNum+=1;//如果位数还有余数,则字节数+1 + RS485_TX_BUFF[2]=ByteNum;//返回要读取的字节数 + for(i=0;i<RegNum;i++) + { + if(i%8==0) RS485_TX_BUFF[3+i/8]=0x00; + RS485_TX_BUFF[3+i/8]>>=1;//低位先发送 + RS485_TX_BUFF[3+i/8]|=((*Modbus_InputIO[startRegAddr+i])<<7)&0x80; + if(i==RegNum-1)//发送到最后一个位了 + { + if(RegNum%8) RS485_TX_BUFF[3+i/8]>>=8-(RegNum%8);//如果最后一个字节还有余数,则剩余MSB填充0 + } + } + calCRC=CRC_Compute(RS485_TX_BUFF,ByteNum+3); + RS485_TX_BUFF[ByteNum+3]=(calCRC>>8)&0xFF; + RS485_TX_BUFF[ByteNum+4]=(calCRC)&0xFF; + UART_PushFrame(RS485_TX_BUFF,ByteNum+5); + } + else//寄存器地址+数量超出范围 + { + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; + RS485_TX_BUFF[2]=0x02; //异常码 + UART_PushFrame(RS485_TX_BUFF,3); + } +} + +//Modbus功能码01处理程序 ///////////////////////////////////////////////////////////程序已验证OK +//读输出开关量 +void Modbus_01_Solve(void) +{ + u16 ByteNum; + u16 i; + RegNum= (((u16)RS485_RX_BUFF[4])<<8)|RS485_RX_BUFF[5];//获取寄存器数量 + if((startRegAddr+RegNum)<100)//寄存器地址+数量在范围内 + { + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]; + ByteNum=RegNum/8;//字节数 + if(RegNum%8) ByteNum+=1;//如果位数还有余数,则字节数+1 + RS485_TX_BUFF[2]=ByteNum;//返回要读取的字节数 + for(i=0;i<RegNum;i++) + { + if(i%8==0) RS485_TX_BUFF[3+i/8]=0x00; + RS485_TX_BUFF[3+i/8]>>=1;//低位先发送 + RS485_TX_BUFF[3+i/8]|=((*Modbus_OutputIO[startRegAddr+i])<<7)&0x80; + if(i==RegNum-1)//发送到最后一个位了 + { + if(RegNum%8) RS485_TX_BUFF[3+i/8]>>=8-(RegNum%8);//如果最后一个字节还有余数,则剩余MSB填充0 + } + } + calCRC=CRC_Compute(RS485_TX_BUFF,ByteNum+3); + RS485_TX_BUFF[ByteNum+3]=(calCRC>>8)&0xFF; + RS485_TX_BUFF[ByteNum+4]=(calCRC)&0xFF; + UART_PushFrame(RS485_TX_BUFF,ByteNum+5); + } + else//寄存器地址+数量超出范围 + { + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; + RS485_TX_BUFF[2]=0x02; //异常码 + UART_PushFrame(RS485_TX_BUFF,3); + } +} + +//Modbus功能码05处理程序 ///////////////////////////////////////////////////////程序已验证OK +//写单个输出开关量 +void Modbus_05_Solve(void) +{ + if(startRegAddr<100)//寄存器地址在范围内 + { + if((RS485_RX_BUFF[4]==0xFF)||(RS485_RX_BUFF[5]==0xFF)) *Modbus_OutputIO[startRegAddr]=0x01; + else *Modbus_OutputIO[startRegAddr]=0x00; + + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]; + RS485_TX_BUFF[2]=RS485_RX_BUFF[2]; + RS485_TX_BUFF[3]=RS485_RX_BUFF[3]; + RS485_TX_BUFF[4]=RS485_RX_BUFF[4]; + RS485_TX_BUFF[5]=RS485_RX_BUFF[5]; + + calCRC=CRC_Compute(RS485_TX_BUFF,6); + RS485_TX_BUFF[6]=(calCRC>>8)&0xFF; + RS485_TX_BUFF[7]=(calCRC)&0xFF; + UART_PushFrame(RS485_TX_BUFF,8); + } + else//寄存器地址超出范围 + { + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; + RS485_TX_BUFF[2]=0x02; //异常码 + UART_PushFrame(RS485_TX_BUFF,3); + } +} + +//Modbus功能码15处理程序 //////////////////////////////////////////////////////程序已验证OK +//写多个输出开关量 +void Modbus_15_Solve(void) +{ + u16 i; + RegNum=(((u16)RS485_RX_BUFF[4])<<8)|RS485_RX_BUFF[5];//获取寄存器数量 + if((startRegAddr+RegNum)<100)//寄存器地址+数量在范围内 + { + for(i=0;i<RegNum;i++) + { + if(RS485_RX_BUFF[7+i/8]&0x01) *Modbus_OutputIO[startRegAddr+i]=0x01; + else *Modbus_OutputIO[startRegAddr+i]=0x00; + RS485_RX_BUFF[7+i/8]>>=1;//从低位开始 + } + + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]; + RS485_TX_BUFF[2]=RS485_RX_BUFF[2]; + RS485_TX_BUFF[3]=RS485_RX_BUFF[3]; + RS485_TX_BUFF[4]=RS485_RX_BUFF[4]; + RS485_TX_BUFF[5]=RS485_RX_BUFF[5]; + calCRC=CRC_Compute(RS485_TX_BUFF,6); + RS485_TX_BUFF[6]=(calCRC>>8)&0xFF; + RS485_TX_BUFF[7]=(calCRC)&0xFF; + UART_PushFrame(RS485_TX_BUFF,8); + } + else//寄存器地址+数量超出范围 + { + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; + RS485_TX_BUFF[2]=0x02; //异常码 + UART_PushFrame(RS485_TX_BUFF,3); + } +} + +//Modbus功能码03处理程序///////////////////////////////////////////////////////////////////////////////////////已验证程序OK +//读保持寄存器 +void Modbus_03_Solve(void) +{ + u8 i; + RegNum= (((u16)RS485_RX_BUFF[4])<<8)|RS485_RX_BUFF[5];//获取寄存器数量 + if((startRegAddr+RegNum)<MODBUS_SIZE)//寄存器地址+数量在范围内 + { + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]; + RS485_TX_BUFF[2]=RegNum*2; + for(i=0;i<RegNum;i++) + { + if(i<100) + { + RS485_TX_BUFF[3+i*2]=(Modbus_HoldReg[startRegAddr+i]>>8)&0xFF;// /////////先发送高字节--在发送低字节 + RS485_TX_BUFF[4+i*2]=(Modbus_HoldReg[startRegAddr+i])&0xFF; // + }else{ + RS485_TX_BUFF[3+i*2]=(g_com_map[startRegAddr+i-100]>>8)&0xFF;// /////////先发送高字节--在发送低字节 + RS485_TX_BUFF[4+i*2]=(g_com_map[startRegAddr+i-100])&0xFF; // + } + } + calCRC=CRC_Compute(RS485_TX_BUFF,RegNum*2+3); + RS485_TX_BUFF[RegNum*2+3]=(calCRC>>8)&0xFF; //CRC高地位不对吗? // 先高后低 + RS485_TX_BUFF[RegNum*2+4]=(calCRC)&0xFF; + UART_PushFrame(RS485_TX_BUFF,RegNum*2+5); + } + else//寄存器地址+数量超出范围 + { + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; + RS485_TX_BUFF[2]=0x02; //异常码 + UART_PushFrame(RS485_TX_BUFF,3); + } +} + + +//Modbus功能码06处理程序 //////////////////////////////////////////////////////////////////////////////////已验证程序OK +//写单个保持寄存器 +void Modbus_06_Solve(void) +{ + if(startRegAddr>100) + { + if(startRegAddr<600) + { + memcpy(&g_com_map[startRegAddr-100],&RS485_RX_BUFF[4],2); + } + }else{ + Modbus_HoldReg[startRegAddr]=RS485_RX_BUFF[4]<<8;//高字节在前 ////////修改为高字节在前,低字节在后 + Modbus_HoldReg[startRegAddr]|=((u16)RS485_RX_BUFF[5]);//低字节在后 + } + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]; + RS485_TX_BUFF[2]=RS485_RX_BUFF[2]; + RS485_TX_BUFF[3]=RS485_RX_BUFF[3]; + RS485_TX_BUFF[4]=RS485_RX_BUFF[4]; + RS485_TX_BUFF[5]=RS485_RX_BUFF[5]; + + calCRC=CRC_Compute(RS485_TX_BUFF,6); + RS485_TX_BUFF[6]=(calCRC>>8)&0xFF; + RS485_TX_BUFF[7]=(calCRC)&0xFF; + UART_PushFrame(RS485_TX_BUFF,8); +} + +//Modbus功能码16处理程序 /////////////////////////////////////////////////////////////////////////////////////////////////已验证程序OK +//写多个保持寄存器 +void Modbus_16_Solve(void) +{ + u8 i; + RegNum= (((u16)RS485_RX_BUFF[4])<<8)|((RS485_RX_BUFF[5]));//获取寄存器数量 + if((startRegAddr+RegNum)<MODBUS_SIZE)//寄存器地址+数量在范围内 + { + for(i=0;i<RegNum;i++) + { + Modbus_HoldReg[startRegAddr+i]=RS485_RX_BUFF[7+i*2]; //低字节在前 /////// 低字节在前,高字节在后正常 + Modbus_HoldReg[startRegAddr+i]|=((u16)RS485_RX_BUFF[8+i*2])<<8; //高字节在后 + } + + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]; + RS485_TX_BUFF[2]=RS485_RX_BUFF[2]; + RS485_TX_BUFF[3]=RS485_RX_BUFF[3]; + RS485_TX_BUFF[4]=RS485_RX_BUFF[4]; + RS485_TX_BUFF[5]=RS485_RX_BUFF[5]; + + calCRC=CRC_Compute(RS485_TX_BUFF,6); + RS485_TX_BUFF[6]=(calCRC>>8)&0xFF; + RS485_TX_BUFF[7]=(calCRC)&0xFF; + UART_PushFrame(RS485_TX_BUFF,8); + } + else//寄存器地址+数量超出范围 + { + RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; + RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; + RS485_TX_BUFF[2]=0x02; //异常码 + UART_PushFrame(RS485_TX_BUFF,3); + } +} + + + + diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.h" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.h" new file mode 100644 index 0000000..4a02159 --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.h" @@ -0,0 +1,34 @@ +#ifndef _MODBUS_H +#define _MODBUS_H +//#include "sys.h" +#include "stm32f10x.h" +#include "Usart.h" +//#define RS485_TX_EN PDout(7) + +#define RS485_TX_PIN GPIO_Pin_7 +#define RS485_TX_GPIO GPIOB +#define RS485_TX_ON GPIO_WriteBit(RS485_TX_GPIO, RS485_TX_PIN, Bit_SET) +#define RS485_TX_OFF GPIO_WriteBit(RS485_TX_GPIO, RS485_TX_PIN, Bit_RESET) + +#define MODBUS_SIZE 200 + +#define WAITDELAYCOUNT 1500 //剩余1位数据等待次数 +extern u8 RS485_Addr; +extern u8 RS485_RX_BUFF[200]; +extern u16 RS485_RX_CNT; +//extern u8 DATA_RX_BUFF[2048]; +extern u16 Modbus_HoldReg[MODBUS_SIZE]; + +void Modbus_RegMap(void); +void RS485_Init(void); +void Timer7_Init(void); +void RS485_Service(void); +void Modbus_02_Solve(void); +void Modbus_01_Solve(void); +void Modbus_05_Solve(void); +void Modbus_15_Solve(void); +void Modbus_03_Solve(void); +void Modbus_06_Solve(void); +void Modbus_16_Solve(void); + +#endif -- Gitblit v1.9.3