C 语言实现与 CoDeSys 接口的方法(续), 如何生成接口 Hex 文件
很长时间没有进入论坛查看信息了, 近期看到有关心 C 语言实现与 CoDeSys 接口的方法 文档的问题, 感觉可以支持一下, 并发布该文如何生成接口 Hex 文件, 希望对大家有所帮助.
下面的内容是 C 语言实现与 CoDeSys 接口的方法(续), 有关内容可以查阅该文: C 语言实现与 CoDeSys 接口的方法
1. 使用 keil 编译软件 (支持 ARM) 编译项目
2. 输入下面的测试文件 test_ExtTest.c
-------------------------------------------------------------------------------
typedef unsigned charU8;//8 bit
typedef unsigned shortU16; // 16 bit
typedef float F32; // 32 bit
typedef struct _Lib_ExtTestType
{
U8bInit; // Var 变量
U8Execute; // Input变量
U8Done; // Output变量
U8Error;
U16ErrorId;
F32* pData; // In_Out 变量 (指针类型)
}Lib_ExtTestType, *PLib_ExtTestType;
// 直接指定功能地址
// Lib_ExtTest 地址:0x00000800 (可以根据需要任意指定, 要求是 4 的倍数, 防止产生系统错误)
// Lib_ExtTestInit 地址: 0x00000900
void Lib_ExtTest(PLib_ExtTestType pstIn) __attribute__((section(".ARM.__at_0x800"))); // 正常执行调用
U8Lib_ExtTestInit (PLib_ExtTestType pstIn, U8 bRetain) __attribute__((section(".ARM.__at_0x900"))); // 初始化调用
// 直接指定全局变量地址
// g_stIn 地址: x40001000 (可以根据需要指定)
Lib_ExtTestType g_stIn __attribute__((section(".ARM.__at_0x40001000")));
// 生成 hex 文件的测试主程序 (只作为模板, 实际上不使用)
main (void)
{
Lib_ExtTest(&g_stIn);
}
// 功能实现体模板
void Lib_ExtTest(PLib_ExtTestType pstIn) // 正常执行调用
{
// 实现需要的功能,本代码为演示示例
if (pstIn->Execute)
{
pstIn->bInit = (U8) 0x1; // TRUE
pstIn->Done= (U8) 0x1; // TRUE
*pstIn->pData+= (F32) 0.1;
}
else
{
pstIn->bInit = (U8) 0x0; // false
pstIn->Done= (U8) 0x0; // false
}
}
U8 Lib_ExtTestInit(PLib_ExtTestType pstIn, U8 bRetain) // 初始化调用
{
// 初始化功能块变量,设置示例如下:
pstIn->bInit = (U8) 0x0;// FALSE
pstIn->Execute= (U8) 0x0;// FALSE
pstIn->Done = (U8) 0x0;// FALSE
pstIn->Error = (U8) 0x0;// FALSE
pstIn->ErrorId = (U16) 0;
*pstIn->pData= (F32) 0.0;// REAL
// 当 bRetain 为 false 时,初始化返回变量
return bRetain;
}
-------------------------------------------------------------------------------
3. 创建 keil C 编译项目 (选择 ARM7 类型), 包含缺省生成的 Startup.s 文件及上面的 test_ExtTest.c 文件
4. 编译项目, 生成 test_ExtTest.hex 文件 (文件内容见下面)
-------------------------------------------------------------------------------
:020000040000FA
:1000000018F09FE518F09FE518F09FE518F09FE5C0
:1000100018F09FE50000A0E1F0FF1FE518F09FE554
:1000200058000000400000004400000048000000AC
:100030004C000000000000005000000054000000D0
:10004000FEFFFFEAFEFFFFEAFEFFFFEAFEFFFFEA18
:10005000FEFFFFEAFEFFFFEAA0009FE5AA10A0E373
:100060005520A0E32430A0E3043080E50130A0E374
:10007000003080E50C1080E50C2080E5083090E52C
:10008000013B13E2FCFFFF0A0330A0E3003080E5F0
:100090000C1080E50C2080E564009FE50410A0E3CF
:1000A000041080E50210A0E3001080E554009FE5F5
:1000B000DBF021E300D0A0E1000040E2D7F021E333
:1000C00000D0A0E1000040E2D1F021E300D0A0E1A7
:1000D000000040E2D2F021E300D0A0E1800040E245
:1000E000D3F021E300D0A0E1080040E210F021E3CA
:1000F00000D0A0E101AB4DE20C009FE510FF2FE125
:1001000080C01FE000C01FE0E804004010010000B4
:10011000000000EB240000EB2C008FE2000C90E8C4
:1001200000A08AE000B08BE001704AE20B005AE1C7
:100130000000001A1C0000EB0F00BAE818E04FE2C4
:10014000010013E303F0471013FF2FE12804000020
:10015000380400000030B0E30040B0E30050B0E3EA
:100160000060B0E3102052E27800A128FCFFFF8A73
:10017000822EB0E13000A128003081451EFF2FE122
:1001800001C08FE21CFF2FE11FB5059886460FBC0A
:10019000009C02B07047000001C08FE21CFF2FE1FD
:1001A00030B47546AE4630BC70470000210000EB0D
:1001B0000210A0E1F1FFFFEB1CC09FE50FC08CE037
:1001C00001001CE30DE08F120FE0A0011CFF2FE1E6
:1001D00001C08FE21CFF2FE100F05EF8500000002C
:1001E0007847C04603002DE9EAFFFFEB0300BDE8B6
:1001F0002E0000EB0C009FE50C109FE504209FE50E
:1002000008309FE51EFF2FE16000004060040040C1
:100210006000004010402DE90C009FE5770100EBE5
:100220000000A0E31040BDE81EFF2FE100100040D9
:1002300070477047704700000E50A0E1180000EBB7
:1002400005E0A0E10050B0E10D10A0E10A30A0E10E
:100250000700C0E300D0A0E160D08DE220402DE98E
:10026000E3FFFFEB2040BDE80060A0E30070A0E3E7
:100270000080A0E300B0A0E30710C1E305C0A0E147
:10028000C009ACE8C009ACE8C009ACE8C009ACE8FA
:1002900001D0A0E11EFF2FE10400C046C0462000AF
:1002A000FFF79EFF00009FE51EFF2FE100000040CA
:1002B00001C08FE21CFF2FE101491820ABDFFEE7F0
:1002C000260002001EFF2FE1010030E10211214251
:1002D0005E00004A012050E00200403002108130F0
:1002E000A02BA0E1FFC4A0E381001CE1020C3C11A3
:1002F000A13B42E01C00000A02C1A0E300048CE123
:1003000001148CE131C390E00E00002A012042E28A
:100310002C04B0E1820BA0E01EFF2F317F001CE314
:1003200080C0A0E1FF045C131EFF2F31203063E288
:100330001113B0E10100C003FF045CE31EFF2F3185
:10034000060240E23A0000EA6C00A0E12004B0E1BD
:10035000820BA0E0FF001C2380C0A0E1F2FFFF0A97
:10036000FF045C131EFF2F31F4FFFFEA020C3CE197
:100370000200000AAC0010E1020100021EFF2FE1A2
:1003800010402DE9000000EB64FBBE3E04409EE4FB
:10039000040014E10200004A8120A0E1FF0452E3BE
:1003A0000900008A8030A0E1FF0453E30600008AC0
:1003B0000700001AA0CFA0E1FF0452E38CC08CE03C
:1003C00002C08CE2A1CFAC00020000EA08C0A0E3AA
:1003D000000000EAA1CFA0E18C308CE03443A0E122
:1003E000074004E204C054E20200002A04C18EE087
:1003F0001040BDE81CFF2FE10CF18FE00000A0E1F0
:10040000050000EA050000EAFFFFFFEA1040BDE832
:100410000201A0E3010540E21EFF2FE10100A0E17F
:100420001040BDE88020B0E1012472120201008278
:100430001EFF2FE1FF10B0E3A00B81E1800BB0E1C4
:100440001EFF2FE1010030E102112142A0FFFF4A0F
:10045000012050E00221223202004030021081309F
:10046000A02BA0E1FFC4A0E381001CE1020C3C1121
:10047000A13B42E03400000A02C1A0E300048CE189
:1004800001148CE131C350E00800004AFE0012E381
:100490008C00B0111000005A4004B0E1820BA0E0C3
:1004A0001EFF2F313F001CE31EFF2F11050000EA45
:1004B000012042E22C04B0E1820BA0E01EFF2F31AC
:1004C0007F001CE31EFF2F11203063E21113B0E107
:1004D000010040120100C0031EFF2FE12234A0E101
:1004E0001600000A000010E11EFF2F01A0CBB0E1B2
:1004F0000400001A0004A00108204202A0CBB0E1D1
:100500000004A001082042021E0310E32002A011F3
:1005100004208212060410E32001A011022082129E
:10052000010450E30920C2E2A000A021220433E12B
:10053000820B80001EFF2F01830FA0E11EFF2FE121
:10054000AC03B0E11EFF2F01FAFFFFEA020C3CE111
:100550000200000AAC0010E10000A0031EFF2FE122
:1005600010402DE988FFFFEB40DFF63E020121E25B
:100570001EFF2FE12C09000000000040E8040000ED
:100580005401000000000000000000000000000016
:10059000000000000000000000000000000000005B
:1007F00000000000000000000000000000000000F9
:1008000010402DE90040A0E10100D4E5000050E3D4
:100810000900000A0100A0E30000C4E50200C4E5ED
:10082000081094E5000091E520109FE5A5FEFFEB80
:10083000081094E5000081E5020000EA0000A0E352
:100840000000C4E50200C4E51040BDE81EFF2FE132
:10085000CDCCCC3D000000000000000000000000F6
:100860000000000000000000000000000000000088
:100870000000000000000000000000000000000078
:100880000000000000000000000000000000000068
:100890000000000000000000000000000000000058
:1008A0000000000000000000000000000000000048
:1008B0000000000000000000000000000000000038
:1008C0000000000000000000000000000000000028
:1008D0000000000000000000000000000000000018
:1008E0000000000000000000000000000000000008
:1008F00000000000000000000000000000000000F8
:100900000020A0E10000A0E30000C2E50100C2E574
:100910000200C2E50300C2E5B400C2E1083092E57E
:0C092000000083E50100A0E11EFF2FE1B4
:020000044000BA
:0C100000000000000000000000000000E4
:0400000500000110E6
:00000001FF
-------------------------------------------------------------------------------
5. 从 hex 文件找到下面的行
-------------------------------------------------------------------------------
6. Lib_ExtTest 功能在 hex 文件中对应的信息
:1008000010402DE90040A0E10100D4E5000050E3D4
:100810000900000A0100A0E30000C4E50200C4E5ED
:10082000081094E5000091E520109FE5A5FEFFEB80
:10083000081094E5000081E5020000EA0000A0E352
:100840000000C4E50200C4E51040BDE81EFF2FE132
:10085000CDCCCC3D000000000000000000000000F6
-------------------------------------------------------------------------------
7. Lib_ExtTestInit 功能在 hex 文件中对应的信息
-------------------------------------------------------------------------------
:100900000020A0E10000A0E30000C2E50100C2E574
:100910000200C2E50300C2E5B400C2E1083092E57E
:0C092000000083E50100A0E11EFF2FE1B4
-------------------------------------------------------------------------------
8. 合并组合生成新的 Test_ExtLib.hex 文件
-------------------------------------------------------------------------------
:020000040000FA
:1008000010402DE90040A0E10100D4E5000050E3D4
:100810000900000A0100A0E30000C4E50200C4E5ED
:10082000081094E5000091E520109FE5A5FEFFEB80
:10083000081094E5000081E5020000EA0000A0E352
:100840000000C4E50200C4E51040BDE81EFF2FE132
:10085000CDCCCC3D000000000000000000000000F6
:100900000020A0E10000A0E30000C2E50100C2E574
:100910000200C2E50300C2E5B400C2E1083092E57E
:0C092000000083E50100A0E11EFF2FE1B4
:00000001FF
-------------------------------------------------------------------------------
9. 如何下载 hex 文件及融合系统, 请自行解决
希望对大家有所帮助! 回复是对发帖者的尊敬 用VS2008编写动态库DLL,由codesys调用比这个容易实现 ALVA2020 发表于 2021-4-23 10:57
用VS2008编写动态库DLL,由codesys调用比这个容易实现
请问CodeSys应该如何调用DLL文件,手头的第三方设备只提供这个文件 有外部库开发接口,在配置文件里添加调用动态库名,你用的是哪家的第三方设备 本帖最后由 pdwabc 于 2021-7-8 11:13 编辑
ALVA2020 发表于 2021-7-8 10:40
有外部库开发接口,在配置文件里添加调用动态库名,你用的是哪家的第三方设备 ...
(1)在哪里能够找到相关资料,能说的详细一点吗?近期需要做的另外一个项目只能找到DLL文件,没办法2005年的FANUC机床老设备了需要添加集成改造,数据采集等乱七八糟的功能:dizzy:(2)之前用LabVIEW调用基恩士DLL文件已经实现正常对基恩士的相关操作,在CodeSys上面试用了好多方法都不成功。最可气的是CodeSys的厂家竟然说不支持此功能...
(3)有资料显示SysModule可以用来做这件事,但是我无法找到这个库文件,CodeSys技术让找他们的销售还要购买什么插件,真不敢相信他们了买之前告诉我能实现这些功能,买了后不能实现又让买不知道什么作用的开发包,无语了
codesysV3怎么c语言,我创建lib可以添加C Implemented Library,但是需要添加obj文件,obj文件我自己生成吗?帮助文档里的C code modules怎么添加
页:
[1]