资源描述:
《三菱fx_系列plc_编程口通信协议总览》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、三菱FX系列PLC编程口通信协议总览三菱FX系列PLC编程口通信协议总览该协议实际上适用于PLC编程端口以及FX-232AW模块的通信感谢网友visualboy提供通讯格式命令命令码目标设备DEVICEREADCMD"0"X,Y,M,S,T,C,DDEVICEWRITECMD"1"X,Y,M,S,T,C,DFORCEONCMD"7"X,Y,M,S,T,CFORCEOFFCMD"8"X,Y,M,S,T,C传输格式:RS232C波特率:9600bps奇偶:even校验:累加方式和校验字符:ASCII16进制代码ENQ05H请求ACK06HPLC
2、正确响应NAK15HPLC错误响应STX02H报文开始ETX03H报文结束帧格式STXCMDDATA......DATAETXSUM(upper)SUM(lower)例子STX,CMD,ADDRESS,BYTES,ETX,SUM02H,30H,31H,30H,46H,36H,30H,34H,03H,37H,34HSUM=CMD+......+ETX30h+31h+30h+46h+36h+30h+34h+03h=74h;累加和超过两位取低两位1DEVICEREAD读出软设备状态值计算机向PLC发送始命令首地址位数终和校验STXCMDGROUP
3、ADDRESSBYTESETXSUM例子从D123开始读取4个字节数据02h30h31h,30h,46h,36h30h,34h03h37h,34h地址算法:address=address*2+1000h再转换成ASCII31h,30h,46h,36hPLC返回STX1STDATA2NDDATA.....LASTDATAETXSUM注最多可以读取64个字节的数据例子从指定的存储器单元读到3584这个数据02h33h35h38h34h03h44h,36h2DEVICEWRITE向PLC软设备写入值始命令首地址位数数据终和校验STXCMDGROU
4、PADDRESSBYTES1STDATA2NDDATA......LASTDATAETXSUM例子向D123开始的两个存储器中写入1234,ABCD02h31h31h,30h,46h,36h30h,34h33h,34h,31h,32h,43h,44h,41h,42h03h34h,39hPLC返回ACK(06H)接受正确NAK(15H)接受错误3位设备强制置位/复位FORCEON置位始命令地址终和校验STXCMDADDRESSETXSUM02h37haddress03hsumFORCEOFF复位始命令地址终和校验STXCMDADDRESSET
5、XSUM02h38haddress03hsumPLC返回ACK(06H)接受正确NAK(15H)接受错误设备强制中的地址公式:Address=Address/8+100h(设备强制中的地址公式:Address=Address*100h+(*)(必须为4位,不足4位前面补0) 注:*号所代表值: C:14 M:8 T:6 Y:5 X:4 S:0如对M2置位,则为地址为:2*256(100H)+8=0520转为十六进制为:0208再换为ASCII就是:30323038)说明1.帧中的BYTES表示需要读取或者写入的字节数2.地址算法上有说明3
6、.累加和是从STX后面一个字节开始累加到ETX的和VB读写三菱FX系列PLC数据示例 通过前面两篇文章,我们了解了三菱FX系列PLC的编程口通信协议。为了更方便读者学习这里提供一个用VB编写的示例,其中包含一个通用模块,如果你需要对此类PLC进行读写数据区的操作可以下载看看。 三菱FX系列PLC的校验采用的是和校验,在写数据和读数据时都会有这个和校验,和校验用于检查数据包是否有错。因此我们必需知道和校验的算法,才能成功地进行通信。在这里我们提供了一个和校验的VB源代码: '********************************
7、*******************PrivateFunctionCheck_FCS(mStrAsString)AsString DimKAsInteger,mTestAsInteger ForK=1ToLen(mStr) mTest=mTest+Asc(Mid(mStr,K,1)) Next Check_FCS=Right(Hex(mTest),2)EndFunction'*************************************************** 函数中的mStr参数为命令、位数、数据、终止符的合集,读取时
8、不包括数据。使用Check_FCS函数时将返回和校验码。 当向PLC写数据时,数据必须为四位的十六进制数,并且低位在前、高位在后。这里提供一个循环代码,将一个数组里的整数转换为