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

plc 数据采集java plc数据采集器d3208_plc 数据采集java

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

plc 数据采集java plc数据采集器d3208_嵌入式硬件_02

plc 数据采集java plc数据采集器d3208_stm32_03

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

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

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

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

422芯片:SN75179B

plc 数据采集java plc数据采集器d3208_plc 数据采集java_04

232芯片:

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

plc 数据采集java plc数据采集器d3208_串口_05

plc 数据采集java plc数据采集器d3208_plc 数据采集java_06

plc 数据采集java plc数据采集器d3208_串口_07

二:采集协议

plc 数据采集java plc数据采集器d3208_串口_08

plc 数据采集java plc数据采集器d3208_单片机_09

读取  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。四条通讯指令如下表:

plc 数据采集java plc数据采集器d3208_stm32_10

 

plc 数据采集java plc数据采集器d3208_stm32_11

 

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

1.2 通信格式

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

plc 数据采集java plc数据采集器d3208_stm32_12

注: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的代码如下:

plc 数据采集java plc数据采集器d3208_串口_13

 

注: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。