据我实验观察,一般是MSG块在同一时间被调用出现报6,比如我前段时间做一个小项目中,需要对从站进行读和写,读40003,写40001,我是用定时器做间隔定时触发读 *** 作,而写 *** 作就用读 *** 作完成标志来触发,一开始,发现有时读 *** 作的MSG块报6,然后我找了好久没发现问题,后来仔细查找,发现定时器定时是周期的,但传送数据需要时间的,慢慢的,总会产生在写 *** 作时,定时器定时时间到了,就会发出触发条件,这时还不会出错,但是下一次扫描就一定报6,因为下一次扫描时,写 *** 作可能还在进行中,所以会出现两个MSG同时调用,这就出现报6的现象了。所以建议你自己仔细的查看一下你的程序,是否有可能同时触发多个MSG的读写 *** 作。希望有用。另外,只调用一个MSG也可以出现报6,就是在不停的进行同一个MSG调用(周期读写数据),如果这个周期过短则出现这个问题,你需要了解一下,一个初始化CTL需要18ms左右(好像是这个数字,记不太清除),而一个BYTE发送也需要MS级的时间,若传送速率低的话,加上传送数据比较多的话,很容出现上次数据还没传送完,新的一次传送又开始了,所以要计算一下你的读写内容所需要的时间,当然,最好是用MSG的完成标志做一下限制,防止同时调用就好了。
程序间通讯方式
用于程序间通讯(IPC)的四种不同技术: 1 讯息传递(管道,FIFO,posix和system v讯息伫列) 2 同步(互斥锁,条件变数,读写锁,档案和记录锁,Posix和System V讯号灯) 3 共享记忆体区(匿名共享记忆体区,有名Posix共享记忆体区,有名System V共享记忆体区) 4 过程呼叫(Solaris门,Sun RPC) 讯息伫列和过程呼叫往往单独使用,也就是说它们通常提供了自己的同步机制相反,共享记忆体区通常需要由应用程式提供的某种同步形式才能正常工作解决某个特定问题应使用哪种IPC不存在简单的判定,应该逐渐熟悉各种IPC形式提供的机制,然后根据特定应用的要求比较它们的特性 必须考虑的四个前提: 1 联网的还是非联网的IPC适用于单台主机上的程序或执行绪间的如果应用程式有可能分布到多台主机上,那就要考虑使用套接字代替IPC,从而简化以后向联网的应用程式转移的工作 2 可移植性 3 效能,在具体的开发环境下执行测试程式,比较几种IPC的效能差异 4 实时排程如果需要这一特性,而且所用的系统也支援posix实时排程选项,那就考虑使用Posix的讯息传递和同步函式 各种IPC之间的一些主要差异: 1 管道和FIFO是位元组流,没有讯息边界Posix讯息和System V讯息则有从传送者向接受者维护的记录边界(eg:TCP是没有记录边界的位元组流,UDP则提供具有记录边界的讯息) 2 当有一个讯息放置到一个空伫列中时,Posix讯息伫列可向一个程序传送一个讯号,或者启动一个新的执行绪System V则不提供类似的通知形式 3 管道和FIFO的资料位元组是先进先出的Posix讯息和System V讯息具有由传送者赋予的优先顺序从一个Posix讯息伫列读出时,首先返回的总是优先顺序最高的讯息从一个System V讯息伫列读出时,读出者可以要求想要的任意优先顺序的讯息 4 在众多的讯息传递技术—管道,FIFO,Posix讯息伫列和System V讯息伫列—中,可从一个讯号处理程式中呼叫的函式只有read和write(适用于管道和FIFO) 比较不同形式的讯息传递时,我们感兴趣的有两种测量尺度: 1 频宽(bandwidth):资料通过IPC通道转移的速度为测量该值,我们从一个程序向另一个程序传送大量资料(几百万位元组)我们还给不同大小的I/O *** 作(例如管道和FIFO的write和read *** 作)测量该值,期待发现频宽随每个I/O *** 作的资料量的增长而增长的规律 2 延迟(latency):一个小的IPC讯息从一个程序到令一个程序再返回来所花的时间我们测量的是只有一个1个位元组的讯息从一个程序到令一个程序再回来的时间(往返时间) 在现实世界中,频宽告诉我们大块资料通过一个IPC通道传送出去需花多长时间,然而IPC也用于传递小的控制资讯,系统处理这些小讯息所需的时间就由延迟提供这两个数都很重要
程序和执行绪的区别,程序间通讯方式有哪程序间和执行绪间的协作区别:
程序互斥、同步的概念
程序互斥、同步的概念是并发程序下存在的概念,有了并发程序,就产生了资源的竞争与协作,从而就要通过程序的互斥、同步、通讯来解决资源的竞争与协作问题。
下面是根据《作业系统教程》314 中的介绍,整理的程序互斥、同步的概念。
在多道程式设计系统中,同一时刻可能有许多程序,这些程序之间存在两种基本关系:竞争关系和协作关系。
程序的互斥、同步、通讯都是基于这两种基本关系而存在的,为了解决程序间竞争关系(间接制约关系)而引入程序互斥;为了解决程序间松散的协作关系( 直接制约关系)而引入程序同步;为了解决程序间紧密的协作关系而引入程序通讯。
第一种是竞争关系
系统中的多个程序之间彼此无关,它们并不知道其他程序的存在,并且也不受其他程序执行的影响。例如,批处理系统中建立的多个使用者程序, 分时系统中建立的多个终端程序。由于这些程序共用了一套计算机系统资源,因而, 必然要出现多个程序竞争资源的问题。当多个程序竞争共享硬装置、储存器、处理器 和档案等资源时,作业系统必须协调好程序对资源的争用。
资源竞争出现了两个控制问题:一个是死锁 (deadlock )问题,一组程序如果都获得了部分资源,还想要得到其他程序所占有的资源,最终所有的程序将陷入死锁。另一个是饥饿(starvation )问题,这是指这样一种情况:一个程序由于其他程序总是优先于它而被无限期拖延。
作业系统需要保证诸程序能互斥地访问临界资源,既要解决饥饿问题,又要解决死锁问题。
程序的互斥(mutual exclusion )是解决程序间竞争关系( 间接制约关系) 的手段。 程序互斥指若干个程序要使用同一共享资源时,任何时刻最多允许一个程序去使用,其他要使用该资源的程序必须等待,直到占有资源的程序释放该资源。
第二种是协作关系
某些程序为完成同一任务需要分工协作,由于合作的每一个程序都是独立地以不可预知的速度推进,这就需要相互协作的程序在某些协调点上协 调各自的工作。当合作程序中的一个到达协调点后,在尚未得到其伙伴程序发来的讯息或讯号之前应阻塞自己,直到其他合作程序发来协调讯号或讯息后方被唤醒并继续执行。这种协作程序之间相互等待对方讯息或讯号的协调关系称为程序同步。
程序间的协作可以是双方不知道对方名字的间接协作,例如,通过共享访问一个缓冲区进行松散式协作;也可以是双方知道对方名字,直接通过通讯机制进行紧密协作。允许程序协同工作有利于共享资讯、有利于加快计算速度、有利于实现模组化程式设计。
程序的同步(Synchronization)是解决程序间协作关系( 直接制约关系) 的手段。程序同步指两个以上程序基于某个条件来协调它们的活动。一个程序的执行依赖于另一
个协作程序的讯息或讯号,当一个程序没有得到来自于另一个程序的讯息或讯号时则需等待,直到讯息或讯号到达才被唤醒。
不难看出,程序互斥关系是一种特殊的程序同步关系,即逐次使用互斥共享资源,也是对程序使用资源次序上的一种协调。
列举linux程序间通讯方式,linux pthread执行绪同步的方式有哪些程序间通讯程序间通讯就是不同程序之间传播或交换资讯,程序的使用者空间是互相独立的,程序之间可以利用系统空间交换资讯。 管道(pipe)管道是一种半双工的通讯方式,资料只能单向流动。如果要进行双工通讯,需要建立两个管道。 管道只能在具有亲
要传输大约1MB的资料,应该用哪种程序间通讯方式最佳Simpson and Sons
54 Madison Street
Sydney, Australia
7th November 2008
Dear Person-in-charge,
Re: Amendments of L/C No 5058
We are writing to amend L/C No 5058 of 3,000 dozens of Poplin Shirts as follows:
1) The beneficiary pany should be Pacific Trading Co, Ltd as opposed to Oriental Trading Co, Ltd
2) The credit terms should be cash on delivery instead of 60 days credit terms
3) The trade term or price term should be CFRC3 Marseilles in instead of CFR Marseilles
4) The total transaction amount should be USD 300,00000 and not GBP 300,00000
We apologized for any inconvenience caused Please kindly make the following amendments as soon as possible and do not hesitate to contact me at xxx-xxxx-xxxx should you required further information
Thank you
Yours truly,
XXX
程序间同步是程序间通讯吗管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系程序间的通讯,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系程序间的通讯; 讯号(Signal):讯号是比较复杂的通讯方式,用于通知接受程序有某种事件发生,除了用于程序间通讯外,程序还可以传送讯号给程序本身;linux除了支援Unix早期讯号语义函式sigal外,还支援语义符合Posix1标准的讯号函式sigaction(实际上,该函式是基于BSD的,BSD为了实现可靠讯号机制,又能够统一对外介面,用sigaction函式重新实现了signal函式); 报文(Message)伫列(讯息伫列):讯息伫列是讯息的连结表,包括Posix讯息伫列system V讯息伫列。有足够许可权的程序可以向伫列中新增讯息,被赋予读许可权的程序则可以读走伫列中的讯息。讯息伫列克服了讯号承载资讯量少,管道只能承载无格式位元组流以及缓冲区大小受限等缺点。 共享记忆体:使得多个程序可以访问同一块记忆体空间,是最快的可用IPC形式。是针对其他通讯机制执行效率较低而设计的。往往与其它通讯机制,如讯号量结合使用,来达到程序间的同步及互斥。 讯号量(semaphore):主要作为程序间以及同一程序不同执行绪之间的同步手段。 套介面(Socket):更为一般的程序间通讯机制,可用于不同机器之间的程序间通讯。
程序间通讯方式中一般公司用的最多的是哪几个?做嵌入式的
pipe, fifo, 讯息伫列,共享记忆体这些传统的程序间通讯方式公司一般都不用,虽然共享记忆体可能快一点点,但是带来的维护开销等是很大的,公司一般会用socket也就是网路通讯的方式,或者是用资料库,程序1写资料库,程序2去读。我说的是linux系统。
python程序间通讯怎么理解在26才开始使用
multiprocessing 是一个使用方法类似threading模组的程序模组。允许程式设计师做并行开发。并且可以在UNIX和Windows下执行。
通过建立一个Process 型别并且通过呼叫call()方法spawn一个程序。
一个比较简单的例子:
#!/usr/bin/env python
from multiprocessing import Process
import time
def f(name):
timesleep(1)
print 'hello ',name
print osgetppid() #取得父程序ID
print osgetpid() #取得程序ID
process_list = []
if __name__ == '__main__':
for i in range(10):
p = Process(target=f,args=(i,))
pstart()
process_listappend(p)
for j in process_list:
jjoin()
程序间通讯:
有两种主要的方式:Queue、Pipe
1- Queue类几乎就是QueueQueue的复制,示例:
#!/usr/bin/env python
from multiprocessing import Process,Queue
import time
def f(name):
timesleep(1)
qput(['hello'+str(name)])
process_list = []
q = Queue()
if __name__ == '__main__':
for i in range(10):
p = Process(target=f,args=(i,))
pstart()
process_listappend(p)
for j in process_list:
jjoin()
for i in range(10):
print qget()
2- Pipe 管道
#!/usr/bin/env python
from multiprocessing import Process,Pipe
import time
import os
def f(conn,name):
timesleep(1)
connsend(['hello'+str(name)])
print osgetppid(),'-----------',osgetpid()
process_list = []
parent_conn,child_conn = Pipe()
if __name__ == '__main__':
for i in range(10):
p = Process(target=f,args=(child_conn,i))
pstart()
process_listappend(p)
for j in process_list:
jjoin()
for p in range(10):
print parent_connrecv()
Pipe()返回两个连线类,代表两个方向。如果两个程序在管道的两边同时读或同时写,会有可能造成corruption
程序间同步
multiprocessing contains equivalents of all the synchronization primitives from threading
例如,可以加一个锁,以使某一时刻只有一个程序print
#!/usr/bin/env python
from multiprocessing import Process,Lock
import time
import os
def f(name):
lockacquire()
timesleep(1)
print 'hello--'+str(name)
print osgetppid(),'-----------',osgetpid()
lockrelease()
process_list = []
lock = Lock()
if __name__ == '__main__':
for i in range(10):
p = Process(target=f,args=(i,))
pstart()
process_listappend(p)
for j in process_list:
jjoin()
程序间共享状态 Sharing state beeen processes
当然尽最大可能防止使用共享状态,但最终有可能会使用到
1-共享记忆体
可以通过使用Value或者Array把资料储存在一个共享的记忆体表中
#!/usr/bin/env python
from multiprocessing import Process,Value,Array
import time
import os
def f(n,a,name):
timesleep(1)
nvalue = name name
for i in range(len(a)):
a[i] = -i
process_list = []
if __name__ == '__main__':
num = Value('d',00)
arr = Array('i',range(10))
for i in range(10):
p = Process(target=f,args=(num,arr,i))
pstart()
process_listappend(p)
for j in process_list:
jjoin()
print numvalue
print arr[:]
输出:
jimin@Jimin:~/projects$ python pppy
810
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
'd'和'i'引数是num和arr用来设定型别,d表示一个双精浮点型别,i表示一个带符号的整型。
更加灵活的共享记忆体可以使用multiprocessingsharectypes模组
Server process
Manager()返回一个manager型别,控制一个server process,可以允许其它程序通过代理复制一些python objects
支援list,dict,Namespace,Lock,Semaphore,BoundedSemaphore,Condition,Event,Queue,Value,Array
例如:
#!/usr/bin/env python
from multiprocessing import Process,Manager
import time
import os
def f(d,name):
timesleep(1)
d[name] = name name
print d
process_list = []
if __name__ == '__main__':
manager = Manager()
d = managerdict()
for i in range(10):
p = Process(target=f,args=(d,i))
pstart()
process_listappend(p)
for j in process_list:
jjoin()
print d
输出结果:
{2: 4}
{2: 4, 3: 9}
{2: 4, 3: 9, 4: 16}
{1: 1, 2: 4, 3: 9, 4: 16}
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 8: 64}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
Server process managers比共享记忆体方法更加的灵活,一个单独的manager可以被同一网路的不同计算机的多个程序共享。
比共享记忆体更加的缓慢
使用工作池 Using a pool of workers
Pool类代表 a pool of worker processes
It has methods which allows tasks to be offloaded to the worker processes in a few different ways
c#多执行绪之间通讯方式有几种多执行绪通讯的方法主要有以下三种: 1全域性变数 程序中的执行绪间记忆体共享,这是比较常用的通讯方式和互动方式。 注:定义全域性变数时最好使用volatile来定义,以防编译器对此变数进行优化。 2Message讯息机制 常用的Message通讯的介面主要有两个
windows程序间通讯和linux相同吗# 管道( pipe ):管道是一种半双工的通讯方式,资料只能单向流动,而且只能在具有亲缘关系的程序间使用。程序的亲缘关系通常是指父子程序关系。 # 有名管道 (named pipe) : 有名管道也是半双工的通讯方式,但是它允许无亲缘关系程序间的通讯。
目前下载的win7 64位 sp1的 雨林木风 系统 是会遇到通讯模块无效的情况,系统缺失dbnetlibdll文件,从其他电脑拷贝一份或者从网上下载一个64位的dbnetlibdll文件文件覆盖C:\windows\system 以及C:\windows\sysWOW64
西门子S7-1200紧凑型PLC在当前的市场中有着广泛的应用,由于其性价比高,所以常被用作小型自动化控制设备的控制器,这也使得它经常与第三方的设备(扫描q、打印机等设备进行通讯。因为没有第三方的设备,这里就以超级终端为例介绍自由口通讯。1.控制系统原理2.硬件需求S7-1200PLC目前有3种类型的CPU:1)S7-1211CCPU。2)S7-1212CCPU。3)S7-1214CCPU。这三种类型的CPU都可以连接三个串口通信模版。本例中使用的PLC硬件为:1)PM1207电源(6EP1332-1SH71)2)S7-1214C(6ES7214-1BE30-0XB0)3)CM1241RS232(6ES7241-1AH30-0XB0)3.软件需求1)编程软件Step7BasicV105(6ES7822-0AA0-0YA0)4.组态我们通过下述的实际 *** 作来介绍如何在Step7BasicV105中组态S7-1214C和超级终端通信。点击桌面上的“TotallyIntegratedAutomationPortalV10”图标,打开如下图:首先需要选择“Createnewproject”选项,然后在“Projectname:”里输入PTP;在“Path:”修改项目的存储路径为“C:\”;点击“Create”,这样就创建了一个文件PTP的新项目。创建后的窗口如下图所示:点击门户视图左下角的“ProjectView”切换到项目视图下,如下图:打开后,在“Devices”标签下,点击“Addnewdevice”,在d出的菜单中输入设备名“PLC_1”并在设备列表里选择CPU的类型。选择后如下图:插入CPU后,点击CPU左边的空槽,在右边的“Catalog”里找到“Communication”下的RS232模块,拖拽或双击此模块,这样就把串口模块插入到硬件配置里,接下来就需要配置此RS232模块硬件接口参数,选择RS232模块,在其下方会出现该模块的硬件属性配置窗口,在属性窗口里有两个选项,一个是“general”;一个是“RS232interface”。在“General”里包括了此模块的“项目信息”和“订货信息”;而在“RS232interface”里包括“项目信息”、“端口的配置”、“发送信息的配置”、“接收信息的配置”和“硬件识别号”。在这里我们选择“RS232interface”,在“端口”配置的选项里,进行端口的参数配置,波特率为:9600;校验方式:无;数据位为:8;停止位:1;硬件流控制:无;等待时间:1ms设置参数如下图:此时确认一下“硬件识别号”为11。此时,完成了硬件的组态,接下来需要编写串口通讯程序,在这里我们实现两个功能:一、S7-1200发送数据给超级终端;二、超级终端发送数据给S7-1200对于第一个功能:S7-1200发送数据给超级终端,实际上是S7-1200是数据的发送方,超级终端是数据的接收方,对于S7-1200需要编写发送程序;而对于超级终端来说,只要打开超级终端程序,配置硬件接口参数与前面S7-1200的端口参数一只即可。下面的步骤将具体介绍此功能实现的步骤:①、在PLC中编写发送程序。在项目管理视图下双击“Device”下的程序块下的Main(OB1),打开OB1,在主程序中调用SEND_PTP功能块如下图所示:(注:SEND_PTP在指令库下的扩展指令中通讯指令下)要对SEND_PTP赋值参数,首先需要创建SEND_PTP的背景数据块和发送缓冲数据块,双击“Devices”——>“PLC_1”——>“ProgramBlock”——“Addnewblock”,在d出的串口命名DB_Send_PTP,选择DB块,在Type后选择“SEND_PTP(SFB113)”插入背景DB后,再插入发送缓冲DB块,重复上面的步骤,只是在选择DB类型为“GlobalDB”,并去掉“Symbolicaccessonly”选项勾(这样可以对该DB块进行直接地址访问),并取名该DB块为DB_SEND_BUFF。建好这两个DB块后,双击打开DB_SEND_BUFF预先定义好要发送的数据,如下图所示:
1,你可能还开着编程软件。
2,通信速率可能不一致。
可以先用编程软件连接一下看能不能连上,看一下通信速率是多少。再关掉编程软件,打开组态工程,改一下连PLC端口的速率,再运行组态王。
是TX1,RX1,TX2,RX2吧,2个口的通信读写指示灯,正常通信应该闪烁吧。
不如买一根PC/PPI电缆,直接用电脑的232口。
以上就是关于西门子200PLC modbus通讯 老报故障6全部的内容,包括:西门子200PLC modbus通讯 老报故障6、程序间通讯方式、管家婆普普版显示通讯版块无效安装程序不正确等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)