您现在的位置:智能制造网>技术首页>

三菱FX系列PLC编程口通信协议

2007年02月25日 10:01来源:烟台勾股通信技术有限公司 >>进入该公司展台人气:4135

三菱FX系列PLC编程口通信协议总览

该协议实际上适用于PLC编程端口以及 FX-232AW 模块的通信。感谢网友visualboy提供。

通讯格式:

命令 命令码 目标设备
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;

累加和超过两位取低两位

三菱FX系列PLC编程口通信协议举例
三菱FX系列PLC编程口通信协议举例
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

注:zui多可以读取64个字节的数据

例子:从的存储器单元读到3584这个数据

02h 33h 35h 38h 34h 03h 44h,36h

2、DEVICE WRITE(向PLC软设备写入值)

始 命令 首地址 位数 数据 终 和校验
STX CMD GROUP ADDRESS BYTES 1ST DATA 2ND DATA ...... LAST DATA ETX SUM

例子:向D123开始的两个存储器中写入1234,ABCD

02h 31h 31h,30h,46h,36h 30h,34h 33h,34h,31h,32h,43h,44h,41h,42h 03h 34h,39h

PLC返回

ACK (06H) 接受正确

NAK (15H) 接受错误

3、位设备强制置位/复位

FORCE ON置位

始 命令 地址 终 和校验
STX CMD ADDRESS ETX SUM
02h 37h address 03h sum

FORCE OFF复位

始 命令 地址 终 和校验
STX CMD ADDRESS ETX SUM
02h 38h address 03h sum

PLC返回

ACK(06H) 接受正确

NAK(15H) 接受错误


设备强制中的地址公式:Address=Address/8+100h


说明:

1.帧中的BYTES表示需要读取或者写入的字节数。

2.地址算法上有说明。

3.累加和是从STX后面一个字节开始累加到ETX的和。
fx_comm.h

#define DELAY_TIMES 30000L
#define TRUE 1
#define FALSE 0
#define TRUE 1
#define FALSE 0
#define FORCE_ON 0x37
#define FORCE_OFF 0x38
void init_plc(void);
int check_plc(void);
int _read_data_register(unsigned int uAddress,unsigned int number);
int _read_mdata_register(unsigned int uAddress,unsigned int number);
int _write_data_register(unsigned int uAddress,unsigned int number);
int _force_m_contact(unsigned int uAddress,unsigned char ucOn_off);
int read_data_register(unsigned int uAddress,unsigned int number);
int read_mdata_register(unsigned int uAddress,unsigned int number);
int write_data_register(unsigned int uAddress,unsigned int number);
int force_m_contact(unsigned int uAddress,unsigned char ucOn_off);
int _read_m_register(unsigned int uAddress,unsigned int number);
int read_m_register(unsigned int uAddress,unsigned int number);
int TESTING=0;
unsigned int uRead_value[25];
unsigned int uWrite_value[25];
unsigned int COMM_PORT=1;
unsigned int STATS_PORT=0x2fd;
unsigned int DATA_PORT=0x2f8;


void init_plc(void)
{ _AX=0xfa;
   _DX=COMM_PORT;
   geninterrupt(0x14);
   while((inportb(STATS_PORT)&1)!=0) inportb(DATA_PORT);
 
}
//返回顶部


int check_plc(void)
{ long lTmp;
   if(TESTING==1)return TRUE;
   init_plc();
   for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
   { if((inportb(STATS_PORT)&0x20)!=0)
         break;
   }
   if(lTmp>=DELAY_TIMES)
      return(FALSE);
   outportb(DATA_PORT,5);
   disable();
   for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
   { if((inportb(STATS_PORT)&1)!=0)
         break;
   }
   if(lTmp>=DELAY_TIMES)
   {   enable();
      return(FALSE);
   }
   if((lTmp=inportb(DATA_PORT))==6)
   {    enable();
      return(TRUE);
   }
   else
   {    enable();
      return(FALSE);
   }
}
//返回顶部


int read_data_register(unsigned int uAddress,unsigned int number)
{   int i;
   for(i=0;i<3;i++)
      if(_read_data_register(uAddress,number)==TRUE)
         return TRUE;
   return FALSE;
}
//返回顶部


