fx2n-16mr的编程口通讯格式是9600、E、7、1,我自己做了个板子想与它的编程口通讯,单片机这边我通过与电及模拟通讯数据发送都正常,可是与PLC通讯就是不正常,总是返回0x15字,我发送的数据为02 31 31 37 45 32 30 34 34 42 43 41 30 30 30 30 03 33 31(都是十六进制的),可是为什么不能正常返回呢?谢谢!
附上三菱FX 系列PLC 编程口通信协议:
通讯格式:
命令 命令码 目标设备
DEVICE READ CMD "0" X,Y,M,S,T,C,D
DEVICE WRITE CMD "1" X,Y,M,S,T,C,D
FORCE ON CMD " 7" X,Y,M,S,T,C
FORCE OFF CMD "8" X,Y,M,S,T,C
传输格式: RS232C
波特率: 9600bps
奇偶: even
校验: 累加方式(和校验)
字符: ASCII
16 进制代码:
ENQ 05H 请求
ACK 06H PLC 正确响应
NAK 15H PLC 错误响应
STX 02H 报文开始
ETX 03H 报文结束
帧格式:
STX CMD DATA ...... DATA ETX SUM(upper) SUM(lower)
例子:
STX ,CMD ,ADDRESS, BYTES, ETX, SUM
02H, 30H, 31H,30H,46H,36H, 30H,34H, 03H, 37H,34H
SUM=CMD+......+ETX;
30h+31h+30h+46h+36h+30h+34h+03h=74h;
累加和超过两位取低两位
1、DEVICE READ(读出软设备状态值)
计算机向PLC 发送:
始 命令 首地址 位数 终 和校验
STX CMD GROUP ADDRESS BYTES ETX SUM
例子:从D123 开始读取4 个字节数据
02h 30h 31h,30h,46h,36h 30h,34h 03h 37h,34h
地址算法:address=address*2+1000h
再转换成ASCII
31h,30h,46h,36h
PLC 返回
STX 1ST DATA 2ND DATA ..... LAST DATA ETX SUM
注:最多可以读取64 个字节的数据