非定位变量就是新建变量时没有指定存储地址,由CPU自行指定存储地址;用户使用时,直接使用变量名来引用。
二者取舍,依用户习惯和具体需求而定,功能上没有区别。这是问题出在你的寄存器受限,超过默认字段就会出现这样的错误提示。
修正方式是:
双击打开CPU,点击配置选项,在“全地址字段大小”下做扩充修正,然后保存修改。
希望对你有帮助STEP 7-Micro/WIN编译程序错误
错误总结
全部编译指令按照下列顺序编译全部三个块。
1 程序块(OB1、全部子程序、全部中断例行程序)
2 数据块(DB1)
3 系统块(SDB0)
编译指令编译当前块,当前块为现用编辑程序。
编译程序块(OB1、全部子程序、全部中断例行程序)的过程中,编译程序在编译每个独立网络时遵守下列规则。
1 编译程序检查对不存在的子程序的调用。
2 编译程序检查对子程序的无效调用。
3 编译程序检查指令 *** 作数的非法语法。
4 编译程序确认每个指令 *** 作数,而且在IEC 1131-3的情况下,编译程序解决超载指令问题。
5 编译程序检查无效网络结构。
6 编译程序检查因选择的PLC中不存在的特征而造成的错误。
下面列举STEP 7-Micro/WIN 编译程序错误代码。
十进制 错误代码 说明
1 所选PLC类型不支持ENO的使用。
2 非法 *** 作数组合,OUT中的直接地址 *** 作数不可包含IN2中的直接地址的任何字节。
3 非法 *** 作数组合,OUT中的直接地址 *** 作数不可包含IN2中的间接地址的任何四个字节。
4 非法 *** 作数组合,OUT中的相同直接地址累加器不能用作IN2中的间接地址累加器。
5 非法 *** 作数组合,OUT中的直接地址 *** 作数的最低位字节不可包含IN2中的直接地址的任何字节。
6 非法 *** 作数组合,OUT中的直接地址 *** 作数的最低位字节不可包含IN2中的间接地址的任何四个字节。
7 非法 *** 作数组合,OUT中的间接地址 *** 作数不可包含IN1中的直接地址的任何字节。
8 非法 *** 作数组合,OUT中的间接地址 *** 作数不可包含IN1或IN2中的间接地址的任何四个字节。
9 非法 *** 作数组合,OUT中的累加器 *** 作数不能与IN1中使用的累加器相同。
10 非法 *** 作数组合,OUT中的累加器 *** 作数不能与IN2中使用的累加器相同。
11 所选PLC类型不支持该指令。
12 所选PLC类型不支持参数化子程序。
13 所选PLC类型不支持带条件的END(结束)指令。
14 所选PLC类型不支持子程序。
15 无法解决超载指令问题。至少一个 *** 作数必须是具有相关数据类型的局部或全局变量。
16 无法解决超载指令问题。并非全部超载 *** 作数均具有相同大小或数据类型。
32 指令 *** 作数非法语法。
33 指令 *** 作数未定义全局符号或局部变量。
34 指令 *** 作数编址模式无效。
35 指令 *** 作数内存区无效。
36 指令 *** 作数大小或数据类型无效。
37 指令 *** 作数内存编址范围无效。
38 编译前必须先定义类属指令。
39 调用指令无对应的子程序。
42 无效间接内存区。
43 无效模拟输入或输出地址。
44 开路。
45 短路。
46 逆转使能位方向。
47 无效网络或网络太复杂无法编译。
48 非法放置正向过渡、负向过渡或NOT(取反)触点。
49 计数器指令必须是网络中的唯一输出。
50 未知编译错误。
51 A LBL、NEXT、NOP、SCR或SCRE指令在同一网络中不能有任何其他指令。
52 触点必须位于输出指令之前。
53 指令END、RET及RETI只能用作有条件输出。编译程序自动处理这些指令的无条件使用。
54 网络缺少输出指令。
55 指令 *** 作数直接量/常数使用非法。
56 指令 *** 作数直接量/常数数值超出范围。
57 指令 *** 作数直接量/常数类型非法。
58 多堆栈指令(CTU、CTD、CTUD、SBRx)不允许用垂直线互联布尔输入逻辑。
59 在与多堆栈指令(CTU、CTD、CTUD、SBRx)相同的网络中不允许使用附加输出指令。
62 正向边缘号码重复使用
63 负向边缘号码重复使用
64 指令不支持ENO的使用。
65 输出线圈不支持使能位从线圈右侧流出。
66 指令未被识别为有效标准指令。
67 *** 作数数目与标准指令签名不匹配。
2700 非法STL指令
系统数据块编译错误及警告
2750 所选PLC类型不支持设置端口1选项。
2751 所选PLC类型不支持设置模拟输入过滤选项。
2752 所选PLC类型不支持设置脉冲截取位选项。
2753 所选PLC类型不支持设置输出表格选项。
2754 所选PLC类型不支持配置输出表格的高位字节。
2755 对于所选的PLC类型,为端口' '指定的波特率非法。
2756 对于所选的PLC类型,保留范围 ' ' 非法。
数据块编译错误
2770 指定的地址已经被分配一个数值。
2771 对于所选的PLC类型,地址无效。
2772 数据块条目非法语法。
2773 数值对于指定的地址过大。
2774 超出内部标记文本大小。
2775 非法DB 语法。
在帮助里面可以找到1
plc内部变量通讯地址的编写方法的方法是:
1、确定Y1地址(读 *** 作已说明)。
2、就于写入的原理,需要先读取00A0的值。
3、将读取的值与0010进行&运算,确定Y1是否为0。
4、为0,则将读取值与0010进行或运算,再将得到的值转为数字代码形式发送给PLC为1,则表示内部Y1已经为1,不需要重复置位。
5、写入成功后返回06。
并且ADD是读位元件或字元件的4位起始地址,高位先发,低位后发,以ASCII码的格式发送,LEN是一次读取位元件或字元件的个数,最多可以读取0xff个字节的元件,也是以ASCII码的形式发送。
CHK是两位和校验,将CMD0,ADD,LEN,EXT三项进行和累计,将和累计的最低两位转化成ASCII,高位先发,低位后发。
在发完上述命令格式代码后,就可以直接读取PLC响应返回的信息。
plc内部变量通讯地址的编写方法的前提是:
需要读取的PLC内部元件的地址找到,主要内部元件地址如下:
1、D: PLC-Address2+1000H。
2、T: PLC-Address+00C0H。
3、C: PLC-Address2+01C0H。
4、S: PLC-Address3。
5、M: PLC-Address2+0100H。
6、Y: PLC-Address+00A0H。
7、X: PLC-Address+0080H。
你说的这种情况一般是涉及到上位机采集数据或者有上位机 *** 作站的情况。服务器就是把PLC中的数据通过网络通讯,读取到一台作为服务器的微机的数据库中。
至于具体的还是要看你采用的上位机系统软件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)