int _read_data_register(unsigned int uAddress,unsigned int number)
{ unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
   unsigned char uReceive[104];
   unsigned int uTmp;
   unsigned int uSum;
   unsigned int num;
   long lTmp;
   int i,j;
   if(TESTING==1)
   { for(i=0;i<number;i++)uRead_value[i]=0;
      return TRUE;
   }
   init_plc();
   num=number*2;
   if((num/16)>=10)
      uSend[6]=(unsigned char)(num/16+0x41-10);
   else
      uSend[6]=(unsigned char)(num/16+0x30);
   if((num%16)>=10)
      uSend[7]=(unsigned char)((num%16)+0x41-10);
   else
      uSend[7]=(unsigned char)((num%16)+0x30);
   uAddress=uAddress*2+0x1000;
   uTmp=uAddress & 0x000f;
   uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>4) & 0x000f;
   uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>8) & 0x000f;
   uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>12)&0x000f;
   uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uSum=0;
   for(i=1;i<9;i++)
      uSum=uSum+(unsigned char)uSend[i];
   uTmp=uSum&0x000f;
   uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uSum>>4)&0x000f;
   uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

   for(i=0;i<11;i++)
   { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
      { if((inportb(STATS_PORT)&0x20)!=0)
            break;
      }
      if(lTmp>=DELAY_TIMES)
      {
         
         return(FALSE);
      }
      outportb(DATA_PORT,uSend[i]);
   }
   disable();
 
   for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
   { if((inportb(STATS_PORT)&1)!=0)
         break;
   }
   if(lTmp>=DELAY_TIMES)
   {
      enable();
      return(FALSE);
   }
   uReceive[0]=inportb(DATA_PORT);
   if(uReceive[0]!=2)
   {
      enable();
      return(FALSE);
   }
   for(i=1;i<number*4+4;i++)
   { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
      { if((inportb(STATS_PORT)&1)!=0)
            break;
      }
      if(lTmp>=DELAY_TIMES)
      {
         enable();
         return(FALSE);
      }
      uReceive[i]=inportb(DATA_PORT);
   }
   enable();
   uSum=0;
   for(i=1;i<number*4+2;i++)
      uSum=uSum+(unsigned int)uReceive[i];
   uTmp=uSum&0xf;
   uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
 
   if((unsigned char)uTmp!=uReceive[number*4+3]) return(FALSE);
   uTmp=(uSum>>4)&0xf;
   uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
 
   if((unsigned char)uTmp!=uReceive[number*4+2]) return(FALSE);
   for(j=0;j<number;j++)
   {   for(i=j*4+1;i<j*4+5;i++)
         uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;
      uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+uReceive[j*4+2];
   }
   return TRUE;
}
//返回顶部

int read_mdata_register(unsigned int uAddress,unsigned int number)
{   int i;
   for(i=0;i<3;i++)
      if(_read_mdata_register(uAddress,number)==TRUE)
         return TRUE;
   return FALSE;
}
//返回顶部


int _read_mdata_register(unsigned int uAddress,unsigned int number)
{ unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
   unsigned char uReceive[104];
   unsigned int uTmp;
   unsigned int uSum;
   unsigned int num;
   long lTmp;
   int i,j;
   if(TESTING==1)
   { for(i=0;i<number;i++)uRead_value[i]=0;
      return TRUE;
   }
   init_plc();
   num=number*2;
   if((num/16)>=10)
      uSend[6]=(unsigned char)(num/16+0x41-10);
   else
      uSend[6]=(unsigned char)(num/16+0x30);
   if((num%16)>=10)
      uSend[7]=(unsigned char)((num%16)+0x41-10);
   else
      uSend[7]=(unsigned char)((num%16)+0x30);
   /*uAddress=uAddress*2+0x1000;*/
   uTmp=uAddress & 0x000f;
   uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>4) & 0x000f;
   uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>8) & 0x000f;
   uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>12)&0x000f;
   uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uSum=0;
   for(i=1;i<9;i++)
      uSum=uSum+(unsigned char)uSend[i];
   uTmp=uSum&0x000f;
   uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uSum>>4)&0x000f;
   uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   for(i=0;i<11;i++)
   { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
      { if((inportb(STATS_PORT)&0x20)!=0)
            break;
      }
      if(lTmp>=DELAY_TIMES)
      {
         
         return(FALSE);
      }
      outportb(DATA_PORT,uSend[i]);
   }
   disable();
 
   for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
   { if((inportb(STATS_PORT)&1)!=0)
         break;
   }
   if(lTmp>=DELAY_TIMES)
   {
      enable();
      return(FALSE);
   }
   uReceive[0]=inportb(DATA_PORT);
   if(uReceive[0]!=2)
   {
      enable();
      return(FALSE);
   }
   for(i=1;i<number*4+4;i++)
   { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
      { if((inportb(STATS_PORT)&1)!=0)
            break;
      }
      if(lTmp>=DELAY_TIMES)
      {
         enable();
         return(FALSE);
      }
      uReceive[i]=inportb(DATA_PORT);
   }
   enable();
   uSum=0;
   for(i=1;i<number*4+2;i++)
      uSum=uSum+(unsigned int)uReceive[i];
   uTmp=uSum&0xf;
   uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
 
   if((unsigned char)uTmp!=uReceive[number*4+3])return(FALSE);
   uTmp=(uSum>>4)&0xf;
   uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
 
   if((unsigned char)uTmp!=uReceive[number*4+2])return(FALSE);
   for(j=0;j<number;j++)
   {   for(i=j*4+1;i<j*4+5;i++)
         uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;
      uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+uReceive[j*4+2];
   }
   return TRUE;
}
//返回顶部


