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

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

205阅读 1 回复 2025-10-08 16:17发布
关注Ta

15755330122350普通会员楼主

电话/手机:联系客服


以下内容回复后可见

优质评论内容

  • 明扬工控技术客服

    明扬工控技术客服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 地址),② 字符串的在线值(看有没有空格/全角),我可以按你的项目直接改成可运行的那一段。