企业信息

    浔之漫智控技术(上海)有限公司

  • 7
  • 公司认证: 营业执照已认证
  • 企业性质:私营企业
    成立时间:2017
  • 公司地址: 上海市 松江区 永丰街道 上海市松江区广富林路4855弄52号3楼
  • 姓名: 聂航
  • 认证: 手机已认证 身份证已认证 微信未绑定

    联系方式

    浔之漫智控技术(上海)有限公司

  • 公司地址: 上海市 松江区 永丰街道 上海市松江区广富林路4855弄52号3楼
  • 姓名: 聂航

    西门子模块6ES7352-5AH01-0AE0技术参数

  • 所属行业:电气 工控电器 DCS/PLC系统
  • 发布日期:2023-09-19
  • 阅读量:21
  • 价格:面议
  • 产品规格:模块式
  • 产品数量:1000.00 台
  • 包装说明:全新
  • 发货地址:上海松江永丰  
  • 关键词:西门子代理商,西门子一级代理商

    西门子模块6ES7352-5AH01-0AE0技术参数详细内容

    西门子模块6ES7352-5AH01-0AE0技术参数

    在自动测量和控制系统中,常常需要在上位机(微机)和PLC(可编程控制器) 之间进行数据交 换和发送控制信号,串行通信是其主要手段,我们在开发一套自动测试系统时就是采用串行 通信的方法,即由上位机向PLC发送命令,控制其进行各种测试线路的切换。
    1 通信协议
    在本系统中微机和PLC采用一对一通信连接,上位机作主局,PLC作子局。通信开始时由上位 机向PLC发出呼叫,PLC收到上位机的呼叫后应答,并返回应答信号,然后上位机发首标,PL C应答,接着上位机发数据块,PLC应答,数据全部发完后上位机发一结束标志,至此上位机 与PLC的通信结束。
    该协议使用的传输控制字符有:
    ENQ(查询):在需要通信时作为发送方的请求。
    ACK(认可):接收方给发送方的应答,表示正确接收信息包。
    SOH(首标):表示要传送的是首标。
    ETB(数据结束):标志数据块的结束。
    STX(文本开始):标志数据块的开始。
    ETX(文本结束):标志文本块的结束。
    EOT(结束):表示传送结束。
    LRC:纵向冗余校验码,即对所有的传输码进行异或计算。
    2 bbbbbbs95下用Delphi实现串行通信
    在bbbbbbs95环境下用Delphi3.0实现串行通信有3种方法:①使用VB的通信构件MSComm ;② 调用bbbbbbs95下的API函数来完成通信;③熟悉C/C++或其它语言的用户可以将自己的程序 编译链接为DLL(动态链接库),这样Delphi就可以调用DLL里的函数来通信。下面就这3种方 法分别加以讨论。
    2.1 使用VB通信构件
    在使用VB构件之前,首先要将VB构件文件MSComm32.OCX安装到Delphi的动态构件库中。打开 主菜单Component选择Import ActiveX Control...项,在弹出的对话框里选中Microsoft Co mm Control5.0(安装VB5.0后必有此项),再单击Install按钮。此时Delphi载入VB构件文件并重新编译DCL(Delphi Component Library)。编译完成后,MSComm的小按钮出现在ActiveX 页中,这时程序就可以使用此 构件了。应该注意的是,安装前要确保VB通信构件的控制文件MSComm32.OCX(在VB4.0以上版 本中)在编译DCL之前已在\bbbbbbs\System下。接着向窗体中 添加1个MSComm构件并进行串行口的初始化,初始化子例程序如下:
     
    Procedure Tbbbb1.bbbbCreate(Sender:Tbbbbbb);
    begin
    mPort:=2; {使用COM2口为通信口}
    MSComm1.InBufferSize:=1024; {设定接收队列长度为
    1KB}
    MSComm1.OutBufferSize:=1024; {设定发送队列长度为
    1KB}
    MSComm1.Settings:=‘9600,N,8,1';{波特率9600b/s,无校验,8个数据位,1 个停止位}
    MSComm1.bbbbbLen:=0; {读取整个接收缓冲区内容}
    MSComm1.bbbbbBufferCount:=0; {接收缓冲区}
    MSComm1.PortOpen=:True; {打开串行口}
    End;
    用bbbbb属性从接收对列读入字符串:ReadBuffer:=MSComm1.bbbbb;用Output属性发送字 符串:MSComm1.Output:=WriteBuffer;然后根据上述通信协议,即可快速编制出通信软件 。
    2.2 调用bbbbbbs95下的API函数
    bbbbbbs95对通信功能的支持非常强,它增加了一系列用于通信的API函数供用户调用。同样 ,要进行串行通信,也需要先对串口进行初始化。bbbbbbs95把串行口作为设备文件,对串 口操作就是对文件操作。因此,必须先为串口分配1个文件句柄,以后对串口操作都将通过 这个文件句柄来完成。初始化过程如下:
    (1)调用CreateFile函数为串口分配1个文件句柄。
    Var HComm:THandle;
    HComm:=CreateFile(‘COM2',GENERICREAD or GENERICWRITE ,0,@NULL,OPENEXISTING,FILEFLAGOVERLAPPED,0);
    如果对串行口1操作,用字符串COM1代替COM2即可。
    (2)调用SetupComm函数设置串行口的输入和输出缓存区。
    SetupComm(HComm,1024,1024);
    (3)填充1个DCB(设备控制块)结构来设置通信参数。通过调用GetCommState函数 获得当前系统的DCB结构,按需要赋值给DCB的成员,如波特率、奇偶校验、数据位、停止位 等,最后将创建后的DCB结构作为参数传给SetCommState函数就可以初始化串口了。
     
    Var DCB:TDCB;
    GetCommState(HComm,DCB);
    BuildCommDCB(‘9600,N,8,1',DCB);
    SetCommState(HComm,DCB);
    (4)用PurgeComm函数来接收缓存区的内容。
    PurgeComm(HComm,PurgeRXbbbbb);
     
    (5)串行口的初始化完成后,接下来的工作就是根据通信协议发送和接收串行口上的数据。R eadFile函数用于接收数据,WriteFile函数用于发送数据。
     
    Var
    OverLapped:TOverLapped;
    DataIn:Byte;
    DataOut:Byte;
    BufferSize:Integer;
    COMSTAT cs;
    ReadFile(HComm,DataIn,cs.cbInQue,BufferSize,@OverLapped);
    {从串行口读输入缓存的字节,存入DataIn变量中}
    WriteFile(HComm,DataOut,cs.cbOutQue,BufferSize,@OverLapped);
    {向串行口写输出缓存的字节,要写的数据存放在DataOut}
    按照上述步骤,再根据的通信协议,即可完成串行通信。
    2.3 调用其它语言编写的DLL
    由于这里所说的其它语言包含面很广,可以是开发人员所熟悉的编程语言(只要其支持DLL即 可),如C和C++等,所以如何编写DLL就不再详述了。将编写好的DLL进行编译,然后把编译 通过后的DLL放在\bbbbbbs\System子目录下,在Delphi下打开1个单元文件,将DLL里的所 有函数在单元文件中声明,格式如下:
     
    unit UnitName;
    interface
    procedure p1(bbbbb1:type1;bbbbb2:type2;...);stdcall;
    external‘DLLName';

    implementation
    end
     
    其中UnitName为单元文件名,p1为调用过程名,bbbbb1、bbbbb2为参数名,type1、type2为 参数类型名,DLLName为DLL名。串行通信时,只要将此单元包含进编程单元就行了。
     
    3 结 论
    对使用Delphi开发bbbbbbs95下与PLC进行串行通信程序的3种方法进行比较可以得出这样的 结论:
    (1)使用VB通信构件不但能够实现API的所有功能,而且程序简单明了。
    (2)调用bbbbbbs95的API通信函数,可以设计和开发出各种通信软件,但编程复杂。
    (3)*3种方法适合那些熟悉其它编程语言的开发人员。
    以上所有程序均在bbbbbbs95中文版下使用Delphi3.0调试通过。
     
    作者单位:合肥工业大学计算机系(230061)
     
    参考文献
     
    1 李汉涛,杨长春.bbbbbbs下三线制串行通信的实现方法.电脑技 术,1998;(7)
    2 王仲文译.精通串行通信.北京:电子工业出版社
     
    一、MSComm控件的主要属性及事件
    (1)CommPort:设置或返回串行端口号,缺省值1。
    (2)Setting:设置或返回串口通信参数,格式为“波特率,奇偶校验位,数据位,停止位”。例如:MSComm1.Setting:=′9600,n,8,1′
    (3)PortOpen:打开或关闭串行端口,格式为:MSComm1.PortOpen:={True|False}
    (4)InBufferSize:设置或返回接收缓冲区的大小,缺省值为1024字节。
    (5)InBufferCount:返回接收缓冲区内等待读取的字节数,可通过设置该属性为0来清空接收缓冲区。
    (6)RThreshold:该属性为一阀值,它确定当接收缓冲区内的字节个数达到或**过该值后就产生代码为ComEvReceive的OnComm事件。
    (7)SThreshold:该属性为一阀值,它确定当发送缓冲区内的字节个数少于该值后就产生代码为ComEvSend的OnComm事件。
    (8)bbbbbLen:设置或返回接收缓冲区内用bbbbb读入的字节数,设置该属性为0表示bbbbb读取整个缓冲区的内容。
    (9)bbbbb:从接收缓冲区读取一串字符。
    (10)OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。
    (11)OutBufferCount:返回发送缓冲区内等待发送的字节数,可通过设置该属性为0来清空缓冲区。
    (12)OutPut:向发送缓冲区传送一串字符。
    如果在通信过程中发生错误或事件,就会触发OnComm事件,并由CommEvent属性代码反映错误类型,在通信程序的设计中可根据该属性值来执行不同的操作。CommEvent属性值及其含义如下:
    (1)ComEvSend:值为1,发送缓冲区的内容少于SThreshold*的值。
    (2)ComEvReceive:值为2,接收缓冲区内字符数达到RThreshold*的值。
    (3)ComEvFrame:值为1004,硬件检测到帧错误。
    (4)ComEvRxOver:值为1008,接收缓冲区溢出。
    (5)ComEvTxFull:值为1010,发送缓冲区溢出。
    (6)ComEvRxParity:值为1009,奇偶校验错误。
    (7)ComEvEOF:值为7,接收数据中出现文件尾(ASCII码为26)字符。
    二、程序样例
    下面是一接收程序的样例(主要部分),大家可根据实际需要进行完善。
    在bbbb中放置一Memo控件用于显示接收的数据,Combobox1选择通信参数(Setting属性值),Combobox2选择串口(CommPort属性值),按Button1开始接收数据,按Button2停止接收。
    procedure Tbbbb1.bbbbCreate(Sender: Tbbbbbb);
    begin
    Mscomm1.InBufferCount :=0; // 清空接收缓冲区
    Mscomm1.bbbbbLen :=0; // bbbbb读取整个缓冲区内容
    Mscomm1.RThreshold :=1; // 每次接收到字符即产生OnComm事件
    end;
    procedure Tbbbb1.Button1Click(Sender: Tbbbbbb);
    begin
    Mscomm1.Settings :=ComboBox1.Text;
    if ComboBox2.Text =′com1′ then // 设只考虑COM1和COM2两种情况
    mPort :=1
    else
    mPort :=2;
    Mscomm1.PortOpen :=true; // 打开串口
    Mscomm1.DTREnable :=true; // 数据终端准备好
    Mscomm1.RTSEnable :=true; // 请求发送
    end;
    procedure Tbbbb1.Button2Click(Sender: Tbbbbbb);
    begin
    Mscomm1.PortOpen :=false; // 关闭串口
    Mscomm1.DTREnable :=false;
    Mscomm1.RTSEnable :=false;
    end;
    procedure Tbbbb1.MSComm1Comm(Sender: Tbbbbbb);
    var
    recstr:Olevariant;
    begin
    if mEvent = 2 then
    begin
    recstr := Mscomm1.bbbbb ;
    Memo1.text := Memo1.Text + recstr;
    end;
    end;
     
    上位机(pc)<->全透明网关<->下位机(单片机)
    全透明网关是一个tcp转rs232设备,有自己的ip和端口。
    下位机原来接收pc的串口发送数据。但是现在有了tcp->rs232的全透明网关,所以理论可以实现在局域网内任何一台pc都可给下位机的网关发送数据。
    现在做的是一个客户端,和网关建立连接,然后把数据发送到网关,网关可以把数据全部传送到下位机上。用D7的tcpclient控件,非阻塞模式。上位机先和网关建立连接:然后发送挂钩数据,直到挂钩成功(下位机返回相同数据),然后发送数据+1位校验码。下位机从网关依次接受数据:接收挂钩数据,判断然后返回挂钩成功数据,然后接收数据,再返回数据校验码。因为要使得下位机回传的数据会立刻通过网关回传到上位机上,所以上位软件建立了一个接收的线程,在不停的接受。现在基本调通。有下面几个问题:
    因为上位机和网关通过网线连接,网关和下位机也是有线连接。当出现异常时候,我如何知道是上位机和网关的连接没有建立上或网络不通?下位机和网关连接异常呢? 
    用串口控件。apro或spcomm ,又快又可靠

    20220222173907301904.jpg202202221739072455394.jpg202202221739073128824.jpg

    ---- 基 于WIN95/NT 的 串 行 通 信 机 制
     
                ---- bbbbbbs 操 作 系 统 的 机 制 禁 止 应 用 程 序 直 接 访 问 计 算 机 硬 件, 但 它 为 程 序 员 提 供 了 一 系 列 的 标 准API 函 数, 使 得 应 用 程 序 的 编 制 更 加 方 便 并 且 免 除 了 对 有 关 硬 件 的 调 试 麻 烦。 在bbbbbbs95/NT 中, 原 来bbbbbbs3.X 的WM_COMMNOTIFY 消 息 已 被 取 消, 操 作 系 统 为 每 个 通 信 设 备 开 辟 了 用 户 可 定 义 大 小 的 读/ 写 缓 冲 区, 数 据 进 出 通 信 口 均 由 操 作 系 统 后 台 完 成, 应 用 程 序 只 需 对 读/ 写 缓 冲 区 操 作 即 可。WIN95/NT 中 几 个 常 用 的 串 行 通 信 操 作 函 数 如 下:
     
                CreatFile
                打 开 串 行 口
                CloseHandle
                关 闭 串 行 口
                SetupComm
                设 置 通 信 缓 冲 区 的 大 小
                ReadFile
                读 串 口 操 作
                WriteFile
                写 串 口 操 作
                SetCommState
                设 置 通 信 参 数
                GetCommState
                获 取 默 认 通 信 参 数
                bbbbbCommError
                清 除 串 口 错 误 并 获 取 当 前 状 态
     
                ---- 除 上 述 几 个 函 数 外, 还 要 经 常 用 到 一 个 重 要 的 记 录DCB( 设 备 控 制 块)。DCB 中 记 录 有 可 定 义 的 串 行 口 参 数, 设 置 串 行 口 参 数 时 必 须 先 用GetCommState 函 数 将 系 统 默 认 值 填 入DCB 控 制 块, 然 后 才 可 把 用 户 想 改 变 的 自 定 义 值 设 定。
                ---- 在WIN95/NT 中 进 行 串 行 通 信 除 了 解 基 本 的 通 信 操 作 函 数 外, 还 要 掌 握 多 线 程 编 程。 线 程 是 进 程 内 部 执 行 的 路 径, 是 操 作 系 统 分 配CPU 时 间 的 基 本 实 体。 每 个 进 程 都 由 单 线 程 开 始 完 成 应 用 程 序 的 执 行。 串 行 通 信 需 要 利 用 多 线 程 技 术 实 现,其 主 要 的 处 理 逻 辑 可 以 表 述 如 下: 进 程 一 开 始 先 由 主 线 程 做 一 些 必 要 的 初 始 化 工
    作, 然 后 主 线 程 根 据 需 要 在 适 当 时 候 建 立 通 信 监 视 线 程 监 视 通 信 口, 当 指 定 的 串
    行 口 事 件 发 生 时, 向 主 线 程 发 送WM_COMMNOTIFY 消 息( 由 于WIN95 取 消 了WM_COMMNOTIFY 消 息, 因 此 必 须 自 己 创 建), 主 线 程 对 其 进 行 处 理。 若 不 需 要WM_COMMNOTIFY 消 息, 则 主 线 程 终 止 通 信 监 视 线 程。
     
                ---- 多 线 程 同 时 执 行, 将 会 引 起 对 共 享 资 源 的 冲 突。 为 避 免 冲 突, 就 要 用 同 步 多 线 程 对 共 享 资 源 进 行 访 问。WIN95 提 供 了 许 多 保 持 线 程 同 步 的 方 法, 笔 者 采 用 创 建 事 件 对 象 来 保 持 线 程 同 步。 通 过CraeteEvent() 创 建 事 件 对 象, 使 用SetEvent()
    或PulseEvent() 函 数 将 事 件 对 象 设 置 成 信 号 同 步。 在 应 用 程 序 中, 利 用WaitSinglebbbbbb() 函 数 等 待 同 步 的 触 发, 等 到 指 定 的 事 件 被 其 它 线 程 设 置 为 有 信 号 时, 才 继 续 向 下 执 行 程 序。
     
                ---- Delphi 下 的 具 体 实 现 方 法
     
                ---- Delphi 的 强 大 功 能 和 支 持 多 线 程 的 面 向 对 象 编 程 技 术, 使 得 实 现 串 行 通 信 非 常 简 单 方 便。 它 通 过 调 用 外 部 的API 函 数 来 实 现, 主 要 步 骤 如 下: 首 先, 利
    用CreateFile 函 数 打 开 串 行 口, 以 确 定 本 应 用 程 序 对 此 串 行 口 的 占 有 权, 并 封 锁 其 它 应 用 程 序 对 此 串 口 的 操 作; 其 次, 通 过GetCommState 函 数 填 充 设 备 控 制 块DCB, 再 通 过 调 用SetCommState 函 数 配 置 串 行 口 的 波 特 率、 数 据 位、 校 验 位 和 停 止 位。 然 后, 创 建 串 行 口 监 视 线 程 监 视 串 行 口 事 件。 在 此 基 础 上 就 可 以 在 相 应 的 串 口 上 操 作 数 据 的 传 输; 较 后, 用CloseHandle 函 数 关 闭 串 行 口。 具 体 的 程 序 如 下, 本 程 序 用Delphi3.0 编 制 在Win95 环t 境 下 调 试 通 过, 已 投 入 实 际 应 用 中, 供 广 大 读 者 参 考。
     
                ---- 程 序:
     
                unit comdemou;
                interface
                uses
                bbbbbbs, Messages, SysUtils, Classes,
                Graphics, Controls, bbbbs, Dialogs;
     
                const
                Wm_commNotify=Wm_User+12;
                type
                Tbbbb1 = class(Tbbbb)
                procedure bbbbCreate(Sender: Tbbbbbb);
                private
                Procedure comminitialize;
                Procedure MsgcommProcess(Var
                Message:Tmessage); Message Wm_commnotify;
                { Private declarations }
                public
                { Public declarations }
                end;
     
                //线程声明
                TComm=Class(TThread)
                protected
                procedure Execute;override;
                end;
     
                var
                bbbb1: Tbbbb1;
                hcom,Post_Event:Thandle;
                lpol:Poverlapped;
                implementation
     
                {$R *.DFM}
     
                Procedure TComm.Execute; //线程执行过程
                var
                dwEvtMask:Dword;
                Wait:Boolean;
                Begin
                fillchar(lpol,sizeof(toverlapped),0);
                While True do Begin
                dwEvtMask:=0;
                Wait:=WaitCommEvent(hcom,dwevtmask,lpol);
                //等待串行口事件;
                if Wait Then Begin
                waitforsinglebbbbbb(post_event,infinite);
                //等待同步事件置位;
                resetevent(post_event); //同步事件复位;
                PostMessage(bbbb1.Handle,
                WM_COMMNOTIFY,0,0);//发送消息;
                end;
                end;
                end;
     
                procedure minitialize;
                //串行口初始化
                var
                lpdcb:Tdcb;
                Begin
                hcom:=createfile('com2',generic_read or
                generic_write,0,nil,open_existing,
                file_attribute_normal or
                file_flag_overlapped,0);//打开串行口
                if hcom=invalid_handle_value then
                else
                setupcomm(hcom,4096,4096);
                //设置输入,输出缓冲区皆为4096字节
                getcommstate(hcom,lpdcb);
                //获取串行口当前默认设置
                lpdcb.baudrate:=2400;
                lpdcb.StopBits:=1;
                lpdcb.ByteSize:=8;
                lpdcb.Parity:=EvenParity; //偶校验
                Setcommstate(hcom,lpdcb);
                setcommMask(hcom,ev_rxchar);
                //*串行口事件为接收到字符;
                end;
     
                Procedure Tbbbb1.Msgcomm
                Process(Var Message:Tmessage);
                var
                bbbbb:Boolean;
                Coms:Tcomstat;
                cbNum,ReadNumber,lpErrors:Integer;
                Read_Buffer:array[1..100]of char;
                Begin
                bbbbb:=bbbbbcommerror(hcom,lpErrors,@Coms);
                if bbbbb Then Begin
                cbNum:=Coms.cbInQue;
                ReadFile(hCom,Read_Buffer,
                cbNum,ReadNumber,lpol);
                //处理接收数据
                SetEvent(Post_Event);
                //同步事件置位
                end;
                end;
     
                procedure Tbbbb1.bbbbCreate(Sender: Tbbbbbb);
                begin
                comminitialize;
                post_event:=CreateEvent
                (nil,true,true,nil); //创建同步事件;
                Tcomm.Create(False);
                //创建串行口监视线程;
                end;
     
                end
     
     
    ····································
    // 看过后给分!
    unit Unit1;
     
    interface
     
    uses
      bbbbbbs, Messages, SysUtils, Classes, Graphics, Controls, bbbbs, Dialogs,
      StdCtrls, OleCtrls, MSCommLib_TLB;
     
    type
      Tbbbb1 = class(Tbbbb)
        MSComm1: TMSComm;
        Memo1: TMemo;
        ComboBox1: TComboBox;
        ComboBox2: TComboBox;
        Button1: TButton;
        Button2: TButton;
        procedure bbbbCreate(Sender: Tbbbbbb);
        procedure Button1Click(Sender: Tbbbbbb);
        procedure Button2Click(Sender: Tbbbbbb);
        procedure MSComm1Comm(Sender:Tbbbbbb);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
    var
      bbbb1: Tbbbb1;
     
    implementation
     
    {$R *.DFM}
     
    procedure Tbbbb1.bbbbCreate(Sender: Tbbbbbb);
    begin
    Mscomm1.InBufferCount:=0;       //清空接受缓冲区
    mscomm1.bbbbbLen:=0;            //bbbbb读取整个缓冲区的内容
    mscomm1.RThreshold:=1;          //每次接受到字符即产生OnComm事件
    end;
     
    procedure Tbbbb1.Button1Click(Sender: Tbbbbbb);
    begin
    Mscomm1.Settings:=combobox1.Text;
    if combobox2.Text='com1' then mPort:=1
            else mPort:=2;
    mscomm1.PortOpen:=true;                 //打开串口
    mscomm1.DTREnable:=true;                //数据终端准备好
    mscomm1.RTSEnable:=true;                //请求发送
     
     
    end;
     
    procedure Tbbbb1.Button2Click(Sender: Tbbbbbb);
    begin
    mscomm1.PortOpen:=false;                //关串口
    mscomm1.DTREnable:=false;
    mscomm1.RTSEnable:=false;
    end;
     
    procedure Tbbbb1.MSComm1Comm(Sender: Tbbbbbb);
    var
    recstr:Olevariant;
    begin
    if mEvent=2 then
            begin
            recstr:=mscomm1.bbbbb;
            memo1.Text:=memo1.Text+recstr;
            end;
    end;
    end.
    使用Delphi开发bbbbbbs95下与PLC进行串行通信程序的3种方法进行比较可以得出这样的 结论:
    (1)使用通信构件不但能够实现API的所有功能,而且程序简单明了。
    (2)调用bbbbbbs95的API通信函数,可以设计和开发出各种通信软件,但编程复杂。
    (3)使用行间汇编,适合那些熟悉汇编语言的开发人员。
    SPCOMM的使用 
    下面是一个利用 SPCOMM控件的串口通信的例子。 
    以实现 PC机与单片机 8051之间的通信为例,首先要调通它们之间的握手信号。定它们之间的通信协议是: PC到 8051一帧数据 6个字节, 8051到 PC一帧数据也为 6个字节。当 PC发出( F0,01,FF,FF,01,F0)后 8051能收到一帧( F0,01,FF,FF,01,F0),表示数据通信握手成功,两者之间就可以按照协议相互传输数据。 


    http://zhangqueena.b2b168.com
    欢迎来到浔之漫智控技术(上海)有限公司网站, 具体地址是上海市松江区永丰街道上海市松江区广富林路4855弄52号3楼,联系人是聂航。 主要经营电气相关产品。 单位注册资金单位注册资金人民币 100 万元以下。 价格战,是很多行业都有过的恶性竞争,不少厂家为了在价格战役中获胜,不惜以牺牲产品质量为代价,而我们公司坚决杜绝价格战,坚持用优质的原材料及先进的技术确保产品质量,确保消费者的合法利益。