int write_data_register(unsigned int uAddress,unsigned int number)
{   int i;
   for(i=0;i<3;i++)
      if(_write_data_register(uAddress,number)==TRUE)
         return TRUE;
   return FALSE;
}
//返回顶部


int _write_data_register(unsigned int uAddress,unsigned int number)
{ unsigned char uSend[111];
   unsigned int uTmp,uSum,num;
   long lTmp;
   int i;
   if(TESTING==1)return TRUE;
 
   init_plc();
   uSend[0]=2;
   uSend[1]=0x31;
   uSend[number*4+8]=3;
   num=(number*2)/16;
   if(num>=10)uSend[6]=num+0x41-10;
   else    uSend[6]=num+0x30;
   num=(number*2)%16;
   if(num>=10)uSend[7]=num+0x41-10;
   else uSend[7]=num+0x30;
   uAddress=0x1000+2*uAddress;
   uTmp=uAddress&0x000f;
   uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>4)&0x000f;
   uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>8)&0x000f;
   uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>12)&0x000f;
   uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   for(i=0;i<number;i++)
   {
      uTmp=uWrite_value[i]&0x000f;
      uSend[i*4+9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
      uTmp=(uWrite_value[i]>>4)&0x000f;
      uSend[i*4+8]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
      uTmp=(uWrite_value[i]>>8)&0x000f;
      uSend[i*4+11]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
      uTmp=(uWrite_value[i]>>12)&0x000f;
      uSend[i*4+10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   }
   uSum=0;
   for(i=1;i<9+number*4;i++)
      uSum+=uSend[i];
   uTmp=uSum&0x000f;
   uSend[number*4+10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uSum>>4)&0x000f;
   uSend[number*4+9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   for(i=0;i<11+number*4;i++)
   { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
      { if((inportb(STATS_PORT)&0x20)!=0)
            break;
      }
      if(lTmp>=DELAY_TIMES)
      {
         /*enable();*/
         return(FALSE);
      }
      outportb(DATA_PORT,uSend[i]);
   }
   disable();
   for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
   { if((inportb(STATS_PORT)&1)!=0)
         break;
   }
   if(lTmp>=DELAY_TIMES)
   {
       enable();
      return(FALSE);
   }
   if(inportb(DATA_PORT)!=6)
   {
      enable();
      return(FALSE);
   }
   else
   {
      enable();
      return(TRUE);
   }
}


int force_m_contact(unsigned uAddress,unsigned char ucOn_off)
{   int i;
   for(i=0;i<3;i++)
      if(_force_m_contact(uAddress,ucOn_off)==TRUE)
         return TRUE;
   return FALSE;
}
//返回顶部


int _force_m_contact(unsigned uAddress,unsigned char ucOn_off)
{ unsigned uSend[]={2,0x37,0x30,0x30,0x30,0x30,3,0x30,0x30};
   unsigned uTmp,uSum,i;
   long lTmp;
   if(TESTING==1)return TRUE;
   init_plc();
   uAddress=uAddress+0x800;
   uSend[1]=ucOn_off;
   uTmp=uAddress&0x000f;
   uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>4)&0x000f;
   uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>8)&0x000f;
   uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>12)&0x000f;
   uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uSum=0;
   for(i=1;i<7;i++)
      uSum+=uSend[i];
   uTmp=uSum&0x000f;
   uSend[8]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uSum>>4)&0x000f;
   uSend[7]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   for(i=0;i<9;i++)
   { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
      { if((inportb(STATS_PORT)&0x20)!=0)
            break;
      }
      if(lTmp>=DELAY_TIMES)
      {
         enable();
         return(FALSE);
      }
      outportb(DATA_PORT,uSend[i]);
   }
   disable();
   for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
   { if((inportb(STATS_PORT)&1)!=0)
         break;
   }
   if(lTmp>=DELAY_TIMES)
   {
      enable();
      return(FALSE);
   }
   if(inportb(DATA_PORT)!=6)
   {
      enable();
      return(FALSE);
   }
   else
   { enable();
      return(TRUE);
   }
}
//返回顶部


