前言
之前想写这个功能块的,不过又又又一直拖更到现在。今天早上有点时间,就把这个功能块框架也给写了。常规选用 AS228T 这款 PLC 控制台达自己家的变频器。可以采用 Canopen 的通讯方式,而 Canopen 总线通讯方式又分为专属模式和 DS301 模式。这个功能块主要针对的是后者。因为后者可以带的数量超过前者。
正文
默认的 CANOPEN 的通讯地址分配
RxPDO 在地址 D25032 开始 100 个 Word
TxPDO 在地址 D24032 开始 100 个 Word
变频器默认的 PDO 常规所需映射如下:
(*变频器功能块 //RxPDO D25032 Uint 控制字 D25033 Int 设置速度 D25034 Udint 加速时间 D25036 Udint 减速时间 //TxPDO D24032 Uint 状态字 D24033 Uint 错误码 D24034 Int 反馈速度 *)
复制代码
功能块变量
Class Identifiers Address Type Initial Value CommentVAR_IN_OUT IO_iCMD INT VAR_INPUT In_wAddressE WORD VAR_INPUT In_iSetSpeed INT VAR_INPUT In_UdiAccTime DWORD VAR_INPUT In_UdiDecTime DWORD VAR_OUTPUT Out_UiErrorID WORD VAR_OUTPUT Out_iActSpeed INT VAR_OUTPUT Out_UiStatus WORD
复制代码
功能块程序
E0 := In_wAddressE ;//设置 D25033@E0 := In_iSetSpeed ;D25034@E0 := In_UdiAccTime ;D25036@E0 := In_UdiDecTime ; //反馈 Out_UiStatus := D24032@E0 ;Out_UiErrorID := D24033@E0 ;Out_iActSpeed := D24034@E0 ;
CASE IO_iCMD OF 1: D25032@E0 := 127 ; //启动 9: D25032@E0 := 139 ; //复位 IO_iCMD := 90 ; 90: IF (Out_UiStatus.3 = FALSE) THEN IO_iCMD := 0 ; END_IF;ELSE D25032@E0 := 126 ; //停止 END_CASE;
复制代码
主程序调用
希望后期 AS 架构下能把功能块也进行数组形式去声明,那就更加方便了。
现在暂时只能是功能块的输入输出引脚的变量用数组去声明。还不够完善。
暂时还是只能每一个功能块去单独声明。
这个功能块对 C2000Plus\CH2000\MS300\MH300 都能适用。
结尾
善用 E 变址去实现功能块内部的绝对地址的复用。
评论