一:使用stm32f103的串口1采集三菱PLC的MD8口:

波特率设置:9600    bit 7 stop 1 偶校验:

 我使用 USB转MD8(里面是RS422)调通了电脑端到FX3U的通讯。

但是采集FX3U所使用的北辰模块,里面所使用的是232芯片。

所以我这里疑惑了,他是否是使用RS422差分特性通讯的?待确认。

工程师详解串口:RS-232、RS-422、RS-485之间的区别_msgoc的博客-CSDN博客_232和422串口区别

422芯片:SN75179B

232芯片:

MAX3232    丝印:MP232EI  (北辰模块选型)

二:采集协议

 三菱FX系列PLC编程口通讯协议实例 - 百度文库

读取  D100   发送 : 02 30 31 30 43 38 30 34 03 37 33

addr:31 30 43 38  = 10C8=0x1000+100x2=10C8

0X1000是D区域的起始地址,为什么要乘以2,D0=1000 D1=1002 D2=1004 ....

这个和地址分配有关系

 ////200 C8
//
////STX  CMD   ADDR  0040  八进制 100
////                 4   0   C  8
////寄存器首地址(地址+1000H) 10F6
////02   30      31 30 46 36   30 34    03    37 34
//
////D0        =1000+  0X2
////D100寄存器 =1000+100X2

1.1 通信指令

三菱PLC的位元件主要有X、Y、M、S、T、C,字元件有D。编程口通信协议采用异步格式,由1位起始位、7位数据位、1位偶校验位及1位停止位组成,字符为ASCII码形式。存储单元有:输入继电器X、输出继电器Y、辅助继电器M、状态元件S、定时器T、计数器C 以及数据寄存器D。四条通讯指令如下表:

 

 


协议的五个标示符如下表:

1.2 通信格式

三菱PLC编程口通信协议中,读、写操作和强制置位、复位的通信格式大同小异,只需要修改相应地址即可。下面主要列出读、写操作的内容。



注:1*.和校验是将CMD-ETX之间内容的十六进制码对应的ASCII码相加,取和累计的最低位两位转换为ASCII码。
2*.首地址:D:address2+1000H;
M:address
2+0100H;
X:address+0080H;
Y:address+00A0H;
T:address+00C0H;
C:address2+01C0H;
S:address
3;
address为十进制数字,运算后转换为十六进制再与后项相加,将和转换为ASCII码。例如:X7的地址为7+0080H=0087H,对应代码30,30,38,37;
Y13的地址为00A0H+13=00A0H+DH=00ADH,对应代码30,30,41,44;
D123的地址为1000H+1232=1000H+F6H=10F6H,对应代码31,30,46,36;
M40的地址0100H+40
2=0100H+50H=0150H,对应代码30,31,35,30。

 

1.3 例子

给Y1写入1的代码如下:

 


注:Y0-Y7是1个字节,所以BYTE是30,31;
Y1写入1后Y0-Y7变为0000 0010,即0 2。转换为ASCII码30,32
和校验SUM的计算:31H+30H+30H+41H+31H+30H+31H+30H+32H+03H=1C9H,取后两位C 9,转换为ASCII码为43,39。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