首页 > 全部分类 > 技术问答 > 帖子内容

请教各位大神,字符串无法转换整数,PLC也没报错,是什么原因导致的呀

联系人:15755330122350

电话/手机:联系客服

发布时间:2025-10-08 16:17

浏览:211次

明扬工控技术客服2025-10-08 16:19:08
答复内容:Mitsubishi(GX Works2/3)字符串转整数失败?— DABIN/VAL 常见坑位与排查

字符串无法转换为整数(PLC不报错)的典型原因与解决

你的截图里用的是 DABIN_U(十进制 ASCII → 无符号 BIN)FB,左侧有SM400常开、M1120上升沿触发;右侧看到ZRST、SM705等。转换失败但无报错,多半落在下面这些“隐性条件”上。

一、先用一条“黄金示例”验证功能是否 OK

  1. 定义变量:
    VAR
    S : STRING[8] := '500';
    N : INT := 3; // 要转换的位数
    R : DINT := 0; // 结果(32位)
    END_VAR
  2. Ladder / FBD 里调用:
    DABIN_U(EN:=M1120, S:=S, N:=N, Q:=R);
  3. 在线监视R是否变为 500。若这条能成功,说明库函数与固件没问题,后续就是数据/类型/参数的问题。

二、你现在这种“有值但转不出来”的高频原因(按命中率排)

  1. 目的寄存器类型/对齐不对
    • DABIN_U 输出是 32 位。请把目标定义成DINT/UDINT(双字),并确保存放在偶地址(如D100而不是D101)。
    • 如果你把Q绑成WORD/INT或奇地址,表面“无报错”,实际数据写偏了。
  2. 传入的是 WSTRING(全角/中文环境)或含非数字字符
    • 仅支持ASCII '0'..'9'、可选 ± 号。如果项目是 Unicode,变量是WSTRING或输入了全角数字(如 ‘500’),函数会直接返回 0。
    • 确保变量是STRING,且内容是'500'这类半角数字。
  3. N(长度)与实际不符 / 末尾没有终止
    • N代表要解析的字符个数。你的截图里像是把‘500’与另外一个字符串变量一起并列,容易把N写错。
    • 做法:N := LEN(S)或直接填常数 3 测试;确认没有混入空格、回车等不可见字符。
  4. 字符串来源是结构体/数组的指针偏移错
    • 如果S不是独立的STRING,而是某结构里的一段缓冲区,请确认你传的是首地址而不是中间地址。
  5. 触发条件频繁/并行调用,Q 被后续逻辑覆盖
    • 用M1120上升沿只调用一次是对的;检查后面是否立刻ZRST或把R清零。

三、没有“报错”的原因 & 如何判定转换是否成功

  • 这类 FB 默认不抛系统报警;失败一般通过ENO/ERR引脚或状态位反映。把 FB 的 ENO/ERR 接到一个监视位(如M1200)观察。
  • 若项目里有SM705(演示用),这不是 DABIN 的错误位;不要拿它当转换失败指示。

四、可替代方法(验证更快)

  • Structured Text: R := VAL(S);(VAL 也要求STRING,遇到非数字会停在首个非法字符)
  • 带符号处理: 用DABIN(有符号)或先判断首字符是否为'-',再对DABIN_U结果取反。

五、把你的这两处再改一下,基本就能好了

  1. 把目标变量 好评轮_数量 声明为DINT,并映射到偶数D(如D200)。
  2. 确认 str开评轮_数量 的类型是STRING(非 WSTRING),内容为半角数字;N=3 或LEN()。
  3. FB 输出ENO拉出来监视;在 FB 后面去掉立即清零(ZRST)的影响,再看一次结果。

如果方便,发我:① 变量类型截图(S/N/Q 三个参数的实际类型与 D 地址),② 字符串的在线值(看有没有空格/全角),我可以按你的项目直接改成可运行的那一段。

对不起,请登录后再发表评论!

触屏端
扫一扫手机也能发信息
明扬工控商城-工控网-工控自动化真品,一站式专业服务!