int read_m_register(unsigned int uAddress,unsigned int number)
{   int i;
   for(i=0;i<3;i++)
      if(_read_m_register(uAddress,number)==TRUE)
         return TRUE;
   return FALSE;
}
//返回顶部


int _read_m_register(unsigned int uAddress,unsigned int number)
{ unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
   unsigned char uReceive[54];
   unsigned int uTmp;
   unsigned int uSum;
   unsigned int num;
   long lTmp;
   int i,j;
   if(TESTING==1)
   { for(i=0;i<number;i++)uRead_value[i]=0;
      return TRUE;
   }
   init_plc();
   num=number;
   if((num/16)>=10)
      uSend[6]=(unsigned char)(num/16+0x41-10);
   else
      uSend[6]=(unsigned char)(num/16+0x30);
   if((num%16)>=10)
      uSend[7]=(unsigned char)((num%16)+0x41-10);
   else
      uSend[7]=(unsigned char)((num%16)+0x30);
   uAddress=uAddress/8+0x100;
   uTmp=uAddress & 0x000f;
   uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>4) & 0x000f;
   uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>8) & 0x000f;
   uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uAddress>>12)&0x000f;
   uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uSum=0;
   for(i=1;i<9;i++)
      uSum=uSum+(unsigned char)uSend[i];
   uTmp=uSum&0x000f;
   uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
   uTmp=(uSum>>4)&0x000f;
   uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

   for(i=0;i<11;i++)
   { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
      { if((inportb(STATS_PORT)&0x20)!=0)
            break;
      }
      if(lTmp>=DELAY_TIMES)
      {
         /*enable();*/
         return(FALSE);
      }
      outportb(DATA_PORT,uSend[i]);
   }
   disable();
 
 
   for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
   { if((inportb(STATS_PORT)&1)!=0)
         break;
   }
   if(lTmp>=DELAY_TIMES)
   {
      enable();
      return(FALSE);
   }
   uReceive[0]=inportb(DATA_PORT);
   if(uReceive[0]!=2)
   {
      enable();
      return(FALSE);
   }
   for(i=1;i<number*2+4;i++)
   { for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
      { if((inportb(STATS_PORT)&1)!=0)
            break;
      }
      if(lTmp>=DELAY_TIMES)
      {
         enable();
         return(FALSE);
      }
      uReceive[i]=inportb(DATA_PORT);
   }
   enable();
   uSum=0;
   for(i=1;i<number*2+2;i++)
      uSum=uSum+(unsigned int)uReceive[i];
   uTmp=uSum&0xf;
   uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
 
   if((unsigned char)uTmp!=uReceive[number*2+3]) return(FALSE);
   uTmp=(uSum>>4)&0xf;
   uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
 
   if((unsigned char)uTmp!=uReceive[number*2+2]) return(FALSE);
   for(j=0;j<number;j++)
   {   for(i=j*2+1;i<j*2+3;i++)
         uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;
      uRead_value[j]=((uReceive[j*2+1])<<4)+uReceive[j*2+2];
   }
   return TRUE;
}
//返回顶部

全年征稿/资讯合作 联系邮箱:1271141964@qq.com
  • 凡本网注明"来源:智能制造网"的所有作品,版权均属于智能制造网,转载请必须注明智能制造网,https://www.gkzhan.com。违反者本网将追究相关法律责任。
  • 企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
  • 本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。


编辑精选

更多


宣传样本推荐图书

旗下子站

工控网机器人仪器仪表物联网3D打印工业软件金属加工机械包装机械印刷机械农业机械食品加工设备制药设备仓储物流环保设备造纸机械工程机械纺织机械化工设备电子加工设备水泥设备海洋水利装备矿冶设备新能源设备服装机械印染机械制鞋机械玻璃机械陶瓷设备橡塑设备船舶设备电子元器件电气设备



关于我们|本站服务|会员服务|企业建站|旗下网站|友情链接| 兴旺通| 产品分类浏览|产品sitemap

智能制造网 - 工业4.0时代智能制造领域“互联网+”服务平台

Copyright gkzhan.comAll Rights Reserved法律顾问:浙江天册律师事务所 贾熙明律师

客服热线:0571-87756395加盟热线:0571-87759904媒体合作:0571-89719789

客服部:编辑部:展会合作:市场部:

关闭